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でコードが発生したため、エラーを確認できません。問題を修正する方法を教えてください。buffer-copy が通過するエラーのタイプ。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 Knowledge Baseで詳細を検索できます。

于 2013-08-26T10:14:08.853 に答える
0

問題をデバッグする 1 つの可能な方法は、コードを直接実行できる場合、AppBuilder のヘルプの下にある [最近のメッセージ] を使用することです。

于 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 に答える