如何省略 FOR EACH 语句正在进行中?

问题描述 投票:0回答:3

我正在努力通过

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
关键字。

非常感谢任何帮助。

openedge progress-4gl
3个回答
7
投票
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.

1
投票

如果它确实是您事先知道的有限次数的迭代,并且如果您根据您所达到的记录执行不同的逻辑,那么您也可以使用静态查询。它可能会使代码更清晰。

类似这样的:

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.

0
投票

我知道这已经晚了,但是 FOR 语句还有另一个内置解决方案,

[variable = expression1 TO expression2[ BY k ]]

FOR 语句

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

请注意,这是限制记录的基本方法,但不是分页解决方案,因为它不执行偏移+限制。 假设您可以在循环中自己使用此变量作为计数器来执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.