我遇到的问题是,在IDE中关闭和重新打开文件会将我的数据集的参数(tparam)从整数更改为shortint。如果我将它们更改为整数,它似乎保存,但一旦lcosed并重新打开它返回shortint。 Delphi是否有办法将参数从Integer更改为Shortint ?
我在这里发现了类似的问题 http://www.delphigroups.info/2/1/284088.html
这似乎是一个错误,但是否有某种方式的解决方法?升级的Delphi版本不是我现在可以做的事情。 (第二次编辑中概述的复制步骤)
编辑:
如果将值类型更改为整数,只需在表单上放置一个带有参数的sql语句的TQUERY就会发生这种情况。保存并重新打开值类型然后是shortint。
再次编辑:
在Delphi 7中,创建新的应用程序。在表单上删除TQUery。将SQL脚本编辑为' select * from table where id =:idnumber。然后编辑参数。选择idnumber并将VALUE.TYPE更改为Integer。此时,您可以保存文件并关闭。当您重新打开该文件。并再次选择params选择idnumber它将保持类型ftInteger,但value.type将是Shortint。这是我希望保持整数的部分,但不幸的是它被转换为shortint。
答案 0 :(得分:7)
我可以解释你所看到的行为,这不是一个错误。 (你的问题是误导性的,顺便说一句。根据编辑和评论,你的实际问题是“Delphi 7将Parameter.Value.Type从整数改为shortint”,这根本不是一回事。)
您正在检查Value.Type
的{{1}},Param.Value
未存储在.dfm
文件中。从Value.Type
流式传输表单并读取dfm
或在运行时设置Value
时,都会设置Value
。
我可以通过完全按照您的步骤证明这一点:
在新的空白表单上删除TQuery。将一些SQL添加到TQuery.SQL
。我使用了SELECT Id FROM SomeTable WHERE Id = :id
。
点击...
的{{1}},然后点击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
,现在它显示为ValueType
,即使Parameter.DataType仍为String
。这是由IDE的流媒体机制查看引号,并相应地设置ftInteger
引起的。
同样,它对您正在运行的应用程序没有影响。 IDE中的Value.Type
无关紧要。
有趣的旁注:如上所述,在看到Value.Type
为Value.Type
后,如果您再次将该表单视为文本,请移除String
属性周围的'
个字符和Value
,然后再次检查参数的View as Form
,它变为Value.Type
。这进一步表明它是在流式传输过程中设置的,并且在设计时没有任何意义。