Chinaunix

标题: 如何将结构体中数据读出,并写入PF文件中 [打印本页]

作者: las6688    时间: 2012-04-30 20:34
标题: 如何将结构体中数据读出,并写入PF文件中
具体问题为:
1、将PF文件中数据写入数据队列(RPGLE)
    FSTU_INF   IF   E           K DISK
     DMYDTAQ           S             10A

     D#STU_DATA        DS           150
     DSSTU_ID                  1      4A
     DSSTU_NME                 6     55
     DSSTU_ADD                56    105
     DSSTU_BTD               110    119D
     DSSTU_TEL               120    130A
     DSSTU_SEX               132    133A
     DSSTU_AGE               135    137A
     DSSTU_FLG               139    140A
     D
     D
     C     *LOVAL        SETLL     STU
     C                   DOW       1=1
     C                   READ      STU                                  1617
     C                   IF        *IN17='0'
     C
     C                   MOVEL     STU_ID        SSTU_ID
     C                   MOVEL     STU_NME       SSTU_NME
     C                   MOVEL     STU_ADD       SSTU_ADD
     C                   MOVEL     STU_BTD       SSTU_BTD
     C                   MOVEL     STU_TEL       SSTU_TEL
     C                   MOVEL     STU_SEX       SSTU_SEX
     C                   MOVEL     STU_AGE       SSTU_AGE
     C                   MOVEL     STU_FLG       SSTU_FLG
     C                   EVAL      MYDTAQ='STU_DTAQ'
     C                   ELSE
     C                   LEAVE
     C                   ENDIF
     C
     C                   CALL      'QSNDDTAQ'
     C                   PARM      MYDTAQ        QNAME            10
     C                   PARM      'STU60'       LIB              10
     C                   PARM      1000          FLDLEN            5 0
     C                   PARM      #STU_DATA     FIELD          1000
     C
     C                   ENDDO
     C                   SETON                                        LR
     C                   RETURN
2、再从数据队列里读取该数据,并存放到PF文件中(RPGLE程序如下:)

    FNSTU_INF  UF A E           K DISK
     DMYDTAQ           S             10A

     D#STU_DATA        DS           150
     DSSTU_ID                  1      4A
     DSSTU_NME                 6     55
     DSSTU_ADD                56    105
     DSSTU_BTD               110    119D
     DSSTU_TEL               120    130A
     DSSTU_SEX               132    133A
     DSSTU_AGE               135    137A
     DSSTU_FLG               139    140A
     D
     DNSTU_BTD         S              8P 0
     C****************** PGM *********************
     C                   EVAL      MYDTAQ='STU_DTAQ'
     C                   DOW       1=1
     C
     C                   CALL      'QRCVDTAQ'
     C                   PARM      MYDTAQ        QNAME            10
     C                   PARM      'STU60'       LIB              10
     C                   PARM      0             FLDLEN            5 0
     C                   PARM      #STU_DATA     FIELD          1000
     C                   PARM      10            WAIT              5 0
     C
     C     FLDLEN        IFEQ      0
     C                   LEAVE
     C                   ELSE
     C                   MOVEL     SSTU_ID       STU_ID
     C     SSTU_ID       DSPLY
     C                   MOVEL     SSTU_NME      STU_NME
     C     SSTU_NME      DSPLY
     C                   MOVEL     SSTU_ADD      STU_ADD
     C*                  MOVEL     SSTU_BTD      NSTU_BTD
     C*                  MOVEL     NSTU_BTD      STU_BTD
     C                   MOVEL     SSTU_TEL      STU_TEL
     C                   MOVEL     SSTU_SEX      STU_SEX
     C                   MOVEL     SSTU_AGE      STU_AGE
     C                   MOVEL     SSTU_FLG      STU_FLG
     C                   WRITE     STU
     C                   ENDIF
     C                   ENDDO
     C                   SETON                                        LR
     C                   RETURN
3、先运行第一个程序,在运行第二个。
出现的问题:
(1)
    C                   MOVEL     SSTU_ID       STU_ID
     C     SSTU_ID       DSPLY
     C                   MOVEL     SSTU_NME      STU_NME
     C     SSTU_NME      DSPLY
两个显示数据前者为0,后者为空。什么情况?
(2)
     C*                  MOVEL     SSTU_BTD      NSTU_BTD
     C*                  MOVEL     NSTU_BTD      STU_BTD
读取的时间,在格式转换方面有问题,具体不知道怎么转换?

作者: junlee1986    时间: 2012-04-30 21:23
可能SNDQ没成功吧,看看Q有没有值 WRKDTAQ吧,如果定义的都是A,不存在转换的问题。
作者: las6688    时间: 2012-04-30 21:32
回复 2# junlee1986

SNDQ成功啊,采用CL程序能够读取

         PGM                                                      
             DCL        VAR(&QNAME) TYPE(*CHAR) LEN(10) +              
                          VALUE('STU_DTAQ')                           
             DCL        VAR(&FLDLEN) TYPE(*DEC) LEN(5 0) VALUE(4)      
             DCL        VAR(&FIELD) TYPE(*CHAR) LEN(1000)              
             DCL        VAR(&WAIT) TYPE(*DEC) LEN(5 0) VALUE(5)        
             CHKOBJ     OBJ(STU_DTAQ) OBJTYPE(*DTAQ)                  
             MONMSG     MSGID(CPF9801) EXEC(GOTO CMDLBL(TAG_END))      
                                                                       
             CALL       PGM(QRCVDTAQ) PARM(&QNAME STU60 &FLDLEN +      
                          &FIELD &WAIT)                                
             SNDPGMMSG  MSG(&FIELD)                                    
             RETURN                                                   
TAG_END:    SNDPGMMSG  MSG('STU_DTAQ is not found')                  
             ENDPGM                                                   


执行此程序,每执行一次CL程序,显示一条记录。也就说明上面第一个程序没问题了,关键是第二个,待修改???   
作者: junlee1986    时间: 2012-05-01 20:12
你的数据有多少啊,Q是读一个就少一个啊
把QRCVDRAQ放在循环里
作者: las6688    时间: 2012-05-02 09:15
回复 4# junlee1986
5条
这个我知道
关键是读第一条就是空的


   
作者: las6688    时间: 2012-05-02 13:01
目前发现错误:
C                   PARM      #STU_DATA     FIELD          1000
应改为
C                   PARM                             FIELD          1000
C                   EVAL      #STU_DATA=FIELD





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2