有很多个子程序连接到一个TConnection中,外部条件改变(如网络断了),子程序连接不能访问数据库后怎样实现重新连接数据库,尽量通过TConnection端解决,子程序连接端程序太多不太好改了,希望在TConnection上下工夫;
谢谢帮忙!
谢谢帮忙!
解决方案 »
- 打包一个软件,并去广告 200块是否有人可以拿下?
- 学过了Net,然后现在学习Delphi,感觉很别扭。
- 断点下载,cs同机没有问题,可是cs不同机就下载文件出错。
- dxdbgrid set to loadallrecord; adoquery set to batch;在编辑时显示行混乱?
- 与串口相关,但不是串口问题,不好说,内详
- WebBrowser的几个问题,在线等候,请高手帮忙
- 报表中的Summary怎么用啊?
- 我想捕获个异常 ,不知怎么写 。
- 1.请问try{}catch(...){throw},_finally{throw}中的throw是什么意思啊?可以不写么?
- 一个程序员的钱涂
- 关于fastreport纸张不限制长度的问题?
- listview中的ITEM文字可以折行显示吗?
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
就结帖
望大虾帮忙