Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   TADOQuery-Komponente (https://www.delphipraxis.net/158163-tadoquery-komponente.html)

Jumpy 8. Feb 2011 08:55

Datenbank: Oracle • Version: 10g • Zugriff über: ODBC

TADOQuery-Komponente
 
Ich hab eine Frage zur Komponente TADOQuery (hier q), also bitte ggf. verschieben, falls das hier am falschen Ort gefragt ist.

Ich verstehe nicht den Unterschied zwischen den Fields und Recordset. Hintergrund: Ich will die Datenmenge sequentiell durchgehen.

Delphi-Quellcode:
q.recordset.MoveFirst
while not q.Recordset.EOF do
  begin
  showmessage(q.recordset.Fields[1].Value); //Kommt oft Fehlermeldung von wegen Konvertierung von Typ variabel geht nicht.

  showmessage(q.Fields[i].AsString); //Das geht, zeigt aber immer nur (RecordsetCount mal) den ersten Datensatz an.
  q.Recordset.MoveNext;
  end;
Die folgende Variante ist ein Mischmasch, der irgendwie läuft, aber richtig kommts mir nicht vor:

Delphi-Quellcode:
q.recordset.MoveFirst
while not q.Recordset.EOF do
  begin
  showmessage(q.Fields[i].AsString);
  q.MoveBy(1);
  end;
Was ist nun der Unterschied zw. Fields und Recordset.Fields? Wie mach man das sauber?

DeddyH 8. Feb 2011 09:09

AW: TADOQuery-Komponente
 
Auf das Recordset musst Du im Normalfall gar nicht direkt zugreifen. Das Recordset ist die Ergebnismenge der Abfrage (also die Zeilen), Fields sind die Felder (also die Spalten), die Du abgefragt hast. Auf Fields kannst Du direkten Einfluss nehmen, auf das Recordset nicht.
Delphi-Quellcode:
q.First;
//zeilenweise durchgehen
while not q.EOF do
  begin
    //spaltenweise durchgehen
    for i := 0 to q.Fields.Count - 1 do
      ShowMessage(q.Fields[i].AsString);
    q.Next;
  end;

p80286 8. Feb 2011 09:25

AW: TADOQuery-Komponente
 
Zitat:

Zitat von Jumpy (Beitrag 1080268)
Ich verstehe nicht den Unterschied zwischen den Fields und Recordset. Hintergrund: Ich will die Datenmenge sequentiell durchgehen.

versuch es doch einmal so:

Delphi-Quellcode:
MyDM.ADOQuery1.open;
if not MyDM.ADOQuery1.eof then begin
  repeat
    ErgList.Add(MyDM.ADOQuery1.fields.FieldByNumber(1).asstring);
    //ErgList.Add(MyDM.ADOQuery1.Fieldbyname('feldname').asstring);
    MyDM.ADOQuery1.Next;
  until MyDM.ADOQuery1.Eof;
end;
MyDM.ADOQuery1.Close;
Gruß
K-H

Jumpy 8. Feb 2011 10:01

AW: TADOQuery-Komponente
 
Dank euch beiden, das reicht mir doch schon. Ich werd mal auf die Benutzung des Recordset verzichten und direkt durch die "Query wandern".


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