![]() |
Datenbank: MySQL • Version: 5.7 • Zugriff über: FireDac
Firedac MySQL PK abrufen nach Update or insert
Hallo Zusammen,
in Firebird 3.0 kann ich UPDATE OR INSERT INTO ausführen und den AutoInc PK abrufen in einen Rutsch.
Code:
Hat jemand eine Idee wie das bei MySQL über FireDac funktioniert?
UPDATE OR INSERT INTO Tabelle(PK_ID, Feld1, Feld2)
VALUES (:Feld1, :Feld2) MATCHING (Feld1, Feld2) RETURNING PK_ID INTO :PK_ID Es geht wohl mit
Code:
aber wie wird das eingebunden oder muss ich das Insert und das Update selbst separat ausführen und als nächstens einzeln das Select ausführen? Wenn ja, wird sich hoffentlich das select auf meine letzte Aktion auswirken und wirklich meinen letzten PK aus der Tabelle zurück liefern und nicht den letzten PK falls in der Zwischenzeit ein anderer User ein Record in die Tabelle hinzugefügt hat.
SELECT LAST_INSERT_ID()
|
AW: Firedac MySQL PK abrufen nach Update or insert
Sowas funktioniert:
Delphi-Quellcode:
Grüße
FQuerySave.SQL.Text := 'select My_PK, MY_DATA_COL ' +
'from MYTABLE'; FQuerySave.Open; FQuerySave.Append; FQuerySave.FieldByName('MY_DATA_COL').AsInteger := 123; FQuerySave.Post; Result := FQuerySave.FieldByName('My_PK').AsInteger; FQuerySave.Close; TurboMagic |
AW: Firedac MySQL PK abrufen nach Update or insert
Das LAST_INSERT_ID ist aber auch nur dann sinnvoll, wenn tatsächlich ein INSERT ausgeführt wurde.
|
AW: Firedac MySQL PK abrufen nach Update or insert
Ich habe es jetzt anders gelöst indem ich vorher über ein Select nachschaue ob der Datensatz schon da ist. Wenn ja führe ich ein Update aus. Wenn nicht ein Insert.
Dennoch würde mich das interessieren ob es mit MySQL und Firedac irgend wie geht. |
AW: Firedac MySQL PK abrufen nach Update or insert
Es geht bei FireDAC schon so wie Markus das beschrieben hat (übrigens auch für andere DBs als MySQL). Auch da muss man vorher entscheiden, ob man ein Append oder Edit macht. Mit den passenden Optionen hat man aber nach dem Post auch den korrekten neuen PK im entsprechenden Feld.
|
AW: Firedac MySQL PK abrufen nach Update or insert
Wenn das ein AutoInc ist, dann geht es nur, wenn UpdateAfterPost aktiv ist und dass des auch funktioniert, also FireDAC auch ein passendes WHERE sich bastelt.
|
AW: Firedac MySQL PK abrufen nach Update or insert
Ich habe das jetzt mit zwei FDCommand (Insert und Update) und einer FDQuery zum abrufen ob der Datensatz vorhanden ist, umgesetzt. Wenn je Query den Datensatz findet, liefert sie den PK zurück. Ist der PK = 0 dann wird ein FDCommand für Insert gefeuert. Der PK wird dann über
Code:
abgerufen. Ist der PK größer dann wird mit einem weiteren FDCommand ein Update durchgeführt.
GetLastAutoGenValue
Mit Firebird geht das alles in einem Aufruf mit einem FDCommand. |
AW: Firedac MySQL PK abrufen nach Update or insert
Man kann beim TFDQuery aber auch ein eigenes Insert-Statement hinterlegen, anstatt das automatisch Generierte zu nutzen, also wenn man noch ein TFDUpdateSQL anhängt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:12 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 by Thomas Breitkreuz