Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   TStringList Add aus SQLite (https://www.delphipraxis.net/209263-tstringlist-add-aus-sqlite.html)

cltom 16. Nov 2021 15:00

Datenbank: SQLite • Version: 3.36 • Zugriff über: ZEOS

TStringList Add aus SQLite
 
Hallo,

aus einer SQlite-DB soll ein Textfeld in eine StringList gelesen werden.

Sinngemäß also:

Delphi-Quellcode:
var
  MyStringList : TStringList;

begin
  MyStringList := TStringList.Create;

//  (some SQL query)

  MyStringlist.Add(ZQuery.FieldByName('TextField').AsString);

end;
wenn man das so macht, kommt der Text, aber mit jedem Aufruf, wird der Inhalt des Feldes hinzugefügt. Klar, is ja "Add"

wenn man nun aber

Delphi-Quellcode:
  ...
  MyStringList.Clear;
  MyStringList.Add ...
hinzufügt, dann erscheint es so, als würde nur der erste Eintrag gelesen werden, alle folgenden Queries ändern dann den Inhalt von MyStringlist nicht mehr ... da erscheint immer nur der erste gelesene Eintrag.

Was übersehe ich da?
Danke!

Delphi.Narium 16. Nov 2021 15:08

AW: TStringList Add aus SQLite
 
Nicht nur den aktuellen Satz der Query lesen, sondern alle?
Delphi-Quellcode:
var
  MyStringList : TStringList;
  fTextField  : TField;
begin
  MyStringList := TStringList.Create;
// (some SQL query)
  fTextField := ZQuery.FindByName('TextField');
  ZQuery.First;
  while not ZQuery.EoF do begin
    MyStringlist.Add(fTextField.AsString);
    ZQuery.Next;
  end;
end;

cltom 16. Nov 2021 21:16

AW: TStringList Add aus SQLite
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1497671)
Nicht nur den aktuellen Satz der Query lesen, sondern alle?
Delphi-Quellcode:
var
  MyStringList : TStringList;
  fTextField  : TField;
begin
  MyStringList := TStringList.Create;
// (some SQL query)
  fTextField := ZQuery.FindByName('TextField');
  ZQuery.First;
  while not ZQuery.EoF do begin
    MyStringlist.Add(fTextField.AsString);
    ZQuery.Next;
  end;
end;

jetzt macht es Sinn! die Query ist falsch und in Kombination mit nur der ersten Zeile auslesen erklärt es das Verhalten, danke!

haentschman 17. Nov 2021 05:16

AW: TStringList Add aus SQLite
 
Moin...8-)
Zitat:

jetzt macht es Sinn!
noch nicht...:warn:

Frage wo gibst du die Liste frei?
2 Möglichkeiten:
1. die function mit Createxxx: List beginnen, damit man weiß, daß die Liste neu erzeugt wurde
2. die Liste in der aufrufenden procedure erzeugen und übergeben.

besser:
Delphi-Quellcode:
//Variante 2:
procedure Blubb(List: TStrings)
begin
// (some SQL query)
  ZQuery.Open;
  while not ZQuery.EoF do
  begin
    List.Add(ZQuery.FindByName('TextField').AsString);
    ZQuery.Next;
  end;
end;

cltom 17. Nov 2021 10:05

AW: TStringList Add aus SQLite
 
Zitat:

Zitat von haentschman (Beitrag 1497695)
Moin...8-)
Zitat:

jetzt macht es Sinn!
noch nicht...:warn:

Frage wo gibst du die Liste frei?
2 Möglichkeiten:
1. die function mit Createxxx: List beginnen, damit man weiß, daß die Liste neu erzeugt wurde
2. die Liste in der aufrufenden procedure erzeugen und übergeben.

besser:
Delphi-Quellcode:
//Variante 2:
procedure Blubb(List: TStrings)
begin
// (some SQL query)
  ZQuery.Open;
  while not ZQuery.EoF do
  begin
    List.Add(ZQuery.FindByName('TextField').AsString);
    ZQuery.Next;
  end;
end;

Danke, dass Du Dir noch Gedanken dazu machst!

Du meinst, damit nicht mehrfach ein Create der gleichen StringList erzeugt wird?

Ok, da passt das Codeschnipsel nicht ganz. Das Create wird woanders aufgerufen. Tie TStringList ist innerhalb einer Klasse, in deren constructor ich gleich die StringList erzeuge. Ob das elegant so ist, steht auf einem anderen Blatt ... :|

haentschman 17. Nov 2021 14:23

AW: TStringList Add aus SQLite
 
Hallöle...:P
Zitat:

Ob das elegant so ist, steht auf einem anderen Blatt
...ist schon in Ordnung. :wink:

Es lesen ja auch andere mit und übernehmen die Speicherlöcher aus dem Quelltext. :zwinker:


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