免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2326 | 回复: 1
打印 上一主题 下一主题

[新手入门] 如何知道以 ODBC 或 JDBC 连接至 AS/400 撷取信息的真正使用者? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2002-09-30 23:01 |只看该作者 |倒序浏览
如何知道以 ODBC 或 JDBC 连接至 AS/400 撷取信息的真正使用者?
现在有许多软件由于电子商务的需求使用 ODBC 或 JDBC 存取 AS/400 信息,而 AS/400 的
Host Server 功能,会于激活 QSERVER 子系统时,自动激活一个名为 QZDASRVSD 的作业用
以等待远程作业需求,当远程以 ODBC 或 JDBC 发出连结 AS/400 需求时,系统会自行启
动另一个名为 QZDASOINIT 的作业,用以服务远程
PC 作业所提出的服务需求,例如执行
SQL 指令。由于系统是以 QUSER 激活 QZDASOINIT
作业,所以您无法以 WRKACTJOB 指令
直接得知目前 QZDASOINIT 作业正在服务哪一个使用者,但你可以于 WRKACTJOB 画面选 5

5      QZDASOINIT   QUSER       PJ       .0                   PSRW

进入 WRKJOB 画面选 10 Display Job Log 检视 Job Log,此时若此作业有服务过有执行
可以看到此作业有无正在服务哪一个使用者。但这个方法显然麻烦多了,下述的范例直接
透过系统 API QUSLJOB 直接取得并显示于画面状态行。详细信息参考 System API Refference SC41-5801-03 Chapter 94.


File  : QCLSRC
Member: LSTODBCUSR
Type  : CLP
Usage : CRTCLPGM LSTODBCUSR
        CALL LSTODBCUSR


/* Lists real connected ODBC users without C */
/* API QUSLJOB                               */

  pgm

/*                                                           */
/* *Usrspc variables...                                      */
/*                                                           */
   dcl   &usrspc        *char      20   /* Space name/lib    */

   dcl   &offslst       *char       4   /* Offset to list    */
   dcl   &sizlste       *char       4   /* Size list entries */
   dcl   &nbrlste       *dec   (  7 0 ) /* Number of entries */

   dcl   &us_hdr        *char     150   /* Space header      */

   dcl   &us_jobe       *char     512   /* A single entry    */

/*                                                           */
/* Job selection variables...                                */
/*                                                           */
   dcl   &jobname       *char      26   /* Select job name   */
   dcl   &dftuser       *char      10   value( 'QUSER     ' )
                                        /* Prestart user     */
/* Variable keys to select                                   */
   dcl   &nbrkeys       *char       4   value( x'00000002' )
                                        /* bin(   2 )        */
   dcl   &rtvcurusr     *char       4   value( x'00000131' )
                                        /* bin( 305 )        */
   dcl   &rtvsts        *char       4   value( x'00000065' )
                                        /* bin( 101 )        */
/* Variable key list...                                      */
   dcl   &varkeylst     *char     400

/*                                                           */
/* Retrieved values from job list...                         */
/*                                                           */
   dcl   &job           *char      10
   dcl   &user          *char      10
   dcl   &nbr           *char       6

   dcl   &curuser       *char      10   /* Current user      */
   dcl   &sts           *char       4   /* Job status        */


/*                                                           */
/* Global message monitor...                                 */
/*                                                           */

   monmsg   ( cpf0000 mch0000 )  exec( goto  Std_Err )

/*                                                           */
/* Create a *usrspc to work with...                          */
/*                                                           */

   chgvar    &usrspc       ( 'ODBCJOB   ' *cat 'QTEMP     ' )

   call  QUSCRTUS         ( +
                            &usrspc                 +
                            'TMPLST    '            +
                            x'00001000'             +
                            X'00'                   +
                            '*ALL      '            +
                            'Temp list ODBC jobs    ' +
                            '*YES      '            +
                            x'0000000000000000'     +
                          )


/*                                                           */
/* This sets up selection criteria for list jobs API...      */
/*                                                           */

/* The jobname we're after...                                */

   chgvar    &jobname      ( 'QZDASOINIT' *cat +
                             &dftuser     *cat +
                             '*ALL   '         +
                           )

/* Include current job user and active job status...         */

   chgvar    &varkeylst    ( &rtvcurusr *cat &rtvsts )

/*                                                           */
/* This lists active jobs with the job name specified.       */
/*                                                           */

   call  QUSLJOB          ( +
                            &usrspc                 +
                            'JOBL0200'              +
                            &jobname                +
                            '*ACTIVE   '            +
                            x'0000000000000000'     +
                            'B'                     +
                            &nbrkeys                +
                            &varkeylst              +
                          )



/*                                                           */
/* Get the *usrspc header for the list attributes...         */
/*                                                           */

   call  QUSRTVUS         ( +
                            &usrspc                 +
                            x'00000001'             +
                            x'00000096'             +
                            &us_hdr                 +
                          )

/*                                                           */
/* Get the offset to the list within the space, the number   */
/*   of list entries and size of each entry from the header. */
/*                                                           */
   chgvar    &offslst        %sst( &us_hdr    125 4 )
   chgvar    &nbrlste        %bin( &us_hdr    133 4 )
   chgvar    &sizlste        %sst( &us_hdr    137 4 )

/* If no entries, then get out of here...                    */

   if  ( &nbrlste *eq 0 )     do
      sndpgmmsg  msgid( CPF9898 ) msgf( QCPFMSG ) +
                   msgdta( 'No ODBC jobs found.' )
      goto   Clean_up
   enddo


/* Set the offset to the list within the space...            */

   chgvar    %bin( &offslst ) ( %bin( &offslst ) + 1 )


Nxt_JobE:

/* Get an entry from the list...                             */

   call  QUSRTVUS         ( +
                            &usrspc                 +
                            &offslst                +
                            &sizlste                +
                            &us_jobe                +
                          )

/* Extract job info from list entry...                       */

   chgvar    &job            %sst( &us_jobe     1  10 )
   chgvar    &user           %sst( &us_jobe    11  10 )
   chgvar    &nbr            %sst( &us_jobe    21   6 )

   chgvar    &curuser        %sst( &us_jobe    81  10 )
   if  ( &curuser *eq &dftuser )     do
      chgvar    &curuser        '*DEFAULT'
   enddo

   chgvar    &sts            %sst( &us_jobe   109   4 )


/* Display the result...                                     */

   sndpgmmsg  msgid( CPF9898 ) msgf( QCPFMSG ) +
                msgdta( 'Job<' *cat &amp;nbr *tcat +
                '/' *cat &amp;user *tcat +
                '/' *cat &amp;job  *tcat +
                '>; Current user<' *cat &amp;curuser *tcat +
                '>; Status<' *cat &amp;sts *tcat '>;')


/* Perform loop testing...                                   */

   chgvar    &amp;nbrlste      ( &amp;nbrlste - 1 )

   if  ( &amp;nbrlste *gt 0 )     do

      chgvar    %bin( &amp;offslst ) ( %bin( &amp;offslst ) + +
                                   %bin( &amp;sizlste ) )
      goto      Nxt_JobE

   enddo



/*                                                           */
/* Exit processing...                                        */
/*                                                           */


Clean_up:

   dltusrspc   %sst( &amp;usrspc 11 10 )/%sst( &amp;usrspc 1 10 )

   return

Std_Err:

   /* Move any *DIAG messages up the stack...        */

   Qsys/call  pgm( QSYS/QMHMOVPM ) parm( +
                                         '    '          +
                                         '*DIAG     '    +
                                         x'00000001'     +
                                         '*         '    +
                                         x'00000001'     +
                                         x'00000000'     +
                                       )
   Qsys/monmsg     ( CPF0000 MCH0000 )

   /* Resend any *ESCAPE messages up the stack...     */

   Qsys/call  pgm( QSYS/QMHRSNEM ) parm( +
                                         '    '          +
                                         x'00000000'     +
                                       )
   Qsys/monmsg     ( CPF0000 MCH0000 )

   return

endpgm




论坛徽章:
0
2 [报告]
发表于 2002-09-30 23:01 |只看该作者

如何知道以 ODBC 或 JDBC 连接至 AS/400 撷取信息的真正使用者?

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP