我用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后的语句。 这是什么原因。
然后在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后的语句。 这是什么原因。
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;先开数据库 然后关数据库 然后再开数据库 看看什么结果
2、数据库关闭,Connection还能连上,可能是缓存的原因
如果是缓存的问题 如何解决?
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;
执行DML才会出错的
我就想知道 这个是否就是传说种的 ADOCONNECTION 的 BUG 不执行SQL语句就没其它办法了?
try except end 语句在调试期间是不起作用的,因为这个时候出现错误由delphi来抓。你可以先编译程序,然后直接双击运行编译生成的exe文件,也就是不在delphi环境下运行,然后再试试你以前的操作,看看达到你要的效果了没有。