您好我正在尝试进行一些异常处理并拦截重复的字段值(密钥冲突)错误。从我寻找解决方案我已经看到许多使用
捕获所有错误的建议try
(enter code)
except on E: EDatabaseError do
showmessage (Error message);
end;
但我想特别回应一个密钥违规,它使用ADO访问表。
答案 0 :(得分:7)
如果您想要处理的唯一错误是带有“重复值”消息的错误,这将有效:
try
// Your code
except
on E: EOleException do
begin
// The better way is to find out what E.ErrorCode is
// for this specific exception, and handle it instead
// of checking the string - you didn't provide the
// ErrorCode, though.
// If E.ErrorCode = <whatever> then
//
if Pos('duplicate value', E.Message) > 0 then
// You've got a duplicate with the message above
// Do whatever handles it
else
raise;
end;
// If you want to handle other exception types (eg., EDataBaseError),
// you can do so here:
// on E: EDataBaseError do
// HandleDBError;
end;
答案 1 :(得分:6)
EDatabaseError
只是一个通用的excption类,没有关于错误的其他信息,为了获得有关ADO中错误的扩展信息,必须使用TADOConnection.Errors
属性来获取特定的错误代码。引发Key violation
异常,对此Number
和NativeError
属性进行检查。
您可以在此处找到有关此主题的更多文档
答案 2 :(得分:3)
根据你的描述,这听起来不像你应该得到的异常。特别是如果你只需要EOleException
。例外情况应该是你没有好办法处理的事情,而这种情况并非如此。
我建议您在尝试添加新记录之前检查新ID是否尚未使用。或者,正如@TLama建议的那样,利用数据库框架的任何错误处理工具,可以在它成为异常之前将其挂钩。