高分请教简单问题:try except 的用法。

zl1980 2003-06-11 10:27:04
数据库为ACCESS,关键字为人员编号,在导入数据时,如发现该编号已存在,弹出对话框:数据重复导入,是否替换原有记录。部分代码如下:
try
form21.ADOQuery1.Append;
for i:=0 to form21.ADOQuery1.FieldCount-1 do
begin
readln(f1,s);
if s<>'' then
form21.ADOQuery1.Fields[i].AsString:=s;
end;
form21.ADOQuery1.Post;
except
intfig:=messagedlg('该记录已存在,是否替换原有记录',mtconfirmation,[mbyes,mbno,mbcancel],0);
if intfig=mryes then
begin
form21.ADOQuery1.Edit;
for i:=0 to form21.ADOQuery1.FieldCount-1 do
begin
readln(f1,s);
if s<>'' then
form21.ADOQuery1.Fields[i].AsString:=s;
end;
form21.ADOQuery1.Post;
end
else
writeln('其他运行错误');
end;
closefile(f1);
但每次执行时,弹出我给的错误提示后,程序并不往下执行。而是继续弹出系统提示,然后跳出程序。请大家指正一下。
...全文
31 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hammer_shi 2003-06-12
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/1905/1905370.xml?temp=.8027765
zl1980 2003-06-11
  • 打赏
  • 举报
回复
那你觉得我要实现这种功能,还有什麽别的办法。
wangzn1979 2003-06-11
  • 打赏
  • 举报
回复
谈谈个人看法:
从异常的角度来说,出问题的时候给出提示,然后就要
退出这部分代码。
而不是象你的这样,在异常之中又处理了这么多事情。

希望大家共同交流,共同进步
firetoucher 2003-06-11
  • 打赏
  • 举报
回复
on e:except do
zl1980 2003-06-11
  • 打赏
  • 举报
回复
不行,except后的语句根本就没有执行。
newyu 2003-06-11
  • 打赏
  • 举报
回复
来晚了
bbs791109 2003-06-11
  • 打赏
  • 举报
回复
try
form21.ADOQuery1.Append;
for i:=0 to form21.ADOQuery1.FieldCount-1 do
begin
readln(f1,s);
if s<>'' then
form21.ADOQuery1.Fields[i].AsString:=s;
end;
form21.ADOQuery1.Post;
except
form21.ADOQuery1.cancel; //加上這句吧
intfig:=messagedlg('该记录已存在,是否替换原有记录',mtconfirmation,[mbyes,mbno,mbcancel],0);
if intfig=mryes then
begin
form21.ADOQuery1.Edit;
for i:=0 to form21.ADOQuery1.FieldCount-1 do
begin
readln(f1,s);
if s<>'' then
form21.ADOQuery1.Fields[i].AsString:=s;
end;
form21.ADOQuery1.Post;
end
else
writeln('其他运行错误');
end;
closefile(f1);
zlyanyan 2003-06-11
  • 打赏
  • 举报
回复
从理论上,靠抛出的异常作为一种条件来处理程序条件,是不可取的 ,异常是指程序出现错误。
wangzn1979 2003-06-11
  • 打赏
  • 举报
回复
分析一下!
首先判断是否有重复记录!
有: 修改
无: 增加

这些用条件判断就可以解决,
不要用异常来处理条件!
newsofter 2003-06-11
  • 打赏
  • 举报
回复
up
bbs791109 2003-06-11
  • 打赏
  • 举报
回复
在ADOquery1的PostError事件中﹕

procedure TForm1.ADOquery1PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
Action:=daAbort;
end;

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧