DS_Feld einer Query bei allen selektierten DS ändern

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

DS_Feld einer Query bei allen selektierten DS ändern

Beitrag von Aliobaba »

Hallo

Wenn ich nach dem Ausführen einer "komplizierten" Query (Select ... Join!) ein bestimmtes Feld aller gefundenen Datensätze mit einem neuen Feldinhalt füllen möchte, dann habe ich dies bisher immer so gemacht, dass ich Datensatz für Datensatz durchgegangen bin, um das gewünschte Feld mit dem gewünschten neuen Inhalt zu füllen:

Code: Alles auswählen

Form1.Meine_komplizierte_Query.first.
while not Form1.Meine_komplizierte_Query.EOF do
              begin
                Form1.Meine_komplizierte_Query.Edit;
                Form1.DB_Mein_zu_aenderndes_Feld.text := Mein_neuer_Text.text ;
                Form1.Meine_komplizierte_Query.Post;
                Form1.Meine_komplizierte_Query.Next;
              end;

Das funktioniert recht gut, ist aber möglicherweise nicht besonders elegant.
Gibt es eine Möglichkeit, mit einem einzigen Befehl das gewünschte Feld aller gefundenen Datensätze "in einem Rutsch" mit dem neuen gewünschten Wert zu füllen, ohne jeden Datensatz einzeln aufrufen zu müssen?
Das erneute Aufrufen meiner "komplizierten Query" innerhalb eines SQL-Update-Befehls ist schwierig, da der ursprüngliche Select-Befehl schon "länger zurück liegt" und außerdem sich die Variablen geändert haben, mit denen der Select-Befehl gearbeitet hat.

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

Soner
Beiträge: 623
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: DS_Feld einer Query bei allen selektierten DS ändern

Beitrag von Soner »

Du kannst die SQL-Bedingung die zum Auswahl der Datensätze geführt hat in einer String-Variable speichern und bei Update-SQL verwenden.

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

Re: DS_Feld einer Query bei allen selektierten DS ändern

Beitrag von Aliobaba »

Ah so! Danke, Soner!

Allerdings ist der "ehemaile" "Select-Befehl" kein einfacher String, sondern setzt sich aus "Konstrukten" zusammen wie
z.B.:
Params.ParamValues['Zahl1'] := KrFKRubrikID;
Params.ParamValues['Zahl2'] := KTextID;
Ich fürchte, das wird mir zu kompliziert, so dass ich weiter dann mal lieber die "Query-Liste" mit "Query.next" "durchblättere" und Datensatz für Datensatz bearbeite:
Irgendwie nicht schön - ein ordentlicher SQL-Befehl wäre mir lieber - , aber es funktioniert.

Nochmals Vielen Dank!
Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Antworten