Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Rückmeldung bei Insert mit FireDAC (https://www.delphipraxis.net/216102-rueckmeldung-bei-insert-mit-firedac.html)

thomas.h 28. Okt 2024 15:48

Datenbank: MySQL • Version: 10.4.22 • Zugriff über: FireDAC in Delphi 11

Rückmeldung bei Insert mit FireDAC
 
Hallo zusammen,

ich verwende FireDAC um mit auf die SQL-Datenbank zu zu greifen, was bisher auch soweit funktioniert.
Bei Änderungen von Daten verwende ich hier Aktuell "TFDQuery".

In einer Tabelle der Datenbank will ich nun einen neuen Datensatz hinzufügen, wobei ich den Wert für die Spalte "ID" NICHT mit schicke. Die Spalte "ID" ist der Primär-Index und hat die Option "Auto-Inc". Demnach wird sie beim Insert Befehl automatisch befüllt?
Wenn ich hier wieder "TFDQuery" verwende funktioniert das hinzufügen der Daten auch ohne Probleme, aber wie bekomme ich den Wert den er mir in die Spalte "ID" eingetragen hat zurück?

Ne Abfrage danach bringt nichts, denn Theoretisch können mehrere Datensätze mit gleichen Werten vorhanden sein, die sich dann nur an der "ID" unterscheiden.

Generell geht es ja, denn bei PHP oder im alten Delphi (noch mit einer anderen Library) habe ich es schon programmiert.
Nur mit FireDAC habe ich es bisher noch nicht benötigt und leider beim Suchen im Netz auch nicht gefunden.

Delphi.Narium 28. Okt 2024 16:29

AW: Rückmeldung bei Insert mit FireDAC
 
Hilft eventuell dashier: GetLastAutoGenValue

peterbelow 29. Okt 2024 13:45

AW: Rückmeldung bei Insert mit FireDAC
 
Zitat:

Zitat von thomas.h (Beitrag 1542666)
Hallo zusammen,

ich verwende FireDAC um mit auf die SQL-Datenbank zu zu greifen, was bisher auch soweit funktioniert.
Bei Änderungen von Daten verwende ich hier Aktuell "TFDQuery".

In einer Tabelle der Datenbank will ich nun einen neuen Datensatz hinzufügen, wobei ich den Wert für die Spalte "ID" NICHT mit schicke. Die Spalte "ID" ist der Primär-Index und hat die Option "Auto-Inc". Demnach wird sie beim Insert Befehl automatisch befüllt?
Wenn ich hier wieder "TFDQuery" verwende funktioniert das hinzufügen der Daten auch ohne Probleme, aber wie bekomme ich den Wert den er mir in die Spalte "ID" eingetragen hat zurück?

Unterstützt MySQL RETURNING in einem INSERT-Statement? Das wäre normalerweise die beste Lösung für das Problem.

Uwe Raabe 29. Okt 2024 14:12

AW: Rückmeldung bei Insert mit FireDAC
 
FireDAC unterstützt direkt solche Felder und in der Regel erhält man den Wert in dem entsprechenden Feld nach dem Post-Aufruf. Die nötigen Vorbedingungen sind hier erläutert: https://docwiki.embarcadero.com/RADS...elds_(FireDAC)

himitsu 29. Okt 2024 14:45

AW: Rückmeldung bei Insert mit FireDAC
 
Besorgt sich FireDAC dann wirklich den "richtigen" Wert, (z.B. via INSERT RETURNING)
oder holt es sich nur den RECORD im Anschluß nochmal runter? (SELECT)

Jo, viele DB-Frameworks holen sich standardmäßig im RefreshAfterPost mit RefreshRecord den "aktuellen" Datensatz,
WENN es möglich ist ein passendes WHERE zu basteln. (mit einer vorhandenen ID oder einem WHERE auf "alle" bekannten Felder)

Im pgDAC hatten wir schon ein paar Mal das Problem, dass die Automatik nicht funktionierte (vor allem wenn JOINs und Dergleichen beteiligt waren).

Uwe Raabe 29. Okt 2024 15:21

AW: Rückmeldung bei Insert mit FireDAC
 
Zitat:

Zitat von himitsu (Beitrag 1542703)
Besorgt sich FireDAC dann wirklich den "richtigen" Wert, (z.B. via INSERT RETURNING)
oder holt es sich nur den RECORD im Anschluß nochmal runter? (SELECT)

Das MySQL kein RETURNING unterstützt, aber die Funktion LAST_INSERT_ID() stabil innerhalb einer Connection ist, wird dieses auch verwendet um den AutoInc-Wert zu ermitteln.

thomas.h 31. Okt 2024 09:53

AW: Rückmeldung bei Insert mit FireDAC
 
Danke an all.
Ihr habt mir zur Lösung verholfen.

Ich hatte zwar selbst schon nach dem "GetLastAutoGenValue" gesucht, aber nicht gefunden, da ich beim TFDQuery gesucht hatte.
Die Rückmeldung gehört aber zu TFDConnection selbst. Demnach hätte ich es also eine Ebene höher suchen müssen.

:thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz