delphi - 使用主键移动到 TFDQuery 中的特定记录

标签 delphi

问题

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

我所知道的

我知道我可以使用 FDQuery.Next; 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 bool 函数,如下所示

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

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

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

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

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

关于delphi - 使用主键移动到 TFDQuery 中的特定记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54466632/

相关文章:

Delphi:如何以请求的宽度和行数绘制一些文本,并以省略号结尾?

delphi - 在 While 循环中使用Continue

delphi - 链接两个独立的MDB( Access 数据库)文件,而不是表

c++ - 从 C++ dll 调用 delphi 应用程序中的函数

delphi - 使用 Delphi 2010 和 Indy 的 cookies

delphi - 如何在不更新图标的情况下更改快捷方式路径?

delphi - 当我们只知道程序的地址时如何执行它?

delphi - 获取作为通用参数传递的枚举大小和名称

android - 为什么我的 Android 应用程序突然退出?