Я понимаю ваш вопрос так:
Если комбо-бокс имеет нуль вы хотите отобразить все клиент значения. В противном случае вы хотите отображать только клиентов, соответствующих номеру клиента?
Вы можете сделать предложение WHERE с условием в нем, но я бы избегал этого. В этом случае запрос является очень простым, но когда они становятся более сложными (и они это делают), где предложения с условиями в них довольно трудно читать и понимать. Но я думаю, что это также касается личного выбора.
FOR EACH Customer NO-LOCK WHERE
Customer.CustNum = (IF CB-Customer = 0 THEN Customer.CustNum ELSE CB-Customer):
MESSAGE Customer.CustNum.
END.
я предпочел бы делать либо два отдельно для 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.
или запрос с отдельными операторами QUERY-Приготовьте:
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) И все клиенты, у которых CustNum соответствует ComboBox (при условии, что CB-Customer - это ComboBox). Скорее всего, это будут все клиенты. – Jensd
@Jensd Вы ошибаетесь. Предложение where будет соответствовать всем клиентам с CustNum> = 0 **, если CB-CUstomer = 0 **. И ** если CB-CUstomer <> 0 **, он будет соответствовать клиентам CB-CUstomer. Правильно, что OR убивает результат, но я хотел показать простейшее возможное решение. –
Нет. Я действительно прав! Попробуй! – Jensd