此处需要循环方法



我在progress 4GL的一位经验丰富的人员的帮助下编写了一个查询,但我错过了一个概念。我已经分享了这个问题。在这里,我需要的是根据每个轮班序列的开始和结束时间计算总订单(总计21个序列(,并分配给变量。例如,看下面的

DEFINE VARIABLE StartHour06 AS INTEGER NO-UNDO.
DEFINE VARIABLE StartHour07 AS INTEGER NO-UNDO
FIND FIRST gdmf_shift WHERE gdmf_shift.shft_sequence = 1 NO-LOCK NO-ERROR.
StartHour06 = gdmf_shift.shft_start_hour.
StopHour07 =  gdmf_shift.shft_stop_hour.

像这样,我需要编写最多21个移位序列的查询。。实际上这不是一个好代码。。我需要让它变得简单,并尝试了一种方法,但从那以后,我不知道如何分配给变量。请看下面我尝试的

DEFINE VARIABLE sSeq AS INTEGER EXTENT 21 NO-UNDO. /* start hour */
DEFINE VARIABLE eSeq AS INTEGER EXTENT 21 NO-UNDO. /* end hour */ 
FOR EACH gdmf_shift WHERE gdmf_shift.shft_sequence LE 21 NO-LOCK BY gdmf_shift.shft_sequence:
sSeq[1] = gdmf_shift.shft_start_hour.
eSeq[21] =  gdmf_shift.shft_stop_hour.
DISP sSeq[1] eSeq[21].

结束。

如果您想跟踪多达21个单独的移位序列。也许你应该做一些类似下面代码的事情。

现在,您只需为循环的每次迭代更新sSeq[1]和eSeq[21]。

插入移位序列作为数组instad:的索引

DEFINE VARIABLE sSeq AS INTEGER EXTENT 21 NO-UNDO. /* start hour */
DEFINE VARIABLE eSeq AS INTEGER EXTENT 21 NO-UNDO. /* end hour */ 
FOR EACH gdmf_shift WHERE gdmf_shift.shft_sequence LE 21 NO-LOCK BY gdmf_shift.shft_sequence:
sSeq[gdmf_shift.shft_sequence] = gdmf_shift.shft_start_hour.
eSeq[gdmf_shift.shft_sequence] =  gdmf_shift.shft_stop_hour.
DISP sSeq[gdmf_shift.shft_sequence] eSeq[gdmf_shift.shft_sequence].
END.

如果你绝对需要单独的变量,而不是在扩展数据块上,那么需要更多的代码和CASE语句(也可以是If(来决定分配什么变量:

DEFINE VARIABLE sSeq1 AS INTEGER NO-UNDO. /* start hour */
DEFINE VARIABLE eSeq1 AS INTEGER NO-UNDO. /* end hour */ 
DEFINE VARIABLE sSeq2 AS INTEGER NO-UNDO. /* start hour */
DEFINE VARIABLE eSeq2 AS INTEGER NO-UNDO. /* end hour */ 
/* More variables here... */
DEFINE VARIABLE sSeq21 AS INTEGER NO-UNDO. /* start hour */
DEFINE VARIABLE eSeq21 AS INTEGER NO-UNDO. /* end hour */ 

FOR EACH gdmf_shift WHERE gdmf_shift.shft_sequence LE 21 NO-LOCK BY gdmf_shift.shft_sequence:
CASE gdmf_shift.shft_sequence:
WHEN 1 THEN DO:
sSeq1 = gdmf_shift.shft_start_hour.
eSeq1 =  gdmf_shift.shft_stop_hour.
END.
WHEN 2 THEN DO:
sSeq2 = gdmf_shift.shft_start_hour.
eSeq2 =  gdmf_shift.shft_stop_hour.
END.
/* more code here */
WHEN 21 THEN DO:
sSeq21 = gdmf_shift.shft_start_hour.
eSeq21 =  gdmf_shift.shft_stop_hour.
END.
END CASE.
END.

但这将是大量的代码。如果你不喜欢这个数组,可以考虑使用临时表之类的东西。如果将临时表中的字段命名为与表中的名称相同的名称,则可以使用BUFFER-COPY,否则可以ASSIGN任何字段。

DEFINE TEMP-TABLE tt NO-UNDO
FIELD shft_sequence   LIKE gdmf_shift.shft_sequence
FIELD shft_start_hour LIKE gdmf_shift.s.shft_start_hour
FIELD shft_stop_hour LIKE gdmf_shift.s.shft_stop_hour.

FOR EACH gdmf_shift WHERE gdmf_shift.shft_sequence LE 21 NO-LOCK BY gdmf_shift.shft_sequence:
CREATE tt.
BUFFER-COPY gdmf_shift TO tt.
END.

相关内容

  • 没有找到相关文章

最新更新