免费注册 查看新帖 |

Chinaunix

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

如何读取subfile里记录的记录?organization 为 Transaction [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-22 14:53 |只看该作者 |倒序浏览
在subfile里的形式如下(Format 为 format001):

Option      Name         Salary
_           xxx01        100
_           xxx02        200
_           xxx03        300
..........
..........

要求选择需要修改的记录并在"Option"的地方写上"U"。例如:
我需要选择"Name"为"xxx02"的记录进行修改,在界面上的选择如下:

Option      Name         Salary
_           xxx01        100
U_           xxx02        200
_           xxx03        300
..........
..........

针对打上标记为"U"的记录,系统会弹出一个窗口如下:

|-------------------------------------|
|                                              |
|                                              |
|  Name   : _XXX02________  |
|                                              |
|  Salary : _200__________   |
|                                              |
|                                              |
|F3=EXIT    F5=CONFIRM         |
---------------------------------------

现在的问题是:如何读取screen-file中"Name"为"xxx02"的记录?

在程序中对screen-file 的定义如下:

Select Screen-File                     
    ASSIGN TO Workstation-screenname-SI
    Organization  Is Transaction        
    Access Mode   Is DYNAMIC            
    RELATIVE KEY  IS test-NUM            
    File Status Is File-Status .

在display file中对format001的定义如下:
           R format001
A            Option      1   B  4 16
A            name      15  O  4 30
A            salary       6 2O  4 50

论坛徽章:
0
2 [报告]
发表于 2007-08-22 16:10 |只看该作者
有人知道吗?

论坛徽章:
0
3 [报告]
发表于 2007-08-22 16:32 |只看该作者
SFLCHG  
read next changed

论坛徽章:
0
4 [报告]
发表于 2007-08-22 16:39 |只看该作者
在DDS用打开SFLNXTCHG
在COBOL 中用READ  ...   NEXT MODIFIED

论坛徽章:
0
5 [报告]
发表于 2007-08-23 09:10 |只看该作者
循环读取subfile,判断option的值,如果有值,然后又判断出该值是‘U’的话,这个时候可以将读到的这笔记录中的NAME和SALARY传给窗口子程序,在窗口子程序中再显示出来。
完毕,谢谢!

论坛徽章:
0
6 [报告]
发表于 2007-08-23 09:15 |只看该作者
以下代码段的功能是:用于判断subfile中的OPTION有没有值,并且判断如果有值,值是否为'U'
CHK-SBF-PRC.
           MOVE 1 TO KEY-SUBFILE.
           MOVE 1 TO N.
           PERFORM UNTIL RED-SBF-EXT = 1

           READ SUBFILE DSPFILE INTO SFL-O-AREA
                FORMAT    IS    "MAINSFL"
                INVALID MOVE 1 TO RED-SBF-EXT
           END-READ
           IF OPTION OF SFL-O-AREA = " "
              ADD 1 TO N
           ELSE
              IF   OPTION OF SFL-O-AREA NOT = "U"
                IF WS-LOCKED = 0
                   MOVE 1 TO OPT-VALUE-INVALID             ***值非法
                   MOVE 1 TO WS-LOCKED
                END-IF
              END-IF
           END-IF
           ADD 1 TO KEY-SUBFILE
           END-PERFORM.
           IF N < KEY-SUBFILE
              MOVE 1 TO OPT-HAVE-VALUE                     ***有值  
           ELSE
              MOVE 0 TO OPT-HAVE-VALUE                     ***无值
           END-IF.

论坛徽章:
0
7 [报告]
发表于 2007-08-23 10:18 |只看该作者
我觉得循环读取的方法不好,  因为SUBFIEL 可能有9999条数据,而用户实际只打了一个'U' , 你却去读9999条逐条进行判断,  程序的性能不好.

论坛徽章:
0
8 [报告]
发表于 2007-08-23 10:27 |只看该作者
用next modified 读了一条再一次读就是非modified的了?
是否必须rewrite subfile?
我做的时候 每次 读一次modified 以后 如果还要读的话就rewrite 一次  好麻烦 。。。

论坛徽章:
0
9 [报告]
发表于 2007-08-23 11:02 |只看该作者
读过之后,就是非MODIFIED了,  REWRITE 是为了清除那个'U'

写程序的时候麻烦一点,比将来你的SUBFIEL经常死机要好.

论坛徽章:
0
10 [报告]
发表于 2007-08-23 11:12 |只看该作者
rewrite清楚了那个u
再次读subfile next modified 能读到上次有  U 而这次 U被清除的那一条记录
感觉好混乱
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP