I have a few questions before I can give an informed answer.
- How many records do you need to read to get your information? Is it the entire file? How big is your file?
- Does this need to run online or can you run it in batch mode?
- Is this a one-time/occasional report or does it need to run frequently?
Some things to get around NAT1009 (too many adabas calls between I/O).
- If the report will be run frequently, consider adding descriptors to the file definition to get to your data directly.
- Look into increasing the limit using the MADIO session parameter.
- If the program runs online, you could add a processing window that pops up at an interval below the MADIO threshold. If I can find an example, I’ll post it below.
1 Like
Here is some copycode that I use to put up a non-interactive window.
**---------------------------------
IF *DEVICE NE 'BATCH'
ADD 1 TO #WAIT-CTR
ADD 1 TO #WAIT-TOTAL
IF #WAIT-CTR GE #WAIT-LIMIT
RESET #WAIT-CTR
SET CONTROL 'WFNC11L38B8/20'
SET CONTROL 'N'
INPUT (IP=OFF)
/ 005T 'Processing your request.'
// 005T 'Total records:' #WAIT-TOTAL (AD=OI )
SET CONTROL 'WBM'
END-IF
END-IF
**---------------------------------
You will need to define #WAIT-CTR, #WAIT-TOTAL, and #WAIT-LIMIT in your program and initialize #WAIT-LIMIT to a reasonable number, e.g. 20 or 100.
1 Like
About 60.000 records.
No, it’s not the entire file.
It will be running online, but only if a specific functionality is used.
It’s not a report, it is really a processing that needs to be done in real time when a search functionality is used.
Thanks Jerome, for your tips!
I found this interesting. I tried to do this with a LIMIT of 500, but when the research reaches 9.500 records, the program ABENDS… 
You probably defined #WAIT-LIMIT as (N4). Try making it an (I4) which can handle much larger numbers. Integers are also more efficient for Natural counters.
1 Like
Thank you, Jerome!
Yes. I changed to I4 and I got more than 200.000 records read… 
Thank you so much1
1 Like
This may be a case to change:
FIND WITH WHERE
To:
FIND WITH AND
This will reduce the number of records sent from ADABAS to NATURAL,
And thus reduce the number of ADABAS calls and perhaps avoid MADIO limit.
Of course you will have to mark the non-DE fields in DDM as “N”.
Eugene (Gene) Miklovich
ADABAS/NATURAL Systems Support and DBA
Cell: 916-202-7047
Normal Hours: 8am-4pm E.T.
Please call or text if assistance needed outside these hours.
Out of Office Thursday Mar 9th-Sat Mar 11th.
1 Like
Hi. I would like to be able to do this, but I not all of my search fields are descriptors, actually there’s only one descriptor… my FIND is like this at the moment:
FIND MY-VIEW WITH F1 = #NUM-CODE
WHERE F2 = 'R' OR = 'S'
AND F3 = #YEAR
AND F4 > 0
I already tried to change the fields in WHERE for ACCEPTS and REJECTs inside the FIND, but then the error changes to NAT3021: An invalid CID value was detected after many calls.
I don’t know what to do now… Thanks by the way, Eugene.
Get the DBA to change the DDM to make fields F2, F3 and F4 = “N” in the descriptor column of PREDICT instead of a blank. Then regenerate DDM. This causes no changes to the physical file in ADABAS only allows NATURAL to use non-DE in WITH clause. DBA may also need to change ADARUN parms to allow non-DE searches. Ultimately this is more efficient.
Eugene (Gene) Miklovich
ADABAS/NATURAL Systems Support and DBA
Cell: 916-202-7047
Normal Hours: 8am-4pm E.T.
Please call or text if assistance needed outside these hours.
Out of Office Thursday Mar 9th-Sat Mar 11th.
1 Like