project BLF > class Persistence (Progress) > method QueryPrepare

Description

prepare a dynamic query object

PreCondition

This method is used in query calls and should not be used anywhere else.


Parameters


icTablesinputcharacter
icFieldConvertinputcharacter
ihDestinationBufferinputhandle
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


BLF
method Progress.ReadQuery


program code (program1/progress.p)

if num-entries(icTables,"|") = 2
then assign vcFixedTables = entry(1,icTables,"|")
            icTables      = entry(2,icTables,"|").
else assign vcFixedTables = icTables.

oiReturnStatus = -98.

create query vhQuery in widget-pool "queryobjects".

viRQTables = num-entries(icTables).
if viRQTables > 26
then do:
    <M-1 run ErrorMessage
       (input  'A query cannot contain more than 26 tables.':U (icMessage), 
        input  '' (icArguments), 
        input  '' (icFieldName), 
        input  '' (icFieldValue), 
        input  '' (icRowid), 
        input  ? (ihClass)) in Progress>
    assign oiReturnStatus = -3.
    return.
end.

do viFcCount1 = 1 to viRQTables:
    vcBufferName = entry(viFcCount1,icTables).
    vhQBuffer = ?.
    if vcBufferName matches "*1"
    then do:
        <M-56 run GetQBuffer
           (input  vcBufferName (icBufferName), 
            input  vhQuery:unique-id (iiQueryID), 
            output vhQBuffer (ohBufferHandle)) in Progress>
    end.
    if vhQBuffer = ?
    then create buffer vhQBuffer
                for table substring(vcBufferName,1,length(vcBufferName,"CHARACTER":U) - 1,"CHARACTER":U)
                buffer-name vcBufferName in widget-pool "queryobjects".

    vhQuery:add-buffer(vhQBuffer).
    vhRQBuffer[lookup(vcBufferName,vcFixedTables)] = vhQBuffer.
end.

create data-source vhDS in widget-pool "queryobjects".
vhDS:query = vhQuery.
ihDestinationBuffer:attach-data-source(vhDS,icFieldConvert).

oiReturnStatus = 0.