標籤:exec pass dac nal ase exe false oca pen
KBM服務端的 UniConnection 要實現斷線重連(串連 MSSQLServer), 需要以下幾個步驟:
一、修改單元檔案:kbmMWUniDAC.pas
procedure TkbmMWUNIDACConnection.InternalOpenConnection(ConnectionPool:TkbmMWCustomConnectionPool);begin // Create new database connection using template. with TkbmMWUNIDACConnectionPool(ConnectionPool).FDBTemplate do begin // 針對UniDAC需要增加這個語句,否則串連資料庫失敗 FDatabase.Server := Server; FDatabase.Database := Database; FDatabase.Username := UserName; FDatabase.Password := Password; FDatabase.LoginPrompt := False; FDatabase.ProviderName := ProviderName; FDatabase.Port := Port; FDatabase.SpecificOptions.Assign(SpecificOptions); // 支援unidac重聯 FDatabase.Options.LocalFailover:=Options.LocalFailover; FDatabase.OnConnectionLost:=OnConnectionLost; FDatabase.AfterConnect:=AfterConnect; with TkbmMWUNIDACConnectionPool(ConnectionPool) do if Assigned(FOnSetupDBConnection) then FOnSetupDBConnection(self,FDatabase); end; if FDatabase.ProviderName=‘SQL Server‘ then CoInitialize(nil); FDatabase.Open;end;
二. 把 UniConnection 的 Options.LocalFailover:=True ;
三. 在 UniConnection 的 ConnectionLost 事件修改如下:
procedure TDM.CON_AConnectionLost(Sender: TObject; Component: TComponent; ConnLostCause: TConnLostCause; var RetryMode: TRetryMode);begin //斷線重聯 if (Sender as TUniConnection).Tag<1 then begin RetryMode:=rmReconnectExecute; (Sender as TUniConnection).Tag:=(Sender as TUniConnection).Tag+1; end else begin RetryMode:=rmRaise; (Sender as TUniConnection).Tag:=0; end;end;
四、如果在服務端的函數裡有調用 UniQuery 或其他資料庫組件,在函數的開頭加:CoInitialize(nil); 結尾加:CoUninitialize;
UniDAC 斷線重連方法