如何使用 Progress 4GL 9.1D 进行 case/switch 查询?

How do I do a case/switch query with Progress 4GL 9.1D?

我正在尝试为 Progress 4GL 数据库编写查询,其中大约有 8 种不同的情况需要考虑。有比巨大的 if/elseif 块更简单的方法吗?

简短的回答是 - 是的,您可以做一个 CASE。

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 语句不是您需要的,而是动态查询或其他东西?要回答这个问题,您确实需要 post 更多信息,最重要的是:代码。

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""").