【问题标题】:How to increase the process performance by reducing following codes?如何通过减少以下代码来提高流程性能?
【发布时间】: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


【解决方案1】:

您可以使用数组变量处理班次时间,并在您的表/临时表中执行循环时分配它:

DEFINE VARIABLE sSeq AS INTEGER EXTENT 21 NO-UNDO. /* start hour */
DEFINE VARIABLE eSeq AS INTEGER EXTENT 21 NO-UNDO. /* end hour */

FOR EACH shift WHERE shift.shiftsequence LE 21 NO-LOCK BY shift.shiftsequence:
    sSeq[shift.shiftsequence] = shift.starthour.
    eSeq[shift.shiftsequence] = shift.endhour.
    DISP sSeq[shift.shiftsequence] eSeq[shift.shiftsequence].
END.

【讨论】:

  • 谢谢您,先生...我将实施此方法...并回复您
  • 您编写的代码确实可以帮助我一次获取所有数据,但我担心需要将每个开始和结束时间分配给各个变量..在这种情况下您能帮忙吗?
猜你喜欢
  • 2011-03-15
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
  • 2016-06-20
  • 2019-10-01
相关资源
最近更新 更多