2010-10-31 6 views
8

Ho creato un report che utilizza FastReport Designer e lo chiama utilizzando Delphi 6. Ma DataSet per MasterData ei campi non vengono assegnati in fase di progettazione. Voglio impostare queste proprietà in fase di esecuzione in base allo DataSet selezionato. Come lo posso fare? Come posso accedere allo del MasterData in Delphi prima di chiamare l'anteprima/stampa/disegno? Aggiunto il seguente codice in frxReport1BeforePrint.Come assegnare il set di dati in modo dinamico in 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; 

Ma ho bisogno di impostare queste proprietà prima di chiamare la stampa/design/anteprima. Qualsiasi aiuto è apprezzato.

risposta

2

Occorre innanzitutto specificare se si sta tentando di utilizzare un set di dati definito nell'applicazione o un set di dati definito direttamente nel report (scheda Dati nel designer FastReport)?

Se si sta tentando di utilizzare un set di dati definito all'interno dell'applicazione (ad esempio un'istanza AdoDataset definita in uno dei propri moduli dati), per tale scopo, non è necessario associare il MasterBand al set di dati. . in modo dinamico. All'interno del report, il tuo MasterBand è associato a un'istanza di TfrxDbDataset in fase di progettazione. In fase di runtime, l'istanza di frxDbDataset può essere connessa a qualsiasi set di dati nel progetto.

Ecco come sarebbe:

1- Si rilascia un componente frxReport e un componente frxDbDataset sul modulo o moduli di dati. 2- Nella finestra di progettazione report, si passa alla sezione Dataset e si aggiunge frxDbDataset disponibile all'elenco di set di dati del report. 3- Aggiungete una banda dati master e assegnate frxDbDataset alla proprietà Dataset. 4- Ora nel codice, prima di mostrare o preparazione del rapporto, si può scrivere qualcosa di simile:

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

Qualunque cosa si assegna a frxDbDataset verranno stampati dal maestro-band nel rapporto.

Se si sta definendo il set di dati direttamente all'interno del report, utilizzando il designer FastReport; allora tutto è nella tua relazione. Basta progettista fastreport aperta e fare questo:

1- Vai alla scheda dei dati e definire i set di dati (ad esempio AdoQuery1). 2- Selezionare Oggetto report dal riquadro Struttura report. 3- Nell'oggetto di ispezione dell'oggetto andare alla scheda Eventi. 4- Scegliere un evento appropriato; OnStartReport è un buon evento per il tuo lavoro. Fare doppio clic su di esso per aprire l'editor di codice. 5- Ora è possibile assegnare il set di dati definito nei dati-scheda per la fascia master-dati utilizzando il codice PascalScript. Qualcosa di simile a questo:

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

La soluzione non funziona con FastReports4/delphi XE2 Posso vedere la banda stampata molte volte se imposto StartNewPage, tuttavia non riesco a vedere alcun dato in esso. C'è un ulteriore passo per definire i campi per esso (dynamicaly, trascurando tipi di dati)? – ertx

-1

Se si utilizza FastReport 3+ allora si può posizionare i componenti di database inside rapporto. Solo che è necessario è fornire connessione al database e designer corsa dalla vostra applicazione.

È possibile definire variabili, passarle dall'applicazione ed eseguire il file di report .fr3.

Problemi correlati