fastreport是一個功能強大的報表系統,c/s運用的比較多,這次我來介紹下b/s下使用fastreport。網上有部分說明,可能是技術保守性,只有寥寥幾筆。這次手把手叫大家在intraweb中使用fastreport,應該會很快學會的。
工具/原料
delphi2010
intraweb
方法/步驟
網上大家都是建議用ocx開發報表控制元件。介面雖然直觀,但是這個方法有侷限性,它只支援IE,不支援谷歌,火狐等瀏覽器,我這就是直接轉換打印出來的。
首先要確保你的電腦上安裝了fastreport控制元件。高版本的delphi xe系列自帶了。低版本還是需要自己安裝了。下載地址:
在介面上新增四個控制元件frxDBDataset1、frxReport1、frxHTMLExport1、ADOQuery1。個控制元件分別的作用:frxDBDataset1是報表控制元件和intraweb連線的紐帶。frxReport1是報表編輯控制元件。frxHTMLExport1都出表格成html格式,為什麼不用pdf呢?不是所用人的電腦上都裝有pdf的。ADOQuery1資料控制元件。
把個控制元件的關係弄一下。frxReport1.DataSet := frxDBDataset1。frxDBDataset1.DataSet := ADOQuery1。所以說frxDBDataset1是紐帶作用。ADOQuery連線IWUserSession.aConn。
為增加程式的可讀性,我們再增加幾個控制元件。IWTabControl1Page0(分頁使用)、IWLabel1(標籤時間)、TIWDateSelector1(時間選擇)、btnPreview(預覽按鈕)、btnPrint(列印按鈕)。
在程式目錄下建兩個資料夾,用於存放編輯的報表和快取檔案,我們定義他們的名字分別為reports,files。
開始用frxReport1編輯報表。在介面上雙擊frxReport1。彈出個介面。
先幫frxReport1選擇資料來源。【報表】→【資料】→勾上frxDBDataset1
編輯一個報表,儲存在安裝目錄的reports裡,命名為Day.fr3。其中每個小單元格里都是這樣的:[frxDBDataset1."F_CarNO"]
接下來就是在預覽的按鈕裡寫程式碼了。程式碼如下:
procedure TiwfrmReport.btnPreviewClick(Sender: TObject);
var
sSql:String;
Lfile,webpath,LWindowName,LOptions ,lurl,surl:string;
SelectTime:string;
SeYear:string;
YMDTime: TDateTime;
begin
YMDTime := TIWDateSelector1.Date;
SelectTime := FormatDateTime('yyyy-mm-dd',YMDTime);
sSql:=' select * from T_Standard ';
sSql := sSql + ' where F_Iscancel=0 and F_IsFinish=1 and F_EndTime like '''+selecttime+'%'' ';
sSql := sSql + ' order by F_EndTime asc ';
ADOQuery1.Connection:=dm.aConn;
ADOQuery1.Close();
ADOQuery1.SQL.Clear();
ADOQuery1.SQL.Add(sSql);
ADOQuery1.Open();
webpath:=ExtractFilePath(Paramstr(0))+'reports\Day.fr3';//報表路徑
frxReport1.LoadFromFile(webpath);//載入報表
Lfile:='printat'+FORMATDATETIME('hhmmss',NOW)+'.htm';//報表名
frxhtmlexport1.FileName:=ExtractFilePath(Paramstr(0))+'files\'+webapplication.AppID+'\'+LFILE ;//報表輸出路徑
ForceDirectories(ExtractFileDir(frxhtmlexport1.FileName));//強制建立資料夾
frxreport1.PrepareReport();
frxreport1.Export(frxHTMLExport1);//報表匯出html格式
LWindowName := '日報表';//頁面名
LOptions := 'scrollbars=yes,width=900,height=1058';//頁面大小
LURL := 'files/'+webapplication.AppID+'/'+LFile;//生產Url
AddToInitProc('NewWindow("' + LURL + '", "' + LWindowName + '","' + LOptions + '");');//開啟報表
end;