我們在常用的資料庫應用程式中,寫報表程式比較麻煩,而且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);////呼叫並調用讀取samplep.dbf檔案到excel中,在頭檔中要引用ShellAPI.
這樣就可利用EXCEL的表格功能和多重列印功能,不必再去設計繁鎖的報表程式了;我在為我單位編寫的發票統計系統使用了這種方式,使用者感覺到很方便