Как узнать текущую дельта-запись в TPacketDataSet, указать на какую запись в TClientDataSet? - PullRequest
3 голосов
/ 07 июля 2011

Допустим, у меня есть ссылка ClientDataSet1 с TDataSetProvider для доступа к базе данных для данных, и я открыл ClientDataSet1, готовый для редактирования, и внес некоторые изменения, поэтому в конце у меня есть некоторая дельта.Дельта, назначаемая TPacketDataSet, для простого решения, прежде чем я вызову ClientDataSet1.ApplyUpdates.Есть ли в любом случае узнать, что текущая запись TPacketDataSet на самом деле указывает на то, какая запись в TClientDataSet без вызова TDataSet.Locate, так как я считаю, TDataSet.Locate может снизить производительность.Я хотел бы найти запись TClientDataSet при обходе TPacketDataSet для некоторых целей редактирования.У меня есть некоторые причины не делать этого в 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;

Спасибо!

1 Ответ

0 голосов
/ 08 июля 2011

Если у вас есть индекс в источнике TClientDataset, вы можете использовать FindKey.Но я не верю, что Locate будет большой проблемой.

...