|
Thank you Mel. I'll try that tonight. Just out of curiosity, could another solution be to change the size of the varying field to a much lower number, say 100? I'm not suggesting changing CGIDEV2 just trying to understand what's going on. 508 x 100 = 50800 I actually have many more than 508 fields (coming from the browser) with none of them greater then 40 in size. Steve > I was able to reproduce this problem on a V5R2 system. > > It appears that the mainline is calling subprocedure ZhbGetVar 508 times > and this is causing the compilation to fail with MCH3216. This could > be either a system limitation (possibly a maximum of 16 MB for values > returned by subprocedures) or a bug (that is, the limitation should not > exist). > > ZhbGetVar returns a 32767 varying field, which is 32769 bytes including > its byte length. 32769 times 508 comes very close to 16 MB. > > You may want to contact IBM service about this problem to see if it can > be fixed or whether it is, in fact, a limitation. > > In the meantime, you can get around the problem by writing your own > subprocedure that calls ZhbGetVar and returns the answer in one of its > own parameters instead of as a return value. Instead of calling > ZhgGetVar, you will call your subprocedure. Then, you will assign that > value obtained by your subprocedure to the target variable. > > Below is sample code (not a complete program; just relevant pieces). > You would need this only in programs that make hundreds of calls to > ZhbGetVar and/or other subprocedures that return a value with a long > length. > > A variable for the value: > D v32K s 32767 varying > > The subprocedure's prototype > D MyGetVar pr > D varname 50 const varying > options(*varsize) D varvalue 32767 varying > D occurrence 10i 0 const options(*nopass) > > The subprocedure's implementation > P MyGetVar b > D MyGetVar pi > D varname 50 const varying > options(*varsize) D varvalue 32767 varying > D occurrence 10i 0 const options(*nopass) > > C if %parms < 3 > C eval varvalue = ZhbGetVar(varname:1) > C else > C eval varvalue = ZhbGetVar(varname:occurrence) C > endif > P MyGetVar e > > Sample use: > C callp mygetvar('custname':v32k) > C eval custname = v32k > > Mel Rothman, CGIDEV2 Author > Mel Rothman, Inc. > > > _______________________________________________ > This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing > list To post a message email: RPG400-L@xxxxxxxxxxxx > To subscribe, unsubscribe, or change list options, > visit: http://lists.midrange.com/mailman/listinfo/rpg400-l > or email: RPG400-L-request@xxxxxxxxxxxx > Before posting, please take a moment to review the archives > at http://archive.midrange.com/rpg400-l.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.