Delphi+Oracle+三层+ClientDataset无法存BLOB或Long Raw字段
用Delphi的Remote Data Module连接Oracle数据库,客户端用ClientDataset连到RDM程序,从BLOB读出存到本地没问题,但本地保存附件到BLob(后改为long raw字段类型也不行),用的Oracle提供的Oracle OLEDB Provider。
同样的操作,对MS SQL Server 2K同样的用法,一切正常。是不是Oracle OLEDB驱动的问题?还是Delphi的问题?如果用ADODataset直接连接Oracle(不通过远程数据模块)也能正常读写LOB字段,但这种方式需要在客户端安装Oracle客户端和网络组件所以不可取。请有相关问题经验的同仁给个主意。
代码:
var
FileST:TStream;
attST: TStream;
attField: TBlobField;
begin
OpenDialog1.Title := '选择要写到数据库的文件';
if OpenDialog1.Execute then
begin
FileST := TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
try
with ClientDataSet2 do
begin
if not Active then Open;
Append;
FieldByName('TITLE').Value := '某某文件';
FieldByName('CONTENTASTEXT').Value := '关于什么什么的内容';
attField := ClientDataSet2.FieldByName('CONTENTASFILE') As TBlobField;
attField.BlobType := ftOraBlob;
attST := ClientDataSet2.CreateBlobStream(attField,bmReadWrite);
try
attST.CopyFrom(FileST,FileST.Size);
Post;
ApplyUpdates(-1);
finally
FreeAndNil(attST);
end;
end;
finally
FreeAndNil(FileST);
end;
end;
end;