![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: UniDac
Erkenne ob Post ein Update oder Insert war
Hallo Zusammen,
ich habe eine wahrscheinlich einfache Frage. Ich möchte erkennen können, ob ein Post einer TUniQuery ein Update oder ein Insert war. Der Hintergrund ist, dass wenn es ein Insert war, ich eine Procedure laufen lassen möchte, als wenn es ein update war. Ich wollte es eigentlich prüfen, indem ich vor dem Post prüfe, es eine ID gibt. Wenn ja, wäre es ein update gewesen, wenn nein, ein insert. Aber leider benötige ich für die nächste Query diese id, daher muss ich die nachfolgenden Prozceduren auch wirklich im Nachgang machen... Vielen Dank Patrick |
AW: Erkenne ob Post ein Update oder Insert war
Ich verstehe nur Bahnhof!
Wenn ich einen Datensatz "Post"e dann muss ich vorher entweder einen bestehenden Datensatz "Edit"en oder einen neuen Datensatz "Append"en. Damit ist doch klar ob ein Datensatz geupdatet oder neu inserted wurde? Schreib mal bitte genauer worum es eigentlich geht! Ciao Stefan |
AW: Erkenne ob Post ein Update oder Insert war
Alles klar, versuche ich es noch einmal.
Ich lege einen neuen Datensatz an (Neuer Artikel). Nach dem Anlegen müssen mehrere Datensätze in eine andere Tabelle geschrieben werden (Prozess-Ablauf). Wenn ich aber den Artikel nur verändere (update), dann muss ich die Datensätze in der anderen Tabelle nicht erstellen. Meine Speicher-Methode funktioniert mit der Kombination Query--> DataSource --> DBEdit-Felder --> Navigator. Bei dieser Vorgehensweise muss ich den Insert / Update String nicht manuel erstellen... Die einzige Möglichkeit, die mir aktuell einfällt, wäre gefrickelt...: im Event BeforePost abfragen, ob Datensatz eine ID hat, dann KlassenVariable auf true setzen, ansonsten auf false. Dann in dem Event AfterPost den Status der Klassenvariable abfragen. Die Lösung ist aber gefuscht und es muss mit Sicherheit auch eleganter zu lösen sein... Ich hoffe, dass mein Problem besser beschrieben ist. Vielen Dank Gruß Patrick |
AW: Erkenne ob Post ein Update oder Insert war
Wäre das nicht besser auf DB-Ebene per Trigger zu lösen?
|
AW: Erkenne ob Post ein Update oder Insert war
Frage doch im Event BeforePost den Status der Query ab.
entweder über Query1.State = dsInsert oder DataSource1.State = dsInsert (DataSource1 zeigt auf Query1). Grüße Mikhal |
AW: Erkenne ob Post ein Update oder Insert war
Leider kann ich den Weg mit
Delphi-Quellcode:
nur in BeforePost eingesetzt werden.
if FMyQuery_Position.State=dsInsert then begin
Wenn ich das in AfterPost prüfe, bekomme ich
Delphi-Quellcode:
, was mir nicht mehr hilft...
FMyQuery_Position.State=dsBrowse
Wie müsste ich denn einen DB-Trigger einsetzen? Das kenne ich nicht. Vielen Dank Patrick |
AW: Erkenne ob Post ein Update oder Insert war
|
AW: Erkenne ob Post ein Update oder Insert war
Zitat:
![]() oder du prüfst einfach in AfterPost ob es notwendig ist (ok, hängt vom Datenumfang ab) ob die Zusatzdaten noch geschrieben werden müssen. |
AW: Erkenne ob Post ein Update oder Insert war
Suchmaschine Deiner Wahl: "MySQL Create Trigger" oder Suchmaschine meiner Wahl:
![]() Und: Wenn man sich merken will, ob ein Satz neu ist oder geändert wird, so muss man sich dass beim Einfügen bzw. Ändern merken. Nach dem Speichern ist kein Datensatz neu oder geändert, sondern einfach nur vorhanden. |
AW: Erkenne ob Post ein Update oder Insert war
Danke für die Hilfe!
Ich habe es jetzt so gemacht, wie Lemmy es vorgeschlagen hat und prüfe, nach dem Post einfach, ob die entsprechende Datensätze vorhanden sind. Wenn nicht, folgt die zusätzliche Insert-Procedur...
Delphi-Quellcode:
Vielen Dank
procedure TMySQLDB.QueryPosition_AfterPost(DataSet: TDataSet);
var I: integer; begin FMySelectQuery.SQL.Clear; FMySelectQuery.SQL.Add('select * from prozess_position where positionen_id= :positionen_id '); FMySelectQuery.ParamByName('positionen_id').AsInteger:=FMyQuery_Position.FieldByName('positionen_id').AsInteger; FMySelectQuery.Open; if FMySelectQuery.Eof then begin Insert_Prozess;//Hier wird dann der Prozessablauf in die andere Tabelle geschrieben... end; end; Patrick |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 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