终于实现了翻页功能

COBOL程序里面要实现上下翻屏,不能像AS/400 RPG+DISPLAY FILES那样简单定义SUBFILE,而必须要自己写出算法.一般来说是定义SQL CURSOR,在打开CURSOR的时候每次读几条记录,然后记录下第一条和最后一条记录,以便下一次上下翻屏,以前在开放平台开发的时候从来没有考虑过这方面的事情,这回用COBOL去开发,遇到这个问题觉得很有意思,因此坚持着做了出来。

实现翻屏的方法有几种,我主要说一下我做的方法:

首先,定义两个程序,一张MAP,三个JCL,分别对应程序和MAP,一个DB2C,一个DB2E,程序之间是调用关系,程序之间传递消息使用TSQ

然后,将查询条件由程序一传入程序二,程序二从数据库中查找符合条件的记录并将记录写入TSQ,同时返回记录数与页数

最后,程序一读取TSQ中的内容,并且写入MAP中,每次调用程序的时候页数变化,从而决定了读取记录的不同,从而实现了翻屏的功能。

 

程序功能虽然说的很容易,但是做起来不是很容易的,尤其对于我这样的新手来说,憋了很久,查了很多资料才最终搞定,可以算是我这次比赛目前实现的最复杂的功能了。

 

下面说几个需要注意的地方:

1. TSQ命名的问题,由于我们的系统是高度并发、高度实时的系统,支持多用户同时访问,因此很有可能出现一个用户在使用TSQ的时候另一个用户也想使用,这样就会出现数据的一致性问题。为了解决这个问题,我使用“终端号”+“交易号”的命名规则,这样命名的TSQ对于每个用户来讲就是唯一的了,也就避免了上面提到的问题。

2. TSQ数据长度问题,这个长度必须是总长79,因为MAP中为了实现翻页而用到的循环列长必须是79,也就是一列,否则会出现难以理解的对齐问题。

3. 页号问题。我们的系统采用了伪会话技术,是交易之间互相调用而不是程序互相调用,因此必须在原有的COMMAREA基础上加上一个描述页码的变量PAGE-NUM,这样,每次交易互调的时候对这个页码进行“+1”或者“-1”的操作,就可以实现伪会话技术下的翻页操作。

 

目前这个程序功能已经很好的实现,但是如果想象ISPF中那样支持多种翻屏方式,还需要对程序进行相当程度的改进,呵呵,挺有意思的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值