TBlobField(ClientDataSet1.FieldByName('Data')).SaveToFile('xxxx.xxx')不行吗?

解决方案 »

  1.   

    (Query2.FieldByName('Name') as TBlobField).SaveToStream(MyStream);
      

  2.   

    MIDAS在使用ClientDataset的BlobField时会有些问题,不要用它去获得数据.
    在服务程序的TypeLibrary中为服务接口加一个方法,返回值为Varaint;
    function MySvr.GetBlob:OleVariant;
    var
      PtrData: PByte;
      DataLen: Integer;
      BlobStream:TBlobStream;
    begin
      BlobStream := TBlobStream.Create(FieldByName('blob_value') as TBlobField, bmRead);
      DataLen := BlobStream.Size;
      Result := VarArrayCreate([0,DataLen-1],varByte);
      PtrData := VarArrayLock(Result);
      BlobStream.Position := 0;
      BlobStream.Read(PtrData^,DataLen);
      VarArrayUnlock(Result);
      BlobStream.Free;
    end;客户端:
    var
      VtData:OleVariant;
      PtrData:PByte;
      MemStream:TMemoryStream;
      DataLen:Integer
    begin
      VtData :=DCOMConnection1.AppServer.GetBlob;
      DataLen := VarArrayHighBound(VtData,1)+1;
      MemStream := TMemoryStream;
      PtrData := VarArrayLock(VtData);
      MemStream.Write(PtrData^, DataLen);
      VarArrayUnLock(VtData);
      MemStream.Position := 0 ;
      //此时数据就在MemStream中.
      ...
    end;此外,我觉得你应该用OleContainer.SaveToStream把数据存到数据库中,这样就可以用OleContainer.LoadFromStream直接读取数据,不需要文件了.不过我没试过直接把文件存进去能不能用OleContainer.LoadFromStream直接读取,你可以试试