进度4gl:我想在运行程序时避免错误消息

时间:2015-05-07 07:38:14

标签: progress-4gl openedge

DEFINE TEMP-TABLE ttservice NO-UNDO
    FIELD ad-num AS CHARACTER
    INDEX ttprimary AS UNIQUE ad-num .

ASSIGN  ttservice.ad-num = vehicles.ad-num NO-ERROR 

在此,如何在添加重复记录时避免错误消息, 情况是:

当我尝试在临时表中添加重复记录时,它不接受,没关系,但它在运行程序时显示错误消息,我想抑制错误消息。并避免重复添加记录

4 个答案:

答案 0 :(得分:0)

您可以在尝试创建重复密钥之前测试是否存在重复密钥。

(填空。)

<div class="wrapper">
    <div class="div1"></div>
    <div class="div2"></div>
</div> 

答案 1 :(得分:0)

这是另一种从车辆表中获取唯一ad-num值的方法:

DEFINE TEMP-TABLE ttservice NO-UNDO
    FIELD ad-num AS CHARACTER
    INDEX ttprimary AS UNIQUE ad-num .

FOR EACH vehicles NO-LOCK
    BREAK BY vehicles.ad-num:

    IF FIRST-OF(vehicles.ad-num) THEN
        DO:
        CREATE ttservice.
        ASSIGN ttservice.ad-num = vehicles.ad-num.
        END.

END.

答案 2 :(得分:0)

伟大的专业人士已经添加了两个有价值的答案,但我想添加一些微小的变化。

def TEMP-TABLE ttservice NO-UNDO
    FIELD iservid AS INT
    INDEX tt-primary AS UNIQUE iservid.

VEHICLELOOP:
for each vehicles use-index <index-name>
NO-LOCK:

    IF CAN-FIND(first ttservice
                where ttservice.iservid = vehicles.iservid)
    THEN
        NEXT VEHICLELOOP.
    ELSE DO:
        create ttservice.
        ASSIGN ttservice.iservid = vehicles.iservid.
END. /* VEHICLELOOP */

答案 3 :(得分:0)

所以我阅读了答案并认为它们足以解决您的特定问题。但是,这是编写Progress OpenEdge时应该考虑的一般思路:

在语句中添加无错误(当它们允许时)将“抑制错误”,尽管有时它们是不可避免的,抑制对应用程序的稳定性没有好处,总是想到对待它们(并且显示错误是一个部分内容)。 您是选择在创建之前检查是否存在记录,或者只是将查询设置为不迭代不需要的(重复)记录取决于您。我建议你用不同的方法来检查性能(特别是为大表做一个),看看哪一个更令人满意。

所以这是我个人的建议:

for each vehicles no-lock:
    if can-find(first ttService where ttService.ad-num = vehicles.ad-num) then      
       next.
    create ttService.
    assign ttService.ad-num = vehicles.ad-num no-error.
    if error-status:error then 
       message "Something went horribly wrong:" + error-status:get-message(1) 
           view-as alert-box error.
end.

在上面的示例中,只有在assign实际失败时才会显示错误。它不太可能发生,我只是想表明无错误(及其处理)的使用是如何工作的。 无论如何,希望它有所帮助!