如何使用Progress 4GL 9.1D进行大小写/切换查询?

时间:2015-09-24 14:02:45

标签: progress-4gl openedge

我正在尝试为Progress 4GL数据库编写一个查询,其中有大约8种不同的情况需要考虑。有没有比大量if / elseif块更容易的方法呢?

2 个答案:

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