我想知道是否可以通过仅了解表的主键来移动到数据集(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;
答案 0 :(得分:4)
最简单的方法是使用Locate
布尔函数,如
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
通常更方便,简洁,因为其他使用起来更加漫长。