project BLF > class Persistence Layer > method UpdateParent

Description

update tc_ParentRowid for relations with primary override = true


Parameters


oiReturnStatusoutputintegerReturn status of the method.


Internal usage


BLF
method other.ReadData
method Progress.ReadData


program code (program1/persistence.p)

for each tDynRel where
         tDynRel.tcParent <> "",
    each bDynRel where
         bDynRel.tcFcTo = entry(1,tDynRel.tcParent)
    on error undo, throw:

    assign viFields = num-entries(tDynRel.tcParent).

    do viFcCount1 = 2 to viFields:
        vhField[viFcCount1] = bDynRel.thFcBuffer:buffer-field(entry(viFcCount1,tDynRel.tcParent)).
    end.

    create query vhOQuery in widget-pool "non-persistent".
    vhOQuery:forward-only = yes.
    vhOQuery:set-buffers(tDynRel.thFcBuffer).

    create query vhIQuery in widget-pool "non-persistent".
    vhIQuery:forward-only = yes.
    vhIQuery:set-buffers(tDynRel.thFcIBuffer).

    create query vhPQuery in widget-pool "non-persistent".
    vhPQuery:forward-only = yes.
    vhPQuery:set-buffers(bDynRel.thFcBuffer).
    vhPQuery:query-prepare("for each t_o":U + bDynRel.tcFcTo).
    vhPQuery:query-open().
    vhPQuery:get-first().

    do while not vhPQuery:query-off-end:

        vcQuery = tDynRel.tcLookupParent.
        do viFcCount1 = 2 to viFields:
            if vhField[viFcCount1]:data-type = "CHARACTER":U
            then vcValue = <M-1 EnQuote  (input  vhField[viFcCount1]:buffer-value (icToQuote)) in persistence>.
            else vcValue = string(vhField[viFcCount1]:buffer-value).
            vcQuery = replace(vcQuery,"$":U + string(viFcCount1 - 1),vcValue).
        end.

        vhOQuery:query-prepare(replace(vcQuery,"$TIO","t_o")).
        vhOQuery:query-open().
        vhOQuery:get-first().
        do while not vhOQuery:query-off-end:
            tDynRel.thFcBuffer::tc_ParentRowid = bDynRel.thFcBuffer::tc_Rowid.
            vhOQuery:get-next().
        end.
        vhOQuery:query-close.

        vhIQuery:query-prepare(replace(vcQuery,"$TIO","t_i")).
        vhIQuery:query-open().
        vhIQuery:get-first().
        do while not vhIQuery:query-off-end:
            tDynRel.thFcIBuffer::tc_ParentRowid = bDynRel.thFcBuffer::tc_Rowid.
            vhIQuery:get-next().
        end.
        vhIQuery:query-close.

        vhPQuery:get-next().
    end.

    vhPQuery:query-close().
    delete object vhPQuery.
    delete object vhOQuery.
    delete object vhIQuery.
    vhPQuery = ?.
    vhOQuery = ?.
    vhIQuery = ?.
end.

finally:

    if vhPQuery <> ?
    then delete object vhPQuery.

    if vhOQuery <> ?
    then delete object vhOQuery.

    if vhIQuery <> ?
    then delete object vhIQuery.
    
end finally.