Release 10.1A: OpenEdge Development:
Progress 4GL Reference

> ## NUM-RESULTS function

> Returns the number of rows currently in the results list of a scrolling query. The results list is initialized when the query is opened. Depending on the query, the entire list is built immediately upon opening or it is gradually as needed.

> #### Syntax

>     NUM-RESULTS ( query-name )

> ``query-name``

> A character expression that evaluates to the name of a currently open, scrolling query. If `query-name` does not resolve to the name of a query, or if the query is not open or not scrolling, then the function returns the Unknown value (`?`).

> Note: Searching for a query using a handle is more efficient than a character expression. Progress resolves a character expression at runtime by searching in the current routine for a static query with that name. If not found, Progress searches the enclosing main procedure. If still not found, Progress searches up through the calling programs of the current routine, and their main procedures. Since a handle uniquely identifies a query, no such search is required. Use the query object handle’s NUM-RESULTS attribute to avoid a runtime search.

> Example

> The following example uses the NUM-RESULTS function in a message to report on the number of rows in a browse. Note that the query is opened with the PRESELECT option so that the entire results list is built immediately. Otherwise, NUM-RESULTS might not return the total number of rows in the browse. When you run this procedure and choose a button, Progress selects certain rows within the browse and then reports on the number of rows selected and the total number of rows in the browse.

> r-brownr.p
>     DEFINE VARIABLE curr-rec AS ROWID.
>     DEFINE VARIABLE status-ok AS LOGICAL.
>     DEFINE VARIABLE threshold LIKE customer.credit-limit INITIAL 25000.

>     DEFINE BUTTON no-orders-custs LABEL "No Orders".
>     DEFINE BUTTON hi-cred-custs LABEL "High Credit".

>     DEFINE QUERY qry FOR customer.
>     DEFINE BROWSE brws QUERY qry DISPLAY cust-num name country credit-limit
>        WITH 10 DOWN MULTIPLE.

>     FORM
>        brws SKIP(1)
>        no-orders-custs hi-cred-custs
>        WITH FRAME brws-frame.

>     FORM
>        threshold
>        WITH FRAME thresh-frame VIEW-AS DIALOG-BOX
>             TITLE "Set Threshold" SIDE-LABELS.

>     ON CHOOSE OF no-orders-custs DO:
>        /* Select those customers with no orders. */

>        status-ok = brws:DESELECT-ROWS().
>        HIDE MESSAGE.
>        FOR EACH customer NO-LOCK WHERE NOT CAN-FIND(FIRST order OF customer):
>           /* Position query to this record and then select row in browse. */
>           curr-rec = ROWID(customer).
>           REPOSITION qry TO ROWID curr-rec.
>           status-ok = brws:SELECT-FOCUSED-ROW().
>           IF NOT status-ok
>           THEN MESSAGE "Could not select row.".
>        END.

>        /* Report number of selected rows and position to first selected. */
>       MESSAGE brws:NUM-SELECTED-ROWS "of" NUM-RESULTS("qry")
>                "rows have been selected.".

>        IF brws:NUM-SELECTED-ROWS > 0
>        THEN status-ok = brws:SCROLL-TO-SELECTED-ROW(1).
>     END.
>     ON CHOOSE OF hi-cred-custs DO:
>        /* Select customers with high credit limits. */

>        status-ok = brws:DESELECT-ROWS().
>        HIDE MESSAGE.

>        /* Get credit-limit threshold value. */
>        UPDATE threshold WITH FRAME thresh-frame.
>        FOR EACH customer NO-LOCK WHERE customer.credit-limit >= threshold:
>           /* Position query to this record and then select row in browse. */
>           curr-rec = ROWID(customer).
>           REPOSITION qry TO ROWID curr-rec.
>           status-ok = brws:SELECT-FOCUSED-ROW().
>           IF NOT status-ok
>           THEN MESSAGE "Could not select row.".
>        END.

>        /* Report number of selected rows and position to first selected. */
>        MESSAGE brws:NUM-SELECTED-ROWS "of" NUM-RESULTS("qry")
>                "rows have been selected.".

>        IF brws:NUM-SELECTED-ROWS > 0
>        THEN status-ok = brws:SCROLL-TO-SELECTED-ROW(1).
>     END.

>     OPEN QUERY qry PRESELECT EACH customer.

>     ENABLE ALL WITH FRAME brws-frame.

>     WAIT-FOR WINDOW-CLOSE OF CURRENT-WINDOW.

> #### Notes

> - To use the NUM-RESULTS function with a query, the query must be associated with a browse widget or you must define the query with the SCROLLING option. For more information on query definitions, see the reference entry for the DEFINE QUERY statement.

> - If the query is empty, NUM-RESULTS returns 0.

> - When possible, Progress performs optimizations for GET LAST and REPOSITION statements. These optimizations make the results list invalid. At that point, NUM-RESULTS returns the Unknown value (`?`). These optimizations do not occur if the query is opened with the PRESELECT option or has an associated browse widget.

> #### See also

> CLOSE QUERY statement, CURRENT-RESULT-ROW function, DEFINE BROWSE statement, DEFINE QUERY statement, GET statement, NUM-RESULTS attribute, OPEN QUERY statement, QUERY-OFF-END function, REPOSITION statement

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