直接用复杂的类型不行吗?系统自动会帮你作为流发送的:)

解决方案 »

  1.   

    做过一个这样的例子.步骤如下:
    1.将服务器端对应datasetprovider的options的fetchblobondemand选项设为true,因为false情况下,客户端的clientdataset是不取blob数据的.或者在 false情况下用clientdataset的fetchblob方法取得数据库中的数据.
    2.源程序如下(win2000/delphi/ocracle)
    procedure writetoblobfield;
    var
      tfStream:TFileStream;
      tbStream:TBlobStream;
      nbufsize:integer;
      pbuf:PChar;
    begin
      With clientdataset1 do
      begin
        if Active = false then
          Active := true;
        Append;
        try
          tfStream:=TFileStream.Create(FilePath,fmOpenRead);
          nbufsize:=tfStream.Size +1;
          pbuf:=AllocMem(nbufsize);
          tfStream.Read(pbuf^,nbufsize);
          tbStream:=TBlobStream.Create((fieldbyname('TestImage') as TBlobField),bmWrite);
          tbStream.Seek(0,SoFromBeginning);
          tbStream.Write(pbuf^,nbufsize);
        finally
          tfStream.Free ;
          tbStream.Free ;
          post;
          FreeMem(pbuf,nbufsize);
          Active:=False;
        end;
      end;
    end;procedure savetoclient;
    var
      filebody:tstream;
      tempfile:tmemostream;
    begin
      try
       filebody:=clientdataset.createblobstream(Tblobfield,bmread);
       filebody.position:=0;
       tempfile:=tmemostream.create;
       tempfile.loadfromstream(filebody);
       tempfile.savetostream(文件名);
      finally
        tempfile.free;
        filebody.frdd;
      end;
    end;
    end;