数据库报表程序是经常使用的,现在很多用户都使用报表设计器设计报表,且简单方便;但笔者在工作中遇到要对成百个数据库打印的情况,这些数据库除了字段名不相同外,其他结构信息基本相同,因此笔者就编制了如下的一个通用程序,供同行参考。
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
① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;
② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。