我們在常用的數據庫應用程序中,編寫報表程序比較麻煩,而且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: emp(你的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的表格功能和多打印功能,不必再去設計繁鎖的報表程序了;我在為我單位編寫的發票統計系統使用了這種方式,使用者感覺到很方便