让我说我有一个与TDataSetProvider的ClientDataSet1链接来访问数据库以获取数据,我已经打开ClientDataSet1准备进行编辑并进行了一些更改,因此最后我有了一些增量。在我调用ClientDataSet1.ApplyUpdates之前,将三角洲分配给TPacketDataSet以便于解决。无论如何有没有发现TPacketDataSet的当前记录实际上是指向TClientDataSet中的哪个记录而不调用TDataSet.Locate的,因为我相信TDataSet.Locate可能会降低性能。我想在遍历TPacketDataSet时出于某些编辑目的而定位TClientDataSet记录。由于某些我遇到较早的here的问题,我有一些理由不在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;


谢谢!

最佳答案

如果原始TClientDataset中有索引,则可以使用FindKey。但是我不认为“定位”会是一个很大的问题。

10-05 22:17