OpenEdge/Progress 4GL手机号与出生日期验证及代码问题求助
问题分析与修复方案
原代码核心问题
- Frame B未明确定位:Progress 4GL中未定义位置的frame可能无法正常渲染,导致录入后无输出。
- 重复录入操作:
dob < today分支已执行update name,后续又重复执行,打乱录入流程。 - 输入校验不严谨:出生日期、手机号仅单次校验,用户再次输入错误时无二次校验逻辑,无法保证数据合法性。
- 手机号逻辑不符需求:原代码仅校验10位手机号,不符合"不少于9位"的要求;且用int存储手机号存在范围限制(Progress int最大值通常为2147483647,无法存10位以上号码)。
- Frame B输出逻辑模糊:未明确显示位置,内容可能被其他frame覆盖。
修复后的代码
define var num as integer label "S.No". define var name as char label "NAME ". define var dob as date label "DOB" format "99/99/9999". define var mobnum as char label "Mobile No:" format "9999999999". /* 改用char存储,避免int范围限制 */ /* 定义录入区Frame A和展示区Frame B的位置与结构 */ define frame a at row 2 col 2 num label "S.No" dob label "DOB" name label "NAME" mobnum label "Mobile No:" with 10 down title "信息录入". define frame b at row 15 col 2 num column-label "S.NO" name column-label "NAME" dob column-label "DOB" mobnum column-label "Mobile Number" with 10 down title "已录入记录". /* 初始化Frame B表头 */ display "S.NO" column-label "S.NO" "NAME" column-label "NAME" "DOB" column-label "DOB" "Mobile Number" column-label "Mobile Number" with frame b. down with frame b. repeat num = 1 to 3: /* 清空Frame A旧内容 */ erase frame a. display num with frame a. /* 循环校验出生日期:必须小于等于当前日期 */ repeat: update dob with frame a. if dob > today then do: display "日期不能大于当前日期,请重新输入." with frame a row 10 col 2. end. else leave. /* 输入正确则退出校验循环 */ end. /* 录入姓名 */ update name with frame a. /* 循环校验手机号:不少于9位数字 */ repeat: update mobnum with frame a. if not(mobnum matches "999999999") or length(mobnum) < 9 then do: display "请输入不少于9位的数字手机号." with frame a row 10 col 2. end. else leave. /* 输入正确则退出校验循环 */ end. /* 在Frame B追加当前记录 */ display num column-label "S.NO" name column-label "NAME" dob column-label "DOB" mobnum column-label "Mobile Number" with frame b down. end.
关键修复说明
- 明确Frame定义:指定两个frame的位置和标题,分离录入区与展示区,避免内容覆盖。
- 循环校验输入:对出生日期、手机号使用
repeat循环,直到用户输入符合要求,确保数据有效性。 - 优化录入流程:移除重复的
update name操作,严格按照序号→出生日期→姓名→手机号的顺序录入。 - 手机号存储优化:改用char类型存储,避免整数范围限制,同时方便长度校验。
- 初始化展示表头:提前渲染Frame B的表头,让输出结构更清晰。
内容的提问来源于stack exchange,提问作者Tony Stark
相关产品推荐
相关产品推荐

