问题
我想知道是否有任何方法可以通过只知道表的主键来移动到数据集中的特定记录(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)的作者类。
您还可以使用 GoToKey
或 FindKey
方法 - 请参阅 http://docwiki.embarcadero.com/RADStudio/Rio/en/Executing_a_Search_with_Goto_Methods 。您可能会发现其中一个或另一个比 Locate
更快,特别是如果您的数据集已经在主键上有客户端索引,但 Locate
通常更方便,并且简洁,因为其他的使用起来比较冗长。
关于delphi - 使用主键移动到 TFDQuery 中的特定记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54466632/