On 3/30/11 2:39 PM, jmmckee wrote:
I don't men to ask a programming question. Just need somebody else's
eyeballs to look at a OPNQRYF. PDM is complaining "The end of the
expression is expected" and has highlighted a line I will highlight
with >>> and <<<. The purpose of the mapped fields is to convert a
numeric date stored as yymmdd to character and append that to a
century. I am obviously missing something. May be making it harder
than it needs to be.

I appreciate your thoughts.

eval cmdbuf = 'opnqryf ' +
'file((badplpp)) qryslt(''' +
'dscdte *ge "' + start + '" *and ' +
'dscdte *le "' + end + '" *and hsp ' +
'*eq "' + hsp + '"'') keyfld((' +
'lpmrc#) (lpacct)) mapfld((' +
'lpcen2#c lpcen2 *char 2) ' +
'(lpldd#c lpldd *char 6) ' +
'(mmdd#c %sst(lpldd#c 3 4) *char 4) ' +
>>> '(yy#c %sst(lpldd#c 1 2) *char 2) ' + <<<
'(dscdte lpcen2#c || yy#c ' +
'|| mmdd#c'' *char 8)' +
' (lphsp#z lphsp# *zoned 3 0 ) ' +
'(hsp lphsp#z *char 3))'


Presumably "PDM complaining" means to imply either the compiler or SEU issues an error, and from the text "The end of the expression is expected" I would guess most likely the former [as text from RNF5377].?

Other than the apostrophes missing for the expression in each of the MAPFLD "Field definition expression" [except one; i.e. included only after field name mmdd#c two lines beyond the highlighted line], I do not see anything obviously incorrect. Nothing that should cause the string expression to give an error, even though the command string itself would be ill-formed. Even properly formed however, such a query would not typically be functional, without also having a FORMAT() specified, since fields that are not already defined in the record format of the FILE() can not be generated dynamically like a "result field" in a query definition.

FWiW my preference would be to format the text differently, in a manner that I find easier to read:

<code>

cmdbuf = 'opnqryf' +
' file((badplpp))' +
' qryslt(''' +
' dscdte *ge "' + start + '" *and' +
' dscdte *le "' + end + '" *and' +
' hsp *eq "' + hsp + '"' +
''')' +
' keyfld((lpmrc#) (lpacct))' +
' mapfld(' +
' (lpcen2#c ''lpcen2 '' *char 2 )' +
' (lpldd#c ''lpldd '' *char 6 )' +
' (mmdd#c ''%sst(lpldd#c 3 4) '' *char 4 )' +
' (yy#c ''%sst(lpldd#c 1 2) '' *char 2 )' +
' (dscdte ''lpcen2#c || yy#c ' +
' || mmdd#c '' *char 8 )' +
' (lphsp#z ''lphsp# '' *zoned 3 0)' +
' (hsp ''lphsp#z '' *char 3 )' +
')'

</code>

Each MAPFLD element for which the expression is just a field name does not require the apostrophes, but for consistency across each element aligning under the previous, including those apostrophes as well is better IMO for readability.

Note also that casting to *char from a numeric, the expression might best be written or actually require '%digits(numeric_field)' for correct results versus just the column name numeric_field specified.

Regards, Chuck

As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

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.