コントロールでのデータの編集
データの編集と更新 への移動
データ コントロールの編集内容を関連するデータセットに登録できるのは、データセットの 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 を押すと、レコードに対する変更をすべて取り消すことができます。
レコードを登録するときに、Delphi では、データセットに関連付けられたすべてのデータベース対応コントロールについて、状態が変化しているかを調べます。変更のあるデータを含むフィールドを更新するときに問題が発生すると、Delphi により例外が生成され、レコードへの変更は行われません。
メモ: アプリケーションが更新をキャッシュしている場合(クライアント データセットを使用している場合など)には、変更はすべて内部キャッシュに登録されます。データセットの ApplyUpdates メソッドを呼び出すまで、これらの変更は背後のデータベース テーブルに適用されません。