再ontime的事件中加如下代码 if not TConnection1.Connection then TConnetion1.Connection:=true; 不知道行不行 我也很菜耶
出现异常后让timer1开始运行,不停的连接,只到连接上不就可以了吗
在AfterDisconnect事件里写重新连接的代码
谢谢各位 我是希望对数据库操作时发现连接没有连接上数据库在实现重新连接 楼上几位我都试过,好象不太好用,说的可能资源站用太多,在我的程序中不太好用, jialiujie(jlj) 的 if not TConnection1.Connection then TConnetion1.Connection:=true; 网络断了是,提示过不能连接上数据库,但Connection1.Connection 状态还是真,我试过 neo40(企鹅) 的: 网络断了是,提示过不能连接上数据库,也不除法AfterDisconnect事件,提问前我就试过,也不好用 会不会是我对TConnection的设置不对,望各位指点,分不够我在开个贴,家100分 wintergoes(多来米饭少来稀) : 我试试
你应在数据模块里建一个网络检测过程,一旦发现网络出现异常,先报警,立即进行重新连接.此过程在所有的与数据库相关的模块在被打开和保存时被调用. function TDataModuleMain.NetConnect: Boolean; begin Try ADODataSetCheckNet.Close; ADODataSetCheckNet.CommandText:='Select GetDate() as CurrentDateTime'; ADODataSetCheckNet.Open; CurrentDateTime:=ADODataSetCheckNet.FieldByName('CurrentDateTime').AsDateTime; Result:=True; Except ShowMessage('数据连接中断,请迅速与系统管理员联系!'); Result:=False; end; end;调用: if DataModuleMain.NetCheck then begin end;
谢谢chenylin(陈SIR) 和leeshine(LeeShine_Soft) chenylin(陈SIR) 和 leeshine(LeeShine_Soft) 的方法可能系统开销有些大,我考虑过这样实现,有两个问题, 1、我修改的程序量很大 2、系统开销有些大 可能不太适合,能不能当连接不上时,如用TADOQery执行SQL语句时是因为连接不上儿才执行重连接,怎样判断,在ADOConnection.OnExecuteComplete中有个Error.Get_Number=-2147467259表示“连接失败” 可以通过 Timer1: TTimer; 属性 Timer1.Interval = 6000;//可以设小点,当断开连接后六秒后启动连接数据库 procedure TForm1.Timer1Timer(Sender: TObject); begin ADOConnection1.Close; ADOConnection1.Open; Timer1.Enabled := false; end;procedure TForm1.ADOConnection1ExecuteComplete(Connection: TADOConnection; RecordsAffected: Integer; const Error: Error; var EventStatus: TEventStatus; const Command: _Command; const Recordset: _Recordset); begin if (Error <> nil) and not Timer1.Enabled and (Error.Get_Number = -2147467259) then//但不知道Error.Get_Number 为-2147467259就一定是数据库连接失败和数据库连接失败是否就是-2147467259 begin Application.MessageBox('数据库连接出错,此次操作被取消!','数据库连接错误'); //Connection.Close; //Connection.Open; Timer1.Enabled := true; end; end; 望高手指点,谢谢!
try 一系列数据库操作 except on e:exception do begin 1,ADOConnection1.Close;//这句非常重要,为下次连接释放资源。 2,记错误日志,如:writelog(e.message); 3,输出错误信息。。或者继续把这个异常向外层再抛出。raise; end; end;
if not TConnection1.Connection then
TConnetion1.Connection:=true;
不知道行不行
我也很菜耶
我是希望对数据库操作时发现连接没有连接上数据库在实现重新连接
楼上几位我都试过,好象不太好用,说的可能资源站用太多,在我的程序中不太好用,
jialiujie(jlj) 的
if not TConnection1.Connection then
TConnetion1.Connection:=true;
网络断了是,提示过不能连接上数据库,但Connection1.Connection 状态还是真,我试过
neo40(企鹅) 的:
网络断了是,提示过不能连接上数据库,也不除法AfterDisconnect事件,提问前我就试过,也不好用
会不会是我对TConnection的设置不对,望各位指点,分不够我在开个贴,家100分
wintergoes(多来米饭少来稀) :
我试试
function TDataModuleMain.NetConnect: Boolean;
begin
Try
ADODataSetCheckNet.Close;
ADODataSetCheckNet.CommandText:='Select GetDate() as CurrentDateTime';
ADODataSetCheckNet.Open;
CurrentDateTime:=ADODataSetCheckNet.FieldByName('CurrentDateTime').AsDateTime;
Result:=True;
Except
ShowMessage('数据连接中断,请迅速与系统管理员联系!');
Result:=False;
end;
end;调用:
if DataModuleMain.NetCheck then
begin
end;
chenylin(陈SIR) 和 leeshine(LeeShine_Soft) 的方法可能系统开销有些大,我考虑过这样实现,有两个问题,
1、我修改的程序量很大
2、系统开销有些大
可能不太适合,能不能当连接不上时,如用TADOQery执行SQL语句时是因为连接不上儿才执行重连接,怎样判断,在ADOConnection.OnExecuteComplete中有个Error.Get_Number=-2147467259表示“连接失败”
可以通过
Timer1: TTimer;
属性 Timer1.Interval = 6000;//可以设小点,当断开连接后六秒后启动连接数据库
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ADOConnection1.Close;
ADOConnection1.Open;
Timer1.Enabled := false;
end;procedure TForm1.ADOConnection1ExecuteComplete(Connection: TADOConnection;
RecordsAffected: Integer; const Error: Error;
var EventStatus: TEventStatus; const Command: _Command;
const Recordset: _Recordset);
begin
if (Error <> nil) and not Timer1.Enabled and (Error.Get_Number = -2147467259) then//但不知道Error.Get_Number 为-2147467259就一定是数据库连接失败和数据库连接失败是否就是-2147467259
begin
Application.MessageBox('数据库连接出错,此次操作被取消!','数据库连接错误');
//Connection.Close;
//Connection.Open;
Timer1.Enabled := true;
end;
end;
望高手指点,谢谢!
procedure TForm1.Timer1Timer(Sender: TObject);
begin
try
ADOConnection1.Close;
ADOConnection1.Open;
except
end;
Timer1.Enabled := false;
end;
begin
1,ADOConnection1.Close;//这句非常重要,为下次连接释放资源。
2,记错误日志,如:writelog(e.message);
3,输出错误信息。。或者继续把这个异常向外层再抛出。raise; end;
end;
能问一下TADOConnection.OnExecuteComplete中
不知道Error.Get_Number 的值-2147467259就一定是数据库连接失败
数据库连接失败Error.Get_Number 的值就是-2147467259
非常谢谢halfdream(哈欠) 要些出健壮的程序需要哲学东西
能问一下TADOConnection.OnExecuteComplete中
不知道Error.Get_Number 的值-2147467259就一定是数据库连接失败
数据库连接失败Error.Get_Number 的值就是-2147467259
就结帖
望大虾帮忙