3

データのデータベースにアクセスするための TDataSetProvider との ClientDataSet1 リンクがあり、ClientDataSet1 を編集の準備ができて開いていくつかの変更を行ったので、最後にいくつかのデルタがあるとしましょう。ClientDataSet1.ApplyUpdates を呼び出す前に、簡単に解決できるように TPacketDataSet に割り当てられているデルタ。TPacketDataSet の現在のレコードが実際に TDataSet.Locate を呼び出さずに TClientDataSet のどのレコードを指しているかを調べる方法はありますか? TDataSet.Locate はパフォーマンスを低下させる可能性があると考えています。編集目的で TPacketDataSet をトラバースしながら、TClientDataSet レコードを見つけたいと思います。ここで以前に直面した問題のため、TDataSetProvider.OnUpdateData でこれを行わない理由があります。

procedure Test;
var P: TPacketDataSet;
begin
  P := TPacketDataSet.Create(nil);
  try
    P.Data := ClientDataSet1.Delta;
    P.First;
    while not P.Eof do begin
      if P.UpdateStatus = usUnmodified then begin
        P.InitAltRecBuffers(True); 
        //How to know the current record in P point to which record in ClientDataSet1
      end;
      P.Next;
    end; 
  finally
    P.Free;
 end;
end;

ありがとう!

4

1 に答える 1

0

元の TClientDataset にインデックスがある場合は、FindKey を使用できます。しかし、私は Locate がそれほど問題になるとは思わない。

于 2011-07-07T20:25:48.723 に答える