zoukankan      html  css  js  c++  java
  • UniDAC 断线重连方法

    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;


     

  • 相关阅读:
    U盘备份工具
    改进的窗口置顶工具
    有关DLL中封装的MDI子窗体出现TFont错误的解释
    QQ风格程序的编写
    改进的自动按键工具
    万能Update语句
    在DLL中封装的VCL窗体Tab键响应的问题
    自动按键工具
    灵活控制SVN服务
    在DLL动态链接库中封装VCL的MDI子窗体
  • 原文地址:https://www.cnblogs.com/lpq21314/p/6004999.html
Copyright © 2011-2022 走看看