我想将图片保存到数据库,
  TBlobField(ADODataSet1.FieldbyName('FJpg')).LoadFromStream(MS);
但在传输过程中,我想将TMemoryStream转换成string,然后再将string 转换成TMemoryStream (需要)

解决方案 »

  1.   


    试一下 TSTRINGSTREAM  
      

  2.   

    function StreamToText(Stream:TMemoryStream):String;
    var
       tls:TStringList;
    begin
       Result:='';
       tls:=TStringList.Create;
       try
          tls.LoadFromStream(Stream);
          Result:=tls.Text;
       finally
          tls.Free;
       end;
    end;procedure TextToStream(const Text:String;var Stream:TMemoryStream);
    var
       tls:TStringList;
    begin
       Result:='';
       tls:=TStringList.Create;
       try
          tls.Text:=Text;
          tls.SaveToStream(Stream);
       finally
          tls.Free;
       end;
    end;
      

  3.   

    procedure TextToStream(const Text:String;var Stream:TMemoryStream);
    var
       tls:TStringList;
    begin
       tls:=TStringList.Create;
       try
          tls.Text:=Text;
          tls.SaveToStream(Stream);
       finally
          tls.Free;
       end;
    end;
      

  4.   

    to:unsigned(僵哥(送人以鱼,不如授人渔;授人以渔,不如渔人之鱼)) 
    用这些方法会失真吧,造成数据不完整,我试过了,保存后图片不正确。
      

  5.   

    图片为什么要用String来存储?有没搞错?图片内容当中有#0,的比特流,如果转成String不是早被截断了?要知道String以是#0来后断符的。
    楼主最好还是说清楚想要做什么。
      

  6.   

    unsigned(僵哥(送人以鱼,不如授人渔;授人以渔,不如渔人之鱼)) :
    MSComm控件有个Input和Output,他们接受的是OleVariantl类型,可以对其付string,但不能付Tstream,请问有什么办法?
      

  7.   

    能不能将TStream转换成字节(16进制)
      

  8.   

    MSComm怎么使用我不清楚,不过无外呼得到一个接收信息的长度,然后再写入到一个Byte Array,然后再处理就好了,使用String是不合理的,它要求的是可控长度的数组,那样才不至于数据丢失。Stream其实也可以看做是一个Byte数组。只是集成了多种方便使用的方法。
      

  9.   

    TStringStream 就是你要的,很简单
    >>MSComm控件有个Input和Output,
    MsComm 一般我自己写一个循环,将Output的内容一位位读出来,如果你是十六进制的话
      

  10.   

    先不说你用法是否不妥..要转换很简单:var 
      ms:TMemoryStream;
      s:string;
    .....
      //流==>>串
      setlength(s,ms.size);
      ms.postion:=0;
      ms.read(pchar(s)^,ms.size));//串===>>流
     ms.postion:=0;
     ms.write(pchar(s)^,length(s));
      

  11.   

    var
      Buf: array of Byte;
    begin
      SetLength(Buf, Stream.Size);
      Stream.Position:=0;
      Stream.Read(Buf[0], Length(Buf));
      MSComm.Output:=Buf;
    end.
      

  12.   

    用我上面的代码试试,不要用string,string赋值给olevariant后会变成OLE BSTR,这可能就是你所说的“失真”的原因。