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

如何在Delphi XE5中通过TFDQuery读取Access的TBlobField类型OLE字段

问题根因

TFDQuery默认开启了BLOB字段的分段读取配置,默认仅获取BLOB字段的前4KB数据,刚好对应你导出的文件大小;而TFDTable的默认配置会完整加载整行所有字段包括完整BLOB内容,所以不会出现截断问题。

解决方案

方案1:调整TFDQuery的BLOB读取配置

在打开查询之前,设置TFDQuery的FetchOptions属性,指定完整加载BLOB:

procedure TForm1.Button8Click(Sender: TObject);
var fx:TmemoryStream;   bl:TBlobField;
begin
    fx:=TMemoryStream.create;
    // 新增两行配置:关闭BLOB延迟加载,不限制读取大小
    query1.FetchOptions.Items := query1.FetchOptions.Items + [fiBlobs];
    query1.FetchOptions.BlobSize := -1;
    query1.open;

    bl:= TBlobField (query1.FieldByName('file')) ;
    
    bl.SaveToStream(fx);    
    fx.SaveToFile('c:\exportedfile.pdf');
    fx.free;
end;

方案2:全局配置生效

如果所有查询都需要读取完整OLE字段,可以直接在TFDConnection的连接参数里添加BlobSize=-1,不需要每个Query单独配置。

方案3:修正查询语句

file是Access的保留字,写查询语句时建议用方括号括起来,避免语法异常导致字段读取不全:

select id, firstname, name, [file] from 你的表名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:18:00