我正在努力通过
FOR EACH
从表中仅获取前 2 条记录。
我的目标是只读取表中的前 2 条记录,并将一个字段值保存到变量中。
假设我有表
MyTable
,其中包含字段 PartNr
、CreationDate
、Company
、ID
。
我的
FOR EACH
声明将如下所示:
FOR EACH MyTable
WHERE MyTable.Company = "TestCompany"
AND MyTable.CreationDate >= 01.01.2021
NO-LOCK:
END.
例如,FOR EACH 语句会找到 15 条记录。然而我只需要前两个。 我想将
PartNr
记录的 first
存储在一个变量中,并将 PartNr
记录的 second
存储在另一个变量中。
之后
FOR EACH
语句应该结束。
我也尝试过使用
FIND FIRST
,但我不知道如何获取第二条记录。
在使用
python
时,我几乎正在寻找 break
相当于 loops
关键字。
非常感谢任何帮助。
DEFINE VARIABLE iCounter AS INTEGER NO-UNDO .
myLoop:
FOR EACH MyTable
WHERE MyTable.Company = "TestCompany"
AND MyTable.CreationDate >= 01.01.2021
NO-LOCK:
iCounter = iCounter + 1 .
IF iCounter = 2 THEN
LEAVE myLoop .
END.
如果它确实是您事先知道的有限次数的迭代,并且如果您根据您所达到的记录执行不同的逻辑,那么您也可以使用静态查询。它可能会使代码更清晰。
类似这样的:
OPEN QUERY qMyQuery
FOR EACH MyTable
WHERE MyTable.Company = "TestCompany"
AND MyTable.CreationDate >= 01.01.2021
NO-LOCK.
QUERY qMyQuery:GET-FIRST.
QUERY qMyQuery:GET-NEXT.
CLOSE QUERY qMyQuery.
我知道这已经晚了,但是 FOR 语句还有另一个内置解决方案,
[variable = expression1 TO expression2[ BY k ]]
DEF VAR v-idx AS INT NO-UNDO.
FOR EACH MyTable
WHERE MyTable.Company = "TestCompany" AND
MyTable.CreationDate >= 01.01.2021
v-idx = 1 to 2 // << Loop limit
NO-LOCK:
if v-idx = 1 then do:
// store the PartNr
end.
else do: // 2
// store the PartNr in another variable
end.
end. // ends after the 2nd record
请注意,这是限制记录的基本方法,但不是分页解决方案,因为它不执行偏移+限制。 假设您可以在循环中自己使用此变量作为计数器来执行此操作。