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

7thstar 2003-06-14 04:41:19
如题,DELPHI版本是6.0,数据库是Oracle8I,因为我在数据表里设了一个字段为唯一性,所以在插入一条新记录的时候如果表里的记录的字段已经有了这个数据,Oracle就会出错,提示违反唯一性,请问我在DELPHI中怎么捕捉它?高手救我
...全文
105 8 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
高手进来阿
Oracle2: 1. 《Oracle8 优化技术》摘录 (第一章 安装) 2. 《Oracle8 优化技术》摘录 (第二章 内存-CPU) 3. 《Oracle8 优化技术》摘录 (第三章 输入-输出) 4. EXP、IMP 命令详解 5. Oracle Index 的三个问题 6. Oracle PL-SQL语言基础 7. Oracle的分布式管理 8. ORACLE的数据类型 9. Oracle数据库碎片整理 10.ORACLE性能调整1 11.ORACLE性能调整2 12.Oracle专家调优秘密 13.PL_SQL单行函数和组函数详解 14.PL-SQL 15.PLSQL异常处理初步 16.SQL语句性能调整原则 17.创建和使用分区的表 18.基于成本的优化器一般错误概念和问题 19.Delphi 3_0中连接数据库的三种方式 20.远程数据库的访问 21.监控数据库性能的SQL 22.简单实现数据库表空间的备份或迁移 23.简析REDO LOGFILE 24.理解和使用Oracle 8i分析工具-LogMiner 25.哪些初始化参数最影响Oracle系统性能 26.你的SQL语句在什么情况下使用全表扫描? 27.如何对CLOB行字段执行全文检索 28.如何让你的SQL运行得更快 29.如何使‘CREATE TABLE AS SELECT’能支持ORDER BY 30.删除表内重复记录的方法 31.数据库安全性策略 32.数据库的查询优化技术. 33.提高C-S系统性能的一些方法 34.提高ORACLE数据库系统import性能 35.外部联接的用法 36.性能调试的一般问题 37.优化 38.优化调整Oracle 8i数据库(从操作系统) 39.在Internet上运作公司是一项艰苦的任务--关键任务 40.在oracle中限制返回结果集的大小 41.在远端如何建立standby数据库 42.怎样分析你的SQL语句的效率 43.自动备份Oracle数据库 44.总结SQL语句中的优化提示 45.使用Database Configuration Assistant安装第二个数据库 46.Oracle 数据库向 MS SQL Server 7.0 的迁移 Oracle1: 1. Decode()函数使用技巧(NT+IIS+ASP+ORACLE) 2. Dual伪列 3. EXP、IMP 命令详解 4. Exp-Imp大量数据 5. Export-Import 使用技巧与常见错误 6. NULL 使用详解 7. Oracle for NT系统实用工具介绍 8. Oracle 和 mysql 的一些简单命令对比参照 9. Oracle8i和Microsoft SQL Server7_0比较 10. Oracle8的不安全因素及几点说明 11. Oracle常见错误代码 12. Oracle常用Script 13. Oracle常用数据字典 14. ORACLE回滚段管理(上) 15. ORACLE回滚段管理(下) 16. Oracle基于Client-Server的性能调整 17. Oracle数据库的安全策略 18. ORACLE数据库简介 19. Oracle数据库密码文件的使用和维护 20. Oracle数据库碎片整理 21. Oracle特殊包 22. Oradim工具的用法 23. PB如何连接Oracle数据库 24. ROLLBACK不能回滚的命令 25. 安装Oracle后,经常使用的修改表空间的SQL代码 26. 比较SQL Server与Oracle、DB2 27. 多个数据库时,如何设置默认数据库 28. 各种数据类型的比较 29. 漫谈oracle中的空值 30. 没有备份、只有归档日志,如何恢复数据文件 31. 哪些初始化参数最影响Oracle系统性能 32. 如何查看数据库的字符集 33. 如何启动ARCHIVELOG模式 34. 如何使‘CREATE TABLE AS SELECT’能支持ORDER BY ? 35. 如何使用归

2,507

社区成员

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

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