0

我有一个连接数据库的应用程序。
使用 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

谁能告诉我有什么方法可以在不进行消息比较的情况下区分这些错误。
提前致谢

4

1 回答 1

1

如果您使用 BDE,则异常应该是 EDBEngineError,而不是 EDatabaseError。你可以这样做:

try
    Query1.ExecSQL;
except
    on E: EDBEngineError do
    begin
        for i := 0 to E.ErrorCount - 1 do
        begin
            err := E.Errors[i];
            case err.ErrorCode of
                ... stuff ...
            end;
        end
    end;
end
于 2012-04-19T13:48:58.287 回答