请问在Delphi里怎么捕捉Oracle的异常?在线等待

7thstar 2003-06-14 04:41:19
如题,DELPHI版本是6.0,数据库是Oracle8I,因为我在数据表里设了一个字段为唯一性,所以在插入一条新记录的时候如果表里的记录的字段已经有了这个数据,Oracle就会出错,提示违反唯一性,请问我在DELPHI中怎么捕捉它?高手救我
...全文
82 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
things 2003-06-15
  • 打赏
  • 举报
回复
insert.click
--------
beging
with query1 do
begin
insert;
try
FieldByName('code').asString := edit1.text;
FieldByName('name').asString := edit2.text;
except
ShowMessage('数据类型错误!');
Raise;
end;
ApplyUpdates;
CommitUpdates;
except
CancelUpdates;
end;
end;

Query1的OnUpdateError事件
-----------
begin
if Copy(E.Message, Pos('ORA', E.Message), 9) = 'ORA-00001' then
ShowMessage('主键冲突!')
else ShowMessage(E.Message);
end;
zhang21cnboy 2003-06-14
  • 打赏
  • 举报
回复
去查异常手册,使用主键冲突异常就可以搞定了!
fanshousu 2003-06-14
  • 打赏
  • 举报
回复

如果是直接连接到数据库中的,你可以直接将记录添加进去,如果有重复的话,那么程序将会发生异常,在Delphi中捕住这个异常即可(不要理会oracle的异常提示)
代码:
With DataSet1 do
begin
append;
fieldbyname('field1').value := edit1.text;
......
try
post
except
ShowMessage('Exception!');
DataSet1.cancle;
end;
end;

如果是多层结构的话,那么会麻烦一点;需要增加一个错误处理单元在拥有数据集的窗体中;幸运的是,我们不需要自己编写这个错误的单元,Delphi自己已经带有了
在new->Dialogs->RecoCile Error Dialog
当然,你需要在TClientDataSet的TimeReconcileError事件中加入如下代码:
Action := HandleReconcileError(DataSet,UpdateKind,E);
7thstar 2003-06-14
  • 打赏
  • 举报
回复
MM呀,黄花菜都等凉了
7thstar 2003-06-14
  • 打赏
  • 举报
回复
高手赶快救命阿
7thstar 2003-06-14
  • 打赏
  • 举报
回复
晕,这种方法我早就知道,也不打算采用,试想一下如果数据库里有几十万条记录这种效率,在试想一下在你查询完以后准备输入的时候,这时候有并发用户那个字段准备输入同样的记录这个时候怎么办?
wooden954 2003-06-14
  • 打赏
  • 举报
回复
在插入前判断一下有没有这个字段相同的值不就行了?
7thstar 2003-06-14
  • 打赏
  • 举报
回复
高手进来阿

2,507

社区成员

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

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