Description
Get the total number of records in a Query result set
Parameters
icPrepare | input | character | Query prepare string |
icTables | input | character | Comma seprated list with table names that should be read in the Query. |
iiMaximumBrowseRecordsToCount | input | integer | |
oiCount | output | integer | Number of rows in the result set. |
oiReturnStatus | output | integer | Return 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.