如题,DELPHI版本是6.0,数据库是Oracle8I,因为我在数据表里设了一个字段为唯一性,所以在插入一条新记录的时候如果表里的记录的字段已经有了这个数据,Oracle就会出错,提示违反唯一性,请问我在DELPHI中怎么捕捉它?高手救我
解决方案 »
- 如何用DELPHI启动VC6,同时打开一个文件;换言之VC6提供哪些编程接口供我们去使用?
- 帮我找找问题原因
- 5.2,再为回到电脑前的兄弟们散分……
- Memo字段(Access)的字符串搜索问题?
- 谁能解决这个问题,我将‘以身向许’!!!
- 在delphi中有什麼辦法能把jpg圖片導入excel指定單元格中急。。。我只有這麼多了。。
- 如何通过DBNavigator的nbpost按钮增加记录!!!!
- 如何实现? up有分
- 不用Tcanvas,如果用API抓屏幕, 并保存在一TMemorystream中, 30大元!
- 报表打印的小问题!怎么判断用户按下的是 [确定]? 还是 [取消]?
- 关于数据库中表状态的问题!!!!在线等待!!!
- 各位请推荐一款给程序员用的手提电脑
如果是直接连接到数据库中的,你可以直接将记录添加进去,如果有重复的话,那么程序将会发生异常,在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);
--------
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;