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.
END。
此查询工作正常,但有时它创建了空记录。缓冲复制通过一些错误,为什么它创建空记录,但我无法验证错误,因为代码是在LIVE中发生的。请帮我解决问题。什么类型的错误缓冲区复制将通过。 1000次正常工作1次失败。我知道这是数据缺陷,但如何修复。否则BUFFER-COPY通过什么类型的错误。
答案 0 :(得分: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 Knowledge Base以获取更多信息。
答案 1 :(得分: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.
答案 2 :(得分:0)
我不打算从一个表到另一个表的缓冲区副本,你可能会有索引问题,因为我认为你有。
最好像目标表一样定义临时表。
然后将缓冲区复制到临时表。
将rigth键设置为临时表。
然后从临时表中使用正确的键字段将缓冲区复制到目标表。
尝试如下:
像学校一样定义临时表学校。
找到第一个学生无锁等等。
将学生缓冲复制到学校。
分配t-school.location =“无论什么”。
缓冲复制t-school到学校。瞧!
答案 3 :(得分:0)
调试问题的一种可能方法是使用AppBuilder中的“帮助”下的“最近消息”,前提是您可以直接从中运行代码。