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

ZEOSLIB与Delphi报错:关闭结果集前需关闭所有LOB流的解决咨询

解决方案:显式关闭Blob流以避免PostgreSQL LOB报错

问题根源在于你的代码创建Blob流后未显式关闭:CreateBlobStream返回的TBlobStream对象被直接传入LoadFromStream,使用后没有被关闭,导致PostgreSQL的LOB流在ResultSet关闭前仍处于打开状态,触发了“close all lob streams before closing the resultset”错误。

ZEOSLIB的TBlobStream继承自Delphi标准TStream,具备Close方法,你需要通过以下方式确保流被正确关闭:

修改后的代码示例

var
  BlobStream: TStream;
begin
  BlobStream := Datamod.tblChargeCodesgraphic.DataSet.CreateBlobStream(Datamod.tblChargeCodesgraphic, bmRead);
  try
    DBtns[DCounter].Glyph.LoadFromStream(BlobStream);
  finally
    BlobStream.Close;
    BlobStream.Free; // 释放流对象内存
  end;
end;

关键说明

  • 单独声明TStream变量接收CreateBlobStream的返回值,避免嵌套调用导致无法引用流对象。
  • 使用try...finally块,确保无论LoadFromStream执行是否成功,流都会被关闭并释放,彻底避免资源泄漏。
  • ZConnect.CancelOperation用于取消正在执行的数据库查询操作,并非关闭LOB流的工具,因此对你的问题无效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:18:11