我的代码如下:
var sqlstr,inputstr:string;
begin  
  sqlstr:= 'update A4S_GeneralCustomerInfo set Address=:Address where ID = 15868 ';     
  inputstr:='按时行政村按时地方asdf';
  clientdataset1.Close;
  clientdataset1.CommandText:=sqlstr;
  clientdataset1.Params.ParamByName('Address').AsString:= inputstr;
  clientdataset1.Execute;
end;
为什么数据库中'Address'数值只是inputstr 的一部分?(另如果 inputstr 全为英文就可全部修改!)

解决方案 »

  1.   

    就是数据库中 Address 字段的值写入不完全!
      

  2.   

    inputstr:='按时行政村按时地方asdf';
    sqlstr:= 'update A4S_GeneralCustomerInfo set Address='''+inputstr+''' where ID = 15868 ';     
    clientdataset1.Close;
    clientdataset1.CommandText:=sqlstr;
    clientdataset1.Execute;
      

  3.   

    这种方法是可以,但和我的要求不同啊!
    这个inputstr里面有可能会有’'‘(也即单引号),会破坏sql语句
      

  4.   

    这是Delphi中由来已久的一个bug,在D6、D7中都存在(至于D5则忘记了,D4以上版本无从考证),具体而言就是三层架构中传参时中文被截断的问题。
    解决办法:  修改Delphi目录下  的Source\Vcl\ADODB.pas文件如下,然后重新编译,用新编译的ADODB.dcu替换原来的dcu文件。
    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)^); 此处为源代码
        Result := Length(Value); //此处为修改后代码
        if Result = 0 then
          Result := -1;
      end
      else
        Result := SizeOf(OleVariant);
    end;
      

  5.   

    好象还是有点问题,我重编译了,是不是覆盖LIB里的文件呀!