Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DataSet und Rave (https://www.delphipraxis.net/82881-dataset-und-rave.html)

oXmoX 21. Dez 2006 09:20


DataSet und Rave
 
Hallo,

ich habe ein Problem beim Zugriff auf ein DataSet über einen Rave Report.

Das DataSet ist quasi von hier kopiert und funtioniert auch soweit, wenn ich z.B. ein TDBGrid damit verknüpfe. Wenn ich allerdings in Rave ein DataBand definiere, welches über eine DataView darauf zugreift, so erhalte ich beim Anzeigen des Preview-Dokuments eine Fehlermeldung "Record not found", die in der Prozedur TDataSet.Resync(Mode: TResyncMode) (DB.pas, Zeile 9869) versursacht wird. Offenbar wird der Methode GetFieldData(Field: TField; Buffer: Pointer): Boolean des DirDataSets ein nicht initialisierter Pointer "Buffer" übergeben. Ist das korrekt? Was kann ich an dem Dataset ändern, damit ich es auch für Reports verwenden kann?

Gruß,
oXmoX

oXmoX 22. Dez 2006 12:36

Re: DataSet und Rave
 
Ist denn niemand da, der mir einen Tipp geben kann?

merlin17 22. Dez 2006 13:26

Re: DataSet und Rave
 
doch, ich bin stellenweise da.....
komme aber frühestens erst nach den "ruhigen Feiertagen" dazu, mir Deine Frage näher anzuschauen, -> not promised
außerdem ist der Thread ja erst von gestern.... things.take.time. :-D

-take care


:-) thomas, TeamNevrona

oXmoX 27. Dez 2006 07:58

Re: DataSet und Rave
 
okay! ...ich übe geduld *daumendreh*

merlin17 8. Jan 2007 12:40

Re: DataSet und Rave
 
Liste der Anhänge anzeigen (Anzahl: 1)
So,

nun habe ich mir mal die BSP von Marco angeschaut und um die Rave-Eigenschaft erweitert;
der GetCols-Bereich ist sicherlich nicht korrekt, aber mti dtStrings ging es am schnellesten <g>


Delphi-Quellcode:
type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    DirectoryListBox1: TDirectoryListBox;
    RvProject1: TRvProject;
    Button1: TButton;
    RvCustomConnection1: TRvCustomConnection;
    procedure FormCreate(Sender: TObject);
    procedure DirectoryListBox1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure RvCustomConnection1GetCols(Connection: TRvCustomConnection);
    procedure RvCustomConnection1GetRow(Connection: TRvCustomConnection);
    procedure RvCustomConnection1Open(Connection: TRvCustomConnection);
    procedure RvCustomConnection1Next(Connection: TRvCustomConnection);
    procedure RvCustomConnection1EOF(Connection: TRvCustomConnection;
      var Eof: Boolean);
  private
    { Private declarations }
  public
    DirDataset: TDirdataSet;
  end;

var
  Form1: TForm1;

implementation

.........................................


procedure TForm1.RvCustomConnection1EOF(Connection: TRvCustomConnection;
  var Eof: Boolean);
begin
  eof := false;
  if DirDataset.Eof then
    eof := true;
end;

procedure TForm1.RvCustomConnection1GetCols(Connection: TRvCustomConnection);
begin

  with Connection do
  begin
    WriteField('shortFileName', dtString, 50, 'Dateiname',
      'aus MarcoCantu-BSP');
    WriteField('Time', dtString, 50, 'Zeit', 'aus MarcoCantu-BSP');
    WriteField('Size', dtString, 50, 'Groesse', 'aus MarcoCantu-BSP');
    WriteField('Attr', dtString, 50, 'Dateiname', 'aus MarcoCantu-BSP');
  end;
end;

procedure TForm1.RvCustomConnection1GetRow(Connection: TRvCustomConnection);
begin
  with Connection do
  begin
    WriteStrData('', DirDataset.Fields.FieldByNumber(1).AsString);
    WriteStrData('', DirDataset.Fields.FieldByNumber(2).AsString);
    WriteStrData('', DirDataset.Fields.FieldByNumber(3).AsString);
    WriteStrData('', DirDataset.Fields.FieldByNumber(4).AsString);
  end;
end;

procedure TForm1.RvCustomConnection1Next(Connection: TRvCustomConnection);
begin
 DirDataset.Next;
end;

procedure TForm1.RvCustomConnection1Open(Connection: TRvCustomConnection);
begin
  Connection.DataRows := DirDataset.RecordCount;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   RvProject1.Execute;
end;
In der Zip-Datei noch die RAV; hat bei mir problemlos geklappt <g>


:-) thomas, TeamNevrona

oXmoX 9. Jan 2007 21:08

Re: DataSet und Rave
 
SPITZEN LEISTUNG!!!

Ich werd wohl erst nächste Woche dazu kommen, mir die Sachen anzuschauen, aber ein dickes Lob schick ich dir schonmal vorraus ...wird bestimmt auch bei mir klappen! Ich meld mich.

merlin17 17. Jan 2007 17:26

Re: DataSet und Rave
 
und... bin neugierig... :oops: hat es geklappt ?!?!



:-) thomas, TeamNevrona

oXmoX 20. Jan 2007 16:20

Re: DataSet und Rave
 
bin leider grad an einer anderen baustelle ...aber ich werde berichten :zwinker:

oXmoX 26. Feb 2007 14:43

Re: DataSet und Rave
 
Sorry, aber bin erst jetzt wieder dazu gekommen, hier weiterzumachen.

Es hat natürlich auch bei mir funktioniert.

Allerdings verstehe ich nicht, warum das ganze nicht auch mit einer RvDataSetConnection funktioniert. Naja, die RvCustomConnection tuts jedenfalls auch und ich bin echt dankbar dafür :) .

oXmoX 3. Apr 2007 10:04

Re: DataSet und Rave
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo nochmal!

Leider habe ich noch immer Probleme mit dem TDirDataSet und Rave.

Folgendes möchte ich erreichen: Im Report soll eine verschachtelte Liste mit zwei Ebenen dargestellt werden. Die erste Ebene zeigt die Dateien aus dem aktuellen Verzeichnis, die zweite Ebene zeigt die Dateien aus den Unterverzeichnissen. Das lässt sich soweit ich weiß in Rave Reports über Master und Detail Databands realisieren.

Also habe ich TDirDataSet um einen Master- und einen Detailkey erweitert (Filename - der vollständige Dateiname mit Pfad und ParentDir - der vollständige Name des übergeordneten Verzeichnisses mit Pfad) und schließlich eine Klasse TSubDirDataSet hizugefügt, die nicht die Dateien des aktuellen Verzeichnisses zurückgibt, sondern die Dateien aus den Unterverzeichnissen des aktuellen Verzeichnisses.

Das Ergebnis habe ich als Attachment beigefügt incl. eines neuen .rav Projektes, das eine Region mit zwei DataBands enthält, die mit TDirDataSet (DataBand1 --> DataView1) bzw. TSubDirDataSet (DataBand2 --> DataView2) verknüpft sind. Wenn ich die Preview des Reports ausführe, sehe ich eine Liste, die im oberen Teil die Dateien des aktuellen Verzeichnisses enthält und im unteren Teil die Dateien der Unterverzeichnisse. Bis hierhin läuft alles nach Plan ;-) .

Und jetzt endlich zu meinem Problem: Wie muss ich die .rav konfiguriern, damit ich meine verschachtelte Liste bekomme?
Ich denke, dazu muss ich im DataBand2 das DataBand1 als Controllerband einstellen, sowie DataView1 als Master angeben. Dann setze ich den Masterkey auf FileName sowie den DetailKey auf ParentDir, right? Und zum Schluss stelle ich den Bandstyle von DataBand2 noch auf Detail ..auf diese Weise hat es bisher jedenfalls immer funktioniert.

...Funktioniert aber nicht mit dem TDirDataSet :-( ...jetzt bekomme ich nur noch den Inhalt von DataBand1 angezeigt, obwohl es Unterverzeichnisse mit Dateien gibt (und für die gilt ja: Detail.ParentDir = Master.FileName).

Ich bin ziemlich ratlos. Kann es sein dass TDirDataSet nicht Threadsafe ist, dies aber für Rave erforderlich ist? Oder liegt es evtl. an einem Bug in Rave (Version 5.0 Borland Edition)?

Danke für jede Hilfe!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:34 Uhr.

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