変更内容の取り消し
データの編集 への移動
Data 内でレコードの元のバージョンがそのまま変わらなくても、ユーザーがレコードを編集してそこから離れ再びそのレコードに戻るたびに、最後に変更したバージョンのレコードが表示されます。ユーザーまたはアプリケーションがレコードを何度も編集すると、そのたびに、変更されたバージョンのレコードが変更ログに別個のエントリとして格納されます。
レコードを変更するたびにその変更内容を格納することにより、レコードの前の状態を復元しなければならない場合に、複数レベルの取り消し操作をサポートできるようになります。
- レコードに対して最後に行われた変更の内容を削除するには、UndoLastChange を呼び出します。UndoLastChange は論理パラメータ FollowChange を受け取りますが、このパラメータは、復元されたレコード上にカーソルを戻すか(True)、それともカーソルは現在のレコードに置いたままにするか(False)を指定します。1 つのレコードに複数の変更が加えられている場合、UndoLastChange を呼び出すたびに、編集内容が 1 つずつ削除されます。UndoLastChange は、操作が成功したか失敗したかを示す論理値を返します。削除が成功した場合、UndoLastChange は True を返します。ChangeCount プロパティを使用すると、元に戻す変更がまだあるかどうかを調べることができます。ChangeCount は、変更ログに保存されている変更の数を示します。
- 単一のレコードに対する変更を 1 つずつ削除する代わりに、すべての変更を一度に削除できます。1 つのレコードに対する変更内容をすべて削除するには、レコードを選択し、RevertRecord を呼び出します。RevertRecord では、現在のレコードに対するすべての変更内容を変更ログから削除します。
- 削除されたレコードを復元するには、まず StatusFilter プロパティを [usDeleted] に設定します。これで、削除されたレコードが "見える" ようになります。次に、復元するレコードに移動し、RevertRecord を呼び出します。最後に、StatusFilter プロパティを [usModified, usInserted, usUnmodified] に戻します。その結果、データセットの編集済みバージョン(今は復元されたレコードが入っている)が再び表示されます。
- 編集中の任意の時点で、SavePoint プロパティを使って変更ログの現在の状態を保存できます。SavePoint を読み取ると、変更ログ内での現在位置を示すマーカーが返されます。後で、セーブ ポイントの読み取り以降に発生したすべての変更を元に戻す場合は、SavePoint を、前に読み取った値に設定します。アプリケーションでは、複数のセーブ ポイント値を取得できます。ただし、あるセーブ ポイントまでの変更ログをいったんバックアップしたら、アプリケーションでそのセーブ ポイントの後に読み取ったすべてのセーブ ポイントの値は無効です。
- CancelUpdates を呼び出すことにより、変更ログに記録されたすべての変更内容を破棄することができます。CancelUpdates では、変更ログをクリアし、すべてのレコードの編集内容をすべて事実上破棄します。CancelUpdates を呼び出す場合は注意が必要です。CancelUpdates を呼び出した後は、ログ内に存在していた変更内容は回復できません。