在传送值为中文的参数给应用服务程序中ADOQuery时,中文只传出去一半,非要加上该中文长度数的空格,但是如果ADOQuery的SQL语句不是select而改为insert时插入的中文记录是正常的,哪位有遇到这样的问题,请问是怎么解决的?   

解决方案 »

  1.   

    如:
    datamodule1.ClientDataSet11.close;
    datamodule1.clientdataset11.Params.parambyname('unm').asstring:='徐超';
    datamodule1.clientdataset11.execute;在数据库中只存一个徐字,而超字则没有了。这是为什么?
      

  2.   

    unm 字段的类型是怎么定义的?
      

  3.   

    我在SQL SERVER定义这个变量的字段为nvarchar的
      

  4.   

    不要用Params参数,有bug,sql语句用字符串变量组合;
      

  5.   

    原来我在本地用param也碰过中文词只有一半,后面加了内存就好了
      

  6.   

    不要用参数,sql可以这样写:
    var
      s: string;
    beging
      s := '抗震救灾,支援汶川';
      adoquery.close;
      adoquery.sql.text := 'insert table1 (field1,field2) values (1,''' + s + ''')';
      adoquery.execsql;
    end;
      

  7.   

    VarDataSize函数,下面是它的代码:  function VarDataSize(const Value: OleVariant): Integer;
      begin
       if VarIsNull(Value) then
        Result := -1
       else if VarIsArray(Value) then
        Result := VarArrayHighBound(Value, 1) + 1
       else if TVarData(Value).VType = varOleStr then
        begin
         Result := Length(PWideString(@TVarData(Value).VOleStr)^); //出问题的行
         if Result = 0 then
          Result := -1;
        end
       else
        Result := SizeOf(OleVariant);
      end;  就是在这个函数中计算实参的长度的,它把Value中的值取出地址,并把它作为一个WideString的指针去求字符串长度,结果就导致了“会截断的中文字”这个字符串的长度变成了7,而不是14。  问题找到了,解决起来也就不困难了,只要简单的把
      Result := Length(PWideString(@TVarData(Value).VOleStr)^); //出问题的行
      改成
      Result := Length(PAnsiString(@TVarData(Value).VOleStr)^); //没问题了
      就可以了。  但是这样就会导致求英文字符串的长度时长度被加倍了,所以也可以把这一行改成:
      Result := Length(Value);   
      

  8.   

    用这个试试  clientdataset11.Params.ParamByName('unm').Value:='徐超';
    最好在服务端定义一个过程序,客户端调用远程过程.
      

  9.   

    datamodule1.ClientDataSet11.close; 
    datamodule1.clientdataset11.Params.parambyname('unm').asstring:='徐超'; 
    //加上下面这行
    datamodule1.clientdataset11.Params.parambyname('unm').size:=length('徐超'); 
    datamodule1.clientdataset11.execute;在数据库中只存一个徐字,而超字则没有了。这是为什么? 
      

  10.   

    delphi7的bug,按我上面的去改delphi的文件
      

  11.   

    用DataModule1.ClientDataSet1.CommandText属性试试