Consultor Eletrônico



Kbase P72301: How to implement a select distinct with 4GL using a dynamic
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   3/15/2004
Status: Unverified

GOAL:

How to implement a select distinct with 4GL using a dynamic query ?

FIX:

/* This sample code ilustrates a select distinct salesrep from pub.customer
written in 4GL and using a dynamic query object
*/
DEFINE VARIABLE hQuery AS WIDGET-HANDLE NO-UNDO.
DEFINE VARIABLE hBuffer AS WIDGET-HANDLE NO-UNDO.
DEFINE VARIABLE fh AS WIDGET-HANDLE EXTENT 11 NO-UNDO.
DEF VAR i AS INTEGER.
DEF VAR j AS INTEGER.

DEFINE TEMP-TABLE cust-temp
FIELD cust-name LIKE customer.name
FIELD sales-rep LIKE customer.salesrep
INDEX sales-idx sales-rep DESCENDING.

CREATE BUFFER hBuffer FOR TABLE 'customer':U.

CREATE QUERY hQuery.

hQuery:SET-BUFFERS(hBuffer).

hQuery:QUERY-PREPARE('FOR EACH customer NO-LOCK':U).

hQuery:QUERY-OPEN().

IF hQuery:QUERY-OPEN THEN
REPEAT:
hQuery:GET-NEXT().
IF hQuery:QUERY-OFF-END THEN LEAVE.
j=3.
fh = hBuffer:BUFFER-FIELD(j). /* customer name */
i=11.
fh = hBuffer:BUFFER-FIELD(i). /* salesrep of customer */
FIND cust-temp WHERE
cust-temp.sales-rep = fh[i]:STRING-VALUE() NO-ERROR.
IF NOT AVAIL cust-temp THEN DO:
CREATE cust-temp.
ASSIGN
cust-temp.cust-name = fh[j]:BUFFER-VALUE()
cust-temp.sales-rep = fh[i]:BUFFER-VALUE().
DISPLAY cust-temp.sales-rep.
END.

END.

hQuery:QUERY-CLOSE().
DELETE OBJECT hQuery.
DELETE OBJECT hBuffer.