FieldのOnValidateで値を変更するには?

解決


ふろんてぃあ  2011-07-29 05:57:05  No: 40822

いつもお世話になっております。
Delphi2010+Win7 SP1 で開発を行っております。

FieldコンポーネントのOnValidateイベントにて値をチェックし
場合によっては入力された値を変更しているのですが、
ValidateのSenderの値が0の時のみ、Validateイベント内で値を変更しても
絶対に0になってしまいます。
Validateイベントの一番最後で
Query1.FieldByName('KINGAKU').AsFloat := 123456789;
みたいな感じで値を入力してもダメでした。
フィールドはTFloatFieldで作成しており、プロパティとしては
DisplayFormat:='#,##0;#,##0;0';
EditFormat:='0';
を指定しています。

Senderの値が0以外ですと、上記のFieldByNameで変更した値になって
くれるので、値が0の時に何か起きているのではないかと思っているのですが
そのような事が起こりえるのでしょうか?
何か対処方法を知っている方がいらっしゃいましたらご教授頂けると
助かります。

以上、よろしくお願い致します。


ふろんてぃあ  2011-07-29 20:46:35  No: 40823

すみません、いろいろと調べていましたら勘違いしている部分がありました。
値が0の時ではなく、Validateイベントの対象となっているコントロール
自身の値を変更しようとする変更されないみたいです。。。
下記のURLにて情報が載っていました。

http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/browse.cgi?index=031308

ただ、ここの解決策ではOnExitイベントを使用との事なのですが
OnExitイベントを使用するとレコードロックのエラーが発生してしまい
OnExitイベントは使用できない状態です。
(レコードロックのエラーを回避するためにはValidateイベントで処理をするらしいので)

出来れば、OnValidateイベントで処理したいのですが
リンク先の情報を見るとちょっと無理そうですよね。。。

もし、何か案がある方がいらっしゃいましたらレスを頂けると助かります。

以上、よろしくお願い致します。


ふろんてぃあ  2011-08-02 00:55:04  No: 40824

自己レスです。

TFieldのOnValidateイベントのロジックをTFieldのOnChangeイベントに
移すだけで大丈夫そうです。
レコードロックについては、そもそもQueryのEditメソッドをTDBEditの
Exitイベントで使用していたのが問題だったので、TFieldのOnChangeイベント
に移動する事でDataSourceのAutoEditプロパティがTrueならQueryのEditを
実行しなくても編集状態になっているっぽいので大丈夫と判断しました。
(ただ、まだ検証が終わっていませんが。。。)

とりあえず、問題となっていた部分は解消できたので解決とさせて頂きます。

ありがとうございましたm(__)m


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加