AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Erkenne ob Post ein Update oder Insert war

Erkenne ob Post ein Update oder Insert war

Ein Thema von Ykcim · begonnen am 17. Mär 2017 · letzter Beitrag vom 18. Mär 2017
Antwort Antwort
Seite 1 von 2  1 2   
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
799 Beiträge
 
Delphi 10.4 Sydney
 
#1

Erkenne ob Post ein Update oder Insert war

  Alt 17. Mär 2017, 14:26
Datenbank: MySQL • Version: 5 • Zugriff über: UniDac
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
Patrick
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
577 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: Erkenne ob Post ein Update oder Insert war

  Alt 17. Mär 2017, 14:35
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
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
799 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Erkenne ob Post ein Update oder Insert war

  Alt 17. Mär 2017, 14:43
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
Patrick

Geändert von Ykcim (17. Mär 2017 um 14:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Erkenne ob Post ein Update oder Insert war

  Alt 17. Mär 2017, 14:49
Wäre das nicht besser auf DB-Ebene per Trigger zu lösen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
795 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Erkenne ob Post ein Update oder Insert war

  Alt 17. Mär 2017, 15:07
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
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
799 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Erkenne ob Post ein Update oder Insert war

  Alt 17. Mär 2017, 15:37
Leider kann ich den Weg mit if FMyQuery_Position.State=dsInsert then begin nur in BeforePost eingesetzt werden.
Wenn ich das in AfterPost prüfe, bekomme ich 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
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Erkenne ob Post ein Update oder Insert war

  Alt 17. Mär 2017, 15:54
https://dev.mysql.com/doc/refman/5.7...er-syntax.html
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.364 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Erkenne ob Post ein Update oder Insert war

  Alt 17. Mär 2017, 15:55
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.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

AW: Erkenne ob Post ein Update oder Insert war

  Alt 17. Mär 2017, 15:56
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.
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
799 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Erkenne ob Post ein Update oder Insert war

  Alt 17. Mär 2017, 16:57
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
Patrick
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:28 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