在我的Datasnap客戶端應用程序中,我爲我的方法和ProviderConnection使用了1個TSQLConnection。 連接丟失時出現問題。 TSQLConnection.Connected和TSQLConnection.ConnectionState都無法捕捉到這一點。Mannaging SQLConnection/Datasnap通過客戶端 - 服務器斷開連接
當我的TSQLconnection打開但我失去了互聯網連接,或服務器停止。Datasnap客戶端應用程序出現很多錯誤。 (服務器方法或ClientDatasets)
我創建了一個函數來管理我的服務器方法的SQL連接。但是當例如關閉通過TDSProviderConnection連接的ClientDataset時會出現更多問題。
問:如何管理客戶端應用程序以安全捕獲TSQLconnection上的任何斷開連接。 問題:您如何管理停機時間,以及您如何處理未保存的客戶端狀態。
停機後重新連接不是問題。
當調用servermethod時:這會拋出異常。
tmpM:=TServerMethodsClient.Create(MYTSQLCONNECTION.dbxconnection,true);
因此,我寫下一個方法來從我的datamodule用虛擬方法獲取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;
我寫的方法這種方式,因爲只有找出如果連接丟失的方法是通過虛擬方法至極將拋出同樣的錯誤......然後我可以查詢重新連接或關閉程序。
編輯:(我期待某種一般的回答和指導方針,做了並且不不是我的代碼修正,這只是展示一下我在此刻做的。)
你說「用戶可以重新登錄」,但你沒有說你是怎麼做到的?在我自己的Datasnap應用程序中,即使是對TSQLConnection1.Connected:= False的調用,也會引發異常(10053),因爲它試圖告訴服務器(現在不存在)。我在這裏捕捉22。你是怎麼繞過_that_的? – nolaspeaker
@nolaspeaker - 因爲我知道我要重新進行身份驗證,所以我並不在意這個例外。所以我只使用'try sqlcon.Close;除了結尾;',它吃任何例外。然後,我可以靜靜地重新進行身份驗證,或者再次向用戶顯示登錄對話框,以便他們手動登錄。 –
是的,該處理也發生在我身上 - 在我問你問題之後! :-)感謝您的迴應。 – nolaspeaker