问题如标题。
我查了很多资料,都找不到解决办法,不知各位高手用什么方法来实现?

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
     fnole:string;
     function BlobContentTostring(const sfileName:string) :string;
     begin
       with TfileStream.Create(sFileName,fmOpenRead) do
       begin
          try
            setLength(Result,Size);
            Read(Pointer(Result)^,size);
          finally
            Free;
          end;
       end;
     end;
    begin
       if opendialog1.Execute then
       begin
          fnole:=opendialog1.FileName;
          clientdataset1.Edit;
          clientdataset1.FieldByName('BLOBDATA').AsString:=BlobContentTostring(fnOle);
          clientdataset1.Post;
          clientdataset1.ApplyUpdates(0);
       end;
    end;
      

  2.   

    写个大概
    从数据库里读出来
      TBlobField(fieldbyname(image) as TBlobField).SaveToFile(...)
      TBlobField(fieldbyname(image) as TBlobField).SaveToStream(...)
    往数据库里写
      Edit;
      TBlobField( FieldByName(UpFieldName) as TBlobField).LoadFromStream(Img);
      Post;
      

  3.   

    楼上的几种方式,效率会很低的。最好自已写 socket 代码来实现
      

  4.   

    function TMidasProxyInterfaceD.File2Variant(FileName: string): Variant;
      function Stream2Variant(Stream: TStream): Variant;
      var
        Buffer: Pointer;
      begin
        Stream.Seek(0, soFromBeginning);
        result := VarArrayCreate([0, Stream.Size - 1], varByte);
        Buffer := VarArrayLock(result);
        try
          Stream.ReadBuffer(Buffer^, Stream.Size);
        finally
          VarArrayUnlock(result);
        end;
      end;var
      Stream: TStream;
    begin
      Stream := TFileStream.Create(FileName, fmOpenRead);
      try
        result := Stream2Variant(Stream);
      finally
        Stream.Free;
      end;
    end;procedure TMidasProxyInterfaceD.Variant2File(V: Variant; FileName: string);
      procedure Varint2Stream(V: Variant; Stream: TStream);
      var
        Buffer: Pointer;
      begin
        Buffer := VarArrayLock(V);
        try
          Stream.Seek(0, soFromBeginning);
          Stream.WriteBuffer(Buffer^, VarArrayHighBound(V, 1) - VarArrayLowBound(V, 1) + 1);
        finally
          VarArrayUnlock(V);
        end;
      end; 
    var
      Stream: TStream;
    begin
      Stream := TFileStream.Create(FileName, fmCreate);
      try
        Varint2Stream(V, Stream);
      finally
        Stream.Free;
      end;
    end;function TMidasProxyInterfaceD.DownLoadFile(RemoteFileName: string; SaveToFilePath: string): boolean;
    var
      MidasProxySrvDisp: IMidasProxySrvDDisp;
      etFileOptSrvDisp: IetFileOptSrvDisp;
      OFStream: OleVariant;
    begin
      CheckSocketConnection();
      try
        MidasProxySrvDisp := IMidasProxySrvDDisp(IDispatch(FMidasProxyConnection.AppServer));
        etFileOptSrvDisp := IetFileOptSrvDisp(IDispatch(MidasProxySrvDisp.etFileInterface));
        try
          OFStream := etFileOptSrvDisp.DownFile(RemoteFileName);
          Variant2File(OFStream, SaveToFilePath);
          result := true;
        except
          result := false;
        end;
      finally
        etFileOptSrvDisp := nil;
        MidasProxySrvDisp := nil;
      end;
    end;function TMidasProxyInterfaceD.UpLoadFile(LocalFileName, SaveFileName: string): boolean;
    var
      MidasProxySrvDisp: IMidasProxySrvDDisp;
      etFileOptSrvDisp: IetFileOptSrvDisp;
    begin
      CheckSocketConnection();  try
        if not SysUtils.FileExists(LocalFileName) then begin
          result := false;
          Exit;
        end;    MidasProxySrvDisp := IMidasProxySrvDDisp(IDispatch(FMidasProxyConnection.AppServer));
        etFileOptSrvDisp := IetFileOptSrvDisp(IDispatch(MidasProxySrvDisp.etFileInterface));
        try
          if etFileOptSrvDisp.UpLoadFile(File2Variant(LocalFileName), SaveFileName) = '1' then
            result := true
          else
            result := false;
        except
          result := false;
        end;
      finally
        etFileOptSrvDisp := nil;
        MidasProxySrvDisp := nil;
      end;end;