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

FireDAC报错EFDEException:执行代码时提示‘连接必须处于活动状态’

问题解决:FireDAC "Connection [] must be active" 异常

核心原因

  1. 连接初始化时机不对:FormCreate是窗体创建的早期阶段,此时FDConnection组件可能还未完成初始化激活,直接触发查询会找不到可用连接。
  2. 查询未关联连接:FDQ1的Connection属性未正确绑定到已配置的FDConnection组件,导致执行SQL时无可用连接。
  3. 控件触发时机过早:FormCreate中直接调用BitBtnGeral.Click,控件的内部状态可能还未完全就绪。

解决方案

1. 确保查询绑定正确的连接

  • 设计时操作:选中FDQ1,在Object Inspector里找到Connection属性,选择你的FDConnection组件(比如FDConnection1)。
  • 或代码中提前绑定(可在FormCreate里添加):
procedure TTESTE.FormCreate(Sender: TObject);
begin
  FDQ1.Connection := FDConnection1;
  FFormShown := False;
end;

2. 执行查询前手动确保连接激活

修改Button1Click方法,先检查并激活连接,再执行SQL:

procedure TTESTE.Button1Click(Sender: TObject);
begin
  if VarBtnGeral then
  begin
    // 强制激活连接(如果未激活)
    if not FDConnection1.Connected then
      FDConnection1.Connected := True;
      
    FDQ1.Active := False;
    FDQ1.SQL.Clear;
    FDQ1.SQL.Add('SELECT * FROM BOBINAPESADA');
    FDQ1.Active := True;
  end;
end;

3. 调整查询触发时机

把BitBtnGeral.Click从FormCreate移到FormShow事件,确保窗体和控件完全初始化后再执行:
首先在类声明里添加私有字段:

private
  FFormShown: Boolean;

然后实现FormShow:

procedure TTESTE.FormShow(Sender: TObject);
begin
  // 只执行一次
  if not FFormShown then
  begin
    FFormShown := True;
    BitBtnGeral.Click;
  end;
end;

4. 检查连接配置

  • 确认FDConnection1的DriverName、数据库地址、用户名密码等Params配置正确,可通过设计时的"Test Connection"验证。
  • 排查是否有其他代码在查询执行前意外关闭了连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:55:09