使用搜索值中的单引号查找Delphi XE2 TADO异常

时间:2011-11-15 20:58:08

标签: delphi delphi-xe

使用MS SQL 2008 R2(sp 2)或MS SQL 2005(sp4)在Delphi XE2(update2)上遇到问题。
form1.ado_m是通过TADO数据集进行的,没有使用native 64 sql进行参数检查

var
  okd:boolean;
  dd:ansistring;

代码段:

okd:=form1.ado_m.Locate('abcrow',dd,[loCaseInsensitive]); 

如果dd的值以单引号结尾(在调试器中转换为''),则会出现异常:

  

异常类EOleException,消息'参数类型错误,超出可接受的范围,或彼此冲突'。

对我来说奇怪的是,单引号字符是var dd的中间,它工作正常。 解决办法:

1 个答案:

答案 0 :(得分:2)

问题是由搜索值中的数字符号(#)和引用引起的。

找到使用ADO find方法:Criteria中的值可以是字符串,浮点数或日期。字符串值以单引号“#”(数字符号)标记分隔(例如,“state ='WA'”或“state =#WA#”)

尝试通过插入记录来替换数字符号或引号字符。

另一个选择是使用OnFilterRecord和filtered属性:

  ...
  FSearchValue := 'A1020778014#;]_69BO''';  // private field in TForm1
  ado_m.Filtered := true;
  try
    okd := not ado_m.IsEmpty;
  finally
    ado_m.Filtered := false;
  end;
  ...

procedure TForm1.ado_mFilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin
  Accept := SameText(DataSet.FieldByName('abcrow').AsString, FSearchValue);
end;