View previous topic :: View next topic
Author
Message
sushanth bobby Senior Member Joined: 29 Jul 2008Posts: 1020 Location: India
Hi,
I am trying to retreive data in ISPF tables using panels.
In the first panel, i will be entering a limit value. And, if the limit is blank, another panel should display all the rows and if the limit is non blank value, another panel should display rows less than that value.
For TBSCAN, i am getting return code as 8, i don't know where i am making the mistake.
Here is my rexx code
Code:
/* REXX */
"ISPEXEC LIBDEF ISPPLIB DATASET ID('HXSULL.PANEL')"
"ALLOC DA('HXSULL.TEST(CD)') F(INPUT) SHR REUSE"
"EXECIO * DISKR INPUT (STEM DBDET. FINIS"
"ISPEXEC TBCREATE TABDET KEYS(ID)
NAMES(ACTION DB TBNAME ROWS)
NOWRITE "
DO I=1 TO DBDET.0
ID = I
DB = WORD(DBDET.I,1)
TBNAME = WORD(DBDET.I,2)
ROWS = WORD(DBDET.I,3)
"ISPEXEC TBADD TABDET"
END
"ISPEXEC TBTOP TABDET"
/* TEST FOR RETREVING DATA BASED ON CONDITIONS */
"ISPEXEC DISPLAY PANEL(P$TABRO1)"
SAY 'LENGTH : ' LENGTH(LIM)
IF LENGTH(LIM) = 0 THEN
"ISPEXEC TBDISPL TABDET PANEL(P$TABROW)" /* ALL ROWS */
ELSE
DO
ROWS = LIM
"ISPEXEC TBSARG TABDET NEXT NAMECOND(ROWS,LT)"
SAY 'RC TBSARG ' RC
"ISPEXEC TBSCAN TABDET "
SAY 'RC TBSCAN ' RC
"ISPEXEC TBDISPL TABDET PANEL(P$TABROL)" /* Limited Rows */
SAY 'RC TBDISPL' RC
END
Here are my panel definations,
The first panel which gets the limit value, HXSULL.PANEL(P$TABRO1)
Code:
)ATTR DEFAULT(%+_)
$ TYPE(INPUT) INTENS(LOW) PAD(_) CAPS(ON)
! TYPE(INPUT) INTENS(LOW) PAD(' ') CAPS(OFF)
` TYPE(OUTPUT) INTENS(HIGH)
)BODY EXPAND(//) WIDTH(80)
%/-/ TABLE ROWS /-/+
%COMMAND ===>_ZCMD %SCROLL ==
+ LIMIT :> $LIM +
+-----------------------------------------------------------------------
+ OPT DATABASE TABLE NAME ROWS
+---------------------------------------------+
)MODEL
)INIT
)PROC
VER(&LIM,RANGE,1,10000)
)END
Second Panel, which displays all the rows, HXSULL.PANEL(P$TABROW)
Code:
)ATTR DEFAULT(%+_)
$ TYPE(INPUT) INTENS(LOW) PAD(_) CAPS(ON)
! TYPE(INPUT) INTENS(LOW) PAD(' ') CAPS(OFF)
` TYPE(OUTPUT) INTENS(HIGH)
)BODY EXPAND(//) WIDTH(80)
%/-/ TABLE ROWS /-/+
%COMMAND ===>_ZCMD %SCROLL ==
+-----------------------------------------------------------------------
+ OPT DATABASE TABLE NAME ROWS
+---------------------------------------------+
)MODEL
$Z+ `Z `Z `Z +
)INIT
.ZVARS = '(ACTION DB TBNAME ROWS)'
)PROC
VER (&ACTION,LIST,'S',' ')
)END
Third Panel which displays limited rows, HXSULL.PANEL(P$TABROL)
Code:
)ATTR DEFAULT(%+_)
$ TYPE(INPUT) INTENS(LOW) PAD(_) CAPS(ON)
! TYPE(INPUT) INTENS(LOW) PAD(' ') CAPS(OFF)
` TYPE(OUTPUT) INTENS(HIGH)
)BODY EXPAND(//) WIDTH(80)
%/-/ TABLE ROWS /-/+
%COMMAND ===>_ZCMD %SCROLL ==
+ LIMIT :> $LIM +
+-----------------------------------------------------------------------
+ OPT DATABASE TABLE NAME ROWS
+---------------------------------------------+
)MODEL ROWS(SCAN)
$Z+ `Z `Z `Z +
)INIT
.ZVARS = '(ACTION DB TBNAME ROWS)'
)PROC
VER (&ACTION,LIST,'S',' ')
)END
Following is the input in the member HXSULL.TEST(CD),
Code:
VTGDATA$ TNAXXE 10
VTGDATA$ TNAXXES 20
VTGDATA$ TNEXXE 30
VTGDATA$ TNEXXES 40
VTGDATA$ TNSPE 50
VTGDATA$ TNSTDE 100
VTGDATA$ TPAXXF 200
VTGDATA$ TPFF 300
VTGDATA$ TPLYPE 400
VTGDATA$ TPLYPES 500
VTGDATA$ TPWE 10
VTGDATA$ TPWF 20
VTGDATA$ TPYOTF 30
Output, when limit value is blank
Code:
--------------------------------- TABLE ROWS --------------- Row 1 to 18 of 20
COMMAND ===> SCROLL ===> CSR
------------------------------------------------------------------------------
OPT DATABASE TABLE NAME ROWS
---------------------------------------------
_ VTGDATA$ TNAXXE 10
_ VTGDATA$ TNAXXES 20
_ VTGDATA$ TNEXXE 30
_ VTGDATA$ TNEXXES 40
_ VTGDATA$ TNSPE 50
_ VTGDATA$ TNSTDE 100
_ VTGDATA$ TPAXXF 200
_ VTGDATA$ TPFF 300
_ VTGDATA$ TPLYPE 400
_ VTGDATA$ TPLYPES 500
_ VTGDATA$ TPWE 10
Following the output, when limit value is 50.
Code:
--------------------------------- TABLE ROWS ---------------------------------
COMMAND ===> SCROLL ===> CSR
LIMIT :> 50____
------------------------------------------------------------------------------
OPT DATABASE TABLE NAME ROWS
---------------------------------------------
Getting following SAY outputs
Code:
LENGTH : 2
RC TBSARG 0
RC TBSCAN 8
Code:
--------------------------------- TABLE ROWS ---------------------------------
COMMAND ===> SCROLL ===> CSR
LIMIT :> 50____
------------------------------------------------------------------------------
OPT DATABASE TABLE NAME ROWS
---------------------------------------------
******************************* Bottom of data ********************************
I know RC 8 for TBSCAN means, "Row does not exist, no match was found;", but actually the row exists.
Let me know how to proceed and resolve is error.
Thanks You,
Sushanth
Back to top
dick scherrer Moderator Emeritus Joined: 23 Nov 2006Posts: 19244 Location: Inside the Matrix
Hello,
Code:
"ISPEXEC TBSCAN TABDET "
Is the space between TABDET and the double-quote ok (just a thought)?
It may help to also SAY TABDET along with the RC.
Back to top
sushanth bobby Senior Member Joined: 29 Jul 2008Posts: 1020 Location: India
Hi D.sch,
I tried changing it to
Code:
"ISPEXEC TBSCAN TABDET"
Still, i am getting the same RC 8.
Thanks,
Sushanth
Back to top
dbzTHEdinosauer Global Moderator Joined: 20 Oct 2006Posts: 6966 Location: porcelain throne
try using TRACE ?R in your REXX script.
you know that if something is there, and you can't get it,
means some value of a variable somewhere, someplace is not set properly.
Trace with r, will show you values of all variables in a statement before and after execution.
Back to top
sushanth bobby Senior Member Joined: 29 Jul 2008Posts: 1020 Location: India
Hi dbz,
Following is the output of TRACE ?R
Code:
23 *-* SAY 'LENGTH : ' LENGTH(LIM)
>>> "LENGTH : 2"
LENGTH : 2
24 *-* IF LENGTH(LIM) = 0
>>> "0"
26 *-* ELSE
27 *-* DO
28 *-* ROWS = LIM
>>> "20"
29 *-* "ISPEXEC TBSARG TABDET NEXT NAMECOND(ROWS,LT)"
>>> "ISPEXEC TBSARG TABDET NEXT NAMECOND(ROWS,LT)"
30 *-* SAY 'RC TBSARG ' RC
>>> "RC TBSARG 0"
RC TBSARG 0
31 *-* "ISPEXEC TBSCAN TABDET"
>>> "ISPEXEC TBSCAN TABDET"
+++ RC(8) +++
32 *-* SAY 'RC TBSCAN ' RC
>>> "RC TBSCAN 8"
RC TBSCAN 8
Still not sure, why i am getting RC 8.
I tried to search using TBSCAN itself like
Code:
/* "ISPEXEC TBSCAN TABDET" */
"ISPEXEC TBSCAN TABDET ARGLIST(ROWS) CONDLIST(LT) "
SAY 'RC TBSCAN ' RC
Output, good news is no more RC 8. I typed my limit as 100.
Code:
LENGTH : 3
ROWS = 100
RC TBSARG 0
RC TBSCAN 0
But, weird news is, i am still not getting any values populated in the panel. Is there anything wrong with my Panel Defination.
Code:
--------------------------------- TABLE ROWS ---------------------------------
COMMAND ===> SCROLL ===> CSR
LIMIT :> 100___
------------------------------------------------------------------------------
OPT DATABASE TABLE NAME ROWS
---------------------------------------------
******************************* Bottom of data ********************************
Thanks You,
Sushanth
Back to top
sushanth bobby Senior Member Joined: 29 Jul 2008Posts: 1020 Location: India
Hi,
Using the below code, i got it to working,
Code:
"ISPEXEC TBSARG TABDET NEXT NAMECOND(CARD,LT)"
SAY 'RC TBSARG ' RC
/* "ISPEXEC TBSCAN TABDET"
"ISPEXEC TBSCAN TABDET ARGLIST(CARD) CONDLIST(LT) "
SAY 'RC TBSCAN ' RC */
DO FOREVER
"ISPEXEC TBDISPL TABDET PANEL(P$TABROL)" /* LIMITED ROWS */
IF RC > 4 THEN LEAVE /* IF PF3 pressed. Escape.... */
END
but when i give the limit as 30, i am also getting 100 and 200....
Code:
--------------------------------- TABLE ROWS ------------------- Row 1 from 10
COMMAND ===> SCROLL ===> CSR
LIMIT :> 30____
------------------------------------------------------------------------------
OPT DATABASE TABLE NAME ROWS
---------------------------------------------
_ VTGDATA$ TNAXXE 10
_ VTGDATA$ TNAXXES 20
_ VTGDATA$ TNSTDE 100
_ VTGDATA$ TPAXXF 200
******************************* Bottom of data ********************************
when i give 20, i am getting 100 also
Code:
--------------------------------- TABLE ROWS ------------------- Row 1 from 10
COMMAND ===> SCROLL ===> CSR
LIMIT :> 20____
------------------------------------------------------------------------------
OPT DATABASE TABLE NAME ROWS
---------------------------------------------
_ VTGDATA$ TNAXXE 10
_ VTGDATA$ TNSTDE 100
these are the rows present in the table, currently
Code:
--------------------------------- TABLE ROWS --------------- Row 1 to 10 of 10
COMMAND ===> SCROLL ===> CSR
------------------------------------------------------------------------------
OPT DATABASE TABLE NAME ROWS
---------------------------------------------
_ VTGDATA$ TNAXXE 10
_ VTGDATA$ TNAXXES 20
_ VTGDATA$ TNEXXE 30
_ VTGDATA$ TNEXXES 40
_ VTGDATA$ TNSPE 50
_ VTGDATA$ TNSTDE 100
_ VTGDATA$ TPAXXF 200
_ VTGDATA$ TPFF 300
_ VTGDATA$ TPLYPE 400
_ VTGDATA$ TPLYPES 500
Something wrong with the comparisons, may be its not considering those values as numeric. Under that condition only, i can get results like that.
Please suggest me how to resolve this.
Thank You,
Sushanth
Back to top
enrico-sorichetti Superior Member Joined: 14 Mar 2007Posts: 10873 Location: italy
you overlooked that
Quote:
Comparisons between the row values and the argument list are always done on a character basis. That is, the values are considered character data, even if they represent numbers.
furthermore You have alignment issues
given the sequence
Code:
10
20
30
100
200
300
the same sorted with a char pattern
Code:
10
100
20
200
30
300
when doing a tbscan the usual approach is to have the table sorted on the scanned column
Back to top
sushanth bobby Senior Member Joined: 29 Jul 2008Posts: 1020 Location: India
Thank You Enrico.
Sushanth
Back to top
Please enable JavaScript!