SQL查询参数

时间:2017-05-12 17:03:16

标签: delphi

这很好用:

Query  = 'SELECT * from table_1 where code = :value; ';

然而,我正在尝试使用LIKE语句,它说它无法找到参数VALUE在这种情况下:

Query = 'SELECT * from table_1 where code LIKE ''%:value;%''';

Param := ADOQuery1.Parameters.ParamByName('value');
Param.DataType := ftString;
Param.Value := 'bob';

我想使用反斜杠来忽略引号,因为它适用于大多数语言,但看起来它在Delphi中不起作用。

2 个答案:

答案 0 :(得分:5)

参数会自动为您提供字符串引号。因此,您不能在SQL查询中包含此类引号。因此,您也无法通过查询传递%F6语法。

相反,请将您的陈述保留为原始陈述(将%替换为=),然后将LIKE传递给实际值。

%

另一方面,这段代码更优雅......

Query = 'SELECT * from table_1 where code LIKE :value';
Param := ADOQuery1.Parameters.ParamByName('value');
Param.DataType := ftString;
Param.Value := '%bob%';

无需告诉它它是一个字符串。它会自动检测到。

答案 1 :(得分:1)

“无需告诉它它是一个字符串(Param.DataType)。它会自动检测到它。”

总的来说,这是事实。 实际上,它取决于某些TConnection属性,例如.ParamCreate.ResourceOptions.AssignedValue.rvParamCreate.ResourceOptions.AssignedValue.rvDefaultParamType=falsedefaultParamDataType。如果这些属性没有改变那么  会自动检测到

所以在某些情况下这是明确的。