|
However as an attempt to better structure the code I created a procedure passing fld to return the value. Also to contain the null value handling code. And as soon as I did that it messed up the pointer reference or something because when it returned, all the field names were missing from nvInput
On Oct 17, 2017 9:40 PM, Vernon Hamberg <vhamberg@xxxxxxxxxxxxxxx> wrote:
Outstanding!! Glad it works for you!
Vern
On 10/17/2017 7:23 PM, Jay Vaughn wrote:
Vern. Hallelujah. I used your doRead code, compiled, ran and it worked!--
Now to tighten up the pgm and be done.
On Oct 17, 2017 4:02 PM, Vernon Hamberg <vhamberg@xxxxxxxxxxxxxxx> wrote:
The pointers can get you stuck, I know - little joke there!
The stuff in my COMMON presentation has example code in the doRead
procedure, which I'll show here:
D nvInputdslikeds(QrnNamesValues_T)
Dbased(@nvInput)
D islike(TInt)
D lenslike(TInt)
D flddslikeds(QrnNameValue_T)
Dbased(@Fld)
d valslike(T4096String) based(@val)
d rtnBufferslike(T4096String)
d tempValslike(T4096String)
d float4s4f
d float8s8f
nvInput is the names and values for a single record in your RPG program
- it has all the structure you need - I would not move your local DS
into it, as you've broken some pointer relationship, seems to me, in
doing that.
@nvInput is the address to this DS as given to you by RPG in the
namesValues element of the handler DS, and I set @nvInput to that, as here:
@nvInput= pHdlrInfo.namesValues;
Now you have an RPG variable that is actually the content that is at the
address namesValues - you don't need an extra DS, you work with this one.
Now you get each field's value from the SELECT statement (I used a
4096-character variable, tempval), up to the number of fields, which is
an element of nvInput.
for i= 1 to nvInput.num;
Then you derefence a couple more pointers, for clarity, I suppose: I set
@fld to the address of the i-th element in the handler NV fields array,
and then base the val variable on the pointer in the field DS that has
the address of the actual textual data - everything is text here.
// Set pointers for variables - makes debugging easier
@fld= %addr(nvInput.field(i));
@val= fld.value;
Then you do some conversion from the value you got from the SELECT
(convert to character representation that RPG would do with %char), get
the length you can use - there's a maximum length in the fld structure -
then set val to what you want it to be:
fld.valueLenBytes= len;
// Set value
%subst(val: 1 : len) = tempVal;
end for;
You are working directly here with the memory space you are given by the
OA runtime from RPG - no extra DS to muddy the waters.
HTH
Vern
On 10/17/2017 1:54 PM, Jay Vaughn wrote:
i honestly don't know what the structure value pointer is!--
the OAR has a the main ds that is passed as parm to handler, i call p_dsIO
that ds references a pointer called namesValues, which contains another DS
of pointers. :) :) :) :)
I'm buried in f'n pointers!
So when i want to assign something to the p_dsIO.namesValues, i create a
local ds...
d l_dsNames ds likeds(QrnNamesValues_T)
d based(l_dsNames#)
and I reference by l_dsNames.field(i).value...
so then i assign this value and then i move this local ds back to
p_dsIO.namesValues
confusion much. so how would i access p_dsIO.namesValue.field(i).value
directly???
i'm lost
On Tue, Oct 17, 2017 at 2:27 PM, Vernon Hamberg <vhamberg@xxxxxxxxxxxxxxx>
wrote:
Hi Jay
I think you do NOT want to set the OAR structure pointer to an address of
something NOT in that structure - that's what this looks like.
So you need a variable BASED on the OAR structure pointer - put the
character value in that variable, and it should all be fine.
Multiple levels of dereferencing pointers is where we are, right?
HTH
Vern
On 10/17/2017 1:03 PM, Jay Vaughn wrote:
so i'm assigning namesValuesDS.value = %addr(g_hostData(i)) but it is--
still
getting the
A character representation of a numeric value is in error.
And before it returns to the rpg caller, i even have a debugging loop
where
i examine each namesValuesDS.value and they are indeed assigned correctly
from g_hostData...
so where can this error be coming from?
also, another small side concern, what if i ever have column definitions
greater than the 255 chars we defined g_hostData with?
On Tue, Oct 17, 2017 at 1:56 PM, <dlclark@xxxxxxxxxxxxxxxx> wrote:
"RPG400-L" <rpg400-l-bounces@xxxxxxxxxxxx> wrote on 10/17/2017 01:29:06
PM:
so since namesValuesDS.value is a pointer, i'd need %addr(g_hostData(i))to
assign the pointer of g_hostData(i) correct?Seems logical.
but what if that g_hostData value should be returned as char or numeric
depending on the column that namesValuesDS.value is representing?To the caller, g_HostData is just storeage (memory). If you
g_hostData is simply a char value.
only
need to return a pointer for it then you don't need to worry about the
fact that your program sees it as character storage. When you pass a
pointer then it is IBM code that has to deal with the format. Issues
will
only arise if the value is not in your character storage as correct
hexadecimal format (packed, binary, or floating-point) for the caller or
if you have to move the value from your storage to a numeric field for
passing back the value. That is where and when the special handling I
alluded to earlier would come into play.
Sincerely,
Dave Clark
--
int.ext: 91078
direct: (937) 531-6378
home: (937) 751-3300
Winsupply Group Services
3110 Kettering Boulevard >>>> Dayton, Ohio 45439 USA
(937) 294-5331
************************************************************
*********************************
This email message and any attachments is for use only by the named
addressee(s) and may contain confidential, privileged and/or proprietary
information. If you have received this message in error, please
immediately notify the sender and delete and destroy the message and all
copies. All unauthorized direct or indirect use or disclosure of this
message is strictly prohibited. No right to confidentiality or privilege
is waived or lost by any error in transmission.
************************************************************
*********************************
--
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L)
mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.
Please contact support@xxxxxxxxxxxx for any subscription related
questions.
Help support midrange.com by shopping at amazon.com with our affiliate
link: http://amzn.to/2dEadiD
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L)
mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.
Please contact support@xxxxxxxxxxxx for any subscription related
questions.
Help support midrange.com by shopping at amazon.com with our affiliate
link: http://amzn.to/2dEadiD
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.
Please contact support@xxxxxxxxxxxx for any subscription related questions.
Help support midrange.com by shopping at amazon.com with our affiliate link: http://amzn.to/2dEadiD
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.
Please contact support@xxxxxxxxxxxx for any subscription related questions.
Help support midrange.com by shopping at amazon.com with our affiliate link: http://amzn.to/2dEadiD
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.