数据库报表程序是经常使用的,现在很多用户都使用报表设计器设计报表,且简单方便;但笔者在工作中遇到要对成百个数据库打印的情况,这些数据库除了字段名不相同外,其他结构信息基本相同,因此笔者就编制了如下的一个通用程序,供同行参考。
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通用报表打印程序
三级信息管理技术章节要点计算机软件的功能及分类
三级信息管理技术章节要点计算机的发展及应用
《网络基础学习之七》构建对等网
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛