Suche…


Einführung

Die Beispiele basieren auf einer Kopie der Demodatenbank Sports 2000 die mit dem Setup von Progress geliefert wurde.

Wenn Sie mit Abfragen in Bearbeitung arbeiten, müssen Sie:

DEFINE die Abfrage und legen Sie fest, für welche Puffer (Tabellen) und Felder sie verwendet werden soll.

OPEN die Abfrage mit einer bestimmten WHERE -klausel, die definiert, wie die Datensätze abgerufen werden. Evtl. auch Sortierung ( BY / BREAK BY )

GET die tatsächlichen Daten - dies können die Datensätze FIRST , NEXT , PREV (für vorherige) oder LAST .

Syntax

  • DEFINE QUERY Anforderungsname FOR Name des Puffers. // Allgemeine Abfragedefinition für einen Puffer
  • DEFINE QUERY Anforderungsname FOR Puffername1, Puffername2. // Verbinden von zwei Puffern
  • DEFINE QUERY Anforderungsname FOR Puffername FIELDS (Feld1 Feld2). // Nur Feld 1 und Feld 2
  • DEFINE QUERY Anforderungsname FOR Puffername EXCEPT (Feld3). // Alle Felder mit Ausnahme von Feld3 abrufen.

Grundlegende Abfrage

/* 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.                                              

Ausgabe (dritter Bildschirm in Windows-GUI):

Geben Sie hier die Bildbeschreibung ein

Abfrage für mehrere Tabellen

Diese Abfrage fügt drei Tabellen zusammen: Kunde, Auftrag und Auftragszeile.

Die Verwendung der OF Anweisung wie in childtable OF parenttable setzt voraus, dass Indizes auf eine bestimmte Art und Weise erstellt werden. Das ist in der sports2000-Datenbank der Fall.

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.

Ergebnis: In der Windows-GUI:

Geben Sie hier die Bildbeschreibung ein

Verschieben von Poisition mit einer Abfrage mit next, first, prev und last

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow