首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是TFDDatSRow?

什么是TFDDatSRow?
EN

Stack Overflow用户
提问于 2019-05-11 23:38:14
回答 1查看 284关注 0票数 3

我使用的是Delphi10.3。我尝试创建一个内存数据库,将数据附加到其中,并在其中查找数据。

我参考其他人的代码写了下面的代码,它工作得很好。

代码语言:javascript
复制
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参考资料和谷歌搜索它。但目前还没有关于这一点的明确文件。我可以猜到它与行类似,但不是行,因为它有一个又长又复杂的名称,而不仅仅是一个tROW。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-12 00:49:50

是的,您的代码运行正常。我承认在你的q之前我没有遇到过TFDDatSRow,但是看过它之后,它的用途就很明显了。

FireDAC的数据集组件都是从TDataSet派生出来的,因此符合其对数据集操作建模的方式,也就是说,当一个数据集打开时,它有一个逻辑游标,该游标恰好位于数据集中的一条记录上,它就是该记录,用Delphi语言来说就是“活动的”记录,在该记录上发生了EditPostFieldByName等操作。这可以很好地工作,但会使一些操作变得不可能,例如同时处理两个记录,例如当您想要在两个不同的记录之间交换值时,因为它们不能同时是数据集的活动记录。

我说过,TFDDatSRow的用途非常明显,一件事就是允许对2条或更多条记录进行这种并发访问。

例如,下面的代码

代码语言:javascript
复制
  FDMemTable1.First;
  FDDatsRow1 := FDMemTable1.GetRow;
  FDMemTable1.Next;
  FDDatsRow2 := FDMemTable1.GetRow;

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

支持将数据从第二行传输到第一行,这在没有TFDDatSRow的情况下是不可能的。

为什么没有文档化?不知道,去问EMBA吧。

我是怎么发现它的方法的?很简单,我声明了一个变量

代码语言:javascript
复制
 var FDDatSRow1 : TFDDatSRow;

然后输入

代码语言:javascript
复制
  FDDatSRow1.

IDE的代码自动补全功能将它们弹出。

此外,选择TFDDatSRow并按住Ctrl键单击会将我带到它在FireDac.DatS单元中的声明。看一看,FireDAC的作者显然比我的例子中显示的要多得多。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56091817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档