Zoeken…


Invoering

De voorbeelden zijn gebaseerd op een kopie van de demo-database Sports 2000 meegeleverd met de installatie van Progress.

Bij het werken met query's in Progress moet u:

DEFINE de query en stel in tegen welke buffers (tabellen) en velden deze werkt.

OPEN de query met een specifieke WHERE clausule die definieert hoe de records kunnen worden opgehaald. Mogelijk ook sorteren ( BY / BREAK BY )

GET de feitelijke gegevens - dat kan het FIRST , NEXT , PREV (voor vorige) of LAST overeenkomende record zijn.

Syntaxis

  • DEFINE QUERY-querynaam VOOR buffernaam. // Algemene querydefinitie voor één buffer
  • DEFINE QUERY-querynaam VOOR buffernaam1, buffernaam2. // Samenvoegen van twee buffers
  • DEFINE QUERY-querynaam VOOR VELDEN met buffernaam (veld1 veld2). // Retreive alleen veld1 en veld2
  • DEFINE QUERY-querynaam VOOR buffernaam EXCEPT (veld3). // Retreive alle velden behalve field3.

Basic Query

/* Define a query named q1 for the Customer table */
DEFINE QUERY q1 FOR Customer.
/* Open the query for all Customer records where the state is "tx" */
OPEN QUERY q1 FOR EACH Customer WHERE Customer.state ='TX'.                                                                                                                                                                               
/* Get the first result of query q1 */
GET FIRST q1.                                                                                                                                                                                                                   

/* Repeat as long as query q1 has a result */
DO WHILE NOT QUERY-OFF-END('q1'):          
    /* Display Customer.Name in a frame called frame1 with 10 rows */
    DISPLAY Customer.Name WITH FRAME frame1 10 DOWN.
    /* Move down the target line where to display the next record */
    DOWN WITH FRAME frame1.
    /* Get the next result of query q1 */
    GET NEXT q1.
END.
/* Display how many results query q1 had. */
DISPLAY NUM-RESULTS('q1') LABEL "Number of records".

/* Close the query */
CLOSE QUERY q1.                                              

Uitgang (derde scherm in Windows gui):

voer hier de afbeeldingsbeschrijving in

Query met meerdere tabellen

Deze zoekopdracht komt bij drie tabellen: Klant, Order en Orderlijn.

Het gebruik van de OF instructie zoals in de childtable OF parenttable veronderstelt dat indexen op een specifieke manier zijn opgebouwd. Dat is het geval in de sports2000-database.

DEFINE QUERY q1 FOR Customer, Order, Orderline.

OPEN QUERY q1 FOR EACH Customer WHERE Customer.state = 'TX'
    , EACH Order OF customer WHERE order.custnum < 1000
    , EACH orderline OF order.

GET FIRST q1.
DO WHILE NOT QUERY-OFF-END('q1'):
    DISPLAY Customer.Name Order.OrderNum OrderLine.LineNum 
        WITH FRAME frameA 20 DOWN.
    DOWN WITH FRAME frameA.
    GET NEXT q1.
END.

CLOSE QUERY q1.

Resultaat: in Windows GUI:

voer hier de afbeeldingsbeschrijving in

Verplaatsing verplaatsen binnen een query met behulp van volgende, eerste, vorige en laatste

DEFINE QUERY q1 FOR Customer.

OPEN QUERY q1 FOR EACH Customer.

GET FIRST q1.

loop:
REPEAT:
    IF AVAILABLE Customer THEN DO:
        DISPLAY Customer.NAME CustNum WITH FRAME frClient TITLE "Client data".
        
        DISPLAY
            "(P)revious" SKIP 
            "(N)ext" SKIP
            "(F)irst" SKIP
            "(L)ast" SKIP
            "(Q)uit" SKIP
            WITH FRAME frInstr
                TITLE "Instructions".
    END.
    
    READKEY.

    IF LASTKEY = ASC("q") THEN LEAVE loop.
    ELSE IF LASTKEY = ASC("n") THEN
        GET NEXT q1.
    ELSE IF LASTKEY = ASC("p") THEN
        GET PREV q1.
    ELSE IF LASTKEY = ASC("l") THEN
        GET LAST q1.
    ELSE IF LASTKEY = ASC("f") THEN
        GET FIRST q1.

END.

MESSAGE "Bye" VIEW-AS ALERT-BOX.


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow