2017-03-21 3 views
0

orderstatusが 'ordered'の顧客レコードを見つける必要があります。動的クエリを使用してこれを達成するにはどうすればよいですか?次のコードスニペットでエラーが発生します:動的検索でcan-findを使用するとエラーが発生する

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. 

またはこれには対策がありますか?

答えて

2

CAN-FINDで気にしないでください(とにかくはいけません)。代わりに2つのテーブルを結合します。

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. 
+0

おかげで、これは私の作品:

はここで一時、テーブル内のいくつかのmockdataとの例を示します。しかし、私はここで一つのことを理解していない、どのように/なぜそれが国が米国であるすべての顧客レコードを取得していない。 – Mahesh

+0

質問のため:注文されたオーダーで米国からのもののみを返します。 – Jensd

関連する問題