资源描述:
《Visual-Foxpro通用报表打印程序.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、VisualFoxpro通用报表打印程序 数据库报表程序是经常使用的,现在很多用户都使用报表设计器设计报表,且简单方便;但笔者在工作中遇到要对成百个数据库打印的情况,这些数据库除了字段名不相同外,其他结构信息基本相同,因此笔者就编制了如下的一个通用程序,供同行参考。settalkoffhh1=printstatus()setprintondowhile.not.hh1 ?"打印机未准备好,请准备好打印机" hh1=printstatus()enddosettalkoffsetdevicetoprintclea
2、ra1=getfile("dbf")&&打开打开文件对话框use"&a1"&&打开指定的文件n1=fcount()&&获取打开的库中的字段数dimensiona(n1)&&定义一个存放字段名的数组dimensionb(n1)&&定义一个存放字段宽度的数组k=1dowhilek<=n1 a(k)=field(k) k=k+1enddo&&将字段名赋给数组w=1dowhilew<=n1 b(w)=fsize(a(w))&&获取字段的长度 ifb(w)<6 b(w)=8 else b(w)=b(w)+2 endi
3、f w=w+1enddodowhilenoteof() r1=1&&显示表头的第一行 m=1 col1=1 dowhilem<=n1 ifm=1 @r1,col1say"┌"+replicate("-",b(m)) else ifm=n1 @r1,col1say"┬"+replicate("-",b(m))+"┐" else @r1,col1say"┬"+replicate("-",b(m)) endif endif col1=col1+b(m) m=m+1 enddom=
4、1&&显示字段名行col1=1dowhilem<=n1 ifm=1 @r1+1,col1say"∣"+substr(a(m),1,6)+replicate("",(b(m)-len(a(m)))) else ifm=n1 @r1+1,col1say"∣"+substr(a(m),1,6)+replicate("",(b(m)-len(substr(a(m),1,6))))+"∣" else @r1+1,col1say"∣"+substr(a(m),1,6)+replicate("",(b(m)-l
5、en(substr(a(m),1,6)))) endif endif col1=col1+b(m) m=m+1enddom=1&&由于字段多,一行不能完全显示整个行,因此分为两行显示字段名行col1=1dowhilem<=n1 ifm=1 @r1+2,col1say"∣"+substr(a(m),7) else ifm=n1 @r1+2,col1say"∣"+substr(a(m),7)+replicate("",(b(m)-len(substr(a(m),7))))+"∣" else @r1+
6、2,col1say"∣"+substr(a(m),7) endif endif col1=col1+b(m) m=m+1enddom=1&&显示字段名下面的一行表格线col1=1dowhilem<=n1 ifm=1 @r1+3,col1say"├"+replicate("-",b(m)) else ifm=n1 @r1+3,col1say"┼"+replicate("-",b(m))+"┤" else @r1+3,col1say"┼"+replicate("-",b(m)) endif end
7、if col1=col1+b(m) m=m+1enddorow1=r1+4dowhile.not.eof()&&每页显示20个记录 m=1&&显示各记录的值 col1=1 dowhilem<=n1 iftype(a(m))="C" ifm=1 @row1,col1say"∣"+&a(m) else ifm=n1 @row1,col1say"∣"+alltrim(&a(m))+replicate("",(b(m)-len(alltrim(&a(m)))))+"∣" else
8、 @row1,col1say"∣"+&a(m) endif endif else ifm=1 @row1,col1say"∣"+str(&a(m)) else ifm=n1 @row1,col1say"∣"+alltrim(str(&a(m)))+replicate("",(b(m)-len(alltrim(str(&a(m))))))+"∣