Delphi SQL查询参数
这很好:Delphi SQL查询参数,delphi,Delphi,这很好: Query = 'SELECT * from table_1 where code = :value; '; 但是,我尝试使用LIKE语句,它表示在本例中找不到参数值: Query = 'SELECT * from table_1 where code LIKE ''%:value;%'''; Param := ADOQuery1.Parameters.ParamByName('value'); Param.DataType := ftString; Param.Value :=
Query = 'SELECT * from table_1 where code = :value; ';
但是,我尝试使用LIKE语句,它表示在本例中找不到参数值:
Query = 'SELECT * from table_1 where code LIKE ''%:value;%''';
Param := ADOQuery1.Parameters.ParamByName('value');
Param.DataType := ftString;
Param.Value := 'bob';
我想使用反斜杠来忽略引号,因为它在大多数语言中都有效,但在Delphi中似乎不起作用。参数会自动将引号放在字符串周围。因此,不能在SQL查询中包含此类引号。因此,您也无法在查询中传递
%
语法
相反,将您的语句保留为原始语句(将=
替换为LIKE
),并将%
传递给实际值
Query = 'SELECT * from table_1 where code LIKE :value';
Param := ADOQuery1.Parameters.ParamByName('value');
Param.DataType := ftString;
Param.Value := '%bob%';
另一方面,这段代码有点优雅
ADOQuery1.Parameters.ParamValues['value']:= '%bob%';
不用说,这是一根绳子。它将自动检测。参数会自动为您在字符串周围加引号。因此,不能在SQL查询中包含此类引号。因此,您也无法在查询中传递
%
语法
相反,将您的语句保留为原始语句(将=
替换为LIKE
),并将%
传递给实际值
Query = 'SELECT * from table_1 where code LIKE :value';
Param := ADOQuery1.Parameters.ParamByName('value');
Param.DataType := ftString;
Param.Value := '%bob%';
另一方面,这段代码有点优雅
ADOQuery1.Parameters.ParamValues['value']:= '%bob%';
不用说,这是一根绳子。它将自动检测。“无需告诉它它是一个字符串(
Param.DataType
)。它将自动检测。”
总的来说,这是真的。
实际上,它取决于一些t连接
属性,例如.ParamCreate
,.ResourceOptions.AssignedValue.rvParamCreate
,.ResourceOptions.AssignedValue.rvDefaultParamType=false
,以及defaultParamDataType
。如果这些属性没有改变,那么
它将自动检测到
所以在某些情况下,这是明确的 “不需要告诉它它是一个字符串(Param.DataType)。它会自动检测到。”
总的来说,这是真的。
实际上,它取决于一些t连接
属性,例如.ParamCreate
,.ResourceOptions.AssignedValue.rvParamCreate
,.ResourceOptions.AssignedValue.rvDefaultParamType=false
,以及defaultParamDataType
。如果这些属性没有改变,那么
它将自动检测到
所以在某些情况下,这是明确的 如果删除
,会发生什么代码>从值开始?很确定这就是为什么要扔它。我甚至认为这不是有效的SQL语法。事实上,我明白你的问题。不能在参数周围使用引号,但同时需要在其中使用%
。相反,将%
包含在传递给参数的实际值中,而不是包含在语句中。这很有效!感谢哪一部分起作用了?第二部分(在您编辑之后)我基本上包括了带有“bob”的%
。@jerrydoge fyi
是ANSI SQL标准中的语句终止符。然而,在微软的TSQL中,它通常是可选的。我最需要它的地方是在使用非常强大的CTE时。以至于我习惯于在它们前面加上
以确保终止先前可能存在的任何语句。例如,;使用CteAlias AS(选择…)
如果删除,会发生什么代码>从值开始?很确定这就是为什么要扔它。我甚至认为这不是有效的SQL语法。事实上,我明白你的问题。不能在参数周围使用引号,但同时需要在其中使用%
。相反,将%
包含在传递给参数的实际值中,而不是包含在语句中。这很有效!感谢哪一部分起作用了?第二部分(在您编辑之后)我基本上包括了带有“bob”的%
。@jerrydoge fyi
是ANSI SQL标准中的语句终止符。然而,在微软的TSQL中,它通常是可选的。我最需要它的地方是在使用非常强大的CTE时。以至于我习惯于在它们前面加上
以确保终止先前可能存在的任何语句。例如,;将CteAlias设置为(选择…)。