私はあなたが見ている振る舞いを説明することができます、そしてそれはバグではありません。(ところで、あなたの質問は誤解を招くものです。編集とコメントに基づく実際の質問は、「Delphi 7がParameter.Value.Typeを整数からshortintに変更する」というものですが、これはまったく同じではありません。)
ファイルに保存されていないValue.Typeのを検査しています。フォームがからストリームインされてが読み取られるとき、または実行時にが設定されるときに設定されます。Param.Value.dfmValue.TypedfmValueValue
私はあなたの手順を正確に実行することによってこれを示すことができます:
TQueryを新しい空白のフォームにドロップします。にSQLを追加しますTQuery.SQL。使用しSELECT Id FROM SomeTable WHERE Id = :idました。
をクリックし、ダイアログが表示されたらパラメータ...をクリックします。オブジェクトインスペクタでをクリックし、をに変更します。TQuery.ParamsidParameter EditorValueValue.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