解决方案 »

  1.   

     if (E is EOleException) and ((E as EOleException).ErrorCode= -2147467259) then这个靠谱吗? 这个errorcode 代表??
    我以前的做法就是定期访问数据库中的某个表的(其实就是执行一条最简单的sql语句)
    如果失败,说明sql 连接异常。需要重连。active 确实是不靠谱的。
      

  2.   

    今天和同事讨论了一下,实际上这种情况只要封装一下数据库操作的方法,每次执行select、insert、update、delete前执行个getDate之类简单的SQL,如果网没断那就瞬间正确返回日期,如果没有那就网断了,这个费点时间,就重连网络就行了,不过大部分情况是假断网的情况。SQLServer定期断开的问题普遍存在,所以说到底就是数据库访问没有进行良好封装导致,因为SQL语句太多,没封装的情况下要是每个地方都加个GetDate判断是否断网肯定累死。所以封装有多重要。
      

  3.   

    我是直接在查询语句中判断的.procedure TForm1.Button2Click(Sender: TObject);
    begin
      try
           查询,等操作
      except 
          重连;
         if  ( 如果连接成功)
         begin
         try
         然后重新执行查询等操作
          except
              返回错误.
          end;
          end;
       end;
    end;