× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



also i'll add that if i do a RCLRSC between each pgm call, i am able to get
the 2nd pgm to run successfully...
I am not quite sure exactly the safest solution to implement here... any
suggestions?

On Thu, Oct 19, 2017 at 8:28 AM, Jay Vaughn <jeffersonvaughn@xxxxxxxxx>
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.

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
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?
g_hostData is simply a char value.

To the caller, g_HostData is just storeage
(memory). If you
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

--
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 thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

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.