データセットの更新

提供:RAD Studio (日本語)
移動: 案内, 検索

データベース対応コントロールの作成:インデックス への移動

これまでは,データベース対応コントロール内の変更で項目のデータリンククラス内の値が変わりました。データ編集コントロール作成の最終段階は,新しい値でデータセットを更新することです。データベース対応コントロールの値を変更した人がコントロールの外をクリックするか〔Tab〕を押してコントロールを終了した後に,この変更が行われなければなりません。

メモ:  VCL アプリケーションにはコントロール操作用のメッセージコントロール ID が定義されています。たとえばユーザーがコントロールを終了すると,そのコントロールに CM_EXIT メッセージが送られます。そのメッセージに応答するメッセージハンドラを記述できます。この場合,ユーザーがコントロールを終了すると,CM_EXIT 用のメッセージハンドラである CMExit メソッドはそれに応答して,データセットのレコードを項目のデータリンククラスの変更値で更新します。メッセージハンドラの詳細は,「メッセージとシステム通知の処理」を参照してください。

メッセージハンドラ内のデータセットを更新する手順は次のとおりです。

  1. メッセージハンドラを TDBCalendar コンポーネントに追加します。
 type
   TDBCalendar = class(TSampleCalendar);
   private
     procedure CMExit(var Message: TWMNoParams); message CM_EXIT;
    .
    .
    .
   end;
 class PACKAGE TDBCalendar : public TSampleCalendar
 {
 private:
     void __fastcall CMExit(TWMNoParams Message);
 BEGIN_MESSAGE_MAP
   MESSAGE_HANDLER(CM_EXIT, TWMNoParams, CMExit)
 END_MESSAGE_MAP
 };
  1. CMExit メソッドを次のように実装します。
 procedure TDBCalendar.CMExit(var Message: TWMNoParams);
 begin
   try
     FDataLink.UpdateRecord;                          { データベースを更新するようにデータリンクに通知 }
   except
     on Exception do SetFocus;                      { 失敗した場合は,フォーカスが移動しないようにする }
  end;
   inherited;
 end;
 void __fastcall TDBCalendar::CMExit(TWMNoParams &Message)
 {
   try
   {
     FDataLink.UpdateRecord();          // データベースを更新するようにデータリンクに通知
   }
   catch(...)
   {
     SetFocus();                        // 失敗した場合は,フォーカスが移動しないようにする
     throw;
   }
 }


ユーザーがコントロールを終了するときにデータセットを更新する手順は次のとおりです。

  1. DoExit メソッドのオーバーライドを TDBCalendar コンポーネントに追加します。
 type
   TDBCalendar = class(TSampleCalendar);
   private
     procedure DoExit; override;
    .
    .
    .
   end;
 class PACKAGE TDBCalendar : public TSampleCalendar
 {
 private:
     DYNAMIC void __fastcall DoExit(void);
    .
    .
    .
 };
  1. DoExit メソッドを次のように実装します。
 procedure TDBCalendar.CMExit(var Message: TWMNoParams);
 begin
   try
     FDataLink.UpdateRecord;                          { データベースを更新するようにデータリンクに通知 }
   except
     on Exception do SetFocus;                      { 失敗した場合は,フォーカスが移動しないようにする }
  end;
   inherited;                         { 継承メソッドに OnExit イベントを生成させる }
 end;
 void __fastcall TDBCalendar::DoExit(void)
 {
   try
   {
     FDataLink.UpdateRecord();          // データベースを更新するようにデータリンクに通知
   }
   catch(...)
   {
     SetFocus();                        // 失敗した場合は,フォーカスが移動しないようにする
     throw;
   }
   TCustomGrid::DoExit(); // 継承メソッドに OnExit イベントを生成させる
 }
他言語版