在动态查询中使用 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.