Buscar..


Introducción

Los ejemplos se basarán en una copia de la base de datos de demostración de Sports 2000 provista con la configuración de Progress.

Cuando trabaje con consultas en curso, debe:

DEFINE la consulta y establecer qué buffers (tablas) y campos contra los que trabaja.

OPEN la consulta con un WHERE específico -la cláusula que define cómo recuperar los registros. Posiblemente también clasificando ( BY / BREAK BY )

GET los datos reales - que puede ser la FIRST , NEXT , PREV (por anterior) o LAST registro coincidente.

Sintaxis

  • DEFINE QUERY consulta-nombre PARA búfer-nombre. // Definición de consulta general para un búfer
  • DEFINE QUERY consulta-nombre PARA buffer-name1, buffer-name2. // Uniendo dos buffers
  • DEFINE QUERY nombre-consulta PARA nombre-búfer CAMPOS (campo1 campo2). // Solo retener campo1 y campo2
  • DEFINIR QUERY nombre-consulta PARA nombre-búfer EXCEPTO (campo3). // Recuperar todos los campos excepto field3.

Consulta básica

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

Salida (tercera pantalla en Windows GUI):

introduzca la descripción de la imagen aquí

Consulta Multi-Tablas

Esta consulta unirá tres tablas: Cliente, Pedido y Línea de pedido.

El uso de la instrucción OF como en la childtable OF parenttable de childtable OF parenttable de la childtable OF parenttable asume que los índices se construyen de una manera específica. Ese es el caso en la base de datos sports2000.

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.

Resultado: En la GUI de Windows:

introduzca la descripción de la imagen aquí

Mover la posición dentro de una consulta usando siguiente, primero, anterior y último

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow