Description
prepare a dynamic query object
PreCondition
This method is used in query calls and should not be used anywhere else.
Parameters
icTables | input | character | |
icFieldConvert | input | character | |
ihDestinationBuffer | input | handle | |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
BLF
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.