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

