Einzelnen Beitrag anzeigen

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