如何使用 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""").
我正在尝试为 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""").