Hallo,
ich benutze in MySql zum ersten mal den Datentyp Text.
Habe damit aber noch keine Erfahrung.
Ich möchte jetzt in einem Query die Daten aus der Tabelle lesen.
var h1: TStrings;
var h2: string;
while not Form1.ZQuery1.EOF do
begin
h1:=Form1.ZQuery1.Fields[1].AsStrings;
h2:=Form1.ZQuery1.Fields[2].AsString;
Memo1.Lines.AddStrings(h1);
Form1.ZQuery1.Next;
end;
Mein Problem ist Das Feld orm1.ZQuery1.Fields[1] ist vom Typ Text.
Aber es gibt kein AsText oder AsStrings.
Wie lese ich das Feld Form1.ZQuery1.Fields[1] in die Variable h1?
h1 will ich später in TMemo laden.
Hat da jemand Erfahrung?
Danke und Gruß
Jürgen
Zuletzt geändert von m.fuchs am So 8. Dez 2024, 15:38, insgesamt 1-mal geändert.
Grund:Typos fixed
*seufz*
Oder man setzt sich mal wirklich mal damit auseinander was man will und wovon man redet.
OP führt ein Query aus, welches ihm mehrere "Zeilen" zurück gibt (Er iteriert schliesslich durch sein Query --> Query.EOF in Verbindung mit Query.Next).
in seinem Code deklariert er H1 als TStrings (!!), was eine "Liste" an Strings ist (Ausserdem glaube ich mich daran zu erinnern, dass man TStrings nie direkt verwenden soll)
Was sein Query betrifft: In jeder einzelnen "Zeile" seines Queries, ist sein "Text"-Feld ein einzelner (!) String.
Wieso sollte man also erwarten wollen, dass man ein "Text"-Feld eines Queries einer "Liste" von Strings zuweisen können soll?
Vielleicht sollte OP lieber mal erklären "Das habe ich, und das will ich"
EDIT: es gibt übrigens nen Weg, das was OP will mit einem Query-Aufruf und nur einer einzigen Zuweisung (ohne Schleife durch das Query) zu erreichen.
Stichworte DelimitedText (und zugehörige Properties) sowie GROUP_CONCAT (MySQL)
Dazu müsste ich aber sein SQL-Select-Statement sehen
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
ich arbeite mit h1: TStrings
h1:=Memo1.Lines;
und
Memo1.Lines.Text:=Form1.ZQuery1.Fields[1].AsString;
if h1 <> Memo1.Lines then
das klappt.
Gruß
Jürgen
juelin hat geschrieben: Mo 9. Dez 2024, 14:44
ich arbeite mit h1: TStrings
h1:=Memo1.Lines;
und
Memo1.Lines.Text:=Form1.ZQuery1.Fields[1].AsString;
if h1 <> Memo1.Lines then
das klappt.
Gruß
Jürgen
Und dir ist auch klar, dass wenn dein Query einen RecordCount>1 hat du immer nur den letzten Datensatz siehst?
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
procedure TForm1.AddStringsToMemo;
begin
Memo1.Lines.BeginUpdate;
try
Memo1.DoubleBuffered := True;
while not ZQuery1.EOF do
begin
Memo1.Append(ZQuery1.FieldbyName('DasTextfeld').AsString);
Form1.ZQuery1.Next;
end;
finally
Memo1.Lines.EndUpdate;
Memo1.DoubleBuffered := False;
end;
end.
1. Muss man nicht erst "h1" mit "h1:= TStringList.Create" erzeugen?
2. "h1.lines" gibt es bei mit nicht!
Du hast natürlich recht:
1) Man muss es erzeugen und am Ende freigeben. Ich habe es übersprungen.
2)TStringList.Lines gibt es nicht, TMemo.Lines ist schon TStrings, die Basisklasse von TStringlist.
Unachtsamkeit von mir.
charlytango hat geschrieben: Mo 9. Dez 2024, 18:07
zuerst würde ich klären, ob das Feld in der DB auch Zeilenschaltungen oder Absatzzeichen enthalten kann.
Falls da nicht der Fall ist, dann in etwa so:
Weshalb ich DelimitedText (natürlich in Verbindung mit Delimiter), und GROUP_CONCAT erwähnt habe.
Eine Abfrage, Ein Ergebnis-Record, eine Zuweisung.
Keine Notwendigkeit für eine Schleife, oder andere Verrenkungen
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.