进度警告:-s 堆栈在过程中超出。那是什么意思?

Progress Warning: -s stack exceeded during procedure. What does that mean?

我遇到了以前从未见过的警告。

这是我在 运行 我的简单程序时收到的消息:

我的程序如下:

  1. 从文件中读取 ReferenceNumbers
  2. for each
  3. 中使用那些 ReferenceNumbers
  4. 更改 Info 字段的值

代码如下所示:

INPUT FROM VALUE('C:\Users\admin\Desktop\ref\reference.csv').

DEFINE VARIABLE cData AS CHARACTER NO-UNDO.

repeat:
    if keyfunction(lastkey) = "end-error" then leave.
    process events.

    import unformatted cData.

    FOR EACH V_Acct
        WHERE V_Acct.Company = '123'
            AND V_Acct.ReceiptType = 'U'
            AND V_Acct.ReferenceNr = integer(TRIM(ENTRY(1,cData,';')))
            AND V_Acct.xInfo = ''
        EXCLUSIVE-LOCK:
        
        V_Acct.xInfo = 'VGF00000000000000'.

    END. /* for each V_Acct */                                     

END. /* repeat */

ReferenceNumbers 已从文件中正确读取(已多次确认)。 过去我也更改了同一个数据库 Table 的某些文件,但从未遇到过此错误消息。

anyne 可以帮助我吗?

一个常见的原因是尝试使用长字符变量。 IOW 你可能试图导入很长的一行。

https://knowledgebase.progress.com/articles/Article/P79111

-s 并不特定于单个变量(字符变量的限制为 30,000 字节),而是跨越许多不同的堆栈用法 space。所以可能只是因为其他原因你接近极限,这把你推到了边缘。

-s 的默认值会随着时间的推移而变化,具体取决于您使用的 OpenEdge 版本,也可能是您的应用程序或您的特定会话设置了更高或更低的非默认值。如果生成了 protrace 文件,它会告诉您在出现问题时什么 -s 值有效。

查找名为 protrace.### 的文件(其中 ### 是您的进程 ID),其时间戳与错误相同。这可能在当前工作目录或应用程序的 WRKDIR 中。