免费注册 查看新帖 |

Chinaunix

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

急问PF KFLD与OPNQRYF的问题 [复制链接]

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

PF001, DDS定义如下
  1. A                                      UNIQUE                                 
  2. A*                                                                           
  3. A        R PF001R                                                                                 
  4. A*                                          
  5. A            KFLD1        10P 0   
  6. A            KFLD2          1A
  7. A            FLD3            3A
  8. A            FLD4            5A
  9. A          K KFLD1
  10. A          K KFLD2              
复制代码
在程序中希望改写KEY FIELD, CLP 中加入如下代码

  1. OVRDBF     FILE(PF001) OVRSCOPE(*JOB) SHARE(*YES)      
  2. OPNQRYF    FILE((PF001 *FIRST *ONLY)) KEYFLD((FLD3 +
  3.              *ASCEND *N) (FLD4 *ASCEND *N)) +         
  4.               OPNSCOPE(*JOB)                           
复制代码
在RPG程序中
  1. FPF001     IF   E           K DISK
  2. .
  3. .
  4. .
  5. .
  6. .
  7. .
  8. .
  9. .
  10. C     K0CUSP        KLIST                                             
  11. C                   KFLD                    CODE1             3      
  12. C                   KFLD                    CODE2             5  
  13. C*     
  14. C                   MOVE            'XXX'                     CODE1
  15. C                   MOVE            'YYYYY'                  CODE2  
  16. C*                                                                    
  17. C     K0CUSP        CHAIN     PF001R                            81   
复制代码
编译CHAIN报错 Key Field 类型不匹配
*RNF7072 30      1 Type of KFLD is not the same as corresponding key field in file.         

问在不建立logical file的前提下,能实现这样的改写key field吗, 谢谢各位

论坛徽章:
0
2 [报告]
发表于 2011-11-21 21:49 |只看该作者
OPNQRYF应该只能给没有KEY的PF使用KEYFLD吧

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-05 06:20:00
3 [报告]
发表于 2011-11-21 23:38 |只看该作者
OPNQRYF应该只能给没有KEY的PF使用KEYFLD吧
0406410525 发表于 2011-11-21 21:49


可以的

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-05 06:20:00
4 [报告]
发表于 2011-11-21 23:45 |只看该作者
本帖最后由 junlee1986 于 2011-11-21 23:46 编辑

是可以这么用的
你的问题我觉得是
你既然跑了IP就别CHAIN
你试试用SETLL +READE
来读取试试

或者是你是不是CLP里面写的有问题
比如在你已经 DLTOVR 之后你在去CALL你的这个程式就有问题的。

论坛徽章:
0
5 [报告]
发表于 2011-11-21 23:53 |只看该作者
本帖最后由 shibuya1212 于 2011-11-21 23:56 编辑

回复 4# junlee1986


    大哥没答在点上,Call RPG肯定是在CLOF和DLTOVR之前的。想问怎么样在RPG中使用非定义在DDS的PF的key field? 如果chain编译有问题的话,setll和reade也不会成功的吧,都是key值跟PF定义不一致啊

论坛徽章:
0
6 [报告]
发表于 2011-11-22 08:21 |只看该作者
用OPNQRYF改變KEY, 在RPG中就不要CHAIN
如果需要CHAIN的話,正常是使用符合的LF

论坛徽章:
0
7 [报告]
发表于 2011-11-22 08:53 |只看该作者
照我使用的经验:
如果用OPNQRYF可以设置一个PF/LF的Key。
但是这种用法时,RPG里必须IP来逐条读取才有效。
如果RPG没有IP,而是IF,那只能用本身的Key来chain、setll等等。

论坛徽章:
0
8 [报告]
发表于 2011-11-22 09:43 |只看该作者
本帖最后由 vicky___lee 于 2011-11-22 09:48 编辑

我看你是在编译的时候出错, 可能编译时用的还是旧的PF;
建议你可以在OVRDBF  的时候改个新的文件名, 然后OPNQRYF时,用这个新的文件, 同时RPG中也用这个新的文件名.
但是在编译时要先执行下OVRDBF 和OPNQRYF;

仅仅是建议, 对与不对,你可以验证下;


如下:   
OVRDBF     FILE(PF002)  TOFILE(PF001)OVRSCOPE(*JOB) SHARE(*YES)      

OPNQRYF    FILE((PF002 *FIRST *ONLY)) KEYFLD((FLD3 +

             *ASCEND *N) (FLD4 *ASCEND *N)) +         

              OPNSCOPE(*JOB)            

在RPG程序中
FPF002  P   IF   E           K DISK

.

C     K0CUSP        KLIST                                             

C                   KFLD                    CODE1             3      

C                   KFLD                    CODE2             5  

C*     

C                   MOVE            'XXX'                     CODE1

C                   MOVE            'YYYYY'                  CODE2  

C*                                                                    

C     K0CUSP        CHAIN     PF002                           81

论坛徽章:
0
9 [报告]
发表于 2011-11-22 10:04 |只看该作者
本帖最后由 shibuya1212 于 2011-11-22 10:30 编辑

回复 8# vicky___lee


    谢谢, 测试过,在rpg中先需要定义PF002,看来不多定义一个FILE是不行的??

论坛徽章:
0
10 [报告]
发表于 2011-11-22 11:24 |只看该作者
本帖最后由 vicky___lee 于 2011-11-22 11:45 编辑

回复 9# shibuya1212


    其实不是多定义一个FILE, 你只是需要把原来的file 改下名字而已.  PF001改为PF002.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP