使用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的中间,它工作正常。 解决办法:
答案 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;