You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 10.3中使用FireDAC组件捕获Firebird错误码的方法

FireDAC 对接 Firebird 时捕获指定错误码的实现方法

你在 Delphi 10.3 + FireDAC 环境下可以按以下方式实现和 FIBPlus 完全等效的错误拦截逻辑:

  • FireDAC 中所有数据库引擎抛出的原生错误统一封装为 EFDDBEngineException 类,对应你之前使用的 EFIBError,Firebird 返回的原生GDS错误码(就是你代码里用的335544347这类数值)存放在该类的 Errors 错误集合中。
  • 注意不要直接读取 EFDDBEngineException 顶层的 ErrorCode 属性,该值是FireDAC自身定义的通用错误码,不是Firebird原生错误码,必须遍历Errors集合下每个TFDError对象的ErrorCode,才能拿到和FIBPlus中IBErrorCode完全一致的原生错误码。

1. 直接在try...except块中捕获(和原有FIBPlus写法逻辑最接近)

首先在代码单元引用部分加入必要单元:

uses
  FireDAC.Stan.Error, FireDAC.Phys.FB;

错误拦截代码写法如下:

try
  // 此处写你的FireDAC数据库操作代码,比如执行SQL、打开数据集等
  FDQuery1.ExecSQL;
except
  on E: EFDDBEngineException do
  begin
    var i: Integer;
    for i := 0 to E.ErrorCount - 1 do
    begin
      case E.Errors[i].ErrorCode of
        // 匹配Firebird原生错误码,和FIBPlus的IBErrorCode取值完全一致
        335544347:
          begin
            scMessageDlg('Field NAME is Null', mtError, [mbOk], 0);
            Break;
          end;
        // 其余错误码分支可按需求继续扩展
      end;
    end;
    // 等效原有daAbort逻辑,终止流程且不弹出默认错误提示
    Abort;
  end;
end;

如果不想硬编码数字错误码,可以直接用FireDAC封装好的Firebird错误常量,命名规则和原生InterBase/Firebird常量完全一致,比如335544347对应的常量就是isc_not_null,直接替换数字即可,代码可读性更高。

2. 用组件OnError事件全局拦截(无需重复写try...except)

你可以直接给TFDConnection、TFDQuery等FireDAC组件绑定OnError事件,在事件里统一处理错误,不需要在每个数据库操作位置写异常捕获:

procedure TForm1.FDConnection1Error(ASender: TObject;
  const AInitiator: IFDStanObject; AError: Exception;
  var AAction: TFDErrorAction);
var
  i: Integer;
  oFDErr: EFDDBEngineException;
begin
  if not (AError is EFDDBEngineException) then Exit;
  oFDErr := EFDDBEngineException(AError);
  for i := 0 to oFDErr.ErrorCount - 1 do
  begin
    case oFDErr.Errors[i].ErrorCode of
      335544347:
        begin
          scMessageDlg('Field NAME is Null', mtError, [mbOk], 0);
          // 设置为eaAbort即等效原有daAbort,拦截默认错误提示弹出
          AAction := eaAbort;
          Break;
        end;
    end;
  end;
end;

如果需要获取错误的原始描述文本,直接读取TFDError.Message属性即可,和FIBPlus的错误消息取值完全一致。

内容的提问来源于stack exchange,提问作者user2683734

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 05:48:20