|
Vern or Dave (or whoever can answer :))...
so now the handler is working...
I have two small test pgms that call the handler... for a different file in
each pgm...
when i signon and call the pgm for the first one, it works everytime...
then when I call the second pgm, the test pgm fails with
The target for a numeric operation is too small to hold the result.
however if i sign off and back on and call the 2nd test pgm first, it works
fine... it just doesn't like the handler being called with a different file
the second call...
what is that?
both test pgm and handler running in...
h dftActGrp(*No) actGrp(*caller)
On Wed, Oct 18, 2017 at 11:32 AM, Jay Vaughn <jeffersonvaughn@xxxxxxxxx>
wrote:
The latter. Thx! I'll consider what you said.
On Oct 18, 2017 10:58 AM, Vernon Hamberg <vhamberg@xxxxxxxxxxxxxxx> wrote:
Yeah, sometimes better structure is the one that works.procedure passing fld to return the value. Also to contain the null value
As I recall, I have calls to procedures to do conversion - after that,
there's not much structure to deal with - at least in my simple example.
I don't know how to help much here - did you pass the entire nvInput
structure as a parameter? Or use a return value that is what you want to
put in FLD? The latter might initialize stuff coming in, which is what
the behavior sounds like.
Questions - questions - questions!! Good luck on this.
Vern
On 10/18/2017 9:40 AM, Jay Vaughn wrote:
However as an attempt to better structure the code I created a
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
wrote:On Oct 17, 2017 9:40 PM, Vernon Hamberg <vhamberg@xxxxxxxxxxxxxxx>
worked!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
wrote:Now to tighten up the pgm and be done.
On Oct 17, 2017 4:02 PM, Vernon Hamberg <vhamberg@xxxxxxxxxxxxxxx>
programThe 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
as here:- 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,
at the@nvInput= pHdlrInfo.namesValues;
Now you have an RPG variable that is actually the content that is
this one.address namesValues - you don't need an extra DS, you work with
which isNow you get each field's value from the SELECT statement (I used a
4096-character variable, tempval), up to the number of fields,
I setan element of nvInput.
for i= 1 to nvInput.num;
Then you derefence a couple more pointers, for clarity, I suppose:
array,@fld to the address of the i-th element in the handler NV fields
hasand then base the val variable on the pointer in the field DS that
getthe 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),
structure -the length you can use - there's a maximum length in the fld
by thethen 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
call p_dsIOOA 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
another DSthat ds references a pointer called namesValues, which contains
create aof pointers. :) :) :) :)
I'm buried in f'n pointers!
So when i want to assign something to the p_dsIO.namesValues, i
valuelocal 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).
vhamberg@xxxxxxxxxxxxxxx>directly???
i'm lost
On Tue, Oct 17, 2017 at 2:27 PM, Vernon Hamberg <
address ofwrote:
Hi Jay
I think you do NOT want to set the OAR structure pointer to an
thesomething NOT in that structure - that's what this looks like.
So you need a variable BASED on the OAR structure pointer - put
it ischaracter 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
loopstill
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
correctlywhere
i examine each namesValuesDS.value and they are indeed assigned
definitionsfrom g_hostData...
so where can this error be coming from?
also, another small side concern, what if i ever have column
wrote:greater than the 255 chars we defined g_hostData with?
On Tue, Oct 17, 2017 at 1:56 PM, <dlclark@xxxxxxxxxxxxxxxx>
01:29:06"RPG400-L" <rpg400-l-bounces@xxxxxxxxxxxx> wrote on 10/17/2017
%addr(g_hostData(i))PM:
so since namesValuesDS.value is a pointer, i'd need
numericto
assign the pointer of g_hostData(i) correct?Seems logical.
but what if that g_hostData value should be returned as char or
representing?depending on the column that namesValuesDS.value is
(memory). If youg_hostData is simply a char value.To the caller, g_HostData is just storeage
about theonly
need to return a pointer for it then you don't need to worry
pass afact that your program sees it as character storage. When you
Issuespointer then it is IBM code that has to deal with the format.
correctwill
only arise if the value is not in your character storage as
caller orhexadecimal format (packed, binary, or floating-point) for the
field forif you have to move the value from your storage to a numeric
handling Ipassing back the value. That is where and when the special
namedalluded 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
proprietaryaddressee(s) and may contain confidential, privileged and/or
message and allinformation. If you have received this message in error, please
immediately notify the sender and delete and destroy the
of thiscopies. All unauthorized direct or indirect use or disclosure
privilegemessage is strictly prohibited. No right to confidentiality or
(RPG400-L)is waived or lost by any error in transmission.
************************************************************
*********************************
--
This is the RPG programming on the IBM i (AS/400 and iSeries)
relatedmailing 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
affiliatequestions.
Help support midrange.com by shopping at amazon.com with our
(RPG400-L)--link: http://amzn.to/2dEadiD
This is the RPG programming on the IBM i (AS/400 and iSeries)
affiliatemailing 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
(RPG400-L) mailing list--link: http://amzn.to/2dEadiD
This is the RPG programming on the IBM i (AS/400 and iSeries)
questions.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
affiliate link: http://amzn.to/2dEadiDHelp support midrange.com by shopping at amazon.com with our
(RPG400-L) mailing list--
This is the RPG programming on the IBM i (AS/400 and iSeries)
questions.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
affiliate link: http://amzn.to/2dEadiDHelp support midrange.com by shopping at amazon.com with our
--mailing list
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L)
To post a message email: RPG400-L@xxxxxxxxxxxxquestions.
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
Help support midrange.com by shopping at amazon.com with our affiliatelink: 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.