使用主键移至TFDQuery中的特定记录

时间:2019-01-31 17:59:21

标签: delphi

问题

我想知道是否可以通过仅了解表的主键来移动到数据集(FDQuery)中的特定记录。

我所知道的

我知道我可以使用FDQuery.Next; FDQuery.Prior;移至下一个/先前的记录,也可以使用FDQuery.RecNo := 2移至特定的记录号。

就我而言,我只知道该项目的主键(id),并且我想移到与我的ID相同的特定记录。

为了清楚起见,我可以通过遍历记录来实现这一点,但是,我想知道是否可以将s直接移到记录而无需遍历所有记录。

with FDQuery do
begin
  First;
  while not Eof do
  begin
    if FieldByName(C_ID).AsInteger = IDAsPrimaryKey then
      // Found!
      Break;
    Next;
  end;
end;

1 个答案:

答案 0 :(得分:4)

最简单的方法是使用Locate布尔函数,如

   if FDQuery.Locate(C_ID, IDAsPrimaryKey, []) then
     // do whatever

例如参见http://docwiki.embarcadero.com/RADStudio/Rio/en/Using_Locate了解更多信息。

请注意,Locate将接受由;分隔的字段名称列表作为第一个参数。在这种情况下,第二个参数需要是字段值,其可以在运行时使用VarArrayOf功能构造的变型阵列。

顺便说一下,LocateTDataSet类中定义的,但它是由像FireDAC给定后代库的作者是否以及如何在特定的组件类实现的。

您还可以使用GoToKeyFindKey方法-请参见http://docwiki.embarcadero.com/RADStudio/Rio/en/Executing_a_Search_with_Goto_Methods。您可能会发现其中之一比Locate更快,特别是如果您的数据集已经在主键上具有客户端索引,但是Locate通常更方便,简洁,因为其他使用起来更加漫长。