使用ADOConnection连接oracle数据库,开始正常,当网络断开时数据库连接失败(此时查询ADOConnection.connected属性是true),
用了 ADOConnection的query在open时都报错,想了一个解决方法,使用定时器判断如下:var
  adoq : TADOQuery;
begin
  adoq := TADOQuery.Create(nil);
  adoq.Connection := dm.ADOConn;
  adoq.Close;
  adoq.SQL.Clear;
  adoq.SQL.Add('select * from cat where 1=0');
  try
    adoq.Open;
  except
    try
      dm.ADOConn.Connected := false;
      dm.ADOConn.Connected := true;
    except
    end;
  end;
end;按理说应该重连上了,可是结果还是未连接状态。query在open时依然报错,请问怎么回事啊,怎样解决呢?

解决方案 »

  1.   

    var
      adoq : TADOQuery;
    begin
      adoq := TADOQuery.Create(nil);
      adoq.Connection := dm.ADOConn;
      adoq.Close;
      adoq.SQL.Clear;
      adoq.SQL.Add('select * from cat where 1=0');
      try
        try
          dm.ADOConn.Connected := false;
          dm.ADOConn.Connected := true;
        except
        end;
        adoq.Open;
      except  end;
    end;
      

  2.   

    var
      adoq : TADOQuery;
    begin
      adoq := TADOQuery.Create(nil);
      adoq.Connection := dm.ADOConn;
      adoq.Close;
      adoq.SQL.Clear;
      adoq.SQL.Add('select * from cat where 1=0');
      try
        try
          if dm.ADOConn.Connected then  
            dm.ADOConn.Connected := false;
          dm.ADOConn.Connected := true;
        except
        end;
        adoq.Open;
      except  end;
    end;
    你这样写 再试一下
      

  3.   

    dm.ADOConn.Connected := true;
    其实这句话 没有必要 我觉得
    你在控件属性里设置不可以吗?
      

  4.   

    自己搞定了,这样解决得:    try
          while dm.ADOConn.Connected=true do
          begin
            dm.ADOConn.Connected := false;
            application.ProcessMessages;
          end;
          while dm.ADOConn.Connected=false do
          begin
            dm.ADOConn.Connected := true;
            application.ProcessMessages;
          end;
        except
        end;用了死办法,实在搞不清ADOConn的Connected是true还是false了
      

  5.   

    adoq.Connection := dm.ADOConn;
    DM 什么东西。哪里出来的。需要USES哪个单元的吗??