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
相关产品推荐
相关产品推荐

