V príklade sa predpokladá existencia objektov SD.DbStruct, TB.Table. Ďalej musí byť spustený príslušný proces D2000 DBManager a v operačnom systéme je v ODBC korektne konfigurovaná databáza s príslušným DSN menom.

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

; otvorenie tabuľky
PG_CONNECT TB.Table, _DB_MODIFY, _handle, _pageSize, _where, _orderBy, _rowsCount, _retCode

IF _retCode # _ERR_NOERROR THEN ; nepodarilo sa spojiť s tabuľkou
    END
ENDIF


; ak nie je vo výbere nič => končím
IF _rowsCount = 0 THEN
    END
ENDIF


; vypočítam počet stránok
_numPages := _rowsCount / _pageSize
IF _numPages*_pageSize < _rowsCount THEN
    _numPages := _numPages + 1
ENDIF

; prejdem postupne všetky stránky
_pgNr := 1 ; aktuálna stránka

DO_LOOP
PG_READ _handle, _pgNr, _dbPageArr, _retCode
GOSUB Copy_dbPageArr ; skopírujem stránku do _targetArr
_pgNr := _pgNr + 1
EXIT_LOOP _pgNr > _numPages
END_LOOP


PG_DISCONNECT _handle ; zatvorím tabuľku
END



; ****************************************************************
; Kopírovanie obsahu lokálnej premennej _dbPageArr do _targetArr
; ******************************************************************
Copy_dbPageArr:
INT _itemsToCopy
INT _i

; zistím, koľko prvkov budem kopírovať
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 ; počkám na uskutočnenie posledného priradenia do _targetArr
RETURN

Poznámka:
Pri ukončení skriptu akciou END (alebo iným ľubovoľným spôsobom), sú automaticky zatvorené všetky spojenia s tabuľkou.

Súvisiace stránky:

Napíšte komentár