0
DO ON ENDKEY UNDO, LEAVE:
    FIND FIRST STUDENT NO-LOCK WHERE ST-ID = "TEST" NO-ERROR.
    IF AVAILABLE STUDENT THEN    
    DO:
       CREATE SCHOOL no-error.
       BUFFER-COPY STUDENT EXCEPT STUDENT.Location
       SCHOOL ASSIGN SCHOOL.Location = "MY LOCATION" NO-ERROR.
       IF ERROR-STATUS:ERROR THEN 
       DO:
           DO i = 1 TO ERROR-STATUS:NUM-MESSAGES:   
              MESSAGE 
                " Error no " ERROR-STATUS:GET-NUMBER(i) 
               " txt: " ERROR-STATUS:GET-MESSAGE(i) VIEW-AS ALERT-BOX.
               STOP.
          END.
       END.
   END.

结尾。

此查询工作正常,但有时它正在创建空记录。通过一些错误进行缓冲区复制,为什么它会创建空记录,但我无法验证错误,因为代码是在 LIVE 中发生的。请帮我解决这个问题。将通过什么类型的错误缓冲区复制。1000 次工作正常 1 次它会失败。我知道这是数据缺陷,但如何修复。否则BUFFER-COPY通过什么类型的错误。

4

4 回答 4

1

因为你真的不知道会发生什么错误 - 你需要从那里开始。

要在 NO-ERROR 语句之后跟踪一般错误,您可以执行以下操作:

IF ERROR-STATUS:ERROR THEN DO:
  DO i = 1 TO ERROR-STATUS:NUM-MESSAGES:
    /* Replace MESSAGE with some kind of logging */
    MESSAGE 
      "Error number " i 
      " error no " ERROR-STATUS:GET-NUMBER(i) 
      " txt: " ERROR-STATUS:GET-MESSAGE(i) VIEW-AS ALERT-BOX.
  END.
END.

获得特定错误编号后,您可以搜索Progress 知识库以获取更多信息。

于 2013-08-26T10:14:08.853 回答
0

One possible way to debug the issue is to use "Recent Messages" under Help in AppBuilder provided you are able to run the code directly from it.

于 2014-03-03T17:18:19.243 回答
0

我将编写代码如下。如果你使用 no-error 总是处理错误。分配/缓冲副本时检查是否没有错误,然后进行验证以确认触发器正确触发。错误处理代码可以放在它自己的过程中,然后在每次您希望处理错误消息时调用。(按照我的写作方式对其进行了一些修改,我并不总是捕获所有错误,但错误处理取决于各种因素,但这是在测试期间确保代码设置正确的好方法。之后可以在不正确的地方删除错误处理部署前需要。)

FIND FIRST STUDENT NO-LOCK WHERE ST-ID = "TEST" NO-ERROR.
IF AVAILABLE STUDENT THEN    
DO:
  CREATE SCHOOL.
  BUFFER-COPY STUDENT EXCEPT STUDENT.Location
           TO SCHOOL ASSIGN   SCHOOL.Location = "MY LOCATION" 
  NO-ERROR.
  IF ERROR-STATUS:ERROR THEN 
  DO:
    /* insert error handling - for example as as per @Jensd */
    /* this is in case there is something wrong with buffer copy */
    /* maybe a required field is left empty? */
  END.
  ELSE DO:
      VALIDATE SCHOOL NO-ERROR. /* good idea as it raises any issues with triggers */
      IF ERROR-STATUS:ERROR THEN 
      DO:
        /* insert error handling - for example as as per @Jensd */
      END.
  END.
END.    
于 2013-08-27T09:03:42.870 回答
0

我不会直接从一个表复制到另一个表,您可能会遇到我认为您遇到的索引问题。

更好地定义一个像目标表一样的临时表。

然后将缓冲区复制到临时表。

将右键设置到临时表中。

然后使用正确的关键字段从临时表复制到目标表的缓冲区。

尝试如下:

像学校一样定义临时表 t-school。

找到第一个学生无锁等等。

将学生缓冲复制到 t-school。

分配 t-school.location = "whatever"。

将 t-school 缓冲复制到学校。

瞧!

于 2013-08-30T14:37:51.350 回答