AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken CallBack nach Query Refresh
Thema durchsuchen
Ansicht
Themen-Optionen

CallBack nach Query Refresh

Ein Thema von Ykcim · begonnen am 24. Nov 2020 · letzter Beitrag vom 25. Nov 2020
Antwort Antwort
Ykcim

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

CallBack nach Query Refresh

  Alt 24. Nov 2020, 17:30
Datenbank: MySQL • Version: 5 • Zugriff über: FireDac
Hallo Zusammen,

ich bin mir nicht sicher, ob das Thema hierhin oder in Programmieren allgemein gehört.

Ich habe mehrere DataSets die ich mit Daten befülle. Das Abspeichern muss ich aber in einer bestimmten Reihenfolge tun, damit ich die automatischen ID's vorher noch in den nachfolgenden DataSets hinzufügen kann.

Beispiel
DataSet_Firma wird gespeichert und der neue Datensatz bekommt die ID 7
DataSet_Login soll eine Mail-Adresse, ein Passwort und die ID von Firma bekommen.

Also speichere ich das DataSet_Firma, mache einen Refresh.
Dann rufe ich die Procedure auf, die DataSet_LogIn speichert
Setze im DataSet_LogIn die ID von Firma (7)
Speichere das DataSet_LogIn

Ich wollte es gerne mit einer CallBack machen (bin aber in dem Thema unerfahren).

Delphi-Quellcode:
//Speicher-Procedure
procedure TForm_CompanyReg.Save_Company(AOnDataRecieved: TDataRecievedCallback);
begin
   Try
      if DataModule_Client.DataSet_NewCompany.State<>dsBrowse then begin
         DataModule_Client.DataSet_NewCompany.FieldByName('land_id').AsInteger:=5;
         DataModule_Client.DataSet_NewCompany.FieldByName('sprache_id').AsInteger:=1;
         DataModule_Client.DataSet_NewCompany.Post;
      end;
      DataModule_Client.DataSet_NewCompany.ApplyUpdates;
      DataModule_Client.DataSet_NewCompany.Refresh;

      if Assigned(AOnDataRecieved) then begin
         AOnDataRecieved;
      end;
   Except
      ShowMessage('Es hat einen Fehler beim Speichern gegeben');
      Exit;
   End;
end;
//CallBack als Test
procedure TForm_CompanyReg.Save_CompEnvironment;
begin
   ShowMessage('CallBack: '+IntToStr(DataModule_Client.DataSet_NewCompany.FieldByName('Company_id').AsInteger)); //Test-Zweck
end;

//Aufruf
procedure TForm_CompanyReg.btn_forCompanyClick(Sender: TObject);
begin
   Save_Company(@Save_CompEnvironment);
end;
Aber leider wird die CallBack sofort aufgerufen. Da die Datenbank nicht synchron ist, wird der Wert 0 statt dem Wert 7 angezeigt. Warte ich einen Moment und frage den Wert mit einem Button ab, bekomme ich die 7...

Wie kann ich es erreichen, dass die CallBack erst aufgerufen wird, wenn der Refresh beendet ist? Ich würde es gerne mit einer CallBack machen.

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: CallBack nach Query Refresh

  Alt 24. Nov 2020, 23:14
Hallo,
warum holst du dir die neue ID nicht vorher (Generator, Sequence).
Heiko
  Mit Zitat antworten Zitat
Poelser

Registriert seit: 21. Apr 2008
Ort: Europa
145 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: CallBack nach Query Refresh

  Alt 25. Nov 2020, 06:19
(Generator, Sequence).
Das geht in Firebird, aber MySQL? IIRC gibt's da die Kombination aus Sequenz/Generator nicht.

LG aus dem hohen Norden, Edmund
  Mit Zitat antworten Zitat
Ykcim

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

AW: CallBack nach Query Refresh

  Alt 25. Nov 2020, 16:31
Ich fürchte, das geht mit MySQL nicht...

Was ist eigentlich der wirkliche Nutzen von CallBacks? Es macht meiner Meinung (und ich bin mir da nicht sicher!) nur Sinn, wenn aus etwas gewartet werden muss. Aber dann brauche ich einen Trigger, der feststellt, dass die "Wartezeit" vorbei ist.
Aber ich will nicht so einen Schrott bauen, wie etwa eine while_Schleife , mit der ich eine gewisse Zeit lang prüfe, ob die Company_ID noch 0 ist (das ist nämlich der Ausgangswert) und erst weiterlaufe, wenn die Zeit um ist oder der Wert ungleich 0 ist. Da muss es doch etwas besseres geben...

Viele Gruß aus Mitteldeutschland

Patrick
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: CallBack nach Query Refresh

  Alt 25. Nov 2020, 21:41
Wie ist TDataRecievedCallback deklariert?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: CallBack nach Query Refresh

  Alt 25. Nov 2020, 21:59
Hallo,
https://dev.mysql.com/doc/refman/8.0...increment.html

Interessant wird es ab dem Last_Insert_ID.
Heiko
  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 12:17 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