VisualFoxpro通用报表打印程序

文章作者 100test 发表时间 2007:09:11 11:28:22
来源 100Test.Com百考试题网


  数据库报表程序是经常使用的,现在很多用户都使用报表设计器设计报表,且简单方便;但笔者在工作中遇到要对成百个数据库打印的情况,这些数据库除了字段名不相同外,其他结构信息基本相同,因此笔者就编制了如下的一个通用程序,供同行参考。
set talk off
hh1=printstatus()
set print on
do while .not.hh1
 ?"打印机未准备好,请准备好打印机"
 hh1=printstatus()
enddo
set talk off
set device to print
clear
a1=getfile("dbf") &.&.打开打开文件对话框
use "&.a1" &.&.打开指定的文件
n1=fcount() &.&.获取打开的库中的字段数
dimension a(n1) &.&.定义一个存放字段名的数组
dimension b(n1) &.&.定义一个存放字段宽度的数组
k=1
do while k<=n1
 a(k)=field(k)
 k=k 1
enddo &.&.将字段名赋给数组
w=1
do while w<=n1
 b(w)=fsize(a(w)) &.&.获取字段的长度
 if b(w)<6
  b(w)=8
 else
  b(w)=b(w) 2
 endif
 w=w 1
enddo
do while not eof()
 r1=1 &.&.显示表头的第一行
 m=1
 col1=1
 do while m<=n1
  if m=1
   @r1,col1 say "┌" replicate("-",b(m))
  else
   if m=n1
    @r1,col1 say "┬" replicate("-",b(m)) "┐"
   else
    @r1,col1 say "┬" replicate("-",b(m))
   endif
  endif
  col1=col1 b(m)
  m=m 1
 enddo

m=1 &.&.显示字段名行
col1=1
do while m<=n1
 if m=1
  @r1 1,col1 say "∣" substr(a(m),1,6) replicate(" ",(b(m)-len(a(m))))
 else
  if m=n1
   @r1 1,col1 say "∣" substr(a(m),1,6) replicate(" ",(b(m)-len(substr(a(m),1,6)))) "∣"
  else
   @r1 1,col1 say "∣" substr(a(m),1,6) replicate(" ",(b(m)-len(substr(a(m),1,6))))
  endif
 endif
 col1=col1 b(m)
 m=m 1
enddo
m=1 &.&.由于字段多,一行不能完全显示整个行,因此分为两行显示字段名行
col1=1
do while m<=n1
 if m=1
  @r1 2,col1 say "∣" substr(a(m),7)
 else
  if m=n1
   @r1 2,col1 say "∣" substr(a(m),7) replicate(" ",(b(m)-len(substr(a(m),7)))) "∣"
  else
   @r1 2,col1 say "∣" substr(a(m),7)
  endif
 endif
 col1=col1 b(m)
 m=m 1
enddo
m=1 &.&.显示字段名下面的一行表格线


相关文章


VFP中多条件数据查询程序的实现
VFP应用程序多媒体徽标的实现
VFP6.0网络编程应注意的问题
在A .NET中使用VisualFoxPro7.0
VisualFoxpro通用报表打印程序
三级信息管理技术章节要点计算机软件的功能及分类
三级信息管理技术章节要点计算机的发展及应用
《网络基础学习之七》构建对等网
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛