我正在尝试为Progress 4GL数据库编写一个查询,其中有大约8种不同的情况需要考虑。有没有比大量if / elseif块更容易的方法呢?
答案 0 :(得分:2)
简短的回答是 - 是的,你可以做一个案例。
DEFINE VARIABLE iVar AS INTEGER NO-UNDO.
ASSIGN iVar = 4.
CASE iVar:
WHEN 1 THEN DO:
MESSAGE "case no 1" VIEW-AS ALERT-BOX.
END.
WHEN 2 THEN DO:
MESSAGE "case no 2" VIEW-AS ALERT-BOX.
END.
WHEN 3 OR WHEN 6 THEN DO:
MESSAGE "case no 3" VIEW-AS ALERT-BOX.
END.
WHEN 5 THEN DO:
MESSAGE "case no 4" VIEW-AS ALERT-BOX.
END.
OTHERWISE DO:
MESSAGE "case no 5" VIEW-AS ALERT-BOX.
END.
END CASE.
长答案可能取决于您的查询。也许IF / CASE语句不是你需要的,而是动态查询或其他什么?要回答这个问题,你真的需要发布更多信息,最重要的是:代码。
答案 1 :(得分:2)
9.1D允许您在运行时更改查询过滤条件,如下所示:
DEFINE QUERY q-query
FOR TableName.
QUERY q-query:QUERY-PREPARE("FOR EACH TableName " +
"WHERE TableName.fieldname = ""something""").
您可以在变量中构建查询字符串,并将其替换为QUERY-PREPARE。
QUERY q-query:QUERY-PREPARE(chFilterCondition).
您也可以像这样抓取查询句柄:
hQuery = QUERY q-query:HANDLE.
然后使用它来设置过滤条件:
hQuery:QUERY-PREPARE("FOR EACH TableName " +
"WHERE TableName.fieldname = ""something""").