3

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.

Tom Bascom
  • 13,405
  • 2
  • 27
  • 33
Smokus
  • 149
  • 1
  • 9
  • 3
    Quite amusing how the title of your question contains the answer :-) https://docs.progress.com/bundle/openedge-abl-reference-122/page/LEAVE-statement.html – Stefan Drissen Apr 27 '21 at 20:58

2 Answers2

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.
Mike Fechner
  • 6,627
  • 15
  • 17
1

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.
jdpjamesp
  • 762
  • 7
  • 19