我使用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,为什么没有关于它的参考,我在哪里可以得到有关它的适当信息?最后,上面的代码正确吗?
答案 0 :(得分:3)
是的,您的代码可以正常工作。我承认我没有遇到TFDDatSRow 在您问到q之前,但是看了一下,这很明显。
FireDAC的数据集组件均来自TDataSet,因此符合
用其对数据集操作进行建模的方式,也就是说,
是打开的,它有一个逻辑游标,它恰好位于数据集中的一条记录上方
这是该记录,即Delphi术语中的“活动”记录,对它进行诸如Edit
,Post
,FieldByName
之类的操作,
等发生。这可以正常工作,但无法进行某些操作,例如工作
同时记录在两个记录上当您想在两个之间交换价值时
不同的记录,因为它们不能同时成为数据集的活动记录。
我说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的作者显然
比我的示例中展示的要多得多。