|
I have a program that used to work fine in a straight character
environment, but it was recently converted to graphic data. Something's
changed in the way the parameters are coming in and I can't figure out
what's going on.
Here is the prototype of the module:
D getSqFt pr
D gsqMCU 12c Varying
D gsqItm 8s 0
D gsqUM 2c Varying
D gsqFactor 15s 7
D sqlNull1 5i 0
D sqlNull2 5i 0
D sqlNull3 5i 0
D sqlOutNull 5i 0
D sqlState 5
D sqlFuncNm 517 Varying
D sqlSpecName 128 Varying
D sqlMsgTxt 70 Varying
D sqlScrPad 20
D sqlFinalFlg 5i 0
The 2 lines denoted with BR01 are 2 of the lines I converted from character
to graphic definition.
When I run this in the debugger utilizing the following SQL statement, the
field values are not correct.
SQL:
select imitm,imuom1,getsqft(ibmcu, imitm, imuom1)
from f4101 join f4102 on imitm=ibitm where imitm=144206
Values:
GSQMCU = 000CFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
GSQITM = 00144206
GSQUM = 0002FEFE
The equivalent character values of the 2 fields should be:
GSQMCU = ' 00203'
GSQUM = 'PC'
The tables are defined as 13488.
----------------------------------------------------
If it helps any, here is the complete program:
H NoMain Option(*SrcStmt : *NoDebugIO) Ccsid(*UCS2 : 13488)
*
* BR01 05Sep06 Transition to UCS2 data required change to logic.
*
*
FF41002_1 if e k disk UsrOpn
D getSqFt pr
D gsqMCU 12c Varying
D gsqItm 8s 0
D gsqUM 2c Varying
D gsqFactor 15s 7
D sqlNull1 5i 0
D sqlNull2 5i 0
D sqlNull3 5i 0
D sqlOutNull 5i 0
D sqlState 5
D sqlFuncNm 517 Varying
D sqlSpecName 128 Varying
D sqlMsgTxt 70 Varying
D sqlScrPad 20
D sqlFinalFlg 5i 0
P*
P* getSqFt : Feed in the Optional MCU, Item Number, UM to convert and
P* return the conversion factor to SqFt.
P*
P* To Compile:
P* CrtRpgMod module(produsr/getSqFt ) srcfile(produsr/qrpglesrc)
dbgview(*list)
P* CrtSrvPgm srvpgm(produsr/getSqFt ) export(*all)
P* CREATE FUNCTION PRODDTA/GETSQFT (VARGRAPHIC (12), NUMERIC(8,0),
VARGRAPHIC (2))
P* RETURNS NUMERIC (15,7)
P* LANGUAGE RPGLE
P* DETERMINISTIC
P* NO SQL
P* RETURNS NULL ON NULL INPUT
P* NO EXTERNAL ACTION
P* ALLOW PARALLEL
P* FINAL CALL
P* SCRATCHPAD 20
P* PARAMETER STYLE DB2SQL
P* EXTERNAL NAME 'PRODUSR/GETSQFT(GETSQFT)'
P*
P getSqFt b Export
D getSqFt pi
D gsqMCU 12c Varying
D gsqItm 8s 0
D gsqUM 2c Varying
D gsqFactor 15s 7
D sqlNull1 5i 0
D sqlNull2 5i 0
D sqlNull3 5i 0
D sqlOutNull 5i 0
D sqlState 5
D sqlFuncNm 517 Varying
D sqlSpecName 128 Varying
D sqlMsgTxt 70 Varying
D sqlScrPad 20
D sqlFinalFlg 5i 0
* Work Fields
/Free
// The SQL Final Flag is a signal specifying whether this is the
// first, continuing, or last call to the procedure.
If sqlFinalFlg = 1 ;
If %Open(F41002_1) ;
Close F41002_1;
EndIf ;
*InLR = *On ;
Return ;
EndIf ;
If sqlFinalFlg = -1 ;
If Not %Open(F41002_1) ;
Open F41002_1;
EndIf ;
EndIf ;
gsqFactor = 0 ;
Chain (gsqMCU:gsqItm:gsqUM) F41002_1;
If Not %Found(F41002_1) ;
Chain (%UCS2(' '):gsqItm:gsqUM) F41002_1;
If Not %Found(F41002_1) ;
Return ;
EndIf ;
EndIf ;
gsqFactor = umconv * .0000001 ;
Return ;
/End-Free
P getSqFt e
-------------------------------------------------------------------
Am I missing anything?
Bill
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 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.