mysql - Delphi查找异常的具体原因

标签 mysql delphi exception delphi-2010

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

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

最佳答案

如果您使用的是 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

关于mysql - Delphi查找异常的具体原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10229186/

相关文章:

c# - 通过 SOAP 发送二进制流

delphi - Delphi Web脚本:如何调试特定的脚本功能

mysql - 按 user_id 分组的 SQL 查询,只获取最近的(按时间),返回有限的对象

delphi - 自定义将 Delphi TStringList 名称/值对排序为整数

c# - 异常处理。捕获需要多长时间?

C# 可以在不捕获的情况下检查异常吗?

java - 从 Java 中的 finally block 返回

mysql - 有没有办法提高 mysql 事件执行的性能?

php - Symfony 5 如何在具有多对多关系的更新中自动发送当前用户

接受参数中具有多个值的字符串的MySQL存储过程