免费注册 查看新帖 |

Chinaunix

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

请教一段代码,关于subfile [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-21 22:46 |只看该作者 |倒序浏览
本帖最后由 jinaolei 于 2012-05-21 22:46 编辑

这是一个小例子,刚刚调通,有几个地方不太明白,代码如下:
-------PF-----
                     
     A          R CUSTR                     TEXT('CUSTOMER')           
     A            CUSTNO         6S 0       TEXT('CUST #')            
     A            CUSTNM        30A         TEXT('NAME')               
     A          K CUSTNO                                      

------DSPF-----

     A                                      DSPSIZ(24 80 *DS3)
     A                                      REF(JINLEFENG/CUST01)
     A                                      CA03(03)
     A          R SFL002S1                  SFL
     A            CUSTNO    R        O  5 10
     A            CUSTNM    R        O  5 27
     A          R SFL002C1                  SFLCTL(SFL002S1)
     A                                      OVERLAY
     A N90                                  ROLLUP(50)
     A  90                                  SFLEND(*MORE)
     A  20                                  SFLDSP
     A                                      SFLDSPCTL
     A                                      SFLSIZ(0016)
     A                                      SFLPAG(0010)
     A            DSPRECORD      4S 0H      SFLRCDNBR
     A                                  1 26'SIMPLE LOAD FORWARD'
     A                                      DSPATR(HI)
     A  20                              3  7'CUSTOMER NUMBER'
     A  20                              3 27'CUSTOMER NAME'
     A  20                              4  7'==============='
     A  20                              4 27'===================='
     A N20                              4 24'NO CUSTOMER RECORD FOUND'
     A          R CMDKEY
     A                                 23  3'F3-EXIT'
     A                                      DSPATR(HI)

------RPG-----

     FCUST01    IF   E             DISK
     FSFL002DF  CF   E             WORKSTN
     F                                     SFile(SFL002S1Rec#)
     D @Rec#           S              4S 0
     C                   Exsr      LOADSF
     C                   Dou       *in03=*On
     C                   Write     Cmdkey
     C                   Exfmt     SFL002C1
     C                   Eval      DSPRECORD=1
     C*Press rollup disply next page
     C                   If        *in50=*On
     C                   Exsr      Loadsf
     C                   Endif
     C                   Enddo
     C                   Eval      *Inlr=*On
     C                   Return
     C*
     C*Process Customer file and load records into sufile
     C     LOADSF        Begsr
     C*15Record per page
     C                   Do        10
     C                   Read      Custr                                  90
     C                   If        *in90=*On
     C                   Leave
     C                   Else
     C                   Eval      @Rec#=@Rec#+1
     C                   Write     SFL002S1
     C                   Endif
     C                   Enddo
     C*Set the subfile records to be displayed equal to the last record
     C                   Eval      DspRecord = @Rec#
     C                   If        @Rec#>0
     C                   Eval      *in20=*on
     C                   Endif
     C                   Endsr
  
PF中有18条数据,执行程序第一页显示前10条数据,然后按page-down显示后8条数据
现在有疑问,第一次执行LOADSF中的DO循环为什么就执行了10次,有18条数据呢它怎么不多执行两次,是因为 SFLPAG(0010)设的是10吗?
还有第二个疑问,当我把DO循环里的10修改为11,编译执行程序,发现第一页只显示一条数据,即表中的第11条数据,按下page-down显示第11至18条数据

对SFLRCDNBR还有分页显示不太理解,请明白的大虾指点一二

论坛徽章:
0
2 [报告]
发表于 2012-05-22 00:08 |只看该作者
    1、  第一次执行LOADSF中的DO循环为什么就执行了10次,有18条数据呢它怎么不多执行两次,是因为 SFLPAG(0010)设的是10吗?
===> DO循环的次数为10,所以只会读写10次,跟SFLPAG没有什么系啊
   2‘、当我把DO循环里的10修改为11,编译执行程序,发现第一页只显示一条数据,即表中的第11条数据,
===>当把10改成11后,执行完LOADSF这个subroutine后,DspRecord=11,所以EXFMT时显示的是第11条记录所在的页(即第二页)

SFLPAG的值只是表示一页放多少条记录
SFLRCDNBR是SFL的记录号,文件显示时会显示SFLRCDNBR对应的记录所在的页
即:你第一次执行时,SFLRCDNBR=10,(第10条记录在第一页),所以显示第一页的10条记录
      第二次执行时,SFLRCDNBR=11,(第11条记录在第二页),所以显示第二页的1条记录,翻页后SFLRCDNBR=18,所以显示第二页11~18条记 录

评分

参与人数 1可用积分 +2 收起 理由
fairyboy + 2 很给力!

查看全部评分

论坛徽章:
0
3 [报告]
发表于 2012-05-22 09:52 |只看该作者
汗,惭愧,之前这个DO循环还真的没搞清楚。谢谢楼上兄台的讲解,我再试几次
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP