How to leave out of FOR EACH statement in Progress?

Viewed 796

I am struggling with getting only first 2 records from a table via FOR EACH. My goal is to read only first 2 records from a table, and save one field value to the variables.

Let's say I have the table MyTable with fields PartNr, CreationDate, Company, ID.

My FOR EACH statement would look like this:

FOR EACH MyTable
   WHERE MyTable.Company = "TestCompany"
      AND MyTable.CreationDate >= 01.01.2021
   NO-LOCK:
   
END.

That FOR EACH statement would find 15 records for example. I however only need the first two. I would like to store the PartNr of the first record in a variable, and the PartNr of the second record in another variable.

After that the FOR EACH statement should end.

I have tried using FIND FIRST as well, but I don't know how to get the second record then.

I am pretty much looking for a python equivalent of break keyword when using loops.

Any help is much appreciated.

2 Answers
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.

If it really is a finite number of iterations that you know in advance, and if you are doing different logic based on the record you're up to, then you could also use a static query. It might make for cleaner code.

Something like this:

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.
Related