MySql Datentyp Text

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Benutzeravatar
juelin
Beiträge: 168
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

MySql Datentyp Text

Beitrag von juelin »

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.

Code: Alles auswählen

   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

Soner
Beiträge: 711
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: MySql Datentyp Text

Beitrag von Soner »

1.Direkt:
Memo1.Lines.Text:= Form1.ZQuery1.Fields[1].AsString;

2. Umweg 1:
h1: string;
h1:= := Form1.ZQuery1.Fields[1].AsString;
Memo1.Lines.Text:= h1;

3: Umweg 2:
h1: TStringList;
h1.Lines.Text:= := Form1.ZQuery1.Fields[1].AsString;
Memo1.Lines:= h1.Lines; //oder Memo1.Lines.Text := h1.Lines.Text;

Benutzeravatar
juelin
Beiträge: 168
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: MySql Datentyp Text

Beitrag von juelin »

Ja danke Soner.
Hat prima geklappt.
Man lernt halt immer dazu.
Schönen Advent.
Jürgen

Benutzeravatar
AlterPascaler
Beiträge: 72
Registriert: Mo 26. Jun 2023, 18:56
OS, Lazarus, FPC: Linux, Lazarus, Free Pascal
CPU-Target: xxBit
Wohnort: Deutschland, NRW

Re: MySql Datentyp Text

Beitrag von AlterPascaler »

3: Umweg 2:
h1: TStringList;
h1.Lines.Text:= := Form1.ZQuery1.Fields[1].AsString;
Memo1.Lines:= h1.Lines; //oder Memo1.Lines.Text := h1.Lines.Text;
1. Muss man nicht erst "h1" mit "h1:= TStringList.Create" erzeugen?
2. "h1.lines" gibt es bei mit nicht!
Viele Grüße
AlterPascaler

Benutzeravatar
Zvoni
Beiträge: 170
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: MySql Datentyp Text

Beitrag von Zvoni »

*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.

Benutzeravatar
juelin
Beiträge: 168
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: MySql Datentyp Text

Beitrag von juelin »

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

Benutzeravatar
Zvoni
Beiträge: 170
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: MySql Datentyp Text

Beitrag von Zvoni »

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.

charlytango
Beiträge: 1014
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: MySql Datentyp Text

Beitrag von charlytango »

*nochmehrseufz*

Das sind so die Fragen "Wie lange ist ein Stück Seil"....

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:

Code: Alles auswählen

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. 

Soner
Beiträge: 711
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: MySql Datentyp Text

Beitrag von Soner »

AlterPascaler hat geschrieben: Mo 9. Dez 2024, 13:20
3: Umweg 2:
h1: TStringList;
h1.Lines.Text:= := Form1.ZQuery1.Fields[1].AsString;
Memo1.Lines:= h1.Lines; //oder Memo1.Lines.Text := h1.Lines.Text;
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.

Benutzeravatar
Zvoni
Beiträge: 170
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: MySql Datentyp Text

Beitrag von Zvoni »

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.

Antworten