我用DELPHI7  在DataModule里放个  adoconnection
然后在Form里写个函数 如下
function TFrmMain.connectDB: boolean;
begin
  result := false;
  Sname := getinivariantstring(path + 'system.ini', 'database', 'servername');
  Suser := getinivariantstring(path + 'system.ini', 'database', 'user');
  Spass := getinivariantstring(path + 'system.ini', 'database', 'pass');
  Cconstr:= 'Provider=OraOLEDB.Oracle ;Data Source=' + Sname + ';User ID=' + Suser + ';Password=' + Spass + ';Persist Security Info=True';
  Fdm.ADOConnection1.Connected:=false;
  Fdm.ADOConnection1.ConnectionString := Cconstr;
  try
    Fdm.ADOConnection1.Connected:=true;
    UDPMemo.Lines.Add('连接数据库成功');
  except
    UDPMemo.Lines.Add('连接数据库失败');
    Exit;
  end;  result := true;
end;问题来了。
如果我把数据库断开后  执行到Fdm.ADOConnection1.Connected:=true;的时候正常,居然没报错。没去执行except后的语句。 这是什么原因。

解决方案 »

  1.   

    没报错就是连接数据库正常中啊,try  except 是异常处理语句,只有当出错的时候才会执行except后面的代码
      

  2.   

    2楼  数据库都停了。不可能能连上。 但不会执行except 后的语句
    3楼  你的方法我也试过了,但如果数据库再启用后,数据表是查询不出来的。
      

  3.   

    达人们可以用这个试试
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       with dm.ADOConnection1 do
       begin
         if Connected=true then Connected:=false;
         ConnectionString:='';
         try
           Connected:=true;
           memo1.Lines.Add('???');
         except
           if Connected=true then Connected:=false;
           ConnectionString:='Provider=OraOLEDB.Oracle.1;Password=plat_aq;Persist Security Info=True;User ID=plat_aq;Data Source=orcl';
           try
             Connected:=true;
             memo1.Lines.Add('TRUE');
           except
             memo1.Lines.Add('FALSE');
           end;
         end;
       end;
    end;先开数据库 然后关数据库 然后再开数据库 看看什么结果
      

  4.   

    1、确认关闭的是不是你程序连接的数据库服务器
    2、数据库关闭,Connection还能连上,可能是缓存的原因
      

  5.   

    肯定关闭的是我程序连接的数据库服务器 我本机ORACEL的
    如果是缓存的问题 如何解决?
      

  6.   

    试一下这个
    procedure TForm1.Button1Click(Sender: TObject);
    const
       ConnectionString='Provider=OraOLEDB.Oracle.1;Password=ftitem;Persist Security Info=True;User ID=ftitem;Data Source=orcl';
    begin
       ADOConnection1.Close;
       ADOConnection1.Connected := false;
       ADOConnection1.ConnectionString := ConnectionString;
       try
         ADOConnection1.Connected:=true;
         sleep(10);
         with adoquery1 do
         begin
           close;
           sql.text := ' select sysdate from dual';
           open;
         end;
         memo1.Lines.Add('成功');
       except
         memo1.Lines.Add('FALSE');
       end;
    end;
      

  7.   

    确实有这个问题哦
    执行DML才会出错的
      

  8.   

    我也是用这种方法解决的。
    我就想知道 这个是否就是传说种的 ADOCONNECTION  的 BUG  不执行SQL语句就没其它办法了?
      

  9.   


    try   except   end  语句在调试期间是不起作用的,因为这个时候出现错误由delphi来抓。你可以先编译程序,然后直接双击运行编译生成的exe文件,也就是不在delphi环境下运行,然后再试试你以前的操作,看看达到你要的效果了没有。