什么是 TFDDatSRow?

What is TFDDatSRow?

我用的是Delphi10.3。我尝试制作一个内存数据库,向其中追加数据并在其中查找数据。

我参考了别人的代码写了下面的代码,效果很好。

procedure TForm1.DataAppendFind;
var
  _FieldDef: TFieldDef;
  _FDDatsRow: TFDDatSRow;
  i: Integer;
begin
  _FieldDef := FDMemTable1.FieldDefs.AddFieldDef;

  _FieldDef.Name := 'field1';
  _FieldDef.DataType := ftInteger;

  _FieldDef := FDMemTable1.FieldDefs.AddFieldDef;

  _FieldDef.Name :='field2';
  _FieldDef.DataType := ftString;
  _FieldDef.Size := 10;

  FDMemTable1.CreateDataSet;

  FDMemTable1.Append;

  FDMemTable1.FieldValues['field1'] := 1;
  FDMemTable1.FieldValues['field2'] := 'one';

  FDMemTable1.Append;

  FDMemTable1.FieldValues['field1'] := 2;
  FDMemTable1.FieldValues['field2'] := 'two';

  FDMemTable1.First;

  for i := 0 to FDMemTable1.RecordCount - 1 do
  begin
    _FDDatsRow := FDMemTable1.GetRow;

    if _FDDatsRow.Values['field1'] = 2 then
    begin
      Caption := _FDDatsRow.ValueS['field2'];
    end;

    FDMemTable1.Next;
  end;
end;

我无法理解 TFDDatSRow,我试图通过 Delphi 参考文献和 google 搜索它。但是没有关于这一点的明确文件。我可以猜到它与一行相似但不是一行,因为它有一个又长又复杂的名称,而不仅仅是一个 tROW。

什么是 TFDDatSRow,为什么没有关于它的参考,我在哪里可以得到关于它的正确信息?最后,上面的代码是否正确?

是的,您的代码工作正常。我承认我没有遇到过 TFDDatSRow 在你的 q 之前,但看了它之后,很明显它是做什么用的。

FireDAC 的数据集组件均源自 TDataSet,因此符合 以其建模数据集操作的方式,也就是说,当数据集 已打开,它有一个逻辑游标,它恰好是数据集中的一条记录 "over" 就是那条记录,Delphi 术语中的 "active",在其上进行 EditPostFieldByName 等操作 等发生。这工作正常但使某些操作无法进行,例如工作 同时在两个记录上,例如当你想在两个之间交换值时 不同的记录,因为它们不能同时是数据集的活动记录。

我说过 TFDDatSRow 的用途很明显,一件事是允许 正是这种对 2 个或更多记录的并发访问成为可能。

比如这段代码

  FDMemTable1.First;
  FDDatsRow1 := FDMemTable1.GetRow;
  FDMemTable1.Next;
  FDDatsRow2 := FDMemTable1.GetRow;

  FDDatSRow1.BeginEdit;
  FDDatSRow1.Values['Field2'] := FDDatSRow2.Values['Field2'];
  FDDatSRow1.EndEdit(False);

使数据能够以一种方式从第二行传输到第一行 没有 TFDDatSRow 是不可能的。

为什么没有记录?不知道,问EMBA

我是怎么找到它的方法的?简单,我声明了一个变量

 var FDDatSRow1 : TFDDatSRow;

然后输入

  FDDatSRow1.

和 IDE 的代码完成弹出它们。

此外,选择 TFDDatSRow 并执行 Ctrl-Click 会将我带到它的声明 在 FireDac.DatS 单元中。往里看,显然是 FireDAC 的作者 记住的比我的示例中显示的要多得多。