如果我为不存在的参数调用ParamByName会发生什么?

时间:2012-01-16 12:31:57

标签: delphi parameterized-query

我是Delphi的新手,并收到了以下代码(遗漏了一些不相关的部分),我正试图了解它的作用:

object SelectCosts: TIBQuery
    SQL.Strings = (
      'SELECT * FROM costs '
      'WHERE code = :code')
    ParamData = <
      item
        DataType = ftUnknown
        Name = 'code'
        ParamType = ptUnknown
      end>
  end

在另一个文件中,使用该查询,但添加了查询中未定义的参数。

DM_HRV.SelectCosts.ParamByName('part').Value := 1;

此参数'part'是否会改变所做的选择?换句话说:SQL查询是自动更改为以下内容吗?

'SELECT * FROM costs '
  'WHERE code = :code'
  'AND part = :part'

3 个答案:

答案 0 :(得分:8)

这意味着可能在运行时更改SQL语句。因此,当使用该查询时,SQL已包含AND part = :part

如果SQL语句不包含此额外参数part,则在分配ParamByName('part').Value := 1时将引发异常。

我假设您没有混淆SelectCosts引用(位于DM_HRV而不是其他DM)。

答案 1 :(得分:4)

帖子中的以下语句未添加参数,它设置其值:

DM_HRV.SelectCosts.ParamByName('part').Value := 1;

要在运行时添加参数,请使用CreateParam,如下所示:

if DM_HRV.SelectCosts.Params.FindParam('Part') = nil then
   DM_HRV.SelectCosts.Params.createParam(ftString, 'Part', ptInput);

查询不会自动修改,您必须自己修改。

在您的第一个片段中,未定义ParamType和InputType,您可以通过访问参数列表(Params)属性编辑器在IDE中更改它,并更新这些值。

答案 2 :(得分:0)

添加新参数不会更改查询。你必须自己做。