RE: Shelling out CRTLF via QCMDEXC -- question about success/failure
"Birgitta Hauser" <Hauser-bRAHsVz2yv4TVIZRl6KS/[email protected]> Tue, 9 Jun 2026 18:19:03 +0200
| Newsgroups | gmane.comp.hardware.ibm.midrange |
|---|---|
| Message-ID | <[email protected]> |
Most time I need to know: It did not work ... why? Mit freundlichen Grüßen / Best regards Birgitta Hauser Modernization – Education – Consulting on IBM i Database and Software Architect IBM Champion since 2020 "Shoot for the moon, even if you miss, you'll land among the stars." (Les Brown) "If you think education is expensive, try ignorance." (Derek Bok) "What is worse than training your staff and losing them? Not training them and keeping them!" "Train people well enough so they can leave, treat them well enough so they don't want to. " (Richard Branson) "Learning is experience … everything else is only information!" (Albert Einstein) -----Original Message----- From: MIDRANGE-L <[email protected]> On Behalf Of Jon Paris Sent: Tuesday, 9 June 2026 18:16 To: Midrange Systems Technical Discussion <[email protected]> Subject: Re: Shelling out CRTLF via QCMDEXC -- question about success/failure For me, I tend to use system() if I need to know what message caused the error, but don't care about the message text or substitution variables. That is probably 90%+ of all cases. I like system() because its intent is obvious (unlike the SQL examples) and easy to test for an error. Most times all you want is "did it work". Jon Paris [email protected] > On Jun 9, 2026, at 10:57 AM, Rob Berendt <[email protected]> wrote: > > I was a big fan of system(), until I was not. I forget why. Others > have alluded to the ease of getting the error with QCAPCMD instead. > Perhaps that was it. > > On Tue, Jun 9, 2026 at 8:35 AM Vern Hamberg via MIDRANGE-L < > [email protected]> wrote: > >> Hi Birgitta >> >> Yes, the system() function returns an integer, 0 if the command is >> successful. And, according to the reference, we have this - >> >>> If the system() function fails, the global variable _EXCP_MSGID in >>> <stddef.h> is set with the exception message ID. >> >> *Regards* >> >> *Vern Hamberg* >> >> IBM Champion 2025 <cid:[email protected]> CAAC >> (COMMON Americas Advisory Council) IBM Influencer 2023 >> >> >> On 6/9/2026 1:53 AM, Birgitta Hauser wrote: >>> Jon and AI >>> >>> How you'd get the CPF-Msg which is checked in the example if only an >> error code is returned? ;) >>> >>> When using QCMDEXC it is possible to trap the system error message! >>> >>> Mit freundlichen Grüßen / Best regards >>> >>> Birgitta Hauser >>> Modernization – Education – Consulting on IBM i Database and >>> Software Architect IBM Champion since 2020 >>> >>> "Shoot for the moon, even if you miss, you'll land among the stars." >> (Les Brown) >>> "If you think education is expensive, try ignorance." (Derek Bok) >>> "What is worse than training your staff and losing them? Not >>> training >> them and keeping them!" >>> "Train people well enough so they can leave, treat them well enough >>> so >> they don't want to. " (Richard Branson) >>> "Learning is experience … everything else is only information!" >>> (Albert >> Einstein) >>> >>> >>> -----Original Message----- >>> From: MIDRANGE-L<[email protected]> On Behalf Of >> Jon Paris >>> Sent: Monday, 8 June 2026 23:41 >>> To: Midrange Systems Technical >>> Discussion<[email protected]> >>> Subject: Re: Shelling out CRTLF via QCMDEXC -- question about >> success/failure >>> >>> Personally, I'd use the system() function. Much easier to test for >> errors and determine the root failure message. >>> >>> Google's AI came up with this example whcih I have not tested but it >> looks about right. >>> >>> **free >>> // Modern control specifications—no bnddir('QC2LE') needed! >>> ctl-opt dftactgrp(*no); >>> >>> // Prototype for the C system() function dcl-pr runCommand int(10) >> extproc('system'); >>> cmdString pointer value options(*string); end-pr; >>> >>> // Import system variable to capture error message IDs dcl-s >>> errorMsg >> char(7) import('_EXCP_MSGID'); >>> >>> // Variable to store the return code dcl-s returnCode int(10); >>> >>> // Execute a CL command directly >>> returnCode = runCommand('CLRPFM FILE(MYLIB/MYFILE)'); >>> >>> // Check for execution failure >>> if returnCode <> 0; >>> if errorMsg = 'CPF3142'; // File not found >>> // Handle specific error logic here >>> endif; >>> endif; >>> >>> *inlr = *on; >>> >>> >>> Jon Paris >>> [email protected] >>> >>> >>> >>>> On Jun 8, 2026, at 5:31 PM, James H. H. Lampert via MIDRANGE-L< >> [email protected]> wrote: >>>> >>>> I've got a project in which I will be using a QCMDEXC call to shell >>>> out >> a CRTLF (from a generated source member). What is the easiest way for >> the calling program to determine whether the CRTLF was successful? >>>> >>>> -- >>>> JHHL >>>> -- >>>> This is the Midrange Systems Technical Discussion (MIDRANGE-L) >>>> mailing list To post a message email:[email protected] >>>> To subscribe, unsubscribe, or change list options, >>>> visit:https://lists.midrange.com/mailman/listinfo/midrange-l >>>> or email:[email protected] >>>> Before posting, please take a moment to review the archives at >>>> https://archive.midrange.com/midrange-l. >>>> >>>> Please [email protected] for any subscription >> related questions. >>>> >>> -- >>> This is the Midrange Systems Technical Discussion (MIDRANGE-L) >>> mailing >> list To post a message email:[email protected] To >> subscribe, unsubscribe, or change list options, >>> visit:https://lists.midrange.com/mailman/listinfo/midrange-l >>> or email:[email protected] >>> Before posting, please take a moment to review the archives >>> athttps:// >> archive.midrange.com/midrange-l. >>> >>> Please [email protected] for any subscription >>> related >> questions. >>> >>> >> -- >> This is the Midrange Systems Technical Discussion (MIDRANGE-L) >> mailing list To post a message email: [email protected] >> To subscribe, unsubscribe, or change list options, >> visit: https://lists.midrange.com/mailman/listinfo/midrange-l >> or email: [email protected] >> Before posting, please take a moment to review the archives at >> https://archive.midrange.com/midrange-l. >> >> Please contact [email protected] for any subscription >> related questions. >> >> > -- > This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing > list To post a message email: [email protected] To > subscribe, unsubscribe, or change list options, > visit: https://lists.midrange.com/mailman/listinfo/midrange-l > or email: [email protected] > Before posting, please take a moment to review the archives at > https://archive.midrange.com/midrange-l. > > Please contact [email protected] for any subscription related questions. > -- This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing list To post a message email: [email protected] To subscribe, unsubscribe, or change list options, visit: https://lists.midrange.com/mailman/listinfo/midrange-l or email: [email protected] Before posting, please take a moment to review the archives at https://archive.midrange.com/midrange-l. Please contact [email protected] for any subscription related questions. -- This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing list To post a message email: [email protected] To subscribe, unsubscribe, or change list options, visit: https://lists.midrange.com/mailman/listinfo/midrange-l or email: [email protected] Before posting, please take a moment to review the archives at https://archive.midrange.com/midrange-l. Please contact [email protected] for any subscription related questions.