【发布时间】:2012-04-19 13:32:03
【问题描述】:
我有一个连接数据库的应用程序。
使用 BDE 组件和数据库连接的是 MySQL。
现在我正在做一些验证,以检查执行插入语句时是否重复条目。
以下是检查主键属性是否重复条目的代码。
var
error :string;
cmpres:integer;
begin
...
/* all my data queries */
try
Query1.ExecSQL;
Except
on E: Exception do
/*check if its a Duplicate entry or other exception*/
begin
error := E.Message;
error := copy(error,length(error)-16,length(error)-2);
cmpres :=CompareStr(LowerCase(error),'for key '+#39+'primary'+#39) ;
if cmpres = 0 then
MessageDlg('Entry already exist',mtError,[mbok],0)
else
MessageDlg('Invalid Data Entries',mtError,[mbok],0);
exit;
end;
end;
end;
数据库异常大体上放在EDatabaseError里面
谁能告诉我有什么方法可以在不进行消息比较的情况下区分这些错误。
提前致谢
【问题讨论】:
-
调试器告诉你什么?
-
@DavidHeffernan 调试器给我这个错误消息
error 'Key violation.'#$D#$A'[MySQL][ODBC 5.1 Driver][mysqld-5.5.11]Duplicate entry ''64'' for key ''PRIMARY'''' -
不,我的意思是 class 是什么错误,该类为您提供了哪些属性。
-
TQuery有OnPostError事件,您应该在其中捕获异常。我知道这里有人建议比较此错误消息文本,但这样做的方法是错误的。我无法想象是否有人会翻译这些信息。看看例如在this article,它不仅与ADO相关,您也可以将技术修改为BDE。 -
@Shirish11 阅读这篇文章。它充满了代码。
标签: mysql delphi exception delphi-2010