在动态查询中使用 can-find 会出错
Use of can-find in dynamic query gives error
我需要找到订单状态为'ordered'的客户记录。我如何使用动态查询完成此操作?以下代码片段引发错误:
DEFINE VARIABLE qry AS HANDLE.
CREATE QUERY qry.
qry:SET-BUFFERS(BUFFER customer:HANDLE, BUFFER order:HANDLE).
qry:QUERY-PREPARE("for each customer where customer.country eq 'USA' and
can-find(order where order.custnum = customer.custnum
and order.orderstatus eq 'ordered')").
qry:QUERY-OPEN().
REPEAT :
qry:GET-NEXT().
IF qry:QUERY-OFF-END THEN LEAVE.
DISP customer.custnum customer.name customer.salesrep.
END.
qry:QUERY-CLOSE().
DELETE OBJECT qry.
或者对此有任何解决方法吗?
不要理会 CAN-FIND
(无论如何都不应该)。改为连接两个表。
这是一个在临时表中包含一些模拟数据的示例:
DEFINE TEMP-TABLE customer NO-UNDO
FIELD custnum AS INTEGER
FIELD country AS CHARACTER
FIELD NAME AS CHARACTER
FIELD salesrep AS CHARACTER.
DEFINE TEMP-TABLE order NO-UNDO
FIELD custnum AS INTEGER
FIELD orderstatus AS CHARACTER.
CREATE customer.
ASSIGN customer.custnum = 1
customer.country = "usa"
customer.NAME = "Name1"
customer.salesrep = "jaan".
CREATE customer.
ASSIGN customer.custnum = 2
customer.country = "usa"
customer.NAME = "Name2"
customer.salesrep = "martin".
CREATE customer.
ASSIGN customer.custnum = 3
customer.country = "sweden"
customer.NAME = "Name3"
customer.salesrep = "john".
CREATE order.
ASSIGN order.custnum = 1
order.orderstatus = "cancelled".
CREATE order.
ASSIGN order.custnum = 2
order.orderstatus = "ordered".
CREATE order.
ASSIGN order.custnum = 3
order.orderstatus = "ordered".
DEFINE VARIABLE qry AS HANDLE.
CREATE QUERY qry.
qry:SET-BUFFERS(BUFFER customer:HANDLE, BUFFER order:HANDLE).
qry:QUERY-PREPARE("for each customer where customer.country eq 'USA', FIRST order where order.custnum = customer.custnum and order.orderstatus eq 'ordered'").
qry:QUERY-OPEN().
REPEAT :
qry:GET-NEXT().
IF qry:QUERY-OFF-END THEN LEAVE.
DISP customer.custnum customer.name customer.salesrep.
END.
qry:QUERY-CLOSE().
DELETE OBJECT qry.
我需要找到订单状态为'ordered'的客户记录。我如何使用动态查询完成此操作?以下代码片段引发错误:
DEFINE VARIABLE qry AS HANDLE.
CREATE QUERY qry.
qry:SET-BUFFERS(BUFFER customer:HANDLE, BUFFER order:HANDLE).
qry:QUERY-PREPARE("for each customer where customer.country eq 'USA' and
can-find(order where order.custnum = customer.custnum
and order.orderstatus eq 'ordered')").
qry:QUERY-OPEN().
REPEAT :
qry:GET-NEXT().
IF qry:QUERY-OFF-END THEN LEAVE.
DISP customer.custnum customer.name customer.salesrep.
END.
qry:QUERY-CLOSE().
DELETE OBJECT qry.
或者对此有任何解决方法吗?
不要理会 CAN-FIND
(无论如何都不应该)。改为连接两个表。
这是一个在临时表中包含一些模拟数据的示例:
DEFINE TEMP-TABLE customer NO-UNDO
FIELD custnum AS INTEGER
FIELD country AS CHARACTER
FIELD NAME AS CHARACTER
FIELD salesrep AS CHARACTER.
DEFINE TEMP-TABLE order NO-UNDO
FIELD custnum AS INTEGER
FIELD orderstatus AS CHARACTER.
CREATE customer.
ASSIGN customer.custnum = 1
customer.country = "usa"
customer.NAME = "Name1"
customer.salesrep = "jaan".
CREATE customer.
ASSIGN customer.custnum = 2
customer.country = "usa"
customer.NAME = "Name2"
customer.salesrep = "martin".
CREATE customer.
ASSIGN customer.custnum = 3
customer.country = "sweden"
customer.NAME = "Name3"
customer.salesrep = "john".
CREATE order.
ASSIGN order.custnum = 1
order.orderstatus = "cancelled".
CREATE order.
ASSIGN order.custnum = 2
order.orderstatus = "ordered".
CREATE order.
ASSIGN order.custnum = 3
order.orderstatus = "ordered".
DEFINE VARIABLE qry AS HANDLE.
CREATE QUERY qry.
qry:SET-BUFFERS(BUFFER customer:HANDLE, BUFFER order:HANDLE).
qry:QUERY-PREPARE("for each customer where customer.country eq 'USA', FIRST order where order.custnum = customer.custnum and order.orderstatus eq 'ordered'").
qry:QUERY-OPEN().
REPEAT :
qry:GET-NEXT().
IF qry:QUERY-OFF-END THEN LEAVE.
DISP customer.custnum customer.name customer.salesrep.
END.
qry:QUERY-CLOSE().
DELETE OBJECT qry.