Hi Chris-
Here is an example for using a dynamic query, which will work with the sports database:
<BLOCKQUOTE><font size="1" face="Arial, Verdana">code:</font><HR><pre>
&ANALYZE-SUSPEND _VERSION-NUMBER AB_v9r12 GUI ADM2
&ANALYZE-RESUME
&Scoped-define WINDOW-NAME wWin
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS wWin
/*------------------------------------------------------------------------
File:
Description: from cntnrwin.w - ADM SmartWindow Template
Input Parameters:
<none>
Output Parameters:
<none>
History: New V9 Version - January 15, 1998
------------------------------------------------------------------------*/
/* This .W file was created with the Progress AB. */
/*----------------------------------------------------------------------*/
/* Create an unnamed pool to store all the widgets created
by this procedure. This is a good default which assures
that this procedure's triggers and internal procedures
will execute in this procedure's storage, and that proper
cleanup will occur on deletion of the procedure. */
CREATE WIDGET-POOL.
/* *************************** Definitions ************************** */
/* Parameters Definitions --- */
/* Local Variable Definitions --- */
DEF VAR qh AS HANDLE NO-UNDO.
DEF VAR bh AS HANDLE NO-UNDO.
DEF VAR fh AS HANDLE NO-UNDO .
DEF VAR x AS INTEGER NO-UNDO.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK
/* ******************** Preprocessor Definitions ******************** */
&Scoped-define PROCEDURE-TYPE SmartWindow
&Scoped-define DB-AWARE no
&Scoped-define ADM-CONTAINER WINDOW
/* Name of first Frame and/or Browse and/or first Query */
&Scoped-define FRAME-NAME fMain
/* Standard List Definitions */
&Scoped-Define ENABLED-OBJECTS Selecttable Selectfld Selectfld2 btnopenqry ~
Btnadd Btnremove EDITOR-1 Btnfirst btnnext btnprev btnlast IMAGE-1
&Scoped-Define DISPLAYED-OBJECTS Selecttable Selectfld Selectfld2 EDITOR-1
/* Custom List Definitions */
/* List-1,List-2,List-3,List-4,List-5,List-6 */
/* _UIB-PREPROCESSOR-BLOCK-END */
&ANALYZE-RESUME
/* *********************** Control Definitions ********************** */
/* Define the widget handle for the window */
DEFINE VAR wWin AS WIDGET-HANDLE NO-UNDO.
/* Definitions of the field level widgets */
DEFINE BUTTON Btnadd
LABEL ">"
SIZE 6 BY 1.14.
DEFINE BUTTON Btnfirst
LABEL "&First"
SIZE 15 BY 1.14.
DEFINE BUTTON btnlast
LABEL "&Last"
SIZE 15 BY 1.14.
DEFINE BUTTON btnnext
LABEL "&Next"
SIZE 15 BY 1.14.
DEFINE BUTTON btnopenqry
LABEL "Open Query"
SIZE 17 BY 1.14.
DEFINE BUTTON btnprev
LABEL "&Prev"
SIZE 15 BY 1.14.
DEFINE BUTTON Btnremove
LABEL "<"
SIZE 6 BY 1.14.
DEFINE VARIABLE EDITOR-1 AS CHARACTER
VIEW-AS EDITOR SCROLLBAR-VERTICAL
SIZE 143 BY 11.91 NO-UNDO.
DEFINE IMAGE IMAGE-1
FILENAME "images\s2_banr":U
SIZE 148 BY .95.
DEFINE VARIABLE Selectfld AS CHARACTER
VIEW-AS SELECTION-LIST SINGLE SORT SCROLLBAR-VERTICAL
SIZE 38 BY 9 NO-UNDO.
DEFINE VARIABLE Selectfld2 AS CHARACTER
VIEW-AS SELECTION-LIST SINGLE SCROLLBAR-VERTICAL
SIZE 38 BY 9 NO-UNDO.
DEFINE VARIABLE Selecttable AS CHARACTER
VIEW-AS SELECTION-LIST SINGLE SCROLLBAR-VERTICAL
SIZE 38 BY 9 NO-UNDO.
/* ************************ Frame Definitions *********************** */
DEFINE FRAME fMain
Selecttable AT ROW 2.67 COL 3 NO-LABEL
Selectfld AT ROW 2.67 COL 44 NO-LABEL
Selectfld2 AT ROW 2.67 COL 92 NO-LABEL
btnopenqry AT ROW 2.91 COL 132
Btnadd AT ROW 4.57 COL 84
Btnremove AT ROW 6.24 COL 84
EDITOR-1 AT ROW 11.95 COL 3 NO-LABEL
Btnfirst AT ROW 24.57 COL 44
btnnext AT ROW 24.57 COL 60
btnprev AT ROW 24.57 COL 76
btnlast AT ROW 24.57 COL 92
IMAGE-1 AT ROW 1.24 COL 2
WITH 1 DOWN NO-BOX KEEP-TAB-ORDER OVERLAY
SIDE-LABELS NO-UNDERLINE THREE-D
AT COL 1 ROW 1
SIZE 149.8 BY 25.
/* *********************** Procedure Settings ************************ */
&ANALYZE-SUSPEND _PROCEDURE-SETTINGS
/* Settings for THIS-PROCEDURE
Type: SmartWindow
Allow: Basic,Browse,DB-Fields,Query,Smart,Window
Container Links:
*/
&ANALYZE-RESUME _END-PROCEDURE-SETTINGS
/* ************************* Create Window ************************** */
&ANALYZE-SUSPEND _CREATE-WINDOW
IF SESSION
ISPLAY-TYPE = "GUI":U THEN
CREATE WINDOW wWin ASSIGN
HIDDEN = YES
TITLE = "Dynamic Buffer"
HEIGHT = 25
WIDTH = 150
MAX-HEIGHT = 28.81
MAX-WIDTH = 150
VIRTUAL-HEIGHT = 28.81
VIRTUAL-WIDTH = 150
RESIZE = no
SCROLL-BARS = no
STATUS-AREA = no
BGCOLOR = ?
FGCOLOR = ?
THREE-D = yes
MESSAGE-AREA = no
SENSITIVE = yes.
ELSE {&WINDOW-NAME} = CURRENT-WINDOW.
/* END WINDOW DEFINITION */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _INCLUDED-LIB wWin
/* ************************* Included-Libraries *********************** */
{src/adm2/containr.i}
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
/* *********** Runtime Attributes and AppBuilder Settings *********** */
&ANALYZE-SUSPEND _RUN-TIME-ATTRIBUTES
/* SETTINGS FOR WINDOW wWin
VISIBLE,,RUN-PERSISTENT */
/* SETTINGS FOR FRAME fMain
*/
ASSIGN
Selectfld:AUTO-RESIZE IN FRAME fMain = TRUE.
ASSIGN
Selectfld2:AUTO-RESIZE IN FRAME fMain = TRUE.
IF SESSION
ISPLAY-TYPE = "GUI":U AND VALID-HANDLE(wWin)
THEN wWin:HIDDEN = yes.
/* _RUN-TIME-ATTRIBUTES-END */
&ANALYZE-RESUME
/* ************************ Control Triggers ************************ */
&Scoped-define SELF-NAME wWin
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL wWin wWin
ON END-ERROR OF wWin /* Dynamic Buffer */
OR ENDKEY OF {&WINDOW-NAME} ANYWHERE DO:
/* This case occurs when the user presses the "Esc" key.
In a persistently run window, just ignore this. If we did not, the
application would exit. */
IF THIS-PROCEDURE
ERSISTENT THEN RETURN NO-APPLY.
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL wWin wWin
ON WINDOW-CLOSE OF wWin /* Dynamic Buffer */
DO:
/* This ADM code must be left here in order for the SmartWindow
and its descendents to terminate properly on exit. */
APPLY "CLOSE":U TO THIS-PROCEDURE.
RETURN NO-APPLY.
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&Scoped-define SELF-NAME Btnadd
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Btnadd wWin
ON CHOOSE OF Btnadd IN FRAME fMain /* > */
DO:
run additem.
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&Scoped-define SELF-NAME Btnfirst
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Btnfirst wWin
ON CHOOSE OF Btnfirst IN FRAME fMain /* First */
DO:
IF VALID-HANDLE(qh) THEN DO:
qh:get-first.
RUN displayflds.
END. /*if valid-handle*/
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&Scoped-define SELF-NAME btnlast
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL btnlast wWin
ON CHOOSE OF btnlast IN FRAME fMain /* Last */
DO:
IF VALID-HANDLE(qh) THEN DO:
qh:GET-LAST.
RUN displayflds.
END. /*valid-handle*/
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&Scoped-define SELF-NAME btnnext
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL btnnext wWin
ON CHOOSE OF btnnext IN FRAME fMain /* Next */
DO:
IF VALID-HANDLE(qh) THEN DO:
qh:get-NEXT.
IF (qh:Query-off-end) THEN DO:
MESSAGE "This is the last record." VIEW-AS ALERT-BOX INFO BUTTONS OK.
RETURN.
END. /*if qry off end*/
RUN displayflds.
END. /*valid-handle*/
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&Scoped-define SELF-NAME btnopenqry
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL btnopenqry wWin
ON CHOOSE OF btnopenqry IN FRAME fMain /* Open Query */
DO:
IF VALID-HANDLE(qh) THEN DELETE WIDGET qh.
EDITOR-1:SCREEN-VALUE = "".
CREATE BUFFER bh FOR TABLE selecttable:SCREEN-VALUE.
CREATE query qh.
qh:SET-BUFFERS(bh).
qh:query-prepare("FOR EACH " + selecttable:SCREEN-VALUE + " NO-LOCK ").
qh:query-open.
qh:get-first.
RUN displayflds.
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&Scoped-define SELF-NAME btnprev
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL btnprev wWin
ON CHOOSE OF btnprev IN FRAME fMain /* Prev */
DO:
IF VALID-HANDLE(qh)THEN DO:
qh:GET-PREV.
IF (qh:Query-off-end) THEN DO:
MESSAGE "This is the first record." VIEW-AS ALERT-BOX INFO BUTTONS OK.
RETURN.
END. /*if qry off end*/
RUN displayflds.
END. /*valid-handle*/
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&Scoped-define SELF-NAME Btnremove
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Btnremove wWin
ON CHOOSE OF Btnremove IN FRAME fMain /* < */
DO:
run removeitem.
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&Scoped-define SELF-NAME Selectfld
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Selectfld wWin
ON MOUSE-SELECT-DBLCLICK OF Selectfld IN FRAME fMain
DO:
run additem.
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&Scoped-define SELF-NAME Selectfld2
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Selectfld2 wWin
ON MOUSE-SELECT-DBLCLICK OF Selectfld2 IN FRAME fMain
DO:
run removeitem.
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&Scoped-define SELF-NAME Selecttable
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Selecttable wWin
ON VALUE-CHANGED OF Selecttable IN FRAME fMain
DO:
DEF VAR ok AS LOGICAL NO-UNDO.
ASSIGN
selectfld:LIST-ITEMS = ""
selectfld2:LIST-ITEMS = "".
FIND FIRST _file WHERE _file-name = selecttable:SCREEN-VALUE NO-LOCK NO-ERROR.
IF AVAIL _file THEN DO:
FOR EACH _field OF _file NO-LOCK BY _field-name:
ok = selectfld:ADD-LAST(_field-name).
END. /*for each _field*/
END. /*if avail _file*/
IF VALID-HANDLE(qh) THEN
DELETE WIDGET qh.
CLEAR FRAME dspframe ALL NO-PAUSE.
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&UNDEFINE SELF-NAME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK wWin
/* *************************** Main Block *************************** */
/* Include custom Main Block code for SmartWindows. */
{src/adm2/windowmn.i}
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
/* ********************** Internal Procedures *********************** */
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE additem wWin
PROCEDURE additem :
/*------------------------------------------------------------------------------
Purpose:
Parameters: <none>
Notes:
------------------------------------------------------------------------------*/
DEF VAR OK AS LOGICAL NO-UNDO.
DO WITH FRAME fmain:
IF selectfld:SCREEN-VALUE <> "" AND selectfld:SCREEN-VALUE <> ? THEN DO:
ok = selectfld2:ADD-LAST(selectfld:SCREEN-VALUE).
ok = selectfld
ELETE(selectfld:SCREEN-VALUE).
END. /*selectfld:screen-value <> ""*/
END. /*do with frame fmain*/
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE adm-create-objects wWin _ADM-CREATE-OBJECTS
PROCEDURE adm-create-objects :
/*------------------------------------------------------------------------------
Purpose: Create handles for all SmartObjects used in this procedure.
After SmartObjects are initialized, then SmartLinks are added.
Parameters: <none>
------------------------------------------------------------------------------*/
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE disable_UI wWin _DEFAULT-DISABLE
PROCEDURE disable_UI :
/*------------------------------------------------------------------------------
Purpose: DISABLE the User Interface
Parameters: <none>
Notes: Here we clean-up the user-interface by deleting
dynamic widgets we have created and/or hide
frames. This procedure is usually called when
we are ready to "clean-up" after running.
------------------------------------------------------------------------------*/
/* Delete the WINDOW we created */
IF SESSION
ISPLAY-TYPE = "GUI":U AND VALID-HANDLE(wWin)
THEN DELETE WIDGET wWin.
IF THIS-PROCEDURE
ERSISTENT THEN DELETE PROCEDURE THIS-PROCEDURE.
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE displayflds wWin
PROCEDURE displayflds :
/*------------------------------------------------------------------------------
Purpose:
Parameters: <none>
Notes:
------------------------------------------------------------------------------*/
DEF VAR ok AS LOGICAL NO-UNDO.
EDITOR-1:SCREEN-VALUE IN FRAME {&FRAME-NAME} = "".
dsploop: REPEAT x = 1 to NUM-ENTRIES(selectfld2:LIST-ITEMS IN FRAME Fmain):
FIND FIRST _field WHERE _field-name = ENTRY(x,selectfld2:LIST-ITEMS IN FRAME fmain)
NO-LOCK NO-ERROR.
fh = bh:BUFFER-FIELD(ENTRY(x,selectfld2:LIST-ITEMS IN FRAME fmain)).
IF _data-type = "CHAR" THEN DO:
ok = EDITOR-1:INSERT-STRING(_label + ": " + SUBSTRING(fh:BUFFER-VALUE,1, 140) + CHR(10)).
END. /*data_type = date*/
ELSE DO:
ok = EDITOR-1:INSERT-STRING(_label + ": " + STRING(fh:BUFFER-VALUE) + CHR(10)) .
END. /*else do*/
END. /*dsploop*/
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE enable_UI wWin _DEFAULT-ENABLE
PROCEDURE enable_UI :
/*------------------------------------------------------------------------------
Purpose: ENABLE the User Interface
Parameters: <none>
Notes: Here we display/view/enable the widgets in the
user-interface. In addition, OPEN all queries
associated with each FRAME and BROWSE.
These statements here are based on the "Other
Settings" section of the widget Property Sheets.
------------------------------------------------------------------------------*/
DISPLAY Selecttable Selectfld Selectfld2 EDITOR-1
WITH FRAME fMain IN WINDOW wWin.
ENABLE Selecttable Selectfld Selectfld2 btnopenqry Btnadd Btnremove EDITOR-1
Btnfirst btnnext btnprev btnlast IMAGE-1
WITH FRAME fMain IN WINDOW wWin.
{&OPEN-BROWSERS-IN-QUERY-fMain}
VIEW wWin.
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE exitObject wWin
PROCEDURE exitObject :
/*------------------------------------------------------------------------------
Purpose: Window-specific override of this procedure which destroys
its contents and itself.
Notes:
------------------------------------------------------------------------------*/
APPLY "CLOSE":U TO THIS-PROCEDURE.
RETURN.
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE initializeObject wWin
PROCEDURE initializeObject :
/*------------------------------------------------------------------------------
Purpose: Super Override
Parameters:
Notes:
------------------------------------------------------------------------------*/
DEF VAR ok AS LOGICAL NO-UNDO.
DEF VAR lfirstone AS LOGICAL NO-UNDO.
DEF VAR lfilename AS CHAR NO-UNDO.
lfirstone = TRUE.
DO WITH FRAME fmain:
FOR EACH _file NO-LOCK BY _file-name:
ok = selecttable:ADD-LAST(_file-name).
IF lfirstone THEN DO:
FOR EACH _field OF _file NO-LOCK BY _field-name:
ok = selectfld:ADD-LAST(_field-name).
END. /*for each _field*/
lfilename = _file._file-name.
lfirstone = FALSE.
END. /*lfirstone*/
END. /*for each _file*/
selecttable = lfilename.
END. /*do with frame */
RUN SUPER.
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE removeitem wWin
PROCEDURE removeitem :
/*------------------------------------------------------------------------------
Purpose:
Parameters: <none>
Notes:
------------------------------------------------------------------------------*/
DEF VAR OK AS LOGICAL NO-UNDO.
DO WITH FRAME fmain:
IF selectfld2:SCREEN-VALUE <> "" AND selectfld2:SCREEN-VALUE <> ? THEN DO:
ok = selectfld:ADD-LAST(selectfld2:SCREEN-VALUE).
ok = selectfld2
ELETE(selectfld2:SCREEN-VALUE).
END. /*selectfld2:screen-value <> ""*/
END. /*do with frame fmain*/
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
[/code]
[This message has been edited by progresstalk (edited 14 January 2000).]