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