数据库:SQL SERVER 2000
连接:ADO
例句:
  with ClientDataSet do
  begin
    CommandText:='SELECT * FROM ATable WHERE AField=:AParamName';
    ParamByName('AParamName').AsString='中文字符串';
    Open;
  end;
上述语句,虽然数据库中有符合条件的记录,但却 SELECT 不到。
如果换成英文字符串则可以。快救命啊! 多谢了。

解决方案 »

  1.   

    把参数直接写道sql中看看,是不是clientdataset的问题,如果还有问题的话,可能使ado的问题了。
      

  2.   

    直接写到 SQL 中是可以的。
      with ClientDataSet do
      begin
        CommandText:='SELECT * FROM ATable WHERE AField='+QuotedStr('中文字符串');
        Open;
      end;可要是这样,就不能利用参数化的优点了。
    这是 ParamByName 的 BUG 还是什么原因?
      

  3.   

    来自大富翁论坛的信息:
    来自:SnoopyChen, 时间:2002-10-30 20:15:00, ID:1403452 
    VCL Source: ADODB.pasfunction 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
    [red]  //Result := Length(PWideString(@TVarData(Value).VOleStr)^);
        Result := Length(String(Value));[/red]
        if Result = 0 then
          Result := -1;
      end
      else
        Result := SizeOf(OleVariant);
    end; 
      

  4.   

    我的实现:function ToCDSParamsString(s:string):string;
    var
      ws:WideString;
      i:Integer;
    begin
      ws:=s;
      for i:=1 to Length(ws) do
      begin
        if Ord(ws[i])>255 then
          s:=s+' ';
      end;
      Result:=s;
    end; ClientDataset.Params[0].value:=ToCDSParamsString(AString); 
    先用着吧