9

我对 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'
4

3 回答 3

8

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

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

我假设您没有混淆SelectCosts参考(在DM_HRV而不是其他 DM 中)。

于 2012-01-16T12:50:06.403 回答
5

您帖子中的以下语句没有添加参数,它设置了它的值:

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 中对其进行更改。

于 2012-01-16T13:26:21.363 回答
0

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

于 2012-01-16T12:34:30.530 回答