如何查询AS400上DSPF是否以DFRWRT(*NO)编译?QDFRTVFD API无效
如何查询IBM i(AS/400)显示文件(DSPF)是否以DFRWRT(*NO)编译
嘿,我刚好碰到过类似的需求,QDFRTVFD API确实没法直接返回DFRWRT的状态,给你几个实用的替代方法:
方法1:使用DSPFD命令(最直观)
DSPFD是IBM i上查看文件属性的常用命令,能直接获取DFRWRT相关信息:
直接查看屏幕输出:
运行命令:DSPFD FILE(你的库名/显示文件名) TYPE(*ATR)在输出的File Attributes区域,找到「Allow file to be updated」字段:
如果显示为
*NO,就说明该显示文件是以DFRWRT(*NO)编译的;如果是*YES则相反。输出到文件批量处理:
要是需要批量检查多个文件,可以把结果导出到物理文件:DSPFD FILE(你的库名/*ALL) TYPE(*ATR) OUTPUT(*OUTFILE) OUTFILE(QTEMP/DFD_ATTRIBUTES)导出的文件采用
QSYS/QAFDA结构,其中UPDAT字段对应更新权限:UPDAT = '0'→ 对应DFRWRT(*NO)UPDAT = '1'→ 对应DFRWRT(*YES)
方法2:用SQL查询系统视图(适合自动化脚本)
IBM i的系统视图提供了更灵活的查询方式,推荐使用QSYS2.SYSTABLES视图:
SELECT TABLE_SCHEMA, TABLE_NAME, UPDATE_ALLOWED FROM QSYS2.SYSTABLES WHERE TABLE_TYPE = 'DISPLAY FILE' AND TABLE_SCHEMA = '你的库名'; -- 可替换为具体库名,或删除该行查询所有库
其中UPDATE_ALLOWED字段的含义:
'N'→ 不允许更新,即DFRWRT(*NO)'Y'→ 允许更新,即DFRWRT(*YES)
如果需要更详细的显示文件专属属性,也可以查询QSYS2.SYSDSPFFILE视图,它包含了显示文件特有的关键字配置信息。
方法3:使用QUSRTVFD API(进阶方案)
虽然QDFRTVFD不行,但还有个专门针对显示文件的API——QUSRTVFD(Retrieve Display File Description),它能返回DFRWRT的状态。你需要先定义接收变量,示例CL代码如下:
DCL VAR(&DFRWRT) TYPE(*CHAR) LEN(10) DCL VAR(&RTN_LEN) TYPE(*INT) LEN(4) VALUE(10) CALL PGM(QUSRTVFD) PARM(你的库名/显示文件名 'DFRWRT' &RTN_LEN &DFRWRT)
调用完成后,&DFRWRT变量会返回*NO或*YES,对应编译时的DFRWRT关键字设置。
内容的提问来源于stack exchange,提问作者Arsnow
相关产品推荐
相关产品推荐

