|
First thing, Jay, try to get the dump from that message, if it's available
- do F9 on the message to get more info like where the error is taking
place - in the handler or in your program?
V.
On 10/19/2017 7:28 AM, Jay Vaughn wrote:
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.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 aprocedure passing fld to return the value. Also to contain the null
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 itworked!
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!
program
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
- 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, inas here:
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,
@nvInput= pHdlrInfo.namesValues;
at the
Now you have an RPG variable that is actually the content that is
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.
I set
for i= 1 to nvInput.num;
Then you derefence a couple more pointers, for clarity, I suppose:
@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.
get
// 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),
the length you can use - there's a maximum length in the fld
structure -
then set val to what you want it to be:
by the
fld.valueLenBytes= len;
// Set value
%subst(val: 1 : len) = tempVal;
end for;
You are working directly here with the memory space you are given
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!call p_dsIO
the OAR has a the main ds that is passed as parm to handler, i
that ds references a pointer called namesValues, which contains
another DS
of pointers. :) :) :) :)
create a
I'm buried in f'n pointers!
So when i want to assign something to the p_dsIO.namesValues, i
local ds...
value
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).
directly???
vhamberg@xxxxxxxxxxxxxxx>
i'm lost
On Tue, Oct 17, 2017 at 2:27 PM, Vernon Hamberg <
wrote:
Hi Jay
address of
I think you do NOT want to set the OAR structure pointer to an
something NOT in that structure - that's what this looks like.
the
So you need a variable BASED on the OAR structure pointer - put
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 theloop
A character representation of a numeric value is in error.
And before it returns to the rpg caller, i even have a debugging
where
i examine each namesValuesDS.value and they are indeed assignedcorrectly
from g_hostData...
definitions
so where can this error be coming from?
also, another small side concern, what if i ever have column
greater than the 255 chars we defined g_hostData with?
wrote:
On Tue, Oct 17, 2017 at 1:56 PM, <dlclark@xxxxxxxxxxxxxxxx>
"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
numeric
assign the pointer of g_hostData(i) correct?
Seems logical.
but what if that g_hostData value should be returned as char or
depending on the column that namesValuesDS.value is
representing?
g_hostData is simply a char value.
(memory). If you
To the caller, g_HostData is just storeage
only
need to return a pointer for it then you don't need to worryabout 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 ascorrect
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.
named
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
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 themessage 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.
************************************************************(RPG400-L)
*********************************
--
This is the RPG programming on the IBM i (AS/400 and iSeries)
mailing list
To post a message email: RPG400-L@xxxxxxxxxxxxrelated
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
questions.
affiliate
Help support midrange.com by shopping at amazon.com with our
link: http://amzn.to/2dEadiD
(RPG400-L)This is the RPG programming on the IBM i (AS/400 and iSeries)
--
mailing list
To post a message email: RPG400-L@xxxxxxxxxxxxaffiliate
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
link: http://amzn.to/2dEadiD
(RPG400-L) mailing listThis is the RPG programming on the IBM i (AS/400 and iSeries)
--
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,questions.
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
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,questions.
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
affiliate link: http://amzn.to/2dEadiD
--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
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.