在我的 Datasnap 客户端应用程序中,我将 1 个 TSQLConnection 用于我的方法和 ProviderConnection。
当连接丢失时会出现问题。TSQLConnection.Connected 和 TSQLConnection.ConnectionState 都没有捕捉到这一点。
当我的 TSQLconnection 已打开,但我失去了 Internet 连接,或者服务器停止 Datasnap 客户端应用程序时,会出现很多错误。(服务器方法或客户端数据集)
我创建了一个函数来管理我的服务器方法的 SQL 连接。但是当例如关闭通过 TDSProviderConnection 连接的 ClientDataset 时会出现更多问题。
问:您如何管理您的客户端应用程序以安全地捕获 TSQL 连接上的任何断开连接。
问:您如何管理停机时间,以及您如何处理未保存的客户端状态。
停机后重新连接不是问题。
调用服务器方法时:这将引发异常。
tmpM:=TServerMethodsClient.Create(MYTSQLCONNECTION.dbxconnection,true);
所以我编写了下一个方法来使用虚拟方法从我的数据模块中获取 TSQLCONNECTION。
function TDMForm.DSConnection: TSQLConnection;
var
tmpM:TServerMethodsClient;
begin
result:=nil;
if assigned(MYTSQLCONNECTION) then begin
tmpM:=TServerMethodsClient.Create(MYTSQLCONNECTION.dbxconnection,true);
try
try
tmpM.Ping;
result:=MYTSQLCONNECTION
except
ReconnectForm.ShowModal; // has a reconnect button that tries to reconnect + shutdownbutton
if ReconnectForm.modalresult=mrOK then
result:=MYTSQLCONNECTION
else
MainForm.Close;
end;
finally
tmpm.Free;
end;
end;
end;
我以这种方式编写了方法,因为找出连接是否丢失的唯一方法是通过会引发相同错误的虚拟方法......然后我可以查询重新连接或关闭程序。
编辑:我期待某种一般性的答案和指导方针,做和不做。不是对我的代码的更正,这只是为了展示我目前正在做的事情。