Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Reportbuilder und zwei Recordsets (https://www.delphipraxis.net/166117-reportbuilder-und-zwei-recordsets.html)

Alex.G 31. Jan 2012 09:18

Reportbuilder und zwei Recordsets
 
Hallo.

Ich habe eine Stored Procedure in meinem MSSQL Server und möchte daraus ein Report erstellen bzw. erweitern. Mein Problem ist nun, dass mein ADOQuery nach der Ausführung zwei Recordsets enthält (da ich zwei SELECT's in der SP habe), der Reportbuilder jedoch die Felder aus dem Zweiten nicht "erkennt".
Ist es möglich dem Report mitzuteilen, dass er beide Recordsets durchlaufen soll?

Gruß und danke im Voraus!

Metallicwar 31. Jan 2012 11:39

AW: Reportbuilder und zwei Recordsets
 
Hi,
stell deine Frage doch mal in der Newsgruppe von Digital Metaphors (http://www.digital-metaphors.com/sup...ewsgroups.html)
Dort wird dir sehr schnell jemand zu deinem Problem weiterhelfen :)

MfG David

shmia 31. Jan 2012 13:19

AW: Reportbuilder und zwei Recordsets
 
Also ich kann mir nicht vorstellen, dass das Konzept bei einer Abfrage mehr als ein Recordset zurückzuliefern dem Reportbuilder bekannt ist.
Selbst nur mit ADO-Komponenten ist es ziemlich umständlich an das 2. Recordset heranzukommen.

Du könntest eine weitere Stored Procedure schreiben, die die beiden Recordset im SQL Server zu einem Recordset zusammenfasst.
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=167866

Sir Rufo 31. Jan 2012 14:19

AW: Reportbuilder und zwei Recordsets
 
Zitat:

Zitat von shmia (Beitrag 1148521)
Selbst nur mit ADO-Komponenten ist es ziemlich umständlich an das 2. Recordset heranzukommen.

Da kenne ich aber erheblich umständlichere Sachen, als diese weiteren RecordSets:
Hier mal so ein schnell dahin getipptes etwas, was ein TDataSet in ein ClientDataSet kopiert und von einem TADOQuery die RecordSets durchwandert.

Wenn kein RecordSet mehr vorhanden ist, dann wird hierdurch
Delphi-Quellcode:
ADOQuery1.Recordset := ADOQuery1.NextRecordset( lRecAff );
die TADOQuery wieder geschlossen.

Delphi-Quellcode:
procedure CDSLoadFromDataSet( aClientDataSet : TCustomClientDataSet; aDataSet : TDataSet );
var
  lDataProv : TDataSetProvider;
begin
  aClientDataSet.Close;
  lDataProv := TDataSetProvider.Create( nil );
  try
    lDataProv.DataSet := aDataSet;
    aClientDataSet.SetProvider( lDataProv );
    aClientDataSet.Open;
  finally
    lDataProv.Free;
  end;
end;

procedure TForm1.Button1Click( Sender : TObject );
var
  lRecAff : Integer;
begin
  if not ADOQuery1.Active
  then
    ADOQuery1.Open
  else
    ADOQuery1.Recordset := ADOQuery1.NextRecordset( lRecAff );

  if ADOQuery1.Active
  then
    CDSLoadFromDataSet( ClientDataSet1, ADOQuery1 )
  else
    ClientDataSet1.Close;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:06 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