私はあなたが見ている振る舞いを説明することができます、そしてそれはバグではありません。(ところで、あなたの質問は誤解を招くものです。編集とコメントに基づく実際の質問は、「Delphi 7がParameter.Value.Typeを整数からshortintに変更する」というものですが、これはまったく同じではありません。)
ファイルに保存されていない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