データセットの更新

提供: RAD Studio
移動先: 案内検索

コントロールをデータ対応にする:インデックス への移動

ここまでで、データ対応コントロール内の変更により、フィールドのデータ リンク クラス内の値が変わりました。データ編集コントロールの作成の最終段階は、データセットを新しい値で更新することです。それが行われるのは、データ対応コントロール内の値を変更したユーザーがコントロールの外をクリックするか Tab キーを押してコントロールを終了した後です。

メモ: VCL アプリケーションでは、コントロール操作用のメッセージ制御 ID を定義します。たとえば、ユーザーがコントロールを終了すると、そのコントロールに CM_EXIT メッセージが送信されます。そのメッセージに応答するメッセージ ハンドラを記述できます。この場合、ユーザーがコントロールを終了すると、CMExit のメッセージ ハンドラである CM_EXIT メソッドがそれに応答して、データセット内のレコードをフィールドのデータ リンク クラス内の変更値で更新します。メッセージ ハンドラの詳細については、「Windows API メッセージング ソリューションの使用」を参照してください。

メッセージ ハンドラ内でデータセットを更新するには、次の手順に従います。

  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. TDBCalendar コンポーネントに DoExit メソッドのオーバーライドを追加します。
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 イベントを発生させる
    }
    

関連項目