如何在不必移动光标的情况下读取TDataSet后代的字段值

时间:2015-03-16 23:28:53

标签: delphi random tdataset

我认为能够从TDataSet后代读取记录值而不必移动光标对于使用数据库应用程序的人来说是一个很大的改进。

我在这个主题上进行了长时间的努力搜索,但我能找到的最接近的是XE7 TFDMemTable,你可以用这样的语句读取字段值:

FirstName := fdsPeople.Table.Rows.ItemsI[i].GetValues('FirstName', True);

其中

  1. fdsPeople = TFDMemTable的实例
  2. i =指向记录索引的整数
  3. FirstName是一个字符串变量
  4. 有没有办法用我不知道的TDataSet来实现这个目的?如果没有,我们如何申请此功能?

2 个答案:

答案 0 :(得分:2)

如果数据集后代支持此功能,则可以将光标从数据集克隆到其他数据集。 (AnyDAC - TADMemTable或FireDAC - TFDMemTable和TClientDataset支持此功能)。

这意味着数据集可以共享数据,但它们有不同的游标! (您可以在一个数据集中行走,而不会干扰其他数据集recNo)

示例:

procedure MyCloneCursor(ASourceDS, ADestDS: TFDMemTable)
begin
 ADestDS.FieldDefs.Assign(ASourceDS.FieldDefs);
 ADestDS.CreateDataset;

 ADestDS.CloneCursor(ASourceDS, false {Reset}, false {KeepSettings});
end;

请注意KeepSettings是指克隆光标的数据集。 KeepSettings,如果为true,表示克隆光标的数据集将保持其设置,如果为false,则将从克隆光标的数据集中获取设置。

如果要克隆过滤器,索引,主源,主域,源数据集的只读状态...然后按如下方式调用CloneCursor

CloneCursor(SourceDataset, False, False);

有关此问题的详尽说明,请阅读Cary Jensen的Cloning ClientDataSet Cursors

答案 1 :(得分:1)

假设您的意思是您不希望用户看到您实际上正在移动光标,您可以执行以下操作:

var
  BM: TBookmark;
begin
  BM := Dataset.GetBookmark;
  Dataset.DisableControls;
  try
    // Simulate moving the cursor around, reading data etc.
    Dataset.Last;
    Dataset.First;
    Dataset.GotoBookmark(BM)
  finally
    Dataset.EnableControls;
  end;
end;

这假设你当然有一个双向数据集。