忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 视频 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 5222 | 回复: 9

请教subfile具体一点的用法步骤。 [复制链接]

论坛徽章:
0
发表于 2007-03-15 13:54 |显示全部楼层
我不知道应该怎么试验,其实我的要求很简单,我有一个表,两个字段,学号和姓名,不超过10条记录,请问我应该怎么编程能把这些记录在一个画面上显示出来呢?可以告诉我具体一点的步骤吗?是不是要先定义subfile,再用RPG控制呢?

论坛徽章:
0
发表于 2007-03-16 11:35 |显示全部楼层

论坛徽章:
0
发表于 2007-03-16 11:40 |显示全部楼层

看一下这个例子LZ应该能明白了

如何使用显示文件的SUBFILE

1. 物理文件 -- MYPF
*************** Beginning of data *************************************
     A          R FMYPF                                                
     A             FLD001         5A                                    
     A             FLD002        20A                                    
     A          K FLD001                                               
****************** End of data ****************************************

【注】假设这个文件有如下记录:
==================================
  FLD001             FLD002
==================================
  00001               FIELD 00001
  00002               FIELD 00002
  00003               FIELD 00003
  00004               FIELD 00004
  00005               FIELD 00005
==================================

2. 显示文件 -- MYDSPF
*************** Beginning of data *************************************
     A                                                 DSPSIZ(24 80 *DS3)         
     A          R HEAD                                                
     A                                           2   1DATE                       
     A                                                  EDTCDE(Y)                  
     A                                           2 69TIME                       
     A                                           2 34'显示文件记录'           
     A*****************************************************************
     A          R SUBF                             SFL                        
     A             FLD001         5A  O  9 16
     A             FLD002       20A  O  9 28                     
     A*****************************************************************
     A          R SUBFC                           SFLCTL(SUBF)               
     A                                                  SFLSIZ(9999)               
     A                                                  SFLPAG(0010)               
     A  30                                            SFLDSP                     
     A  31                                            SFLDSPCTL                  
     A  32                                            SFLCLR                     
     A  33                                            SFLEND(*MORE)              
     A                                                  OVERLAY                    
     A                                                  CA12(12 'EXIT')            
     A                                           7 15'字段1'                 
     A                                                  COLOR(WHT)                 
     A                                           7 27'字段2'                 
     A                                                  COLOR(WHT)                 
     A*****************************************************************
     A          R FOOT                                                
     A                                                  OVERLAY                    
     A                                         24 11'F12=EXIT'                 
     A                                                  COLOR(BLU)                 
****************** End of data ****************************************

【注】
(1) 第一个画面HEAD注解:
(a) 第一行表明显示尺寸,一般就这么写;
(b) 第二行的R表示接下来是一个记录,记录名是HEAD,有点象PF的定义,不过在DSPF里的记录代表
  一个画面;
(c) 第三行的DATE是系统关键字,表示日期,该句意思是在第2行第1列显示系统日期;
(d) 第四行的EDTCDE表示编辑字,EDTCDE(Y)表示系统日期按照“MM/DD/YY”格式显示;
(e) 第五行的TIME是系统关键字,表示时间,该句意思是在第2行第69列显示系统时间;
(f) 第六行意思是在第2行第34列显示字符窜"显示文件记录"。

(2) 第二个画面SUBF注解:
(a) 第一行的R和上面一样,也代表这是一个画面,名字是SUBF;
  后面的SFL是系统关键字,表示该画面是SUBFILE;
(b) 第二行表示在画面第9行第16列显示长度为5的字段FLD001,5是长度,A表示该字段是字符型,
  O表示该字段只用于输出;
(c) 第三行与上一行类似。

(3) 第三个画面SUBFC注解:
(a) 第一行的R和上面一样,也代表这是一个画面,名字是SUBFC,
  SFLCTL是系统关键字,SFLCTL(SUBF)表示该记录是用来对画面SUBF显示的控制,
  一般定义了SUBFILE之后,都要定义这个记录的;
(b) 第二行的SFLSIZ用来说明SUBF的记录数,这里我把它定义为最大9999;
(c) 第三行的SFLPAG用来说明每页显示的记录条数,这里我把定义为10笔;
(d) 第四、五、六行的SFLDSP是用来显示记录的,SFLDSPCTL用来控制显示的,
  SFLCLR用来清除显示的记录的,一般都需要给他们加上指示器,这里分别是30、31、32;
(e) 第七行的SFLEND用来声明每页下方的提示,这里用*MORE来表示,如果还有下一页的话,下方
  就显示”More……“,否则,就显示”Bottom“,这里也用个指示器33;
(f) 第八行的OVERLAY表示显示该记录之前不要清除上一屏,即保留;
(g) 第九行的CA12表示在这个画面里我可以用键盘按键F12,对应的指示器是12,
  这里你可以根据自己需要使用别的按键,例如CA03;
(h) 第十一行的COLOR是系统关键字,用来给上面显示的字符窜设置显示颜色,
  这里用BLU,表示字符窜”字段1“显示为蓝色;

(4) 第四个画面FOOT注解参考上面三点即可,在此不在累赘。

3. RPG程序 -- MYDSPR
*************** Beginning of data *************************************
     FMYPF       IF  E           K        DISK                           
     FMYDSPF  CF  E                    WORKSTN                        
     F                                                                                   RRN   KSFILE SUBF      
     F*  注意,用 RRN 做变量是编译无法通过的,需要改成 RECNO,就可以了  
     C           *IN12      DOWEQ'0'                                    
     C                          WRITEHEAD                                   
     C                          WRITEFOOT                                   
     C                          EXSR CLRSFL                                 
     C                          EXSR REDRCD                                 
     C                          ENDDO                                       
     C*                                                               
     C                          SETON                               LR               
     C*****************************************************************
     C           CLRSFL    BEGSR                                       
     C*                                                               
     C                          Z-ADD0              RRN     40                  
     C                          MOVEA'0011'    *IN,30                       
     C                          WRITESUBFC                                 
     C*                                                               
     C                          ENDSR                                       
     C*****************************************************************
     C           REDRCD    BEGSR                                       
     C*                                                               
     C           *LOVAL    SETLLFMYPF                                 
     C                           READ FMYPF                    90            
     C           *IN90      DOWEQ'0'                                    
     C                          ADD  1         RRN                          
     C                          WRITESUBF                                   
     C                          READ FMYPF                    90            
     C                          ENDDO                                       
     C*                                                               
     C                          SETON                     30               
     C           RRN         IFEQ 0                                      
     C                          SETOF                     30               
     C                          ENDIF                                       
     C                          MOVEA'10'      *IN,31                       
     C                          EXFMTSUBFC                                 
     C*                                                               
     C                          ENDSR                                       
****************** End of data ****************************************

=======================================================
【注】

处理顺序:

1. 编译物理文件MYPF,输入记录;
2. 编译显示文件MYDSPF;
3. 编译RPG程序MYDSPR;
4. CALL MYDSPR




【错误说明】   
1。如果没有数据,执行时会报错
2。编译时,在 libl 中必须包括 当前的库

论坛徽章:
0
发表于 2007-03-16 22:28 |显示全部楼层

byq0220

FMYPF       IF  E           K        DISK                           
     FMYDSPF  CF  E                    WORKSTN                        
     F                                                                                   RRN   KSFILE SUBF      
     F*  注意,用 RRN 做变量是编译无法通过的,需要改成 RECNO,就可以了  
请问是什么意思?是不是把第三行的RRN改为RECNO,为什么不是sfile(subf:rrn)  ?在RPGLE中是能通过的?请问第三行应该怎么写?

论坛徽章:
0
发表于 2007-03-17 08:05 |显示全部楼层
為什麼是READ FMYPF                    90 ?明明定義的是MYPF。

论坛徽章:
0
发表于 2007-03-17 08:55 |显示全部楼层
MOVEA'10'      *IN,31  是什麼意思?好像不能通過吧?

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-08-07 06:20:00
发表于 2016-07-28 14:55 |显示全部楼层
谢谢 真详细 回复 3# byq0220


   

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-08-07 06:20:00
发表于 2016-07-28 17:08 |显示全部楼层
MYPF 的记录格式是FMYPF    请看MYPF的定义回复 5# forgot2000


   

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-08-07 06:20:00
发表于 2016-08-04 17:00 |显示全部楼层
正确的是
MOVEA'10'      (*IN31) 从31号灯开始 把31号灯打开 把32号灯关闭   MOVEA'0011'    *IN,30   这个应该是  MOVEA'0011'    (*IN30)      回复 6# forgot2000


   

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-08-07 06:20:00
发表于 2016-08-04 17:03 |显示全部楼层
第三行直接按作者写的无法成功  可以换成F                                                                                   SFILE(SUBF:RRN)

这个RRN 变量是在这一行定义的Z-ADD    0              RRN     4 0  长度是4 小数位数是0

回复 4# forgot2000


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

本版积分规则

  

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP