Ibm midrange 如何在CL编程中添加编辑和验证规则?(As400)

Ibm midrange 如何在CL编程中添加编辑和验证规则?(As400),ibm-midrange,Ibm Midrange,请注意,这是大学的“扩展知识”(可选任务),而不是作业 我有一个名为INVFILE的物理文件和一个名为INVFILE1 R INVFILE 1 PARTDESC ONHAND UNITCOST STOCK PARTNUM K PARTNUM 我有一个名为INVCL99 这是我的INVFILE1 R INVFILE 1 PARTDESC ONHAND UNITCOST STOCK PARTNUM K PARTNUM 这是我的CL程序的代码 PGM

请注意,这是大学的“扩展知识”(可选任务),而不是作业

我有一个名为
INVFILE
的物理文件和一个名为
INVFILE1

R INVFILE 1
  PARTDESC
  ONHAND
  UNITCOST
  STOCK
  PARTNUM
K PARTNUM
我有一个名为
INVCL99

这是我的
INVFILE1

R INVFILE 1
  PARTDESC
  ONHAND
  UNITCOST
  STOCK
  PARTNUM
K PARTNUM
这是我的CL程序的代码

PGM

         SNDUSRMSG MSG('EXECUTING INVENTORY PROGRAM, PRESS ENTER')

         CHGDTA DFUPGM(INVENTORLB/INVENTORY) FILE(INVENTORLB/INVFILE1)

ENDPGM
我希望能够做的是验证
STOCK
列。目前,它只接受1个字符,或者不接受任何字符

我想验证它,以便它只能接受1个特定的字符
*
,或者保留为空,不能输入任何其他内容

我一直在谷歌上搜索,试图找到一些能帮助我解决这个问题的信息来源,但不幸的是,我什么也找不到。有没有人能告诉我去哪里找?或者告诉我我需要做什么

另外,我不确定我是否应该为此提出另一个问题,但我一直在尝试使用多种方法在我的DFU程序中输入小数示例:购买总额2300.29,我尝试过导致问题的浮动,我尝试过压缩小数,但我似乎不知道如何允许输入小数/句点


谢谢。

他们正确的做法是在DDS中的物理文件中

可以使用限制字段的有效值

将基本SQL检查约束的等效项放置在字段上。事实上,如果愿意,您可以简单地定义一个SQL检查约束


就您的十进制输入问题而言,打包或分区十进制是正确的选择。我不知道为什么输入小数点会有问题。但我从未使用过DFU程序。您可能应该将其作为一个单独的问题发布。

DFU可以从使用字段面板中为列指定,2=指定扩展定义,然后2=更改有效性检查提示,其中,当关系运算符提示符设置为LS=值列表时,在指定有效性检查面板上,可以在值列表提示符上指定DDS
关键字的参数

因为在数据库文件DDS[PF或LF]中指定
VALUES()
在程序生成器和DDS编译器为创建显示文件(CRTDSPF)提供的功能之外没有任何影响。[数据库不关心实际I\O的指定],在PF或LF DDS中编码
值的唯一好处是确保DFU和CRTDSPF看到相同的输入限制;PF通常是将属性带到LF和其他位置的更好选择。注意:用于创建打印机文件(CRTPRTF)的DDS编译器可识别其他关键字,但不能识别值,因为PRTF仅输出,而不允许输入,如DSPF]


我忘记了如何为DSPF编码DDS,以覆盖无法键入小数点的句点,但我似乎记得,添加编辑代码(EDTCDE)和删除CHECK关键字后,可以键入小数点;要求DFU保存DDS,然后检查生成的功能,然后可以创建和使用自定义版本。对DFU的另一个刺激作用是强制大写字母;我记得这是一个可以更改的DSPATR关键字设置。交互式DFU代码生成器可能会像编写有限值代码的能力一样,为这两个问题中的任何一个指定功能,但我不记得了,粗略地看一下,我什么也没看到

我为你在CL尝试这一点鼓掌。老实说,你为什么要这么做?RPG就是为此而设计的,它比CL更容易做到这一点。CL更适合一起运行一组程序。我相信这是可能的,但我会编写和RPG程序来做你想做的事情。我甚至不知道,我们的教授甚至还没有开始谈论RPG lol,但很高兴知道使用RPG会容易得多,所以在未来我不会让自己头疼。我将要做的是尝试两者,我将从RPG开始,因为它更容易,然后我将学习在CL中做它,作为以防万一的事情lol。谢谢迈克!您显示了字段、记录和文件的名称,但没有数据定义。如果不知道数据类型和大小,我们就无法知道小数点和小数点的输入方式。(我们甚至不知道字段是数字还是字符。)顺便说一句,DDS可能不是数据库文件的最佳选择,尽管您可能需要学习它。SQL对于任何新的东西都可能更好。如果DFU进行输入,那么CL本身几乎不会有任何
编辑和验证。这一切都将由数据库规则来完成。这在CL中是很容易做到的,但是你已经在做DFU了。谢谢你的回答,不幸的是,我似乎无法继续。我把它放在逻辑文件中(这是对物理文件的引用),并尝试将其设置为十六进制格式
VALUES(X'2A')
,以及仅值格式
VALUES('*')
,但我似乎无法做到这一点,当DFU加载它时,它停止输入除*以外的任何内容。我试着把物理文件放进去,但编译时结果不正常。我一定是做错了什么。代码值('''*')。请注意,IBMi是一个EBCDIC系统,而不是ASCII。虽然0x2A是7位ASCII编码中的星号,但EBCDIC 8位代码点是0x5C。最好避免用十六进制代码点编码任何东西,除非\直到理解影响;通常[假设用户配置文件针对语言\语言环境属性进行了正确设置],可见图示符的键盘字符就是识别正确字符所需的全部代码。如果在退出STRDFU创建或更改程序时,选择了“保存DDS以显示文件”选项,则相同的值将出现在那里。我看到我的应用程序