我使用的是delphi7开发,基于Midas的三层架构 ,客户端用TSocketConnection连接,当我在客户端TClientDataSet.ApplyUpdates(0)时,如果这时客户端到应用服务器的网络断开,如果马上网络恢复,这时没什么问题,可是如果网络差不多断开3秒左右的时候,网络恢复,这时客户端就没响应了,一直死下去。猛将兄们,帮帮忙啊

解决方案 »

  1.   

    SocketConnection有timeout设置,设短点了,然后判断,重新连接
      

  2.   

    TSocketConnection中没有timeout,socket server的timeout设为0也没用呀,另请教,因为没有响应怎么判断,怎么重连啊
      

  3.   

    加上异常呀 
    try 
     ClientDataSet.ApplyUpdates(0);
    except
     ShowMessage('计算机没有连接到网络,请重试!');
    end;
      

  4.   

    to  ghy412(用心良苦)
    ClientDataSet.ApplyUpdates(0);
    这时如果网络断开,就死了,没法异常的兄弟们,解决了我再开贴给200分呀,更多分也行呀
      

  5.   

    在使用socket 时才连接,不用时应断开.并加入 SimepleobjectBroker处理容错在 applyupdates 前连接Sockettry
    socketconnection1.connection:=True;
    try
    ClientDataSet.ApplyUpdates(0);
    execept
    .....
    end;
    finally
    socketconnection1.connection:=False;
    end;
      

  6.   

    to helodd(真可爱)
    很感谢你关注
    不过我的情况是在ClientDataSet.ApplyUpdates(0)时(因为数据量大,所以要几秒)网络断掉,这时程序好像停止,怀疑有死锁,无没响应下去,不会走下去的,那些异常处理没用处
      

  7.   

    优化更新处理。。
    如果更新大量的数据通过SQL语句
    也可以在clientdataset的afterpost 里处理已更新的数据 
      if tclientdataset(Dataset).ChangeCount>=5 then
       TClientdataset(Dataset).ApplyUpdates(0);减少更新的数据量个人意见,纯属学习
      

  8.   

    什么都不懂,但是帮你ding一下。
      

  9.   

    MIDAS 中的ApplyUpdates(0);是不会走异常的,要处理在AfterDisconnect事件处理,还有,处理批量数据,最好调方法中间层三层容易引发死锁或阻塞,而且数据库还检测不到。 所以须要人为的处理
      

  10.   

    楼主,ApplyUpdate事件对于网络断开这种异常是捕获不到的,另外也不会象楼上的说的触发AfterDisconnect事件,如果你要处理的话,就我的经验而言,需要修改Scktsrvr.exe的源代码,但是修改它的源码需要有比较强的通信方面开发能力,所以最好还是调用中间层的方法,让中间层来执行更新,在客户端进行超时处理,调用中间层方法一段时间没有反映就提示超时
      

  11.   

    救命啊,客户要杀人了,老板也要杀人了,现在新的一个问题就是不是网络断的原因,有别的原因ApplyUpdates(0)会死掉,没有异常,也走不下去,谁有遇到过的,是什么原因呀,如何解决,快疯了
      

  12.   

    这个可以采用一个折中的办法,边门来处理,写一个方法利用SOCKET来先试一下网络是否常通,然后再保存,当然这个办法有点烂…………
      

  13.   

    何必考虑用接口完成!!
    以前,我只用CLIENTDATASET用在基本单据保存或查询,真正涉及业务的全部是接口。更是很少用存储过程。用接口来完成业务,可以减少网络开销,加快速度!同时更大的好处是业务封状!!
      

  14.   

    请问谁有遇到过在ApplyUpdates(0)时死机现象,都会在哪些情况下出现,如何解决,
    我调试不出,也模拟不出,
    但客户那老是会出现这种情况
    请大家提些建议