Vielen Dank!
Ich bin neu in der asynchrone Kommunikation und tue mich damit noch echt schwer...
Die Videos sind bei mir alle in den Lesezeichen, weil ich sie mir sooft ansehe...
Der Support von TMS hat mich in einem anderen Thema unterstützt, was aber die gleich Ursache hatte. Ich muss einfach lernen, andersherum zu denken. Bis jetzt waren bei meinen Programmen die Daten immer sofort da. Jetzt muss ich auf sie warten.
Aber man bekommt automatisch viele Verschachtlungen, oder?
Ich habe es jetzt so gelöst:
Delphi-Quellcode:
procedure TForm_NMain.WebFormShow(Sender: TObject);
begin
Create_frmLogIn;
end;
procedure TForm_NMain.Create_frmLogIn;
begin
Frame_Control.TabIndex:=0;
if not Assigned(Form_LogIn) then begin
Form_LogIn := TForm_LogIn.CreateNew(Sheet_LogIn.ElementID, nil);
Form_LogIn.OnLogIn_Run:=Run_LogIn;
Data_Module.xConnection_connect(procedure
begin
Data_Module.Get_Sprache(Design.Design_LogIn);
end
);
end;
end;
//in TDataUnit
type
TConnectCallback = reference to procedure;
TDataRecievedCallback = reference to procedure;
procedure TData_Module.xConnection_connect (AOnConnect: TConnectCallback);
procedure OnConnect;
begin
if Assigned(AOnConnect) then AOnConnect();
end;
procedure OnError(Error: TXDataWebConnectionError);
begin
ShowMessage('XData server connection failed with error: ' +
Error.ErrorMessage);
end;
begin
if xConnection.Connected then begin
if Assigned(AOnConnect) then AOnConnect();
end
else begin
xConnection.Open(@OnConnect, @OnError);
end;
end;
procedure TData_Module.Get_Sprache(AOnDataRecieved: TDataRecievedCallback);
procedure OnResponse(Response: TXDataClientResponse);
begin
xDST_Sprache.Close;
{xDST_Sprache_SetFields;}
xDST_Sprache.SetJsonData(TJSArray(Response.Result));
xDST_Sprache.Open;
if Assigned(AOnDataRecieved) then AOnDataRecieved();
end;
begin
xClient.RawInvoke('IData_xChangeService.Get_Sprache',[], @OnResponse);
end;
Damit klappt es jetzt gut. Aber wenn jemand noch Verbesserungen und Vereinfachungen sieht, bin ich für Lernunterstützung immer dankbar!
Ich habe allerdings
{xDST_Sprache_SetFields;
auskommentiert, weil ich die Felder des DataSet noch nicht zur Laufzeit erstellt bekomme.
Delphi-Quellcode:
procedure TData_Module.xDST_Sprache_SetFields;
begin
xDST_Sprache.Fields.Clear;
with xDST_Sprache.FieldDefs do begin
Add('sprache_id', ftInteger, 0, false);
Add('sprache', ftString, 45, false);
Add('login_Titel', ftString, 45, false);
Add('login_label_username', ftString, 45, false);
Add('ftString', ftString, 45, false);
Add('login_btn_login', ftString, 45, false);
Add('login_btn_abbruch', ftString, 45, false);
Add('uebersicht_titel', ftString, 45, false);
Add('grid_schnellsuche', ftString, 45, false);
end;
end;
Da kommt dann immer der Fehler
Zitat:
fMessage::EntitySetName not specified.
Den EntitySetNamen setze ich nicht, weil ich das DataSet ja manuell bestücke...
Hat da jemand eine Idee, wie ich das korrekt machen muss?
Vielen Dank
Patrick