project BLF > class Persistence (Progress) > method GetCountOfQueryResult

Description

Get the total number of records in a Query result set


Parameters


icPrepareinputcharacterQuery prepare string
icTablesinputcharacterComma seprated list with table names that should be read in the Query.
iiMaximumBrowseRecordsToCountinputinteger
oiCountoutputintegerNumber of rows in the result set.
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program1/progress.p)

if iiMaximumBrowseRecordsToCount <= 0
or iiMaximumBrowseRecordsToCount  = ?
then return.

assign oiReturnStatus = -98
       vgDebugTime    = etime
       viTables       = num-entries(icTables).

create query vhQuery in widget-pool "non-persistent".
vhQuery:forward-only = yes.

do viFcCount1 = 1 to viTables:
    vcBufferName = entry(viFcCount1,icTables).
    vhBuffer[viFcCount1] = ?.
    if vcBufferName matches "*1"
    then do:
        <M-74 run GetQBuffer
           (input  vcBufferName (icBufferName), 
            input  vhQuery:unique-id (iiQueryID), 
            output vhBuffer[viFcCount1] (ohBufferHandle)) in Progress>
    end.
    if vhBuffer[viFcCount1] = ?
    then do:
        /* These buffers will not be cached */
        create buffer vhBuffer[viFcCount1]
               for table substring(vcBufferName,1,length(vcBufferName,"CHARACTER":U) - 1,"CHARACTER":U)
               buffer-name vcBufferName in widget-pool "non-persistent".
        vlBufferCreated[viFcCount1] = yes.
    end.
    vhQuery:add-buffer(vhBuffer[viFcCount1]).
end.

vlFcOk = vhQuery:query-prepare (icPrepare) no-error.

if vlFcOk then do:
   vhQuery:query-open().
   vhQuery:get-first().
   do while not vhQuery:query-off-end:
       oiCount = oiCount + 1.
       if oiCount > iiMaximumBrowseRecordsToCount
       then do:
           oiCount = -1.
           leave.
       end.
       vhQuery:get-next().
   end.
   oiReturnStatus = 0.

    if vlProgress
    then do viFcCount1 = 1 to vhQuery:num-buffers:
        assign vcIndexInfo = vcIndexInfo + chr(10) + "Index : ":U
                           + vhQuery:index-information(viFcCount1).
    end.

    publish "Logging.DatabaseAccess"
           ("read ":U + icTables + chr(10) +
            icPrepare + vcIndexInfo + chr(10) +
            "Record count=":U + string(oiCount) + chr(10) +
            "time(ms)=" + string(etime - vgDebugTime), ?).
end.

finally:
    if vhQuery <> ?
    then do:
        vhQuery:query-close().
        viFcCount2 = vhQuery:unique-id.
        delete object vhQuery.
        do viFcCount1 = 1 to viTables:
            if vlBufferCreated[viFcCount1]
            then delete object vhBuffer[viFcCount1].
            else do:
                <M-45 run ReleaseQBuffer
                   (input  entry(viFcCount1,icTables) (icBufferName), 
                    input  viFcCount2 (iiQueryID)) in Progress>
            end.
        end.
    end.
end finally.