我明白你的问题是这样的:
如果组合框的值为零,你要显示所有的客户。否则,您只想显示匹配客户号码的客户?
你可以做一个条件的WHERE子句,但我会避免它。在这种情况下,查询是非常基本的,但是当它们变得更加复杂(并且它们这样做),其中条件在其中的条款很难阅读和理解。但我想这也是关于个人选择。
FOR EACH Customer NO-LOCK WHERE
Customer.CustNum = (IF CB-Customer = 0 THEN Customer.CustNum ELSE CB-Customer):
MESSAGE Customer.CustNum.
END.
我宁愿做任何两个不同的FOR EACH'es:
IF CB-Customer = 0 THEN DO:
/* TABLE-SCAN is a quite new thing, might not work in your version */
FOR EACH Customer NO-LOCK TABLE-SCAN:
MESSAGE Customer.CustNum.
END.
END.
ELSE DO:
FOR EACH Customer NO-LOCK WHERE Customer.CustNum = CB-Customer:
MESSAGE Customer.CustNum.
END.
END.
或用单独的查询,准备的语句的查询:
DEFINE QUERY q FOR Customer.
DEFINE VARIABLE cQuery AS CHARACTER NO-UNDO.
ASSIGN CB-Customer.
IF CB-Customer = 0 THEN DO:
cQuery = "FOR EACH Customer NO-LOCK".
END.
ELSE DO:
cQuery = "FOR EACH Customer NO-LOCK WHERE Customer.CustNum = " + QUOTER(cb-customer).
END.
MESSAGE cQuery.
QUERY q:QUERY-PREPARE(cQuery).
QUERY q:QUERY-OPEN().
GET FIRST q.
REPEAT WHILE AVAILABLE Customer:
MESSAGE Customer.CustNum.
GET NEXT q.
END.
这实际上会显示CustNum> = 0(where子句的第一部分)的所有客户以及具有与ComboBox匹配的CustNum的所有客户(假定CB-Customer是ComboBox)。最有可能的将是所有的客户。 – Jensd
@Jensd你错了。如果CB-CUstomer = 0 **,where子句将只匹配CustNum> = 0 **的所有客户。如果CB-CUstomer <> 0 **,它将匹配来自CB-CUstomer的客户。 这是正确的或杀死性能,但我想展示最简单的可能的解决方案。 –
不,我真的是对的!尝试一下! – Jensd