0

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

我已经在这个主题上进行了长期而艰苦的搜索,但我能找到的最接近的是在 XE7 TFDMemTable 中,您可以使用如下语句读取字段值:

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

在哪里

  1. fdsPeople = TFDMemTable 的实例
  2. i = 引用记录索引的整数
  3. FirstName 是一个字符串变量

是否已经有一种方法可以使用我不知道的 TDataSet 来实现这一点?如果没有,我们如何请求此功能?

4

2 回答 2

2

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

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;

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

于 2015-03-17T00:18:04.580 回答
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,如果为真,表示克隆光标的数据集将保留其设置,如果为假,将从克隆光标的数据集中获取设置。

如果要克隆源数据集的过滤器、索引、主源、主字段、只读状态...然后调用 CloneCursor,如下所示

CloneCursor(SourceDataset, False, False);

有关这方面的大量文档,请阅读 Cary Jensen 的Cloning ClientDataSet Cursors

于 2015-03-17T09:03:09.373 回答