一般来说你在程序中F CARD中定义的FILE 我们假定是FILE A 那么在程序中所有的语句处理都是以FILE A的定义的字段处理,当运行程序是如果没有做其他操作,系统将默认打开FILE A的*FIRST MEM 作为读写的目标.
如果此时你要读写的文件是个多MEM的PF希望用另外一个MEM作为读写目标,或者是另一个与FILE A 格式相同(注意)名称不同的文件,或者是另外一个LIB下的FILE A 同名的文件(如果不能修改LIBL的话) 这个时候就要用OVRDBF了.
假定你需要使用的是FILE B MEM 为MBR
OVRDBF FILE(FILEA) TOFILE(LIB/FILE B) MEM(MBR)
这样的结果是所有对FILE A MEM(*FIRST)的读写操作实际上将是对 FILE B 的MEM MBR操作
和OPNQRYF结合使用的.
一般的用法是 有FILE A 和FILE B 有需求在处理中将这两个文件结合使用.
此时先建个TEMP FILE C (PF)包含需要使用的 FILE A 和 FILE B 的字段,此PF是个空文件.
在程序中使用FILE C
在调用程序前
1.在QTEMP 复制一个FILE C
2OVRDBF QTEMP / FILE C TOFILE( FILE C)
OPNQRYF 将FILE A 和FILE B 按照FILE C的格式生成临时文件
调用程序处理
在QTEMP 建临时文件是为了避免多进程调用冲突.
opnqryf命令本身Open options . . . . . . . . . . OPTION 有多种选择:*ALL, *INP, *OUT, *UPD, *DLT
也就是生成的文件可供读/写/更新/删除操作
从数据的完整性来说,ovrdbf是IBM把数据采集和程序分割开来的连接点:
数据 ------> |---------------|
| ovrdbf |
程序 -------> |---------------|
客户a在调用程序之前,采集了用query采集了数据集A,用默认member,定义ovrbdf,调用程序B;
客户b在调用程序之前,采集了用query采集了数据集B,用b member,定义ovrdbf,调用程序B;
如果,用相同member,定义ovrbdf,就会发上lock,和数据错误。