我的ADOConnection KeepConnection是true, 如果一直是断线的我还可以ping 但是如果又恢复(如网线又通了)过来了, 我再执行时会出现'连线失败'的错误我准备在ping 完后再把Connection Close and Open,大家还有没有其它好的方法

解决方案 »

  1.   

    执行取数据前,if not adoconnection1.open then adoconnecttion1.open;
      

  2.   

    if not ADOConnection1.Connected then
        ADOConnection1.Open;
      ADOConnection1.BeginTrans;
      try
        ADOConnection1.CommitTrans;
      except
        ADOConnection1.RollbackTrans;
      end;
      

  3.   

    如果没有必要一直连线,那就在需要操作的时候,连接。如果一定要一直连接。。在ping之后Connection Close and Open,或者在
    try
      
    except
    end;
    中尝试操作,如果不能成功再执行Connection Close and Open
      

  4.   

    procedure TMainForm.QueryExec(mTempQuery:TADOQuery);
    var
            mError: boolean;
    begin
            while 0=0 do
            begin
                    mError := False;
                    try
                            mTempQuery.ExecSQL;
                    except
                           mError := True;
                    end;
                    if mError then
                    begin
                            try
                                    mTempQuery.Connection.Connected := False;
                                    mTempQuery.Connection.Connected := True;
                            except
                            end;
                    end
                    else
                            break;
            end;
    end;有结果集返回的mTempQuery这样用:
    mTempQuery.SQL.Text := '..........';
    ExecQuery(mTempQuery);
    mTempQuery.Active := True;无结果集返回的mTempQuery这样用:
    mTempQuery.SQL.Text := '.........';
    ExecQuery(mTempQuery);这段原创代码我在很多程序中用的,非常好用,多种断网情况都能自动恢复。
      

  5.   

    TO: erhan
    .............
                    if mError then
                    begin
                            try
                                    mTempQuery.Connection.Connected := False;
                                    mTempQuery.Connection.Connected := True;//如果你把这句注释掉,代码就会更优一些.呵呵.
                            except
                            end;
                    end
      

  6.   

    频繁的打开关闭Connection 会不会消耗大量的系统资源?
      

  7.   

    肯定会消耗服务器端的资源,因为系统会有一套超时机制来处理这种非正常断线,但这种资源应该不会太大,而且会定时回收的。我上面的代码是只有在真正无法执行sql查询的情况下才会完成关闭打开的操作的,正常情况下是不会进行操作的。另外,你可以增加一些代码来判断报错的情况,对于由于sql语法错误造成的不能正常执行,可以分开处理,向用户报错,而不去执行关闭打开操作。
      

  8.   

    另外,可以在相应的位置加个application.ProcessMessages,使得程序不会出现“无响应”的现象。我之所以没加,是靠程序“无响应”来提醒用户检查网络,及时修复网络故障。呵呵。