免费注册 查看新帖 |

Chinaunix

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

屏幕文件删除最后一条记录出问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-29 17:49 |只看该作者 |倒序浏览
在RPG里删除屏幕文件记录用:
  1. C                   Eval      @@SFPG      = RRN                     
  2. C                   Exfmt     @@WIDDLT                              
  3. C                   If        *IN12='0'                              
  4. C     DSPNO         Chain     FDSPR                              31  
  5. C                   If        *IN31='0'                              
  6. C                   Delete    FDSPR                                 
  7. C                   EXSR      #ClrSfl                                

  8. 其中

  9. [code]CSR   #ClrSfl       BegSr                                             
  10. C                   SETON                                        80   
  11. C                   Write     @@SFLC                                   
  12. C                   SETOFF                                       80   
  13. C                   Z-Add     0             wNum              6 0      
  14. C                   Z-Add     0             RRN                        
  15. C                   Z-Add     0             @@SFPG                     
  16. CSR                 EndSr                                             
  17. *                                                                     
  18. *                                                                     
  19. *                                                                     
  20. CSR   #LodSfl       BegSr                                             
  21. C     *Loval        SetLL     FDSPR                                    
  22. C                   Read      FDSPR                                  30
  23. C                   Dow       *IN30='0'                                
  24. *                                                                     
  25. C                   Add       1             wNum                       
  26. C                   Eval      RRN         = wNum                        
  27. C                   Write     @@SFL                                    
  28. *                                                                     
  29. C                   Read      FDSPR                                  30
  30. C                   EndDo                                               
  31. *                                                                     
  32. C                   If        wNum       <= 0                           
  33. C                   Exsr      #InzSfl                                   
  34. C                   EndIf                                               
  35. C                   Eval      @@SFPG      = 1                           
  36. *                                                                     
  37. CSR                 EndSr                                               
  38. *                                                                     
  39. *                                                                     
  40. CSR   #InzSfl       BegSr                                               
  41. C                   Eval      RRN         = 1                           
  42. C                   Write     @@SFL                                    
  43. *                           
  44. CSR                 EndSr   
复制代码
C                   EXSR      #LodSfl                                
C                   Exfmt     @@WIDSUC                              
C                   EndIf                                            
C                   EndIf                                            [/code]

在删除屏幕文件最后一条记录时,最后一条记录却总显示,Debug跟进去看,每一步都正常通过,而与之关联的外部PF已执行了删除记录命令,此时,退出程序,在Call一次,看到屏幕文件是空记录的,
请给位路过的指点迷津下,谢谢!!!

论坛徽章:
0
2 [报告]
发表于 2012-08-30 10:20 |只看该作者
代码贴的不全啊,看不出来是怎么循环的

论坛徽章:
0
3 [报告]
发表于 2012-08-30 13:01 |只看该作者
  1. FPGTstDsPL1UF A E           K DISK                        
  2. FPGTstDsP@ CF   E             WORKSTN SFile(@@SFL:RRN)     
  3.                                                            
  4. *                                                         
  5. DRRN              S              6S 0 INZ(0)               
  6. *                                                         
  7. C                   EXSR      #MAIN                        
  8. C                   EVAL      *INLR='1'                    
  9. C                   RETURN                                 
  10. *                                                         
  11. *                                                         
  12. *                                                         
  13. CSR   #MAIN         BegSr                                 
  14. C                   Write     FOOT                        
  15. C                   EXSR      #ClrSfl                     
  16. C                   EXSR      #LodSfl                     
复制代码
  1. C                   Dow       *IN03      <> '1'                       
  2. C                   Exfmt     @@SFLC                                 
  3. C                   EXSR      #PrcSfl                                 
  4. C                   EndDo                                             
  5. CSR                 EndSr                                             
  6. *                                                                    
  7. *                                                                    
  8. *                                                                    
  9. CSR   #ClrSfl       BegSr                                             
  10. C                   SETON                                        80   
  11. C                   Write     @@SFLC                                 
  12. C                   SETOFF                                       80   
  13. C                   Z-Add     0             wNum              6 0     
  14. C                   Z-Add     0             RRN                       
  15. C                   Z-Add     0             @@SFPG                    
复制代码
  1. CSR                 EndSr                                             
  2. *                                                                     
  3. *                                                                     
  4. *                                                                     
  5. CSR   #LodSfl       BegSr                                             
  6. C     *Loval        SetLL     FDSPR                                    
  7. C                   Read      FDSPR                                  30
  8. C                   Dow       *IN30='0'                                
  9. *                                                                     
  10. C                   Add       1             wNum                       
  11. C                   Eval      RRN         = wNum                       
  12. C                   Write     @@SFL                                    
  13. *                                                                     
  14. C                   Read      FDSPR                                  30
  15. C                   EndDo                                             
  16. *                                                                     
  17. C                   If        wNum       <= 0                          
复制代码
  1. C                   Exsr      #InzSfl              
  2. C                   EndIf                          
  3. C                   Eval      @@SFPG      = 1      
  4. *                                                
  5. CSR                 EndSr                          
  6. *                                                
  7. *                                                
  8. CSR   #InzSfl       BegSr                          
  9. C                   Eval      RRN         = 1      
  10. C                   Write     @@SFL               
  11. CSR                 EndSr                          
  12. *                                                
  13. *                                                
  14. *                                                
  15. CSR   #PrcSfl       BegSr                          
  16. *                                                
  17. C                   ReadC     @@SFL               
复制代码
C                   Dow       *In99       = '0'        
C                   If        Opt        <> 0         
C                   Select
  1. * 修改数据                                          
  2. C                   When      Opt         = 2         
  3. C                   Reset                   Opt      
  4. C                   Eval      @@SFPG      = RRN      
  5. C                   Exfmt     @@WIDEDT               
  6. C                   If        *IN12       = '0'      
  7. C                   Update    @@SFL                  
  8. C                   Exfmt     @@WIDSUC               
  9. *                                                   
  10. C     DSPNO         Chain     FDSPR                  
  11. C                   If        %Found()               
  12. C                   Update    FDSPR                  
  13. C                   EndIf                             
  14. C                   Else                              
  15. C                   Update    @@SFL                  
  16. C                   EndIf                             
复制代码
  1. * 删除记录                                                         
  2. C                   When      Opt=4                                 
  3. C                   Reset                   Opt                     
  4. C                   Update    @@SFL                                 
  5. C                   Eval      @@SFPG      = RRN                     
  6. C                   Exfmt     @@WIDDLT                              
  7. C                   If        *IN12='0'                              
  8. C     DSPNO         Chain     FDSPR                              31  
  9. C                   If        *IN31='0'                              
  10. C                   Delete    FDSPR                                 
  11. C                   EXSR      #ClrSfl                                
  12. C                   EXSR      #LodSfl                                
  13. C                   Exfmt     @@WIDSUC                              
  14. C                   EndIf                                            
  15. C                   EndIf                                            
复制代码
C                   EndSL                                             
*                                                                     
C                   EndIf                                             
C                   ReadC     @@SFL                                  99
C                   EndDo                                             
CSR                 EndSr                                             

论坛徽章:
0
4 [报告]
发表于 2012-08-30 13:04 |只看该作者
请大家帮忙看下问题出在哪里了,有多条记录时进行删除记录没问题的,就一条记录时进行删除,也不提示出错,但是这条记录还显示在屏幕文件上,而与之关联的PF里已是空记录了。

论坛徽章:
0
5 [报告]
发表于 2012-08-31 07:45 |只看该作者
既然没有数据就不要执行#InzSfl了。直接关掉SFLDSP,打开SFLDSPCTL就行了

论坛徽章:
0
6 [报告]
发表于 2012-08-31 09:44 |只看该作者
  1. CSR   #InzSfl       BegSr                             
  2. C                   Clear                   @@SFL
  3. [color=Red]C                   Eval      RRN         = 1  [/color]      
  4. C                   Write     @@SFL                  
  5. CSR                 EndSr                             
复制代码


找到原因了!问题出在删除记录时没有Clear  @@SFL,而@@SFL里有读取的被删除信息,Write     @@SFL    时就把这条被删除信息写到屏幕文件里了,与之关联的PF仍是空的,这就解释了为什么删除最后一条记录后,PF已空,而屏幕仍显示该记录的问题               
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP