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 _handleINT _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:
0 komentárov