コントロールのデータを編集する
データコントロールがその編集結果を関連するデータセットに登録できるのは,データセットの CanModify プロパティが True になっている場合だけです。単方向データセットの場合には,CanModify は常に False になります。クライアントデータセットには ReadOnly プロパティがあり,これを使用すれば,CanModify を True にするかどうかを指定できます。
メモ: クライアントデータセットがデータを更新できるかどうかは,基になるデータベーステーブルが更新を許可しているかどうかで決まります。
データセットの CanModify プロパティが true になっている場合でも,コントロールが更新をデータベーステーブルに登録できるようにするためには,データセットをコントロールに接続しているデータソースの Enabled プロパティも true にしなければなりません。データソースの Enabled プロパティは,コントロールがそのデータセットの項目値を表示できるかどうか,またユーザーがその値を編集し登録できるかどうかを決めます。Enabled が True の場合(デフォルト),コントロールは項目値を表示できます。
最後の点として,コントロールに表示されているデータをユーザーが編集できるかどうかを制御することも可能です。データコントロールの ReadOnly プロパティは,そのコントロールによって表示されたデータをユーザーが編集できるかどうかを決めます。False の場合(デフォルト),ユーザーはデータを編集できます。当然ながら,データセットの CanModify を false にした場合には,コントロールの ReadOnly プロパティが true になっていることを確認しておいてください。そうしておかないと,ユーザーは,基のデータベーステーブルのデータを変更できるものと誤って解釈するでしょう。
TDBGrid を除くすべてのデータコントロールでは,項目を変更した場合,〔Tab〕でコントロールから離れるときに基のデータセットに変更がコピーされます。〔Tab〕で項目から移動する前に〔Esc〕を押すと,変更が破棄され,項目の値は変更前の値に戻ります。
Vcl.DBGrids.TDBGrid では,別のレコードに移動したときだけ変更が登録されます。別のレコードに移動する前に項目のレコードで〔Esc〕を押すと,レコードに対するすべての変更を取り消せます。
レコードを登録するときに,データセットに関連付けられたすべてのデータベース対応コントロールの状態の変化が調べられます。変更のあるデータを含む項目を更新するときに問題が発生すると,例外が生成されて,レコードへの変更は行われません。
メモ: アプリケーションが更新をキャッシュする場合(たとえば,クライアントデータセットを使用する場合)には,変更はすべて内部キャッシュに登録されます。これらの変更は,データセットの ApplyUpdates メソッドを呼び出すまでは,基のデータベーステーブルには適用されません。