如果我为不存在的参数调用ParamByName会发生什么?
-
28-10-2019 - |
题
我对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)属性编辑器并更新这些值来更改它。
添加新参数不会更改查询。你得自己做。
不隶属于 StackOverflow