在Delphi SQL参数中插入字段名称而不是字符串

时间:2017-03-13 17:00:45

标签: sql delphi parameters

我在delphi中编写了一个带有参数

的SQL查询
WHERE L1.IdListino = :IdListino

基于用户的一些输入,我希望此参数是表单的字段(tParsIdListinoExport是字段的名称),或者是另一个表的列(类似于WHERE L1.IdListino = fat.IdListino) )。

if tParsIdListinoExport.AsString <> '' then
        qSel.ParamByName( 'IdListino' ).AsString := tParsIdListinoExport.AsString
    else
        qSel.ParamByName( 'IdListino' ).Value := 'fat.IdListino';
end;

可悲的是,看起来我无法插入列名作为参数,因为它在列的名称周围添加了'',因此将其视为纯文本。 是否可以从参数中删除''? 非常感谢,

的Fabio

2 个答案:

答案 0 :(得分:3)

您需要在运行时创建SQL指令,例如:

with qSel do
begin
    Close;
    SQL.Clear;
    SQL.Add(addYourSqlHere, without Where clause);
    if Condition1 then
        SQL.Add('where FIELD1 = :PARAM01')
    else
        SQL.Add('where FIELD2 = :PARAM01');
    ParamByName('PARAM01').Value := UserFilter;
end;

答案 1 :(得分:0)

您可以通过sql实现所需。细节有点依赖于RDBMS,但有点像

  

where(:param1 =&#39; use_field&#39; and:param2 = OtherTable.field)或         (:param1 =&#39; use_param&#39;和Table.field =:param3)

这假定TableOtherTable已加入。 它还假设Param1可以被多次提及 - 并非所有数据库都允许这样做。