用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;