我可以解释您所看到的行为,这不是错误。(顺便说一句,您的问题具有误导性。根据编辑和评论,您的实际问题是“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'ValueView as FormValue.TypeInteger