我对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'
有帮助吗?

解决方案

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

如果SQL语句不包含此额外参数 part, ,赋值时会引发异常 ParamByName('part').Value := 1.

我想你没有混淆 SelectCosts 参考(这是在 DM_HRV 而不是其他DM)。

其他提示

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

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);

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top