2

私のアプリケーションでは、DBAware コンポーネントのみを使用しています (いくつかの場所を除く)。

マスター データセット (顧客など)、詳細データセット (注文など)、サブ詳細データセット (注文アイテムなど) を作成するシナリオがあります。典型的には、ユーザーに変更を許可し (データセットはブラウズ モードになっています)、投稿します。単純。

とにかく、サブデータセットを編集する際に、一種の単純な元に戻す機能を追加したいと思います。ユーザーが操作をキャンセルした場合、データセットを編集するフォームを開きます (つまり、db コンポーネントを使用するため、フォームを変更するとデータセットが変更されます)。フォームを開く前のデータセットを復元したい。

TClientDataSetこれを実装するために、または同様のコンポーネントでデータセットのコピーを作成することを考えることができますが、他のテクニックはありますか? 同様に、Delphi を使用すると、データの「スナップショット」を簡単に作成できます。疑似コードを使用:

MySubDetailDataSet.SaveSnapShot;
SubDetailForm.ShowModal;
if ModalResult = mrCancel then MySubDetailDataSet.RestoreSnapShot;

そのようなことは、Delphi コンポーネントを使用して「既製品」で可能ですか?

ちなみに、私は DevArt コンポーネントの SDAC を使用しているので、Delphi 標準のコンポーネントではなく、これらのコンポーネントでのみ使用できる手法を知っている場合は、歓迎します!

4

4 に答える 4

1

AnyDAC では、次のことができます。

var
 iPrevSP: Integer;
...
iPrevSP := MySubDetailDataSet.SavePoint; 
SubDetailForm.ShowModal; 
if ModalResult = mrCancel then 
  MySubDetailDataSet.SavePoint := iPrevSP; 

同様の手法は、TClientDataSet、kbmMemTable で利用できます。DevArt製品を使用しているため、おそらく答えではありません。

于 2011-10-18T16:55:01.183 に答える
0

DevArt を使用して、TVitualTable(DevArt バージョンのTCLientDataSet) にデータをコピーすることができましたが、AnyDAC のように簡単な SavePoint 機能はありません。

于 2011-10-28T10:07:43.207 に答える
-1

TClientDataset を使用してファイルまたはストリームからロードし、元のデータを内部に保存し、ロールバックするたびに元のデータからリロードすることができます。

于 2015-06-15T10:14:29.597 に答える