4

clientdataset のデルタに対して行われた変更を手動で追跡し、その変更を手動で db に更新する方法はありますか? クライアントデータセットを動的に作成し、プロバイダーなしでtqueryでロードできます。ユーザーはcdで利用可能なデータに対していくつかの挿入更新および削除操作を実行し、最終段階でこれらのデータ(変更された)はtquery を使用してデータベースに投稿します (更新を適用しません)。

4

2 に答える 2

5

TQuery呼び出しからデータ・セットを移入した後MergeChangeLog、レコードが新しく挿入されたものとして目立たないようにし、それLogChangesが設定されていることを確認します。

次に、最終段階で、データセットを使用してクエリを更新する前に、StatusFilterアクションを実行するレコードのみが表示されるように設定します。例えば;

ClientDataSet1.StatusFilter := [usDeleted];

UpdateStatusレコードで使用して、変更されているかどうかなどを確認することもできます。

ただし、レコードには複数のバージョンが存在するようであり、「変更ログ」がどのように追跡するかを理解するのは少し難しいことに注意してください。また、レコードを数回変更してから削除するなど、レコードに複数のアクションが存在する場合もあります。

于 2010-06-12T14:29:53.933 に答える
1
Change:= TPacketDataSet.create;

Change.Data:= YourClientDataSet.Delta;
while not Change.Eof do
begin
 Change.InitAltRecBuffers(False);
 if Change.UpdateStatus = usUnmodified then
   Change.InitAltRecBuffers(True);

 case Change.UpdateStatus of
  usModified:  ;//your logic read codes in Provider.pas for further hint
  usInserted:  ;//your logic read codes in Provider.pas for further hint
  usDeleted: ;//your logic read codes in Provider.pas for further hint
 end;

 Change.Next;
end;

上記は、変更された Cheers Pham の数に関係なく機能するはずです

于 2010-06-12T15:32:00.763 に答える