AS/400开发经验点滴(二):一个批量修改文件属性的工具
AS/400开发经验点滴(二)
四.一个批量修改文件属性的工具
AS/400上的每个文件都带有大量的属性,文件的属性是在创建文件的时候指定的。在实际应用过程中,可能会需要改变这些文件属性。以PF文件为例,我们可能需要修改文件的Member Size,Maximum Members,Maximum record wait time等等。修改物理文件(PF)属性命令是CHGPF,修改逻辑文件(LF)命令是 CHGLF,遗憾的是这些命令一次只能修改一个文件。如果假设有一个库,库下面有几千个物理文件需要一次性统一修改文件属性,那该怎么办?AS/400并没有提供这样的命令。
我做了一个工具命令,可以实现对一个库下的所有文件属性进行批量修改,下面以修改文件Reuse deleted records属性为例来介绍这个工具命令,并附带全部源码。文件Reuse deleted records属性是表示记录在文件物理空间内被插入的方式,缺省情况下Reuse deleted records属性为*NO,这表示新记录将追加到文件尾部,如果Reuse deleted records属性修改为*YES,这表示物理文件中原已删除记录物理空间可以重复使用,当有新记录要加入时,系统会优先把新记录插入到原已删除记录空间里,只有当所有被删除记录空间都被重新使用后,新加记录才会从文件尾部开始追加。这个属性对于文件记录非常多、重整所费时间很长的情况下,还是很有用的。
制作修改一个库下所有文件属性的思路是首先应把该库下的所有物理文件名取出来,然后才能循环一个个地修改。以下是主要步骤:
1. 提取某库下所有物理文件名
这主要是通过利用DSPFD来实现的。该命令是用来显示文件描述(File Description)的,它可以一次显示一个库下的一文件描述,也可以一次显示一个库下的所有文件描述。可以在OUTPUT选项里填入*OUTFILE,并在OUTFILE选项里填入接收文件名,就可以把DSPFD的显示内容输出到一个临时PF文件中。该临时文件就包含有文件名字段ATFILE以及库名字段ATLIB。例如下面DSPFD命令就是把定义某库下的所有物理文件名及其基本属性(*BASATR)输出到QGPL库下的 TEMPLIBF文件里:
[code:1:b3ca3ab88b]DCL VAR(&CALIB) TYPE(*CHAR) LEN(10) /*定义一个库名变量*/
DSPFD FILE(&CALIB/*ALL) TYPE(*BASATR) +
OUTPUT(*OUTFILE) FILEATR(*PF) +
OUTFILE(QGPL/TEMPLIBF) [/code:1:b3ca3ab88b]
2. 对包含有文件名的临时文件进行加工
其实因为上面已经把文件名输出到了一个PF文件里,所以这一步可不要。但为了查看方便,我还是把文件名从TEMPLIBF中提出写入到一个更简单的PF文件中。先创建一个名为DTAFNAME的物理文件,如下:
[code:1:b3ca3ab88b]A R DTANAM
A FILNAM 10A /*PF文件名*/
A FILLIB 10A /*库名*/[/code:1:b3ca3ab88b]
再用CRTSRCPF命令在QGPL库下建一个CHGTEST源文件目录,在该文件下创建一个SQL脚本文本文件CHGLIBAF,其内容为:
INSERT INTO DTAFNAME
SELECT ATFILE,ATLIB FROM QGPL/TEMPLIBF
然后在CL程序中,用RUNSQLSTM命令运行SQL脚本文件中的SQL语句:
RUNSQLSTM SRCFILE(QGPL/CHGTEST) SRCMBR(CHGLIBAF)
这样就把文件名及库名从复杂的TEMPLIBF文件倒入到简单的DTAFNAME文件中
3. 循环修改文件属性
循环读DTAFNAME文件,取出文件名,就可以一个个地用CHGPF命令修改文件属性了。
下面是完整的源代码:
文件名:CHGLIBFACL (CLLE)
[code:1:b3ca3ab88b]/*===================================================================*/
/* PROGRAM NAME: CHGLIBFACL */
/* DESCRIPTION : */
/* PROGRAMMER : BLOG LIOU */
/* DATE : */
/*===================================================================*/
PGM PARM(&CALIB &REUSED)
DCLF FILE(DTAFNAME) RCDFMT(DTANAM)
DCL VAR(&CALIB) TYPE(*CHAR) LEN(10)
DCL VAR(&REUSED) TYPE(*CHAR) LEN(4)
CHKOBJ OBJ(QGPL/TEMPLIBF) OBJTYPE(*FILE)
MONMSG MSGID(CPF9801)
CLRPFM FILE(QGPL/TEMPLIBF)
MONMSG MSGID(CPF3142)
DSPFD FILE(&CALIB/*ALL) TYPE(*BASATR) +
OUTPUT(*OUTFILE) FILEATR(*PF) +
OUTFILE(QGPL/TEMPLIBF)
CLRPFM FILE(DTAFNAME)
RUNSQLSTM SRCFILE(QGPL/CHGTEST)
SRCMBR(CHGLIBAF)
LOOP: RCVF RCDFMT(DTANAM) /* Read a file record */
MONMSG MSGID(CPF0864) EXEC(GOTO EOF)
CHGPF FILE(&FILLIB/&FILNAM) WAITFILE(60) +
REUSEDLT(&REUSED)
GOTO CMDLBL(LOOP)
EOF: ENDPGM [/code:1:b3ca3ab88b]
命令文件:CHGLIBFA (CMD)
[code:1:b3ca3ab88b]
/*===================================================================*/
/* PROGRAM NAME : CHGLIBFA */
/* DESCRIPTION : */
/* PROGRAMMER : BLOG LIOU */
/* DATE : 2003/11/20 */
/*===================================================================*/
CMD PROMPT(Change Database File Attribute)
PARM KWD(CHGLIB) TYPE(*NAME) LEN(10) +
PROMPT(Change Lib)
PARM KWD(REUSEDLT) TYPE(*NAME) LEN(4) +
SPCVAL((*YES) (*NO)) PROMPT(Reused +
Delete Rows) [/code:1:b3ca3ab88b]
用命令CRTCMD CMD(CHGLIBFA) PGM(CHGLIBFACL)创建CHGLIBFA命令,执行CHGLIBFA,就可以输入库名修改该库下的所有文件的Reuse deleted records的属性了。只需要稍对程序进行修改就可以批量修改文件多个其他属性了。
| xuguopeng 回复于:2003-12-06 09:51:47 |
| 很好 很好 继续继续~~~ |
| yokel 回复于:2003-12-08 10:07:37 |
| 太感谢了 |
| wildfish 回复于:2003-12-08 11:38:32 |
| 谢谢,:) |
| kevingao 回复于:2003-12-08 16:24:21 |
| 我顶。。。。 |
| dfangyang 回复于:2003-12-09 17:01:58 |
| 不错,有帮助 |
| hanyu 回复于:2003-12-10 13:17:04 |
| 原创精华
谢谢! |
| andrewleading_he 回复于:2004-01-05 17:24:00 |
| 不錯!繼續! |
| stephenxie2003 回复于:2004-01-06 11:00:15 |
| 谢谢大虾!
继续吧! :) |
| PPhan 回复于:2004-01-06 11:52:40 |
| 这位前辈真堪称楷模!谢了!! |
| riancy1106 回复于:2004-01-07 11:25:41 |
| 支持,顶一下 |
| fairyboy 回复于:2004-12-01 08:04:03 |
| 支持楼主,继续 |
| Red_Crow 回复于:2004-12-01 08:52:33 |
| 支持,加油。 |
| thursday 回复于:2004-12-01 09:39:21 |
| 收藏,帮顶! |
| old400 回复于:2004-12-01 21:03:06 |
| 不错,写得好。
用PDM的用户自定义OPTION 实现起来也很容易。不过有可能生产系统没有装PDM。 |
最热门文章推荐:
>· rsa信息安全公司
>· 注册组件
>· 上传组件
>· asp上传组件
>· .net组件
>· 组件对象模型
>· 无组件上传图片
>· fat ntfs
↓相关文章:
- · 安装了2989后 telnet 的问题
- · Let AS/400 Page You!
- · 求助:如何实现程序等OBJ的双机拷贝?
- · 对系统中出现的message有相对应的说明吗
- · 求DOMINO FOR AS400 R5 TO R6详细升级步骤
- · AS/400开发经验点滴(三)--如何使用分布式关系数据库
- · INZTAP的参数问题
- · AS/400开发经验点滴(四)--如何在程序中获取系统状态信息
- · 异常IPL的原因归纳
- · 关于文件的 ShareODP 和 USROPN
- · 请教各位:如何查看是谁删除了Library?
- · 除去字符串中任何不需要的东东的思路,仅供参考!!!!!
- · 查看as400下全部USER的几种方法:
- · Fun With Dates In RPGLE
- · as400 I/O 错误小结
- · 我想用ORACLE取AS400的数据,有没有与这个类似的培训!
- · 400中显示在线用户操作记录的方法(用User Space API 实现)
- · 在rpg 里如何对开关进行重命名?
- · AS400 上部署 J2EE 的另一选择-- JBOSS !
- · 问个关于系统MSG的问题?
- · The OS400 Command interface is EXCELLENT, but coukd be impro
- · 帮忙解释安全文档里的一句话
- · 定时启用禁用用户登陆系统的方法
- · 如何更改logon on screen?
- · 跟踪IPL全程、并将产生的spoolfile转成PC上的文本文件,一气呵成.
- · AS400上的FTP可以限制那些用户不能登陆吗?
- · 如何從 AS/400 啟動 PC 程序或 從 PC 啟動 AS/400 程序?
- · 得到4位表示 年份 的新方法?
- · V5R3 CL Programming
- · 原创:建立QINTER外可用于交互式访问的独立子系统
- · hanyu看过来,24小时交易的AS/400如何备份?
- · 磁带放进去就弹不出来三个指示灯一会全亮着
- · 【探讨】如何使用Notes与其它关系数据库进行信息交互?
- · 【探讨】如何限制Notes用户邮箱大小?
- · Some info on AS/400 V5R3
- · iSeries课程学习导航图,给您指引学习或者培训方向。
- · 很菜的问题
- · 关于数据库文件的UC控制的问题
- · 转 Commit/Rollback概念
- · 有倒序排列的KEY值时的SETLL和SETGT
- · 大家帮忙来找茬(到底RPG程序错在哪?)
- · 讨论:关于创建obj时的参数--share
- · 帮忙看看这段程序的问题出在哪里?
- · 《最后100天的AS400学习心情笔记》
- · 在一个PF中加一字段,用来表示记录的序号!
- · SLR60磁带机可以做200GB系统的全系统备份,何故?
- · 讨论系统设备的异动监控
- · 求助:存储过程的查找和COPY
- · 【步骤】使用SQL DTS功能实现从DB/2向SQL Server传输数据.
- · 请教:如何修改PF文件的CCSID值?
- · 关于触发器的初级问题,请用过的大虾指教
- · 如何使用FTP在PC和AS/400之间传输包含中文的文件
- · 各位前辈,小女子是400初学之初学
- · (原)在as400上更换硬盘
- · pcom各种版本的问题总结
- · (如何在iSeries(AS/400)將资料加密(ZT)
- · 急等 如何更改as/400 V4R5 如何更改IP地址
- · 通过Navigator配置实现PC端拨号登陆远程AS/400.
- · 高版本安全数据向低版本系统迁移问题
- · as400与windows如何互相传送文件
- · 【分享】如何实现直接从AS/400发送信息到指定的邮箱.
- · rpg的小问题谁能解决一下,先谢了!(新手)
- · CA连接不上,PCOMM正常使用,授权及网络正常。什么问题?
- · exfmt与write的区别
- · 在TCPIP基础上建立APPC连接
- · 硬盘利用率的问题
- · 如何利用RPG,CL和ACCESS制作一个条形码标签的打印程序?
- · domino的邮件问题 急! (居士快进)
- · 请教400上的文件问题
- · 如何用PC超级终端对RS6000完成控制及安装(希望是我的精品)
- · (原创) 7133-T40阵列故障解决实例
- · 又来临时抱佛脚了,请教s7a电源问题
- · 经验交流<如何在AIX下面更改before login banner>
- · 刚完成的一个hacmp 5.1 +db2 udb 8.1 ese环境下的HA配置!
- · [原创]SNORT&ACID install on AIX 5.2
- · 一光纤卡的问题的解决,有类似问题的可以参考
- · 使用SFU实现Windows和AIX文件共享-请求加精
- · ORACLE/RAC安装完全攻略
- · Step bye Step for Install the Domino server 7 on aix 5L 5.2
- · 199学习笔记(chap11)

