ZEOS Insert, Update und Delete

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Benutzeravatar
juelin
Beiträge: 299
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

ZEOS Insert, Update und Delete

Beitrag von juelin »

Hallo,
ich benutze ZEOS für den ZUgriff auf meine MariaDB Datenbank.
Soweit geht auch alles (lesen mit ZQuery).
Aber ich weiss nicht genau wie die SQL-Funktionen Insert, Update und Delete gehen sollen.
Mit welchen Komponeten?
Ich habe mich im Internet schlau gemacht und die Komponenten ZQuery und ZTransaction (mit AutoCommit) genen.
Es läuft !!!!!.

Code: Alles auswählen

    ZQuery2.SQL.Text:='UPDATE icao SET land=:land WHERE von=:von';
    ZQuery2.Params.ParamByName('land').asString:='XXX';
    ZQuery2.Params.ParamByName('von').asString:='000040';
    ZQuery2.ExecSQL;
Und genau so wichtig: wie kann ich abfragen, ob die Transaction in Ordnung gegangen ist? Irgend ein Ereignis (Event)?
Beim Update z. B. Eintrag nicht vorhanden oder Update nicht ausgeführt.
ist Komponente ZTransaction überhaupt nötig???

Bin mal auf Eure Antwort gespannt.
Gruß
Jürgen
Zuletzt geändert von juelin am Fr 20. Sep 2024, 10:43, insgesamt 3-mal geändert.

Benutzeravatar
Zvoni
Beiträge: 412
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: ZEOS Insert, Update und Delete

Beitrag von Zvoni »

Bekommst du eine Fehlermeldung?
"Aber es läuft nicht" ist keine Aussage.

Dein gezeigter Code selbst sieht sauber aus.
Ist ZQuery2 richtig mit Connection (opt. Transaction) verbunden?
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: 299
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: ZEOS Insert, Update und Delete

Beitrag von juelin »

Nein keine Fehlermeldung.
Ja auch richtig mit ZConnection verbunden:
Zuletzt geändert von juelin am Fr 20. Sep 2024, 10:00, insgesamt 1-mal geändert.

Benutzeravatar
Zvoni
Beiträge: 412
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: ZEOS Insert, Update und Delete

Beitrag von Zvoni »

Und es kommt nix in der Datenbank an?

Ich selbst kenne ZEOS überhaupt nicht (hab ich noch nie gebraucht), aber ich bin mir ziemlich sicher, dass so ziemlich jedes DBMS einen Status/Fehlercode zurücksendet.
Ich würde mal auf die Suche gehen in der Connection nach einer Property "SQLLastError" oder so was.

bzw. Ist dein Code vielleicht in einem Try../except/Finally Block drin (was er auch sein sollte)?
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: 299
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: ZEOS Insert, Update und Delete

Beitrag von juelin »

Es kommt nix in der Datenbank an.

Code: Alles auswählen

    ZQuery2.SQL.Text:='UPDATE icao SET land=:land WHERE von=:von';
    ZQuery2.Params.ParamByName('land').asString:='XXX';
    ZQuery2.Params.ParamByName('von').asString:='000040';
    try
      try
        ZQuery2.ExecSQL;
      except
        on E: Exception do
        begin
          Label2.Caption:=E.Message;
          SqlRet:=False;
        end;
      end;
    finally
      if SqlRet then
      begin
//        JaNein:=messagedlg('Update gelungen', mtInformation, [mbOk], 0);
//      end else begin
//        JaNein:=messagedlg('Update fehlerhaft', mtError, [mbOk], 0);
      end;
    end;
In ZConnection gibt es leider kein SQLLastError oder LastError oder Error.

Anbei noch 2 Screenshots von meiner DB.

Gruß
Jürgen
Dateianhänge
db2.jpg
db2.jpg (193.47 KiB) 2409 mal betrachtet
db1.jpg
db1.jpg (204.96 KiB) 2409 mal betrachtet

Benutzeravatar
juelin
Beiträge: 299
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: ZEOS Insert, Update und Delete

Beitrag von juelin »

bitte nochmal ersten Eintrag lesen !!!!!!!

Benutzeravatar
Zvoni
Beiträge: 412
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: ZEOS Insert, Update und Delete

Beitrag von Zvoni »

juelin hat geschrieben: Fr 20. Sep 2024, 10:42 bitte nochmal ersten Eintrag lesen !!!!!!!

Und was läuft jetzt? Woran lag es?

Wäre vielleicht interessant für jemand anderen, der über diesen Thread stolpert

Ausserdem: Es ist NIE gut, den ersten Post zu ändern!!
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: 299
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: ZEOS Insert, Update und Delete

Beitrag von juelin »

na ja,
ich kontrolliere mit PHPMyAdmin die Datenbank.
Aber die Änderung kommt dort nicht an.
Allerdings im Programm (Ich lese ja die Tabelle aus und zeige sie in einem StringGrid an) kommt die Änderung an.
Keine Ahnung wieso.
Allerdings nur solange ich das Programm nicht beende.
Wenn ich das Programm beende und neu starte ist der alte Wert wieder in der Tabelle.
Es schlägt nicht durch zur echten Datenbank. Nur im Speicher.
Gruß
Jürgen

charlytango
Beiträge: 1098
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: ZEOS Insert, Update und Delete

Beitrag von charlytango »

ZEOS hat mit TZSQLMonitor eine feine Möglichkeit sich alles anzusehen, was tatsächlich von und zur Datenbank geschickt wird.
Binde TZSQLMonitor ein -- Filename angeben (sql.log zb), Active und Autosave auf true.

damit hast du die Kommunikation zur Datenbank unter Kontrolle.

Bei der Transaction auf Autocommit sollte ein ExecSQL eigentlich direkt durchkommen.
Zumindest sollte das SQL Statement im sql.log protokolliert werden.

Wenn die Daten nicht in der DB ankommen, kannst du dieses SQL Statement aus dem Log direkt im phpmyadmin testen.

Benutzeravatar
Zvoni
Beiträge: 412
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: ZEOS Insert, Update und Delete

Beitrag von Zvoni »

juelin hat geschrieben: Fr 20. Sep 2024, 10:58 na ja,
ich kontrolliere mit PHPMyAdmin die Datenbank.
Aber die Änderung kommt dort nicht an.
Allerdings im Programm (Ich lese ja die Tabelle aus und zeige sie in einem StringGrid an) kommt die Änderung an.
Keine Ahnung wieso.
Allerdings nur solange ich das Programm nicht beende.
Wenn ich das Programm beende und neu starte ist der alte Wert wieder in der Tabelle.
Es schlägt nicht durch zur echten Datenbank. Nur im Speicher.
Gruß
Jürgen
Also wird deine Transaction nicht committed.
Prinzipiell: Traue nie irgendwelchen "AutoIrgendwas"
ZQuery.Transaction.Commit; und Ruhe sollte sein.

Wobei wie ich gesagt habe: Keine Ahnung über ZEOS da ich es nicht nutze
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
Zvoni
Beiträge: 412
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: ZEOS Insert, Update und Delete

Beitrag von Zvoni »

charlytango hat geschrieben: Fr 20. Sep 2024, 11:35 ZEOS hat mit TZSQLMonitor eine feine Möglichkeit sich alles anzusehen, was tatsächlich von und zur Datenbank geschickt wird.
Binde TZSQLMonitor ein -- Filename angeben (sql.log zb), Active und Autosave auf true.

damit hast du die Kommunikation zur Datenbank unter Kontrolle.

Bei der Transaction auf Autocommit sollte ein ExecSQL eigentlich direkt durchkommen.
Zumindest sollte das SQL Statement im sql.log protokolliert werden.

Wenn die Daten nicht in der DB ankommen, kannst du dieses SQL Statement aus dem Log direkt im phpmyadmin testen.
Oder man schaut direkt im binlog des MariaDB-Servers nach......
https://mariadb.com/kb/en/binary-log/
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: 299
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: ZEOS Insert, Update und Delete

Beitrag von juelin »

So, Problem gelöst.
In der Komponente ZQuery2 musste ich die Properties Transaction und UpdateTransaction noch auf ZTransaction1 setzen.
Dann schlägt es auch gleich zur Datenbank durch.
Allerdings werden im Programm die Daten nicht geändert, auch wenn man mit ZQuery1 neu liest.
Habe ich mit ZConnection1.Disconnect und ZConnection1.Connect gelöst.
Ist halt keine schöne Methode.
Gibt es da was besseres?
Danke für die Mühen und Gruß
Jürgen

Benutzeravatar
Zvoni
Beiträge: 412
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: ZEOS Insert, Update und Delete

Beitrag von Zvoni »

juelin hat geschrieben: Fr 20. Sep 2024, 12:03 So, Problem gelöst.
In der Komponente ZQuery2 musste ich die Properties Transaction und UpdateTransaction noch auf ZTransaction1 setzen.
Dann schlägt es auch gleich zur Datenbank durch.
Allerdings werden im Programm die Daten nicht geändert, auch wenn man mit ZQuery1 neu liest.
Habe ich mit ZConnection1.Disconnect und ZConnection1.Connect gelöst.
Ist halt keine schöne Methode.
Gibt es da was besseres?
Danke für die Mühen und Gruß
Jürgen
Von weiter oben:
Zvoni hat geschrieben: Fr 20. Sep 2024, 09:50 Ist ZQuery2 richtig mit Connection (opt. Transaction) verbunden?


Schmarrn.
Ein ZQuery1.Refresh; oder sowas sollte reichen (Also das ZQuery-Objekt, welches das SELECT ausführt)
Zuletzt geändert von Zvoni am Fr 20. Sep 2024, 13:00, insgesamt 1-mal geändert.
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.

Sieben
Beiträge: 292
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
CPU-Target: i386

Re: ZEOS Insert, Update und Delete

Beitrag von Sieben »

Schon ein Refresh der Query, auf jeden Fall aber ein Close/Open, sollte die geänderten Daten enthalten. Aber auch ich kenne und benutze Zeos nicht. Im übrigen würde ich meinen Komponenten unbedingt aussagekräftige Namen geben, oder wirst du irgendwann später noch auf Anhieb wissen, was ZQuery13 eigentlich genau macht bzw repräsentiert?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6859
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: ZEOS Insert, Update und Delete

Beitrag von af0815 »

Die Queries von ZEOS und SQLdb versuchen die Statement für UPDATE, INSERT und DELETE zu erraten. Das geht öfters nicht (weil z.B. der Primärschlüssel nicht bekannt ist), dann kann die Query halt nur SELECT. Für die anderen Sachen (UPDATE,...) gibt es dann die Möglichkeit eigen Statements zu definieren und dann ist die Query auch in der Lage Einzufügen, Löschen oder Updaten.

Bei SQLdb heissen die Eigenschaften UpdateSQL, InsertSQL und DeleteSQL (und ein UpdateSQL gibt es auch). Bei ZEOS werden die so ähnlich heissen.

Ach ja, mit ApplyUpdates bekommt man die Daten persistent in die Datenbank, wenn man nicht AutoApply aktiviert hat. Transaktion kann man auch auf Auto stellen. Das sit aber bei SQLdb und ZEOS unterschiedlich gehanhabt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten