我可以解释您所看到的行为,这不是错误。(顺便说一句,您的问题具有误导性。根据编辑和评论,您的实际问题是“Delphi 7 将 Parameter.Value.Type 从整数更改为短整数”,这根本不是一回事。)
您正在检查 的Value.Type
,Param.Value
它未存储在.dfm
文件中。Value.Type
当表单从 流入dfm
并被Value
读取时设置,或者Value
在运行时设置。
我可以通过完全按照您的步骤来证明这一点:
将 TQuery 拖放到新的空白表单上。将一些 SQL 添加到TQuery.SQL
. 我用过SELECT Id FROM SomeTable WHERE Id = :id
。
在对话框出现时单击...
,TQuery.Params
然后单击id
参数。Parameter Editor
单击Value
对象检查器中的 ,然后将 更改Value.Type
为Integer
。
保存项目和表单,然后关闭它们。重新打开项目,右键单击表单,然后View as Text
从上下文菜单中选择。您将看到该组件的以下Query1
内容:
object Query1: TQuery
SQL.Strings = (
'select id from sometable where id = :id')
Left = 152
Top = 80
ParamData = <
item
DataType = ftInteger
Name = 'id'
ParamType = ptInput
Value = 0
end>
end
请注意,在 中ParamData
,没有Value.Type
; 那是因为它是在Value
读取时设置的,而不是在保存表单时存储的。
现在再次右键单击,然后选择View as Form
。回到Query1.Parameters
,编辑Value
,并将其设置为一个高数字(我使用123456789
)。
保存表单,然后View as Text
再次保存。注意Query1
信息:
object Query1: TQuery
SQL.Strings = (
'select id from sometable where id = :id')
Left = 152
Top = 80
ParamData = <
item
DataType = ftInteger
Name = 'id'
ParamType = ptInput
Value = '123456789'
end>
end
请注意,仍然没有存储Value.Type
的 . 检查 Object Inspector 的ValueType
,它现在说String
,即使 Parameter.DataType 仍然是ftInteger
。这是由 IDE 的流机制看到引号并相应地设置引起的Value.Type
。
同样,它对您正在运行的应用程序没有影响。IDE中的Value.Type
无关紧要。
有趣的旁注:看到上面提到的之后,如果再次将表单视为文本,请删除Value.Type
属性周围的字符,然后再检查参数的 ,它变成了。这进一步表明它是在流式处理过程中设置的,并且在设计时没有任何意义。String
'
Value
View as Form
Value.Type
Integer