在3层系统中,我要传一个很大的字符串(widestring)(不传流)给服务端,可行吗,数据会丢失吗?
如传送XMLDocument1.XML.text!!

解决方案 »

  1.   

    可能会,最好将STRING类型的传入OLEVARIANT类型变量中,然后上传OLEVARIANT类型变量到中间层!!
      

  2.   

    widestring 效率低点啦, 不会出错用 Variant byte 数组也是一种办法, 不过代码看上去会怪怪的
      

  3.   


    Erice(白雪公猪):可以给个代码看看吗,即把widestring变成OLEVARIANT类型
      

  4.   


    你们可以给个代码看看吗,即把widestring变成OLEVARIANT类型,到了服务端然后在转化为widestring
      

  5.   

    var
     v:olevariant;
     s:string;
     i:integer;
    begin
     s:=memo1.Lines.Text;
     i:=length(s);
     showmessage(s[1]);
     v:=VarArrayCreate([0,i],varByte);
     for i :=1  to length(s)-1 do
       v[i-1]:=ord(s[i]);
    end;
      

  6.   

    var
     v:olevariant;
     s:string;
     i:integer;
    begin
     s:=memo1.Lines.Text;
     i:=length(s);
     v:=VarArrayCreate([0,i-1],varByte);
     for i :=1  to length(s) do
       v[i-1]:=ord(s[i]);
    end;
      

  7.   

    to:dinglinger(红辣椒)
       怎样把olevariant变成string呢?
      

  8.   


    var
    v:olevariant;
    s:string;
    i,j:integer;
    begin
    //---------------------------
    //    string--->variant
    //---------------------------
     s:=memo1.Lines.Text;
     i:=length(s);
     v:=VarArrayCreate([0,i-1],varByte);
     for i :=1 to length(s) do
      v[i-1]:=ord(s[i]);//--------------------------
    //        variant--->string
    //--------------------------
     j:=VarArrayHighBound(v,1);
     setlength(s,j+1);
     for i :=0  to J do
      byte(s[i+1]):=byte(v[i]);
     memo1.Lines.Add('-----------------add new line:------------------------------');
     memo1.Lines.Add(s);end;
      

  9.   

    其实直接赋值就可以了,多定义一个变量让它内部来进行转换。    a: OleVariant;procedure TForm1.Button1Click(Sender: TObject);
    var
      b: WideString;
    begin
      b:=Memo1.Text ;
      a:=b;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      c: WideString;
    begin
      c:=a;
      Memo2.Text:=c;
    end;