e股脑电脑教程网
  • 首 页
  • 操作系统
  • 应用软件
  • 下载工具
  • 影音视频
  • 办公软件
  • 媒体制作
  • 网站建设
  • 平面设计
  • 数据库
  • 程序开发
  • 视频教程
编辑推荐: | 文章搜索:
您现在的位置: e股脑 >> 数据库 >> FoxPro教程 >> Visual Foxpro通用报表打印程序 >> 教程正文
 
教程搜索
 
 
相关教程
  • 二级FoxBASE上机考试技巧
  • VFP中状态栏控件的使用说明
  • Visual FoxPro 9.0更强大了
  • VFP智能感应的二次开发
  • VFP中多条件数据查询程序的实现
  • VFP应用程序多媒体徽标的实现
  • VFP 6.0网络编程应注意的问题
  • VFP程序的五点经验
  • Visual Foxpro通用报表打印程序
  • 在ASP.NET中使用Visual FoxPro7.0
  • 修复DBF数据表文件的简单方法
  • 在VisualFoxPro5.0中激活InternetExpl
  • 在VFP中制做异型窗口
  • Visual FoxPro 9 集成开发环境新特性
  • Visual FoxPro 9.0 的报表设计器
  • Visual FoxPro 9中新的数据处理方式
 
 

图文教程


  • Windows抢了谁的饭碗 非主流操作系统To

  • 地球还是火星 平常心看“非主流”

  • 综合运用Office 2007批量制作奖状

  • 没有系统盘如何才能修复受损系统?

  • 巧妙运用Excel中边界的附加功能!
 
 
赞 助 商
 
 
Visual Foxpro通用报表打印程序
  • 来源:e股脑
  • 点击次数:
  • 更新时间:2007-8-9

数据库报表程序是经常使用的,现在很多用户都使用报表设计器设计报表,且简单方便;但笔者在工作中遇到要对成百个数据库打印的情况,这些数据库除了字段名不相同外,其他结构信息基本相同,因此笔者就编制了如下的一个通用程序,供同行参考。

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 &&显示字段名下面的一行表格线

col1=1

do while m<=n1

if m=1

@r1+3,col1 say "├"+replicate("-",b(m))

else

if m=n1

@r1+3,col1 say "┼"+replicate("-",b(m))+"┤"

else

@r1+3,col1 say "┼"+replicate("-",b(m))

endif

endif

col1=col1+b(m)

m=m+1

enddo

row1=r1+4

do while .not.eof() &&每页显示20个记录

m=1 &&显示各记录的值

col1=1

do while m<=n1

if type(a(m))="C"

if m=1

@row1,col1 say "∣"+&a(m)

else

if m=n1

@row1,col1 say "∣"+alltrim(&a(m))+replicate(" ",(b(m)-len(alltrim(&a(m)))))+"∣"

else

@row1,col1 say "∣"+&a(m)

endif

endif

else

if m=1

@row1,col1 say "∣"+str(&a(m))

else

if m=n1

@row1,col1 say "∣"+alltrim(str(&a(m)))+replicate(" ",(b(m)-len(alltrim(str(&a(m))))))+"∣"


else

@row1,col1 say "∣"+alltrim(str(&a(m)))

endif

endif

endif

col1=col1+b(m)

m=m+1

enddo

SKIP

if eof()

&&显示数据库结束的最后一行

m=1

col1=1

do while m<=n1

if m=1

@row1+1,col1 say "└"+replicate("-",b(m))

else

if m=n1

@row1+1,col1 say "┴"+replicate("-",b(m))+"┘"

else

@row1+1,col1 say "┴"+replicate("-",b(m))

endif

endif

col1=col1+b(m)

m=m+1

enddo

h=".f."

exit

else

if r1=20 &&显示每一页的最后一行

m=1

col1=1

do while m<=n1

if m=1

@row1+1,col1 say "└"+replicate("-",b(m))

else

if m=n1

@row1+1,col1 say "┴"+replicate("-",b(m))+"┘"

else

@row1+1,col1 say "┴"+replicate("-",b(m))

endif

endif

col1=col1+b(m)

m=m+1

enddo

r1=1

eject

exit

else

m=1 &&显示每个记录下面的一行表格线

col1=1

do while m<=n1

if m=1

@row1+1,col1 say "├"+replicate("-",b(m))

1 2 下一页
  • 上一篇教程: 在ASP.NET中使用Visual FoxPro7.0
  • 下一篇教程: VFP程序的五点经验
  •  

    关于本站 | 广告联系 | 版权声明 | 使用帮助

    Copyright © 2004-2008 www.egunao.com All rights reserved.