处理事件在输出中不起作用 - 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 .
我正在使用以下查询导出数据。但是当它在 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 .