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
在此,如何在添加重复记录时避免错误消息, 情况是:
当我尝试在临时表中添加重复记录时,它不接受,没关系,但它在运行程序时显示错误消息,我想抑制错误消息。并避免重复添加记录
答案 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实际失败时才会显示错误。它不太可能发生,我只是想表明无错误(及其处理)的使用是如何工作的。 无论如何,希望它有所帮助!