The following example assumes that objects SD.DbStruct, TB.Table are available. Then the particular process D2000 DBManager must be running and a database with the particular DSN name must be correctly configured in the operating system.

INT _handle
INT _retCode
INT _pageSize
INT _rowsCount
INT _numPages
INT _pgNr
TEXT _where
TEXT _orderBy 
RECORD
(SD.DbStruct) _dbPageArr
ALIAS (SD.DbStruct) _targetArr

SET _targetArr AS SV.Struktura
_pageSize := _targetArr\DIM

; open database table
PG_CONNECT TB.Table, _DB_MODIFY, _handle, _pageSize, _where, _orderBy, _rowsCount, _retCode

IF _retCode # _ERR_NOERROR THEN ; unable to connect to the database table
    END
ENDIF


; if nothing is selected => finish
IF _rowsCount = 0 THEN
    END
ENDIF


; calculate the number of pages
_numPages := _rowsCount / _pageSize
IF _numPages*_pageSize < _rowsCount THEN
    _numPages := _numPages + 1
ENDIF

; go over all pages
_pgNr := 1 ; current page

DO_LOOP
PG_READ _handle, _pgNr, _dbPageArr, _retCode
GOSUB Copy_dbPageArr ; copy page to _targetArr
_pgNr := _pgNr + 1
EXIT_LOOP _pgNr > _numPages
END_LOOP


PG_DISCONNECT _handle ; close the database table
END



; ****************************************************************
; Copying the content of local variable _dbPageArr to _targetArr
; ******************************************************************
Copy_dbPageArr:
INT _itemsToCopy
INT _i

; detect how many items are to be copied
IF
_targetArr\DIM < _dbPageArr\DIM THEN
    _itemsToCopy := _targetArr\DIM
ELSE
    _itemsToCopy := _dbPageArr\DIM
ENDIF

_i := 1
DO_LOOP
EXIT_LOOP _i > _itemsToCopy

SET _targetArr[_i] WITH _dbPageArr[_i]
_i := _i + 1
END_LOOP

WAIT ; wait for executing the last assignment into _targetArr
RETURN

Note

  • Terminating the script by the action END (or by another optional way) automatically closes all connections to the database table.

Related pages:

Napíšte komentár