Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


【Delphi/400】データセットのイベント

TDBGridは表形式でデータが表示され、更新操作も行えますので大変便利です。

ただ入力もれがないかなどの更新前チェックを行う場合、
TDBGridのイベントを見てもそれらしいイベントはありません。
このときにはデータセット側(TFDQueryやTClientDataSetなど)のイベントを利用します。

 

DBGridの仕様として、別レコードに移動したときに編集が確定されます。
内部的にデータセットのPostメソッドが呼び出されているので、
データセットのBeforePostイベントで更新前チェックを行うと
1行ごとに入力もれがないかなどの確認ができます。

例えばフィールド「COMPANY」を入力必須項目にするときに、
そのフィールドのセルに入力を戻すには次のようなコードになります。
Abortメソッドは別レコード移動を行わせないように呼び出しています。

procedure TForm1.ClientDataSet1BeforePost(DataSet: TDataSet);
begin
  if  DataSet.FieldByName('COMPANY').AsString = '' then
  begin
    ShowMessage('会社名が入力されていません!');
    DBGrid1.SelectedField := DataSet.FieldByName('COMPANY');
    Abort;
  end;
end;

 

また、データセットの行移動時に呼び出されるAfterScrollイベントを使うことで、
現在の行番号をLabelに表示させるといった、毎行で必要な処理を記述することが可能です。

procedure TForm1.ClientDataSet1AfterScroll(DataSet: TDataSet);
begin
  // ラベルに「行番号 / 行数」を表示
  lblRowNumber.Caption := IntToStr(ClientDataSet1.RecNo) + ' / ' +
                          IntToStr(ClientDataSet1.RecordCount) + ' 行';
end;

 

他にも、データセットの以下のようなイベントが活用できます。

  • AfterInsertイベント
    • 新しいレコード追加時に、事前に初期値をセットできます。
  • BeforeInsertイベント
    • 「Abort;」メソッドだけを記述することで、「↓」キー等での行追加を禁止します。
  • OnCalcFieldsイベント

 

 

(ミガロ.情報マガジン「MIGARO News!!」Vol.113 2010年4月号より) ※一部追加改変