Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Erkenne ob Post ein Update oder Insert war (https://www.delphipraxis.net/192065-erkenne-ob-post-ein-update-oder-insert-war.html)

Ykcim 17. Mär 2017 13:26

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

sko1 17. Mär 2017 13:35

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

Ykcim 17. Mär 2017 13:43

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

DeddyH 17. Mär 2017 13:49

AW: Erkenne ob Post ein Update oder Insert war
 
Wäre das nicht besser auf DB-Ebene per Trigger zu lösen?

mikhal 17. Mär 2017 14:07

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

Ykcim 17. Mär 2017 14:37

AW: Erkenne ob Post ein Update oder Insert war
 
Leider kann ich den Weg mit
Delphi-Quellcode:
if FMyQuery_Position.State=dsInsert then begin
nur in BeforePost eingesetzt werden.
Wenn ich das in AfterPost prüfe, bekomme ich
Delphi-Quellcode:
FMyQuery_Position.State=dsBrowse
, was mir nicht mehr hilft...

Wie müsste ich denn einen DB-Trigger einsetzen? Das kenne ich nicht.

Vielen Dank
Patrick

DeddyH 17. Mär 2017 14:54

AW: Erkenne ob Post ein Update oder Insert war
 
https://dev.mysql.com/doc/refman/5.7...er-syntax.html

Lemmy 17. Mär 2017 14:55

AW: Erkenne ob Post ein Update oder Insert war
 
Zitat:

Zitat von Ykcim (Beitrag 1364539)
Wie müsste ich denn einen DB-Trigger einsetzen? Das kenne ich nicht.

https://dev.mysql.com/doc/refman/5.7...er-syntax.html zu spät.... :-)

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.

nahpets 17. Mär 2017 14:56

AW: Erkenne ob Post ein Update oder Insert war
 
Suchmaschine Deiner Wahl: "MySQL Create Trigger" oder Suchmaschine meiner Wahl: MySQL Create Trigger

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.

Ykcim 17. Mär 2017 15:57

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:
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;
Vielen Dank
Patrick


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:56 Uhr.
Seite 1 von 2  1 2      

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