如何使用try与except ( 积分: 200 )

  • 主题发起人 主题发起人 yina
  • 开始时间 开始时间
Y

yina

Unregistered / Unconfirmed
GUEST, unregistred user!
我要处理数据库的存储过程。只有当网络断掉,数据库才重新连接。
但是这段程序,网络断掉,就无法重新连接,为什么,各位大侠帮忙看看!
程序放在timer1里面,每秒会跑一次!

procedure Tfrm_main.Timer1Timer(Sender: TObject);
begin
timer1.Enabled:=false;
if v_err=true then //出错,系统要开始重新连接
begin
try
DB1.Connected:=true;//尝试连接
v_err:=false;
except
v_err:=true;
StatusBar1.Panels[0].Text:=’ '系统连接错误’;
end;
end;

//处理数据存储过程
try
statusbar1.Panels[0].Text:='当前处理时间:'+formatdatetime('yyyy-mm-dd hh:mm:ss',now());
v_err:=false;
storedproc1.ExecProc;
except
v_err:=true;
StatusBar1.Panels[0].Text:='系统处理错误,当前处理时间:'+formatdatetime('yyyy-mm-dd hh:mm:ss',now());

end;

timer1.Interval:=1000;
timer1.Enabled:=true;

end;
 
试试这个
procedure Tfrm_main.Timer1Timer(Sender: TObject);
begin
timer1.Enabled:=false;

try
DB1.Connected:=false;//关闭连接
DB1.Connected:=true;//尝试连接
v_err:=false;
except
v_err:=true;
StatusBar1.Panels[0].Text:=’ '系统连接错误’;
end;

//处理数据存储过程
if not v_err then
try
statusbar1.Panels[0].Text:='当前处理时间:'+formatdatetime('yyyy-mm-dd hh:mm:ss',now());
storedproc1.ExecProc;
except
StatusBar1.Panels[0].Text:='系统处理错误,当前处理时间:'+formatdatetime('yyyy-mm-dd hh:mm:ss',now());

end;

timer1.Interval:=1000;
timer1.Enabled:=true;

end;
 
to:3868474
忘记说一点了,不能每秒都对系统进行连接,否则数据库会死机!
3868474你采用的方法就是每秒都在连接,对系统冲击很大!
 
//那就倒过来怎么样
procedure Tfrm_main.Timer1Timer(Sender: TObject);
begin
timer1.Enabled:=false;
//处理数据存储过程
if v_err then
try
statusbar1.Panels[0].Text:='当前处理时间:'+formatdatetime('yyyy-mm-dd hh:mm:ss',now());
storedproc1.ExecProc;
v_err:=true;
except
v_err:=false;
StatusBar1.Panels[0].Text:='系统处理错误,当前处理时间:'+formatdatetime('yyyy-mm-dd hh:mm:ss',now());
end;

if v_err then
try
DB1.Connected:=false;//关闭连接
DB1.Connected:=true;//尝试连接
v_err:=true;
except
v_err:=false;
StatusBar1.Panels[0].Text:=’ '系统连接错误’;
end;
timer1.Interval:=1000;
timer1.Enabled:=true;
end;
 
//那就倒过来怎么样
procedure Tfrm_main.Timer1Timer(Sender: TObject);
begin
timer1.Enabled:=false;
//处理数据存储过程
if v_err then
try
statusbar1.Panels[0].Text:='当前处理时间:'+formatdatetime('yyyy-mm-dd hh:mm:ss',now());
storedproc1.ExecProc;
v_err:=true;
except
v_err:=false;
StatusBar1.Panels[0].Text:='系统处理错误,当前处理时间:'+formatdatetime('yyyy-mm-dd hh:mm:ss',now());
end;

if not v_err then //这里有一小错
try
DB1.Connected:=false;//关闭连接
DB1.Connected:=true;//尝试连接
v_err:=true;
except
v_err:=false;
StatusBar1.Panels[0].Text:=’ '系统连接错误’;
end;
timer1.Interval:=1000;
timer1.Enabled:=true;
end;
 
这样倒过来比较好,出现错误就重新连接,而且,连接数据库后,下一次定时器触发才执行你的处理。另外,给你一个建议,你可以计数,当连续多少次都不能正确连接数据库的时候,可能你需要其他处理。
 
我少些写了DB1.Connected:=false;//关闭连接!
现在已经成功,非常感谢!
 
非常感谢!
 
我少些写了DB1.Connected:=false;//关闭连接!
现在已经成功,非常感谢!
 
后退
顶部