我们在常用的数据库应用程序中,编写报表程序比较麻烦,而且delphi中的报表程序由使用者修改也不方便,象一般的数据要加上一个表头,其中的一些数据要修改或要把几个表的数据组合成一个数据集后再打印,这些操作对于delphi中的报表程序来说无能为力,而在大多数的电脑上都装有office套件,我们能不能利用EXCEL的表格处理能力和固有的多种打印输出功能呢?答案是肯定的。我们利用EXCEL能处理DBASE文件的功能,只要我们的数据库文件和DBASE兼容就可以了。
在delphi中的database desktop系统中,新建一个Table表的dbase IV(只能用dabse文件,因为EXCEL不认其它方式的文件)文件sample.dbf,可建立索引文件,在这里应注意的是在database desktop中只能输入英文字段,其实我们只用databse desktop建立文件结构,然后可以到vfp中修改成中文即可,对数据的初始化和字段的增减可在vfp中完成,大家可能要问为什么不在vfp中直接建立数据表文件,因为EXCEL根本不认vfp中的数据表,它读出的数据是杂乱的。
建立好数据表sample.dbf后,在delphi中建立一个工程,然后选择file->new中的data module模块,建立的data module好处是在各个表单可能通用,在datamodule1的components中添加数据源和数据表,设置相关项,数据表的databasename应设为c:\temp(你的dbf文件的目录),把tablename设为你所设计的数据表(sample.dbf),在form1上新建一个button按钮,caption为编辑打印,在它的onclick中加入如下代码:
data.table1.close;//关闭当前数据表,如果不关闭可能造成数据不全
if fileexists(extractfiledir(application.exename)+‘\samplep.dbf') then DeleteFile(extractfiledir(application.exename)+‘\samplep.dbf');
//判断打印数据表samplep.dbf是否存在,如果存在就删除它
copyfile(pchar(extractfiledir(application.exename)+‘\sample.dbf'),pchar(extractfiledir(application.exename)+‘\samplep.dbf'),true);
//把sample.dbf拷贝成打印数据表samplep.dbf,samplep.dbf是编辑打印专用的,如果用sample.dbf则EXCEL会提示sample.dbf是只读文件,修改会死机
data.table1.open;//打开当前数据表,使其处于活动状态
shellexecute(0,‘open',‘EXCEL.EXE',pchar(extractfiledir(application.exename)+‘\samplep.dbf'),pchar(extractfiledir(application.exename)),SW-SHOWMAXIMIZED);//调用excel并读取samplep.dbf文件到excel中,在头文件中要引用ShellAPI.
这样就可利用EXCEL的表格功能和多打印功能,不必再去设计繁锁的报表程序了;我在为我单位编写的发票统计系统使用了这种方式,使用者感觉到很方便。
|