Re: Misunderstanding with JDBCR4
Ron Unknown <[email protected]>
| Newsgroups | gmane.comp.lang.as400.c |
|---|---|
| Message-ID | <BY2PR18MB0440B1C13F7C6064B8E9E5B6AA9C0@BY2PR18MB0440.namprd18.prod.outlook.com> |
Jevgeni, I am not sure, it has been so long since I have messed with 400s, but is the pointer given an initial value before calling the program? something like: Dcl Y-Ptr * init(*null) or based(*null) not sure of the syntax any more, before it is called so that the sytem knows it is a pointer? ________________________________ From: C400-L <c400-l-bounces-Zwy7GipZuJhWk0Htik3J/[email protected]> on behalf of Jevgeni Astanovski <[email protected]> Sent: Friday, December 16, 2016 2:55 AM To: Bare Metal Programming IBM i (AS/400 and iSeries) Subject: [C400-L] Misunderstanding with JDBCR4 Hi, collegues Having a challenge of accessing external database from my ILE/C program, looked at Scott Klement JDBCR4. As I do not write RPG, had to spend some time porting library header from RPG to C. Not a big job. Generally works fine. However when I tried to see how JDBC_GetCol returns NullInd in case field is empty, ran into a problem. JDBC_GetCol is prototyped so: VAR32767 JDBC_GETCOL(RESHANDLE *, int, char *) ; VAR32767 and RESHANDLE are my defined types and they work fine. I call this function in my program: RESHANDLE rs ; char NullInd ; VAR32767 Field ; Field = JDBC_GETCOL(&rs, 48, &NullInd) ; It returns field value fine, however NullInd is always unchanged - field is empty or not. Run in debugger mode to see what Scott's program does. His function looks so: P JDBC_GetCol B export D JDBC_GetCol PI 32767A varying D rs like(ResultSet) D col 10I 0 value D nullInd 1N options(*nopass:*omit) D result s 32767A varying D str s like(jstring) D null s 1N inz(*OFF) /free jdbc_begin_object_group(5); monitor; str = getColString(rs: col); if (str = *NULL); result = ''; null = *ON; else; result = r(str); endif; on-error; null = *ON; result = ''; endmon; jdbc_end_object_group(); if (%parms >= 3 and %addr(nullInd)<>*NULL); nullInd = Null; endif; return result; /end-free Sorry for the formatting... What my debugging show is that Null variable has a proper value, but is never assigned to nullInd. I added NumParms variable and assigned value of %parms to it. From that I saw that NumParms is -1, however all 3 parameters are passed. Had a look at the manual for %parms. It says the following: "The value returned by %PARMS will be -1 if the system can determine that the operational descriptor was not passed, but in some cases when the system cannot detect this, the value returned by %PARMS may be an incorrect value that is zero or greater." Is there anything I can do about it? Any advise will be highly appreciated... Jevgeni. -- This is the Bare Metal Programming IBM i (AS/400 and iSeries) (C400-L) mailing list To post a message email: C400-L-Zwy7GipZuJhWk0Htik3J/[email protected] To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/c400-l C400-L Info Page - midrange.com<http://lists.midrange.com/mailman/listinfo/c400-l> lists.midrange.com The topic of the list is C, C++, and MI Programming on and for the IBM i (AS/400 and iSeries). This includes programming on other platforms in C/C++ when it RELATES ... or email: C400-L-request-Zwy7GipZuJhWk0Htik3J/[email protected] Before posting, please take a moment to review the archives at http://archive.midrange.com/c400-l. midrange.com -- C400-L mailing list archive<http://archive.midrange.com/c400-l> archive.midrange.com midrange.com C400-L mailing list archive -- This is the Bare Metal Programming IBM i (AS/400 and iSeries) (C400-L) mailing list To post a message email: C400-L-Zwy7GipZuJhWk0Htik3J/[email protected] To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/c400-l or email: C400-L-request-Zwy7GipZuJhWk0Htik3J/[email protected] Before posting, please take a moment to review the archives at http://archive.midrange.com/c400-l.