2012-04-13 6 views
1

dbeditコンポーネントを使用してレコードを編集していますが、キャンセルボタンがありますが、dbeditコンポーネントを使用して行ったすべての変更を元に戻す方法がわかりません。レコードの変更をキャンセルする

私はテンポラリテーブルにレコードをコピーするか、変更が保存されている場合は古いレコードを削除したり、コピーされたレコードを削除することができる同じテーブル内のレコードを複製することを考えていました。キャンセルされます。

無駄なテーブルを作成しなくても、これを処理する最善の方法を知りたいだけでなく、あまりにも多くの手順を作成しています。

答えて

4

パラドックステーブルへの変更が間違っていない場合は、postコマンドの後にデータベースに書き込まれるだけです。 変更をキャンセルしたい場合は、単に、ところで

TForm1.CancelButtonPresss(Sender: TObject); 
begin 
    ParadoxTable.Cancel; 
end; 

TForm1.OKButtonPress(Sender: TObject); 
begin 
    ParadoxTable.Post; 
end; 

を行い、その私の記憶が間違っている可能MYので、この答えを否決すること自由に感じなさい、私はパラドックスのテーブルで働いてきたので、長い長い時間がかかりました私が間違っている場合。
これはMacで入力しているので、今すぐ確認することはできません。

私はあとでもっと情報に基づいた回答を提供できるかどうかを確認します。

+2

これは、どのTDataSetの子孫にも当てはまります。データがまだ投稿されていない限り、レコードを元の状態に戻すために.cancelを呼び出すことができます。 SavePointの場合は – ESG

3

TCustomClientDataSetを使用している場合は、RevertRecordメソッドを使用して、現在のレコードが変更ログに残っている場合は、修正を削除することもできます(TDataSet.Cancelを使用)。

SavePointでスナップショットを設定し、その状態に戻ってその間に行われたすべての変更を取り消すこともできます。

+0

+1です。これは、TDatasetを使って作業するときにこの状況を処理する正しい方法です。 –

3

シングルレコードにはヨハンの答えが良いです。 SQLデータベース(Oracle、MSSql、MySql、Firebirdなど)を使用して作業している場合、複数のレコードに使用できる追加のアプローチがあります。例

TForm1 = class(TForm) 
    ADOConnection: TADOConnection; 
… 

    // start the transaction 
    ADOConnection.BeginTrans; 
… 

    // create records and post them 
… 

    // rollback removes the records posted 
    // since the transaction was started 
    ADOConnection.RollbackTrans; 
… or … 
    // commit completes saving the records posted 
    // since the transaction was started 
    ADOConnection.CommitTrans; 

あなたが明示的にトランザクションを開始していないかのようにADOを使用して、1が自動的に起動し、レコードがデータベースに掲載されているよう努めています。

Françoisの回答はトランザクションと似ていますが、ClientDatasetsでのみ動作します。

関連する問題