IBM i RPG编程:子文件显示遇'Session or device error'错误求助
问题诊断与修复方案
核心问题1:未激活SFLDSPCTL就写入子文件记录
你的代码中设置*IN31 = *ON(启用SFLDSPCTL)后,没有重新执行WRITE SFLCTL同步配置。SFLDSPCTL是控制子文件是否可写入的关键开关,必须通过WRITE操作将状态同步到显示文件,否则系统会判定子文件未处于可用状态,写入时触发设备错误。
核心问题2:EXFMT目标错误
最后执行的EXFMT SFLREC是错误的,EXFMT必须针对子文件控制记录SFLCTL而非子文件数据记录SFLREC。只有对SFLCTL执行EXFMT,才能正确触发子文件的显示与用户交互。
额外建议:初始化输入字段
显示文件中OPT$01是输入型字段(标记为B),写入子文件记录时如果未赋值,可能导致缓冲区存在不确定值,建议显式赋予初始值(比如0)。
修正后的完整RPGLE代码片段
FSTUDP IF E K DISK FSTUDD CF E WORKSTN SFILE(SFLCTL:RRN) D RRN S 4 0 //Clear subfile *in32 = *on; //SFLCLR *in30 = *off; //SFLDSP write sflctl; *in32 = *off; //SFLCLR *in31 = *on; //SFLDSPCTL write sflctl; // 激活SFLDSPCTL,必须执行此WRITE rrn = 0; //Add one dummy record to subfile and display rrn += 1; id$ = 123; name$ = 'aaa'; opt$01 = 0; // 初始化输入字段 write sflrec; *in30 = *on; exfmt sflctl; // 针对SFLCTL执行EXFMT,控制子文件显示交互 *inlr = *on;
内容的提问来源于stack exchange,提问作者Peter1
相关产品推荐
相关产品推荐

