project BLF > class Persistence (other) > method ReadDirect

Description

Directly read field values from a single record in the database.


Parameters


icTableNameinputcharacter
icPrepareinputcharacterProgress for each statement defining what record must be read. If more than one record matches the criteria, only first record is read.
icFieldListinputcharacterComma seperated list of field names.
ocValueListoutputcharacterchr(2) seperated list of field values.
ihClassinputhandle
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


BLF
method other.WriteDirect


program code (program1/other.p)

&if defined(DEBUGSQL) > 0 &then
run SqlDebugWrite in {&TARGETPROCEDURE} ("* ":U + program-name(1), 1).
&endif

assign viQryid = -1.

run SqlQryOpenTable in {&TARGETPROCEDURE}
   (icTableName,
    icPrepare,
    icFieldList, 
    output viQryid,
    output oiReturnStatus).
    
if oiReturnStatus = 0
then run SqlQryExecute in {&TARGETPROCEDURE}
        (viQryId, output viCols, output oiReturnStatus).
if oiReturnStatus = 0
then run SqlQryMoveNext in {&TARGETPROCEDURE}
        (viQryId, output viRows, output oiReturnStatus).

if oiReturnStatus < 0
then do:
    <M-7 run SqlErrorMessage (input  ihClass (ihClass), 
                          output viFcReturnSuper (oiReturnStatus)) in other>
    if viQryId >= 0
    then run SqlQryDestroy in {&TARGETPROCEDURE} (viQryId, output oiReturnStatus).
    return.
end.

if viRows > 0
then do viCnt = 1 to num-entries(icFieldList):
    vcValue = <M-8 getColumnValue (input  viQryid (iiCmd), 
                     input  viCnt - 1 (iiCol)) in other>.
    ocValueList = (if viCnt = 1 then "" else ocValueList + chr(2))
                + (if vcValue = ? then "?":U else vcValue).
end.

run SqlQryDestroy in {&TARGETPROCEDURE}
   (viQryId, output oiReturnStatus).

assign oiReturnStatus = (if viRows = 0 then -4 else 0).