Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Grds. Frage zum Rave-Report (https://www.delphipraxis.net/56423-grds-frage-zum-rave-report.html)

Igotcha 5. Nov 2005 14:16

Datenbank: mySQL • Version: 5.x • Zugriff über: ZEOS

Grds. Frage zum Rave-Report
 
Hallo zusammen,

ich habe eine Eingabeoberfläche für einen Projektbericht erstellt, die aus mehreren TabSheets besteht, in denen der Anwender Informationen hinterlegen kann. Diese Informationen werden in einer mySQL-DB gespeichert und im Programm mit VirtualTreeviews dargestellt. Es sind rund 20 VTVs, in denen Daten zeilenweise angezeigt werden. Zudem gibt es noch ein "Stammblatt", in denen Daten wie Projektname, Start, etc. in Form von Edit-Feldern angezeigt werden - diese werden abenfalls in der mySQL-DB gespeichert.

Jetzt möchte ich einen Bericht dazu erstellen, sprich die im Programm angezeigten Informationen (Stammdaten und aus den VTVs) zu Papier bringen. Der Bericht soll fortlaufen geschrieben werden in der Form:

STAMMDATEN
Überschrift
DATEN AUS VTV1
Überschrift
DATEN AUS VTV2
etc.

Da ich mir Delphi über den Weihnachtsabverkauf zugelegt habe, besitze ich keine Handbücher für Rave (für Delphi selbst brauche ich die nicht), sondern nur die über Download (Rave-HP) erhältlichen (firststeps, etc.) und zudem ist es mein erster Versuch mit Rave.

Da man den Bericht auch aus einer anderen Anwendung drucken können soll, müssen die Daten also per SQL bezogen werden.

Es gibt jetzt eine RvDataSetConnection und eine RvQueryConnection. Welche ist grds. dafür besser geeignet? Und muß ich im Fall einer RvDataSetConnection auch 20 DataSets mit jeweils einer Query auf die Form packen?

Gruß Igotcha

merlin17 6. Nov 2005 22:11

Re: Grds. Frage zum Rave-Report
 
ich würde über die CustomConnection von Rave gehen. suche hier einmal nach diesem Wort, dürften einige Threads als Treffermenge sein...
Zitat:

RvQueryConnection
bitte sofort vergessen :warn: (ist wg. BDE und Rave 3 enthalten...)

Zitat:

Da man den Bericht auch aus einer anderen Anwendung drucken können soll, müssen die Daten also per SQL bezogen werden.
versteh' ich nicht ganz.


:-) thomas, TeamNevrona

Igotcha 6. Nov 2005 23:15

Re: Grds. Frage zum Rave-Report
 
So, bin weiter und hab von alleine die CustomConnection gewählt, da sie gerade in meinem Fall doch einige Vorteile bringt, ABER...

Der Report funktioniert leider nur einmal beim Aufruf aus der Anwendung. Beim nächsten Aufruf ist der Report leer.

Wie gesagt, arbeite ich mit Daten aus VirtualStringTrees und zwar in der Form:

Delphi-Quellcode:
procedure TFProjektbericht.RVCERLOESEGetCols(Connection: TRvCustomConnection);
begin
    Connection.WriteField('_KEART', dtString,30,'KostenErlösart','');
    Connection.WriteField('_PLAN', dtcurrency,10,'Planwert','');
    Connection.WriteField('_ISTKUMGES', dtcurrency,10,'IstKumuliert','');
    Connection.WriteField('_PROGENDEPROJEKT', dtCurrency,10,'PrognoseEndeProjekt','');
    Connection.WriteField('_DIFFPROGIST', dtCurrency,10,'DiffPrognoseIst','');
    Connection.WriteField('_DIFFPROGPLAN', dtCurrency,10,'DIFFPrognosePlan','');
end;

procedure TFProjektbericht.RVCERLOESEGetRow(Connection: TRvCustomConnection);
var
  myData: PSDErloese;
begin
    myData := PSDErloese(VTSERLOESE.GetNodeData(myRepNode)); // Daten aus dem VirtualStringTree-Knoten holen
    Connection.WriteStrData(myData.FBezeichnung,'');
    Connection.WriteCurrData(format('%.0n', [myData.FPlan]),myData.FPlan);
    Connection.WriteCurrData(format('%.0n', [myData.FIstKumGesamt]),myData.FIstKumGesamt);
    Connection.WriteCurrData(format('%.0n', [myData.FPrognoseEndeProjekt]),myData.FPrognoseEndeProjekt);
    Connection.WriteCurrData(format('%.0n', [myData.FDiffPrognoseIst]),myData.FDiffPrognoseIst);
    Connection.WriteCurrData(format('%.0n', [myData.FDiffPlanIst]),myData.FDiffPlanIst);
    myRepNode:=VTSERLOESE.GetNext(myRepNode); // einen Knoten weitergehen
end;

procedure TFProjektbericht.RVCERLOESEOpen(Connection: TRvCustomConnection);
begin
    Connection.DataRows:=9;
end;

procedure TFProjektbericht.RVCERLOESEFirst(Connection: TRvCustomConnection);
begin
     myRepNode:=VTSERLOESE.GetFirst;        // Node des ersten Knoten des VirtualStringTrees holen
end;
Aufgerufen wird der Report mit:

Delphi-Quellcode:
procedure TFProjektbericht.TBItem1Click(Sender: TObject);
var
  strPATH: String;
begin
  strPath:=ExtractFilePath(Application.ExeName)+'Reports\';
  RvProject1.ProjectFile:=strPath+'PIM_Projektbericht_001.rav';
  RvProject1.SelectReport('Report1',true);
  RvSystem1.DefaultDest:=rdPreview;
  rvproject1.Execute;
Das Problem könnte evtl. sein, dass die Daten aus einem mir nicht erklärbarem Grund nur einmal geholt werden, denn ich habe in meinem Report eine andere Sektion, in der ich ebenfalls über CustomConnection Werte aus Edit-Feldern übergebe und diese werden immer angezeigt.

EDIT: Wie ich gerade getestet habe, springt der Report beim zweiten Aufruf gar nicht mehr in das OnGetRow-Event. Warum ist das so?

Gruß Igotcha

Igotcha 7. Nov 2005 01:08

Re: Grds. Frage zum Rave-Report
 
Es ist spät, aber ich habe eine Lösung gefunden - keine Ahnung, warum das funktioniert ;-)

Delphi-Quellcode:
procedure TFProjektbericht.RVCERLOESEOpen(Connection: TRvCustomConnection);
begin
    Connection.DataRows:=9;
    Connection.DoFirst;      // damit läuft es auch bei Folgeaufrufen des Reports
end;
Grüße,
Igotcha


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz