IBM Mainframe Forum Index
 
Log In
 
IBM Mainframe Forum Index Mainframe: Search IBM Mainframe Forum: FAQ Register
 

Gettign TBSCAN return code as 8, but value exists in the tab


IBM Mainframe Forums -> TSO/ISPF
Post new topic   Reply to topic
View previous topic :: View next topic  
Author Message
sushanth bobby

Senior Member


Joined: 29 Jul 2008
Posts: 1020
Location: India

PostPosted: Fri Jul 02, 2010 11:22 pm
Reply with quote

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
View user's profile Send private message
dick scherrer

Moderator Emeritus


Joined: 23 Nov 2006
Posts: 19244
Location: Inside the Matrix

PostPosted: Sat Jul 03, 2010 12:07 am
Reply with quote

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
View user's profile Send private message
sushanth bobby

Senior Member


Joined: 29 Jul 2008
Posts: 1020
Location: India

PostPosted: Sat Jul 03, 2010 12:20 am
Reply with quote

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
View user's profile Send private message
dbzTHEdinosauer

Global Moderator


Joined: 20 Oct 2006
Posts: 6966
Location: porcelain throne

PostPosted: Sat Jul 03, 2010 12:24 am
Reply with quote

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
View user's profile Send private message
sushanth bobby

Senior Member


Joined: 29 Jul 2008
Posts: 1020
Location: India

PostPosted: Sat Jul 03, 2010 12:51 am
Reply with quote

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
View user's profile Send private message
sushanth bobby

Senior Member


Joined: 29 Jul 2008
Posts: 1020
Location: India

PostPosted: Sat Jul 03, 2010 2:47 am
Reply with quote

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
View user's profile Send private message
enrico-sorichetti

Superior Member


Joined: 14 Mar 2007
Posts: 10873
Location: italy

PostPosted: Sat Jul 03, 2010 3:09 am
Reply with quote

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
View user's profile Send private message
sushanth bobby

Senior Member


Joined: 29 Jul 2008
Posts: 1020
Location: India

PostPosted: Sat Jul 03, 2010 4:01 am
Reply with quote

Thank You Enrico.



Sushanth
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic View Bookmarks
All times are GMT + 6 Hours
Forum Index -> TSO/ISPF

 


Similar Topics
Topic Forum Replies
No new posts run rexx code with jcl CLIST & REXX 15
No new posts Compile rexx code with jcl CLIST & REXX 6
No new posts Return codes-Normal & Abnormal te... JCL & VSAM 7
No new posts REXX code to expand copybook in a cob... CLIST & REXX 2
No new posts VSAM return code 23 - for a Random read COBOL Programming 4
Search our Forums:

Back to Top