【发布时间】:2018-12-10 23:14:59
【问题描述】:
我使用progress 4GL 编写了一个程序。语法是正确的,但不知道如何减少代码..我们是为座位工作的公司,使用progress 4gl..我们有一张名为轮班维护的表,每个小时都有轮班时间。举个例子来解释一下。
DEFINE VARIABLE FistshiftStartHour AS INTEGER NO-UNDO.
DEFINE VARIABLE FistShiftEnddHour AS INTEGER NO-UNDO.
DEFINE VARIABLE SecshiftStartHour AS INTEGER NO-UNDO.
DEFINE VARIABLE SecShiftEnddHour AS INTEGER NO-UNDO.
FIND FIRST shift WHERE shift.shiftsequence = 1 NO-LOCK NO-ERROR.
ASSIGN
FistshiftStartHour = shift.starthour
FistShiftEnddHour = shift.endhour.
FIND FIRST shift WHERE shift.shiftsequence = 2 NO-LOCK NO-ERROR.
ASSIGN
SecshiftStartHour = shift.starthour
SecShiftEnddHour = shift.endhour.
像这样,我需要为每个班次编写一个查询,并为 21 个班次顺序分配两个变量。有没有机会减少这么多查询?(注意-我必须为各个变量分配开始和结束时间) .
【问题讨论】:
-
为什么它们需要是单个变量?如果您将变量声明为数组,则可以循环遍历您的班次并将每个序列分配给数组中的编号条目。拥有 21 对单独声明的变量是很多代码行,我认为您无法有效地执行任何操作来填充它们。
-
背后的原因是必须有机会更改轮班时间..所以我已经将这些轮班时间表字段直接分配给变量..最后,无论他们改变轮班时间,这永远不会影响否则每次我需要在不分配变量的情况下更改查询时查询
-
@Screwtape 否则,您能否编写一个不带变量分配给 21 序列的循环查询。在这种情况下先生,您能帮忙吗?
-
您将启动
FOR EACH shift NO-LOCK BY shift.shiftsequence WHERE shift.shiftsequence <= 21:- 在手册中查找 FOR EACH 命令,并查看如何创建循环块...documentation.progress.com/output/ua/OpenEdge_latest/… -
要提高性能,请确保 shift.shiftsequence 在索引中!
标签: openedge progress-4gl