AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firedac MySQL PK abrufen nach Update or insert
Thema durchsuchen
Ansicht
Themen-Optionen

Firedac MySQL PK abrufen nach Update or insert

Ein Thema von Kostas · begonnen am 31. Dez 2023 · letzter Beitrag vom 1. Jan 2024
Antwort Antwort
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Firedac MySQL PK abrufen nach Update or insert

  Alt 31. Dez 2023, 20:50
Datenbank: MySQL • Version: 5.7 • Zugriff über: FireDac
Hallo Zusammen,

in Firebird 3.0 kann ich UPDATE OR INSERT INTO ausführen und den AutoInc PK abrufen in einen Rutsch.

Code:
UPDATE OR INSERT INTO Tabelle(PK_ID, Feld1, Feld2)
VALUES (:Feld1, :Feld2)
MATCHING (Feld1, Feld2)
RETURNING PK_ID INTO :PK_ID
Hat jemand eine Idee wie das bei MySQL über FireDac funktioniert?

Es geht wohl mit
Code:
SELECT LAST_INSERT_ID()
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.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.960 Beiträge
 
Delphi 12 Athens
 
#2

AW: Firedac MySQL PK abrufen nach Update or insert

  Alt 1. Jan 2024, 10:37
Sowas funktioniert:

Delphi-Quellcode:
      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;
Grüße
TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#3

AW: Firedac MySQL PK abrufen nach Update or insert

  Alt 1. Jan 2024, 12:06
Das LAST_INSERT_ID ist aber auch nur dann sinnvoll, wenn tatsächlich ein INSERT ausgeführt wurde.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Firedac MySQL PK abrufen nach Update or insert

  Alt 1. Jan 2024, 14:01
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#5

AW: Firedac MySQL PK abrufen nach Update or insert

  Alt 1. Jan 2024, 15:42
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Firedac MySQL PK abrufen nach Update or insert

  Alt 1. Jan 2024, 18:41
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Firedac MySQL PK abrufen nach Update or insert

  Alt 1. Jan 2024, 20:49
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:
GetLastAutoGenValue
abgerufen. Ist der PK größer dann wird mit einem weiteren FDCommand ein Update durchgeführt.
Mit Firebird geht das alles in einem Aufruf mit einem FDCommand.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Firedac MySQL PK abrufen nach Update or insert

  Alt 1. Jan 2024, 22:19
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz