3

DB テーブルに圧力を格納する列があります。圧力は常に PSI として保存され、14.5 でダイビングすることで BAR に変換できます。

ユーザーは、ラジオ グループで PSI/BAR の表示を切り替えることができます。

私は a を使用していましたが、 aTStringGridに変換していますTDbGrid- これは私にとってまったく新しいことです。

ユーザーが PSI/BAR を切り替えたときに、DB グリッドの表示を更新するにはどうすればよいですか? (クエリをもう一度実行するだけだと思いますか?または呼び出しquery.Refresh()ますか?)しかし、どうすれば変換できますか?

  1. おそらくストアドプロシージャですが、それはやり過ぎのように思えますが、ストアドプロシージャも私にとっては新しいものです...
  2. SELECT私のクエリのステートメントを変更することによって?しかし、どうすればそれを行うことができますか?SELECT pressure / 14.5 FROM measurements? またはどのように?
  3. または、OnBeforeXXX()私がコーディングできるものはありますか?またはOnGetDisplayText()、またはそのようなものですか?

これは非常に基本的なことだと確信していますが、今まで操作されていないデータを表示しているだけで、変換関数が必要になりました。グーグルは役に立ちませんでしたが、私はおそらく何を頼めばいいのかわからなかったのです。

また、列のタイトルのテキストを変更して、「圧力 (PSI)」と「圧力 (BAR)」を切り替えたいと考えています。助けてくれてありがとう。

4

2 に答える 2

3

pressure フィールドの OnGetText イベント ハンドラを次のようにコーディングします。

type
  TPressureMU = (pmuPSI, pmuBAR);

const
  PSIToBarFactor = 1/14.5;


procedure TdmData.qMeasurementsPressureGetText(Sender: TField; var Text: string;
  DisplayText: Boolean);
begin
  case PressureMU of
    pmuPSI: Text := FloatToStr(Sender.AsFloat); //Already PSI
    pmuBAR: Text := FloatToStr(Sender.AsFloat * PSIToBarFactor); //ConvertingToBAR
  end
end;

宣言された列挙のプロパティ PressureMU を使用して、圧力が PSI または BAR 測定単位で表示されるかどうかを制御しています。

この方法では、ユーザーが選択を変更したときに、そのプロパティの値を調整するだけです。

永続フィールドを使用する場合は、オブジェクト インスペクターを使用してイベント ハンドラーをフィールドに直接リンクできます。そうでない場合は、次のようなコードでリンクできます。

begin
  qMeasurements.FieldByName('Pressure').OnGetText := qMeasurementsPressureGetText;
end;

qMeasurementsPressureGetTextメソッドの名前です。

于 2012-11-20T04:02:49.837 に答える
2

永続フィールドを作成します (クエリを右クリックAdd Fieldsし、.dfm に格納される設計時にフィールドを作成することを選択します)。クエリを右クリックし、新しいフィールドを追加します。計算フィールドにしOnCalcFields、クエリのイベントで PSI から BAR への変換を行います。

ユーザーが表示を切り替えると、 を設定してPSIまたはBAR列を表示Column.FieldNameし、実際のPSI列または新しく計算されたBAR列に設定します。

もちろん、永続フィールドを使用していない場合は、すべてクエリで実行できます。変換の結果を含む新しい列を SQL ステートメントに追加するだけでColumn.FieldName、実行時に を変更して、表示される値を切り替えることができます。

于 2012-11-20T03:52:20.430 に答える