2010-10-31 431 views
8

我已創建使用FastReport的設計和用Delphi 6但DataSetMasterData調用它的報告和字段是不是在設計時assinged。我想根據所選的DataSet在運行時設置這些屬性。我怎樣才能做到這一點?在調用預覽/打印/設計之前,如何訪問Delphi中的MasterDataDataSet?在frxReport1BeforePrint中添加了以下代碼。如何在FastReport中動態分配數據集?

t := frxReport1.FindObject('MasterData1') as TfrxMasterData; 
    //if Assigned(t) then 
    //t.DataSet := frxIBODataset1; 

    m := frxReport1.FindObject('mTenderType') as TfrxMemoView; 
    if Assigned(m) then 
    begin 
    m.DataSet := frxIBODataset1; 
    m.DataField := 'ACCOUNTNAME'; 
    m.Text := '[frxIBODataset1."ACCOUNTNAME"]'; 
    end; 

但我需要在調用print/design/preview之前設置這些屬性。任何幫助表示讚賞。

回答

2

你應該先指定您是否想使用你的應用程序中定義的數據集,或直接在您的報告(在FastReport的設計數據選項卡)定義的數據集?

如果您嘗試使用在您的應用程序內部定義的數據集(例如在您的某個數據模塊中定義的AdoDataset實例),出於這樣的目的,您不必將MasterBand綁定到數據集。動態。在報告內部,您的MasterBand在設計時綁定到TfrxDbDataset實例。在運行時,您的frxDbDataset實例可以連接到項目中的任何數據集。

這是怎麼會是:

1-您刪除frxReport組件和表單或數據模塊上的frxDbDataset組件。在報表設計器中,轉到「數據集」部分,然後將可用的frxDbDataset添加到報表的數據集列表中。 3您可以添加主數據帶,並將frxDbDataset分配給其數據集屬性。 4-現在,在你的代碼,顯示或編寫報告之前,你可以寫這樣的事情:

if MyOption = 1 then 
    frxDbDataset1.Dataset := AdoDataset1 
    else 
    frxDbDataset1.Dataset := AdoDataset2; 

不管你分配給frxDbDataset將由主帶在你的報告中打印。

如果直接定義數據集的報告裏面,用FastReport的設計;那麼一切都在你的報告中。只需打開FastReport的設計師,這樣做:

1轉到數據選項卡,定義數據集(例如AdoQuery1)。 2-從報告樹窗格中選擇報告對象。 3在對象檢查器中,轉到事件選項卡。 4-選擇適當的事件; OnStartReport對於您的工作來說是一件好事。雙擊它打開代碼編輯器。 5-現在您可以使用PascalScript代碼將數據選項卡中定義的數據集分配到主數據帶。事情是這樣的:

procedure frxReport1OnStartReport(Sender: TfrxComponent); 
begin 
    MasterData1.Dataset := <ADOQuery1."ADOQuery1">;  
end; 
+0

您的解決方案不起作用使用FastReports4 /德爾福XE2 我可以看到正在打印的樂隊很多次,如果我設置StartNewPage,但我看不到任何數據。是否有額外的步驟來爲它定義字段(動態的,忽略數據類型)? – ertx 2012-07-20 08:16:39

-1

如果您正在使用的FastReport 3+,那麼你可以將數據庫組件inside報告。只有您需要的是提供數據庫連接並從您的應用程序運行設計器。

您可以定義變量,從應用程序通過他們和運行.fr3報告文件。