Alle Strings einer Spalte zusammenfassen: Weitere Frage

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Alle Strings einer Spalte zusammenfassen: Weitere Frage

Beitrag von Aliobaba »

Hallo,

es soll ja pro Thread nur 1 Frage gestellt werden, deshalb nun dieser weitere Beitrag.
Er schließt sich an dieses Thema an:
viewtopic.php?f=17&t=14196&p=127482#p127482

Wie ich schon geschrieben habe, funktioniert dieser Code recht gut:

Code: Alles auswählen

procedure TF_TSV.Button1Click(Sender: TObject);
var
  sss , mmm : string;
begin
   Ffufe.DB_Alle_zeigen_Sort_Titel_Fundus_2_Liste;
   if Ffufe.ZQueryFundus2.RecordCount = 0 then exit;
   Ffufe.ZQueryFundus2.First;
   sss := Ffufe.ZQueryFundus2.FieldByName('PLId').AsString;
   Form_Start.ZConneu.ExecuteDirect( 'UPDATE MyPL SET Cyyy2 = (SELECT GROUP_CONCAT(CTitelB, ", " ) FROM MyPL) Where PLId = '+ sss ) ;
   Ffufe.ZQueryFundus2.Refresh;
   mmm := Ffufe.ZQueryFundus2.FieldByName('Cyyy2').AsString ;
   Showmessage(mmm);
end;
Ich brauch allerdings dazu ein vorher vorbereitetes Datenbank-Feld ("Cyyy2"), damit ich das Ergebnis dieses "Group_Concat" irgendwo hinschreiben kann; es einfach in einen String zu schreiben ist mir ja nicht gelungen (s.o.).

Es ergibt sich aber ein weiteres Problem:
Wenn man diesen Befehl: "SELECT GROUP_CONCAT(CTitelB, ", " ) FROM MyPL" in einen SQL-Editor eingibt, dann funktioniert alles prima; das Ergebnis wird vollständig und richtig im Editor ausgegeben.
Bei der Übergabe aber in einen String ( hier: mmm := Ffufe.ZQueryFundus2.FieldByName('Cyyy2').AsString ; ) wird nur ein relativ kleiner Teil des Strings in die Variable "mmm" übertragen, ca. grob geschätzt 100 Buchstaben.

Zunächst dachte ich, das liegt an der Spaltendefinition:
"Cyyy2" VARCHAR(200),
aber auch nach dem Ändern der Definition zu
"Cyyy2" TEXT,
wird nur der 1. Teil des Gesamtstrings in die Variable "mmm" übernommen.

Woran könnte das liegen?

Gruß
Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Alle Strings einer Spalte zusammenfassen: Weitere Frage

Beitrag von af0815 »

Solange das mit der Query nicht funktioniert im anderen Thread (mit der Aussage "Ging auch nicht " ohne weiter Info), werde ich hier nicht mal nachdenken.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: Alle Strings einer Spalte zusammenfassen: Weitere Frage

Beitrag von Aliobaba »

Sorry!
Ich war einfach nur frustriert! :(

Aber jetzt funktioniert alles!
Vielen Dank!!

Code: Alles auswählen

procedure TF_TSV.Button1Click(Sender: TObject);
var
  mmm : string;
begin
 Ffufe.ZQueryFundusxx.SQL.Text := 'SELECT GROUP_CONCAT(CTitelB, ", " ) FROM MyPL';
 Ffufe.ZQueryFundusxx.Open;
 mmm := Ffufe.ZQueryFundusxx.Fields[0].AsString;
 Showmessage (mmm);

 Ffufe.ZQueryFundusxx.SQL.Text := 'SELECT GROUP_CONCAT(CPfadG, ", " ) FROM MyPL';
 Ffufe.ZQueryFundusxx.Open;
 mmm := Ffufe.ZQueryFundusxx.Fields[0].AsString;
 Showmessage (mmm);
end;
Ich habe eine völlig neue Query auf der Programmieroberfläche erstellt und die Angaben für "Felder bearbeiten" leer gelassen.
:) :)
Danke!!
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Alle Strings einer Spalte zusammenfassen: Weitere Frage

Beitrag von af0815 »

Auch hier nochmals.

Vor einem änderen des SQL-Statemnt immer die Query Close und ein Clear machen. Egal ob mit SQLdb oder ZEOS. Ansonsten kann das unerwartet (bei dir, nicht bei mir :mrgreen: ) Ärger machen
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Alle Strings einer Spalte zusammenfassen: Weitere Frage

Beitrag von Michl »

af0815 hat geschrieben:
Mo 14. Mär 2022, 09:46
Vor einem änderen des SQL-Statemnt immer die Query Close und ein Clear machen. Egal ob mit SQLdb oder ZEOS. Ansonsten kann das unerwartet (bei dir, nicht bei mir :mrgreen: ) Ärger machen
+ 1 !!!!!

Mit älteren Zeosversionen hatte das funktioniert, ohne ein "Close". Close wurde automatisch bei der Änderung des SQL-Textes aufgerufen. Das ist bei einer neueren Zeosversion nicht mehr so. Es ist nun zwingend selbst das Close durchzuführen. Siehe u.a. https://zeoslib.sourceforge.io/viewtopi ... 0&t=143732

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Antworten