2010-10-31 35 views
8

J'ai créé un rapport en utilisant FastReport Designer et en l'appelant en utilisant Delphi 6. Mais DataSet pour le MasterData et les champs ne sont pas assortis au moment du design. Je veux définir ces propriétés à l'exécution en fonction du DataSet sélectionné. Comment puis je faire ça? Comment puis-je accéder au DataSet du fichier MasterData dans Delphi avant d'appeler l'aperçu/l'impression/le design? Ajouté le code suivant dans frxReport1BeforePrint.Comment attribuer dynamiquement un jeu de données dans 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; 

Mais j'ai besoin de définir ces propriétés avant d'appeler print/design/preview. Toute aide est appréciée.

Répondre

2

Vous devez d'abord indiquer si vous essayez d'utiliser un ensemble de données défini dans votre application ou un ensemble de données défini directement dans votre rapport (onglet Données dans le concepteur FastReport)? Si vous essayez d'utiliser un ensemble de données défini dans votre application (par exemple, une instance AdoDataset définie dans l'un de vos modules de données), vous n'avez pas besoin de lier le MasterBand à votre ensemble de données . dynamiquement. Dans le rapport, votre MasterBand est lié à une instance TfrxDbDataset au moment du design. Au moment de l'exécution, votre instance de frxDbDataset peut être connectée à n'importe quel ensemble de données dans votre projet.

Voici comment il serait:

1- Vous déposez un composant frxReport et un composant frxDbDataset sur votre formulaire ou module de données. 2- Dans le concepteur de rapport, accédez à la section Jeux de données et ajoutez le fichier frxDbDataset disponible à la liste des jeux de données du rapport. 3- Vous ajoutez une bande de données maître et affectez le paramètre frxDbDataset à sa propriété Dataset. 4- Maintenant, dans votre code, avant de montrer ou de la préparation du rapport, vous pouvez écrire quelque chose comme ceci:

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

Tout ce que vous attribuez à frxDbDataset sera imprimé par le maître-bande dans votre rapport.

Si vous définissez l'ensemble de données directement dans le rapport, utilisez FastReport Designer; alors tout est dans votre rapport. Il suffit d'ouvrir le concepteur fastreport et de le faire:

1- Allez dans l'onglet Données et définissez vos ensembles de données (par exemple, AdoQuery1). 2- Sélectionnez l'objet Rapport dans le volet Arbre du rapport. 3- Dans l'inspecteur d'objets, accédez à l'onglet Evénements. 4- Choisissez un événement approprié; OnStartReport est un bon événement pour votre travail. Double-cliquez dessus pour ouvrir l'éditeur de code. 5- Vous pouvez maintenant affecter l'ensemble de données défini dans l'onglet de données à la bande de données maître en utilisant le code PascalScript. Quelque chose comme ceci:

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

Votre solution ne fonctionne pas en utilisant FastReports4/delphi XE2 Je peux voir la bande imprimée plusieurs fois si je règle StartNewPage, mais je ne vois aucune donnée dedans. Existe-t-il une étape supplémentaire pour définir les champs pour cela (dynamiquement, sans tenir compte des types de données)? – ertx

-1

Si vous utilisez FastReport 3+, vous pouvez placer les composants de base de données inside rapport. Seulement ce dont vous avez besoin est de fournir une connexion à la base de données et d'exécuter le concepteur à partir de votre application.

Vous pouvez définir des variables, les transmettre à partir de l'application et exécuter votre fichier de rapport .fr3.

Questions connexes