データセットの更新
提供:RAD Studio (日本語)
これまでは,データベース対応コントロール内の変更で項目のデータリンククラス内の値が変わりました。データ編集コントロール作成の最終段階は,新しい値でデータセットを更新することです。データベース対応コントロールの値を変更した人がコントロールの外をクリックするか〔Tab〕を押してコントロールを終了した後に,この変更が行われなければなりません。
メモ: VCL アプリケーションにはコントロール操作用のメッセージコントロール ID が定義されています。たとえばユーザーがコントロールを終了すると,そのコントロールに CM_EXIT メッセージが送られます。そのメッセージに応答するメッセージハンドラを記述できます。この場合,ユーザーがコントロールを終了すると,CM_EXIT 用のメッセージハンドラである CMExit メソッドはそれに応答して,データセットのレコードを項目のデータリンククラスの変更値で更新します。メッセージハンドラの詳細は,「メッセージとシステム通知の処理」を参照してください。
メッセージハンドラ内のデータセットを更新する手順は次のとおりです。
- メッセージハンドラを 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 };
- 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; } }
ユーザーがコントロールを終了するときにデータセットを更新する手順は次のとおりです。
- DoExit メソッドのオーバーライドを TDBCalendar コンポーネントに追加します。
type TDBCalendar = class(TSampleCalendar); private procedure DoExit; override; . . . end;
class PACKAGE TDBCalendar : public TSampleCalendar { private: DYNAMIC void __fastcall DoExit(void); . . . };
- 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 イベントを生成させる }