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

Delphi/FireDAC/SQL环境下,无MARS时如何以RAD方式管理多数据库连接?

关于PostgreSQL替代SQL Server MARS的RAD Studio多连接方案疑问

我有一套成熟的业务程序,后端基于SQL Server,通过连接字符串中的MARS实现同一连接上的多查询并发,运行稳定。现在计划适配PostgreSQL,但PostgreSQL不支持MARS,会触发"Connection is busy with results for another command"错误——无MARS机制时,同一连接无法同时打开两个查询,除非先获取某查询的所有记录。

编程式场景下可以按如下流程处理:

var Connection:=TFDConnection.Create;
var Query1:=TFDQuery.Create;
Query1.Connection:=Connection;
Query1.SQL.Text:='SELECT * FROM MASTER'
Query1.Open;
Query1.FetchAll;  <----- *必须调用*

var Query2:=TFDQuery.Create;
Query2.Connection:=Connection;
Query2.SQL.Text:='SELECT * FROM DETAIL';
Query2.Open;

Query2.Free;
Query1.Free;
Connection.Free;

但在RAD开发场景中(单表单包含10+活动查询、多表单同时打开),我的思路是:

  • 为每个表单单独建立连接,同时将所有查询的FetchMode设为all,但这样会丢失按需获取数据的优势
  • 若表单内存在大数据量查询(比如客户历史订单)需要按需获取,则为这类查询单独建立连接

这种方式逻辑上可行,但需要严格配置否则容易出错。我查阅了RAD Studio默认设置、FireDAC示例及相关资料,均未提及这种多连接使用方式,仅提到线程级单独连接。想确认:我的思路是否正确?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 11:12:35