0

IDEでファイルを閉じて再度開くと、データセットのパラメーター(tparam)が整数からshortintに変更されるという問題があります。それらを整数に変更すると保存されているように見えますが、lcosを実行して再度開くと、shortintとして返されます。 Delphiがパラメータを整数からShortintに変更する方法はありますか?

ここで同様の問題を見つけました http://www.delphigroups.info/2/1/284088.html

バグのようですが、何らかの回避策がありますか?アップグレードされたDelphiバージョンは、現時点では私ができることではありません。(2番目の編集で概説されている複製手順)

編集:

これは、値の型を整数に変更した場合に、フォームにSQLステートメントをパラメーターとともに配置するだけでTQUERYを配置することで発生します。保存して再度開くと、値の型はshortintになります。

もう一度編集:

Delphi 7で、新しいアプリケーションを作成します。フォームにTQUeryをドロップします。SQLスクリプトを'select* from table where id =:idnumberのようなものに編集します。次にパラメータを編集します。idnumberを選択し、VALUE.TYPEをIntegerに変更します。この時点で、ファイルを保存して閉じることができます。ファイルを再度開いたとき。そして、もう一度paramsに移動してidnumberを選択すると、タイプftIntegerのままになりますが、value.typeはShortintになります。これは私が整数のままにしておきたい部分ですが、残念ながらshortintに変換されています。

4

1 に答える 1

7

私はあなたが見ている振る舞いを説明することができます、そしてそれはバグではありません。(ところで、あなたの質問は誤解を招くものです。編集とコメントに基づく実際の質問は、「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で。を確認するValueTypeString、Parameter.DataTypeがまだであるにもかかわらず、と表示されますftInteger。これは、IDEのストリーミングメカニズムが引用符を確認し、Value.Typeそれに応じて設定することが原因です。

繰り返しますが、実行中のアプリケーションには影響しません。IDE内はValue.Type関係ありません。

興味深い補足事項:上記のように表示した後、フォームをもう一度テキストとして表示し、プロパティの周囲の文字を削除してValue.Typeから、パラメータのをもう一度確認すると、になります。これは、ストリーミングプロセス中に設定されたことをさらに示しており、設計時には意味がありません。String'ValueView as FormValue.TypeInteger

于 2012-09-13T20:39:14.620 に答える