0

我遇到一个问题,在 IDE 中关闭和重新打开文件会将我的数据集的参数 (tparam) 从整数更改为短整数。如果我将它们更改为整数,它似乎可以保存,但是一旦 lcosed 并重新打开它就会返回为 shortint。 Delphi 有没有办法将参数从 Integer 更改为 Shortint

我在这里发现了一个类似的问题 http://www.delphigroups.info/2/1/284088.html

这似乎是一个错误,但有一些时尚的解决方法吗?升级Delphi版本不是我现在可以做的。(第二次编辑中概述的复制步骤)

编辑:

如果将值类型更改为整数,只需在表单上放置一个带有参数的 sql 语句,就会发生这种情况。保存并重新打开值类型然后是shortint。

再次编辑:

在 Delphi 7 中,创建新应用程序。在表单上放置一个 TQuery。将 SQL 脚本编辑为类似于 'select * from table where id = :idnumber. 接下来编辑参数。选择 idnumber 并将 VALUE.TYPE 更改为 Integer。此时您可以保存文件并关闭。当您重新打开文件时。然后再次转到参数选择 idnumber 它将保持类型 ftInteger 但 value.type 将是 Shortint。这是我希望保留为整数的部分,但不幸的是正在转换为 shortint。

4

1 回答 1

7

我可以解释您所看到的行为,这不是错误。(顺便说一句,您的问题具有误导性。根据编辑和评论,您的实际问题是“Delphi 7 将 Parameter.Value.Type 从整数更改为短整数”,这根本不是一回事。)

您正在检查 的Value.TypeParam.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.TypeInteger

保存项目和表单,然后关闭它们。重新打开项目,右键单击表单,然后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

于 2012-09-13T20:39:14.620 回答