问题起源:最近服务器老自动重新启动,客户机输了很多资料,最后要保存的时候,不能保存,提示RPC服务器不可用,因为服务器重新启动了。这个时候客户机必须退出程序再进一次软件,才能重新连接上服务器,但输入的那些资料已经全部丢失,必须重新输入才行。提出问题:请问有没有办法让客户机在不用退出客户端软件的情况下自动重新连接服务器?这样输入的资料就可以保存了。请大侠们帮帮我,客户机操作员对我都有意见了,他们重新输入资料几遍了。有没有相关的代码?

解决方案 »

  1.   

    在提交更新的按钮里使用try……finally……
    比如:
    try
        首先判断连接是否正常,否则重新建立连接;
        更新数据的代码;
    finally
        提示错误;
    end
    这样,如果无法连接服务器,程序会提示用户,用户可以过一会再尝试保存数据,而不用重新启动客户端程序。
    如果想让程序自动去连接,让一个定时器自己去判断吧。
      

  2.   

    怎么是TRY FINAALY 结构呀?
      

  3.   

    是在客户端程序的DCOMConnection控件里面加代码吗?
     TDataModule1.DCOMConnection1AfterDisconnect方法还是在DCOMConnection1BeforeDisconnect方法里面加好?
      

  4.   

    分配系统资源
    try
    .....
    使用系统资源
    finally
    释放系统资源
    在系统除措时,可以释放占有的资源
      

  5.   

    应该是用TRY...EXCEPT结构吧……
    XLYT(雨田) :
    try
        首先判断连接是否正常,否则重新建立连接;
        更新数据的代码;
    except
        提示错误;
    end
      

  6.   

    GrlStrConnection :='Provider=SQLOLEDB.1;Password='+Trim(PassWord)+';Persist Security Info=True;'+
                         'User ID='+Trim(userName)+
                         ';Initial Catalog='+Trim(DBName)+
                         ';Data Source='+Trim(ServerName);
      try
      With DM.ADO do
      begin
        ConnectionTimeout := 1;
        ConnectionString := GrlStrConnection;
        LoginPrompt := FALSE;
        Open;
      end;
    我自己的代码。
      

  7.   

    GrlStrConnection :='Provider=SQLOLEDB.1;Password='+Trim(PassWord)+';
                         Persist Security Info=True;'+
                         'User ID='+Trim(userName)+
                         ';Initial Catalog='+Trim(DBName)+
                         ';Data Source='+Trim(ServerName);
      try
      With DM.ADO do
      begin
        ConnectionTimeout := 1;
        ConnectionString := GrlStrConnection;
        LoginPrompt := FALSE;
        Open;
      end;
      except
        Showmessage('数据库连接失败。' + #13 + '请检查数据库配置信息!');
        _FormModifySever:=T_FormModifySever.Create(application);
        _FormModifySever.ShowModal;
        Application.Terminate;
      end;
      

  8.   

    在保存前先检查DCOMconnection状态,如果没连接,然后再Active,再保存,用try except保护起来
      

  9.   

    我觉得还是先解决server端的问题,否则治标不治本
      

  10.   

    你的三層是那種方式的,DCOM ,webserver,Socket還是.........
    在主連接控件的OnPostError的事件呀,如果收到無法連接的錯誤就啟動計時器每10秒重連一次,
    或是通過ClientDataSet1.SaveToFile();保存成xml文件關閉程序并重菥打開,然後用ClientDataSet1.LoadfromFile();
      

  11.   

    我的三层架构是DCOM的,那些代码是不是应该再客户端软件的控件DCOMConnection控件的某个方法里面加?
    这个控件有AfterConnect,AfterDisconnect,BeforeConnect,BeforeDisconnect等等方法.