delphi - 处理DbExpress SQL错误代码245

标签 delphi error-handling delphi-xe2 dbexpress

我正在尝试为我的中学考试构建一个调度程序应用程序,并且如果教师在某周,某天和某小时上课,我正在查询数据库。有没有一种方法可以使用DBExpress在Delphi Xe2中处理Sql错误代码?我在SQL Server2008上执行查询(我让用户选择参数),这就是问题所在;如果用户将一个参数字段留空,则我的应用程序在图像中显示该消息;好吧,这不是一种显示错误消息的用户友好方式,因此我尝试处理异常而没有成功:这是我编写的用于查询SQL Server的代码:

with DataModule1.QueryV1 do
 Try
    Close;
    SQL.Clear; // clear command sql if there is
    SQL.Add ('SELECT * FROM OrarC WHERE IDZi =' +
    QuotedStr(LlbZiua.KeyValue)+ 'and IDInterval=' + QuotedStr(LlbIntOrar.KeyValue) +
     'and IDSala='+ QuotedStr(EdtIDSala.Text)+ EdtSaptamana.Text);
    Open;
  except
    on E:TDBXError do begin
      showmessage('Error!');
    end;
  End;

在E:TDBXError上,我也尝试过E:EDataBaseError,结果是相同的;最好通过返回的SqlErrorCode处理错误,但我不知道该如何获取。

最佳答案

在调试器下运行程序,并观察引发的异常的实际类,或者可以在运行时通过以下方式获取异常类:

  ..
except on E: Exception do
  ShowMessage(E.ClassName);
end;

如果确实是TDBXError,则可以使用例如
uses
  dbxcommon;

except
  on E: TDBxError do begin
    if (E.ErrorCode = TDBXErrorCodes.InvalidArgument) then
      ..

但据我所知245不是TDBXErrorCodes之一,因此可能还有另一个异常。如果它是EDatabaseError,则没有什么可做的,因为该类没有错误代码字段。

不太相关,但还可以看到Data.DBXCommon.TDBXConnection.OnErrorEvent能够在中央位置管理dbexpress异常。

关于delphi - 处理DbExpress SQL错误代码245,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10647760/

相关文章:

WinForms float 窗口(如Delphi7 IDE)

C# 相当于 Python 中的 "value error"

vba - Access 2019 中的智能感知

delphi - 记录可以用作对象的属性吗?

delphi - 如何在 Delphi 选项对话框中添加我自己的项目

security - 安全地存储密码

Delphi 动态菜单项

algorithm - 德尔福的 LZMA

node.js - 如何使用异步等待处理同步错误?

delphi - 为什么 Str() 将 "W1057 Implicit string cast from ' ShortString' 给 'string' "?