Progress
Programming
Handbook


Dynamic Query Code Example

The following program example demonstrates how you can change the predicate of a dynamic query using radio-set input and populate a dynamic browse (covered in the next section) with varying results-lists:

p-fnlqry.p
CURRENT-WINDOW:ROW = 1.
CURRENT-WINDOW:HEIGHT-CHARS = 18.
CURRENT-WINDOW:WIDTH-CHARS = 132.
CURRENT-WINDOW:TITLE = "Dynamic Browse With Dynamic Query".
CURRENT-WINDOW:KEEP-FRAME-Z-ORDER = TRUE.

/* Test controls */
DEFINE BUTTON Make       LABEL "CreateDynBrowse".
DEFINE BUTTON AddCols    LABEL "Add Columns".
DEFINE BUTTON btn-delete LABEL "DeleteDynBrowse".
DEFINE BUTTON btn-quit   LABEL "&Quit"  AUTO-ENDKEY.

DEFINE VARIABLE query-criteria AS CHARACTER
    VIEW-AS RADIO-SET VERTICAL
    RADIO-BUTTONS
      "All customers", "FOR EACH customer NO-LOCK", "USA customers",
     "FOR EACH customer WHERE customer.country EQ ’USA’ NO-LOCK BY 
customer.state ",
     "Non-USA customers",
     "FOR EACH customer WHERE customer.country NE ’USA’ NO-LOCK BY 
customer.country "
     SIZE 25 BY 3 TOOLTIP "Choose the customers you want to see"
      INITIAL "FOR EACH customer NO-LOCK" NO-UNDO.

/* Widget and other Handles */
DEFINE VARIABLE Browse-Hndl AS WIDGET-HANDLE.
DEFINE VARIABLE bufFieldHandle AS WIDGET-HANDLE.
DEFINE VARIABLE qh AS WIDGET-HANDLE.
DEFINE VARIABLE bh AS WIDGET-HANDLE.
bh = BUFFER customer:HANDLE.

/* Create Query  */
CREATE QUERY qh.
qh:SET-BUFFERS(bh).

DEFINE FRAME F1
    skip(13)
    make  AddCols  btn-delete btn-quit query-criteria
    WITH SIZE 132 BY 18 THREE-D NO-LABELS. 
ON CHOOSE OF make DO:        /*  LABEL "CreateDynBrowse". */
    CREATE BROWSE Browse-Hndl
      ASSIGN
        FRAME = FRAME F1:HANDLE
        QUERY = qh
        TITLE = " "
        X = 2
        Y = 2
        WIDTH = 130
        DOWN = 12
        VISIBLE = TRUE
        SENSITIVE = TRUE
        READ-ONLY = NO
        COLUMN-SCROLLING = TRUE
        SEPARATORS = YES.
END.
ON CHOOSE OF AddCols DO:   /*  LABEL "Add Columns"  */
    ASSIGN query-criteria.
    qh:QUERY-PREPARE(query-criteria).
    qh:QUERY-OPEN.
     Browse-Hndl:ADD-LIKE-COLUMN(bh:BUFFER-FIELD(1),1).
    Browse-Hndl:ADD-LIKE-COLUMN(bh:BUFFER-FIELD(3),2).
    Browse-Hndl:ADD-LIKE-COLUMN(bh:BUFFER-FIELD("city"),3).

    CASE query-criteria:
        WHEN  "for each customer NO-LOCK" THEN
        DO:
            Browse-Hndl:ADD-LIKE-COLUMN(bh:BUFFER-FIELD("state")).
            Browse-Hndl:ADD-LIKE-COLUMN(bh:BUFFER-FIELD("country")).
            Browse-Hndl:ADD-LIKE-COLUMN(bh:BUFFER-FIELD("postal-code")).
            Browse-Hndl:TITLE = "All Customers".
        END.
        WHEN "FOR EACH customer WHERE customer.country EQ ’USA’ NO-LOCK BY 
customer.state " THEN
        DO:
            Browse-Hndl:ADD-LIKE-COLUMN(bh:BUFFER-FIELD("state")).
            Browse-Hndl:ADD-LIKE-COLUMN(bh:BUFFER-FIELD("postal-code")).
            Browse-Hndl:TITLE = "All US Customers".
        END.
        WHEN "FOR EACH customer WHERE customer.country NE ’USA’ NO-LOCK BY 
customer.country " THEN
        DO:
            Browse-Hndl:ADD-LIKE-COLUMN(bh:BUFFER-FIELD("country")).
            Browse-Hndl:ADD-LIKE-COLUMN(bh:BUFFER-FIELD("postal-code")).
            Browse-Hndl:TITLE = "All non-US Customers".
        END.
    END CASE. 
    bufFieldHandle = bh:BUFFER-FIELD("balance").
    Browse-Hndl:ADD-LIKE-COLUMN(bufFieldHandle).
    AddCols:SENSITIVE = FALSE.
    query-criteria:SENSITIVE = FALSE.
    make:SENSITIVE = FALSE.
END.

ON CHOOSE OF btn-delete  /*  LABEL "DeleteDynBrowse". */
DO:
    DELETE WIDGET Browse-Hndl.
    AddCols:SENSITIVE = TRUE.
    query-criteria:SENSITIVE = TRUE.
    make:SENSITIVE = TRUE.
END.

ON CHOOSE OF btn-quit
DO:
    APPLY "window-close" TO CURRENT-WINDOW.
END.

ENABLE ALL WITH FRAME F1.
WAIT-FOR CLOSE OF CURRENT-WINDOW. 


Copyright © 2004 Progress Software Corporation
www.progress.com
Voice: (781) 280-4000
Fax: (781) 280-4095