Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Iteration durch Datenmengen mit for-Anweisungen (https://www.delphipraxis.net/211859-iteration-durch-datenmengen-mit-anweisungen.html)

Peter-Pascal 12. Nov 2022 14:10

Datenbank: SQlite • Version: 3.0 • Zugriff über: Firedac

Iteration durch Datenmengen mit for-Anweisungen
 
Hallo,
bei mir klappt die Iteration durch Datenmengen nicht, obwohl es laut DelpheHilfe funktionieren soll:

Delphi-Quellcode:
[B]Iteration durch Datenmengen mit for-Anweisungen[/B]
Delphi unterstützt die for-in-Syntaxkonstruktion für die Iteration durch Datenmengen. Der Compiler erkennt das folgende Iterationsmuster für Datenmengen:

for Record in Dataset do Smth;
wobei Record die TDataSet-API repräsentiert. Record kann problemlos mit Datenmenge gleichgesetzt werden.

Im folgenden Codefragment wird durch eine Datenmenge in Delphi iteriert. Der Beispielcode zeigt, wie die Werte der Spalte "Name" in ein Memo-Steuerelement ausgegeben werden.

var
 ds: TDataSet;
//
FQuery1.SQL.Text := 'SELECT Name FROM Table1';
Memo1.Lines.Clear;
for ds in FDQuery1 do
  Memo1.Lines.Add(ds.FieldByName('Name').AsString);
Mein Code sieht so aus:
Delphi-Quellcode:
function TDataModuleEBilanz.buildTaxVersionRecordListe: TTaxVersionRecordListe;
var
  DS: TDataSet;
begin
  Result:= TTaxVersionRecordListe.create;

  FDQuery1.Open('select * from Taxonomie');

  for DS in FDQuery1.GetRow() do
  begin
    showmessage(DS.FieldByName('Version').AsString)
  end;
end;
Klar geht es auch anders, aber es wäre so schöner und einfacher. Und wenns in der Hilfe steht, frage ich mich, warum es bei mir nicht funktioniert.

Vielen Dank für eure Hilfe

Gruß Peter

Ps.: ich weißt nicht, ob das Thema hier überhaupt hingehört

Alter Mann 12. Nov 2022 14:23

AW: Iteration durch Datenmengen mit for-Anweisungen
 
for ds in FDQuery1 do <> for DS in FDQuery1.GetRow() do

Peter-Pascal 12. Nov 2022 14:43

AW: Iteration durch Datenmengen mit for-Anweisungen
 
danke für Deine schnelle Antwort, ich habs umgesetzt, bekomme aber folgende Fehlermeldung:

[dcc64 Fehler] Model.DM.Access.EBilanz.pas(51): E2431 for-in-Anweisung arbeitet nicht mit Kollektionstyp 'TFDDatSRow', weil 'TFDDatSRow' kein Element für 'GetEnumerator' enthält oder darauf nicht zugegriffen werden kann

So sieht mein Code jetzt aus:

Delphi-Quellcode:
  FDQuery1.Open('select * from Taxonomie');
  for DS in FDQuery1.GetRow() do
  begin

  end;
Am Anfang der Zeile ein rotes Ausrufezeichen und das do ist gekräuselt unterstrichen

Olli73 12. Nov 2022 14:45

AW: Iteration durch Datenmengen mit for-Anweisungen
 
Das ".getRow" muss weg.

Peter-Pascal 12. Nov 2022 14:57

AW: Iteration durch Datenmengen mit for-Anweisungen
 
danke für die Antwort,
aber wenn ich es so mache:
Delphi-Quellcode:
var
  DS: TDataSet;
begin
  FDQuery1.Open('select * from Taxonomie');
  for DS in FDQuery1 do
  begin

  end;
bekomme ich diese Fehlermeldung:
[dcc64 Fehler] Model.DM.Access.EBilanz.pas(52): E2010 Inkompatible Typen: 'TDataSet' und 'TComponent'

Olli73 12. Nov 2022 15:17

AW: Iteration durch Datenmengen mit for-Anweisungen
 
Ich habe auch auf die Schnelle keinen in Delphi eingebauten (spezialisierten) Enumerator für TFdQuery / TDataSet gefunden. Es gibt aber Webseiten, auf denen ein solcher erstellt wird.

Peter-Pascal 12. Nov 2022 15:56

AW: Iteration durch Datenmengen mit for-Anweisungen
 
Danke für Deine Hilfe. Ich werde mal schauen, ob ich selber einen Erstellen kann.

Interessant ist nur, dass die Hilfe das ausweist und später noch der Hinweis:

Liste der unterstützten Klassen.
Die folgenden Klassen und ihre Nachkommen unterstützen die for-in-Syntax:


System.Classes.TList
System.Classes.TCollection
System.Classes.TStrings
System.Classes.TInterfaceList
System.Classes.TComponent
Vcl.Menus.TMenuItem
Vcl.ActnList.TCustomActionList
Vcl.ComCtrls.TListItems
Vcl.ComCtrls.TTreeNodes
Vcl.ComCtrls.TToolBar
Data.DB.TFields
Data.DB.TDataSet

OK, ich hatte schon befürchtet, dass es nicht geht, aber wollte ausschließen, dass ich etwas übersehen haben
Vielen Dank

Uwe Raabe 12. Nov 2022 16:23

AW: Iteration durch Datenmengen mit for-Anweisungen
 
Die Doku ist leider übrig geblieben, nachdem das Feature vor dem Release gecancelt wurde. Eine alternative Implementierung findest du hier: https://github.com/UweRaabe/DataSetEnumerator

Peter-Pascal 12. Nov 2022 17:49

AW: Iteration durch Datenmengen mit for-Anweisungen
 
Danke Uwe,

offesichtlich hast Du dies geschrieben. Mein Respekt dafür. Das kann ich nicht.

Dein Code könnte die Sache ziemlich erleichtern.

Auch wenn das Feature mal nicht verwirklicht worden ist, konnte man dies nicht mittlerweile nachholen? Soweit ich weiß, steht dies seit einigen Delphi Updates in der Hilfe.

Vielen Dank noch mal

TurboMagic 12. Nov 2022 18:38

AW: Iteration durch Datenmengen mit for-Anweisungen
 
Damit die Hilfe gefixt wird, solltest du einen QP Report dazu erstellen.
https://quality.embarcadero.com


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:04 Uhr.
Seite 1 von 2  1 2      

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