处理事件在输出中不起作用 - PROGRESS 4GL

PROCESS EVENTS not working inside the OUTPUT TO - PROGRESS 4GL

我正在使用以下查询导出数据。但是当它在 OUTPUT TO 内部时,它并没有帮助我显示进度完成。在视图框架 a(Field - cProgress)中看不到实时更新(逐渐增加百分比)。我不确定这是否可能,或者是否有任何其他方法可以实现此目的,例如至少在无法在现场看到对话框时显示一个对话框 - 视图框架 a 中的 cProgress。

注意 - 我不能在那里使用显示语句。因为这将显示在我不想要的输出文件中

DEFINE VARIABLE cUserID AS CHARACTER NO-UNDO.
DEFINE VARIABLE iTotalRec AS INTEGER NO-UNDO.
DEFINE VARIABLE cProgress AS CHARACTER NO-UNDO.

DEFINE VARIABLE I AS INTEGER NO-UNDO.
DEFINE VARIABLE iPercentage AS INTEGER NO-UNDO.
DEFINE VARIABLE iComp       AS INTEGER NO-UNDO.
DEFINE VARIABLE iRec        AS INTEGER NO-UNDO.


FORM
 cUser ID COLON 20
 iTotalRec COLON 20
 cProgress SKIP
 WITH FRAME a.

VIEW FRAME a.

ASSIGN
 I     = 0
 iComp = 0
 iRec  = 0
 iPercentage = 0
 .


 /* Calculating Total records*/
  FOR EACH <table> NO-LOCK:
  iRec = iRec + 1.
  END.
  /* Taking each records from the same table to update*/

  OUTPUT TO VALUE ("PATH").
  FOR EACH <table> NO-LOCK:
   I = I + 1.

   IF I = 1 THEN DO:
   /*do some more validations*/
   iComp =  iComp  + I.
   iPercentage  = 100 * (iComp / iRec).
   cProgress = STRING(iProgress) + "%". /*This percentage increase is not gradually raising in 
   view frame a..*/
   PROCESS EVENTS.

    IF iPercentage = 100 THEN DO:
    MESSAGE "Record Updation Is completed".
  END.
  ELSE DO:
    I = 0
    NEXT.
  END.  
  END.
  END.
  OUTPUT CLOSE.

您的代码缺少 DISPLAY 语句。 VIEW 框架只是可视化 FORM 语句中定义的 from,但它不显示任何值。

所以你需要一个

DISPLAY iPercentage WITH FRAME a .

某处。您的 OS 和 Window 系统是什么? GUI 还是 TTY?

在 TTY 中不需要 PROCESS EVENTS,在 GUI 中你不应该过度使用它 - 因为它会影响性能。

定义流以分隔不同的输出(以及输入)。

这里我定义了一个流,并设置输出到一个文件。

DEFINE STREAM strFile.

OUTPUT STREAM strFile TO c:/temp/file.txt.
PUT STREAM strFile "HELLO" SKIP.
DISPLAY "ALSO HELLO" FORMAT "x(20)".
OUTPUT STREAM strfile CLOSE .