代码之家  ›  专栏  ›  技术社区  ›  sander

如果不匹配,则从abl返回错误字符串

  •  0
  • sander  · 技术社区  · 7 年前

    我正在尝试搜索数据库,如果找到匹配项,则删除记录。然后,如果没有找到匹配项,我想返回一个字符串格式的错误和错误消息。

    DEF INPUT PARAM i_cCarID LIKE Car.carID NO-UNDO.
    DEFINE OUTPUT PARAMETER o_cErrorMsg AS CHARACTER NO-UNDO.
    DEF BUFFER carBuffer_B1 FOR Car.
    
    
    FIND FIRST carBuffer_B1 WHERE carBuffer.carID= i_cCarID EXCLUSIVE-LOCK NO-ERROR.
    
        IF AVAIL(carBuffer_B1) THEN DO:
            DELETE carBuffer_B1 NO-ERROR.
            IF ERROR-STATUS:ERROR THEN DO:   
                o_cErrorMSG = "Error: ".
                RETURN o_cErrorMsg + ERROR-STATUS:GET-MESSAGE(1).
            END.
        END. 
    

    编辑1.找不到匹配项是否会导致错误,或者您是否必须以某种方式明确地“抛出”错误?

    1 回复  |  直到 7 年前
        1
  •  1
  •   sander    7 年前

    您有一个输出参数,但过程执行返回。这就是你没有看到任何错误的原因。您的过程需要如下:(示例有Customer表,并且没有足够的错误处理)

    DEF INPUT PARAM i_cCustNum LIKE Customer.Cust-Num NO-UNDO.
    DEFINE OUTPUT PARAMETER o_cErrorMsg AS CHARACTER NO-UNDO.
    
    DEF BUFFER carBuffer_B1 FOR Customer.
    
    FIND FIRST carBuffer_B1 WHERE carBuffer_B1.Cust-Num = i_cCarID EXCLUSIVE-LOCK NO-ERROR.
    
    IF AVAIL(carBuffer_B1) THEN 
    DO:
        DELETE carBuffer_B1 NO-ERROR.
        o_cErrorMsg = "Delete Succeeded for id " + string(i_cCarID).
    END.
    ELSE 
    DO:
        o_cErrorMsg = "No record found with id " + string(i_cCarID).
    END.
    
    推荐文章