什么是TFDDatSRow?

时间:2019-05-11 15:38:14

标签: delphi firedac fdmemtable

我使用Delphi 10.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,为什么没有关于它的参考,我在哪里可以得到有关它的适当信息?最后,上面的代码正确吗?

1 个答案:

答案 0 :(得分:3)

是的,您的代码可以正常工作。我承认我没有遇到TFDDatSRow 在您问到q之前,但是看了一下,这很明显。

FireDAC的数据集组件均来自TDataSet,因此符合 用其对数据集操作进行建模的方式,也就是说, 是打开的,它有一个逻辑游标,它恰好位于数据集中的一条记录上方 这是该记录,即Delphi术语中的“活动”记录,对它进行诸如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的作者显然 比我的示例中展示的要多得多。