- 论坛徽章:
- 0
|
CHAIN {(N | E)} (Random Retrieval from a File) 按键值对文件记录进行查询定位
1. 基本语法:
举例,对逻辑文件PFFHSL1进行定位操作。逻辑文件PFFHSL1,是以FHS01为键值,文件记录格式名叫FMTFHS
Factory 1 Operation Factory 2 Result HI LO EQ
FHS01 CHAIN FMTFHS 17 18
这个例子中,FHS01应该是一个与文件PFFHSL1中键值(FLD01)类型、长度都相等的一个字符型变量,或者字符。
Factory 2项中,要填文件的记录格式名,而不是文件名
HI指示器表示是否查询到相应记录,查询不成功时,打开HI指示器
LO指示器表示查询时,文件是否被锁。文件被锁时,打开LO指示器
也就是说:
*IN17=’0’,表示查询到了目标记录。
*IN17=’1’, *IN18=’0’,表示无相应的目标记录
*IN17=’1’, *IN18=’1’, 表示查询时,文件被锁(不确定有没有相应的目标记录)
READ {(N | E)} (Read a Record) 读取记录
1. 基本语法:
Factory 1 Operation Factory 2 Result HI LO EQ
READ 文件记录格式名 45 46
READ后面跟的,必须是声明的文件记录格式名;
LO指示器表示锁表指示器,当在指定的时间(CHGPF,WAITRCD项可看到),需要读取的记录仍被锁,将会打开LO指示器,即*IN45=’1’;
EQ指示器为是否读到指示器。当未读到任何记录时,打开EQ指示器,即*IN46=’1’
2. 当文件在程序中,是用只读的方式声明时,READ操作并不会造成锁表;
如果文件在程序中是用修改的方式声明,READ操作成功后,该记录被锁;直到执行解锁操作(UNLOCK,或UPDATE),或READ该文件的其它记录,才会解锁
如果文件是用修改的方式声明,但希望READ操作不锁表时,那么就用READ(N),即
Factory 1 Operation Factory 2 Result HI LO EQ
READ(N) 文件记录格式名 45 46
这样读文件,就不会锁记录,但是同时也不能修改记录。如果需要修改记录,那么在修改之前(包括对文件字段赋值之前),还必须再对该记录进行一次定位操作(比如CHAIN、READ语句均可)。也就是说,如果要修改记录,必须先锁住当前记录(很合理吧)
3. 当执行READ操作时,程序是根据游标当前在文件中所指向的位置,顺序读取下一条记录。关于游标是如何指向,还不是一个很简单的问题,所以将会在下一章“数据库相关知识”中具体讲解。
4. 执行READ操作时,允许声明的文件没有键值。(即PF文件) |
|