我使用的是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参考资料和谷歌搜索它。但目前还没有关于这一点的明确文件。我可以猜到它与行类似,但不是行,因为它有一个又长又复杂的名称,而不仅仅是一个tROW。
什么是TFDDatSRow,为什么没有关于它的参考资料,我可以从哪里获得关于它的正确信息?最后,上面的代码是否正确?
发布于 2019-05-12 00:49:50
是的,您的代码运行正常。我承认在你的q之前我没有遇到过TFDDatSRow,但是看过它之后,它的用途就很明显了。
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键单击会将我带到它在FireDac.DatS单元中的声明。看一看,FireDAC的作者显然比我的例子中显示的要多得多。
https://stackoverflow.com/questions/56091817
复制相似问题