Delphi 使用主键移动到TFDQuery中的特定记录 问题

Delphi 使用主键移动到TFDQuery中的特定记录 问题,delphi,Delphi,我想知道是否有任何方法可以通过只知道表的主键来移动到DataSet FDQuery中的特定记录 我所知道的 我知道我可以使用FDQuery移动到下一个/上一个记录;FDQuery.Prior;或者使用FDQuery.RecNo:=2移动到特定记录编号 在我的例子中,我只知道项目的主键id,我想移动到这个与我的id相同的特定记录 为了明确起见,我可以通过遍历记录来实现这一点,但是,我想知道这是否是一种直接移动到记录的方法,而无需遍历所有记录 with FDQuery do begin Firs

我想知道是否有任何方法可以通过只知道表的主键来移动到DataSet FDQuery中的特定记录

我所知道的 我知道我可以使用FDQuery移动到下一个/上一个记录;FDQuery.Prior;或者使用FDQuery.RecNo:=2移动到特定记录编号

在我的例子中,我只知道项目的主键id,我想移动到这个与我的id相同的特定记录

为了明确起见,我可以通过遍历记录来实现这一点,但是,我想知道这是否是一种直接移动到记录的方法,而无需遍历所有记录

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

最简单的方法是使用Locate boolean函数,如中所示

   if FDQuery.Locate(C_ID, IDAsPrimaryKey, []) then
     // do whatever
有关更多信息,请参见例如

请注意,Locate将接受一个-字段名的分隔列表作为第一个参数。在这种情况下,第二个参数需要是字段值的变量数组,您可以在运行时使用VarArrayOf函数构造该数组

顺便说一句,Locate是在TDataSet类中定义的,但它是否以及如何在特定的组件类中实现取决于给定子体库(如FireDAC)的作者


您还可以使用GoToKey或FindKey方法-请参阅。您可能会发现其中一个比Locate更快,尤其是如果您的数据集主键上已经有客户端索引,但Locate通常更方便和简洁,因为其他的使用起来更冗长。

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

   if FDQuery.Locate(C_ID, IDAsPrimaryKey, []) then
     // do whatever
有关更多信息,请参见例如

请注意,Locate将接受一个-字段名的分隔列表作为第一个参数。在这种情况下,第二个参数需要是字段值的变量数组,您可以在运行时使用VarArrayOf函数构造该数组

顺便说一句,Locate是在TDataSet类中定义的,但它是否以及如何在特定的组件类中实现取决于给定子体库(如FireDAC)的作者


您还可以使用GoToKey或FindKey方法-请参阅。您可能会发现其中一个比Locate更快,尤其是如果您的数据集主键上已经有客户端索引,但Locate通常更方便、简洁,因为其他的使用起来更冗长。

您总是在用delphi救我的命。我以前找到了一些关于locate的东西,但找不到确切的用法。你解释得很详细。谢谢你总是用德尔福救我的命。我以前找到了一些关于locate的东西,但找不到确切的用法。你解释得很详细。谢谢