【问题标题】:Handling DbExpress Sql Error Code 245处理 DbExpress Sql 错误代码 245
【发布时间】:2012-05-18 06:27:57
【问题描述】:

我正在尝试为我的学期考试构建一个调度程序应用程序,并且我正在查询数据库,如果老师在某周、某天和某个小时有课。有没有办法使用 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 来处理错误,但我不知道如何得到它。

【问题讨论】:

  • 最好在查询中使用参数而不是文字字符串。也许您的一个字符串的值与您的预期不同。上面消息中的错误文本是什么?图片太小,我看不懂文字。

标签: delphi error-handling delphi-xe2 dbexpress


【解决方案1】:

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

  ..
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 异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多