Page tree
Skip to end of metadata
Go to start of metadata

Akcia SET WITH


Funkcia Zmena viacerých hodnôt súčasne (vždy v súvislosti so štruktúrami).
Deklarácia
SET dstIdent_Rec WITH srcIdent_Rec
Parametre
dstIdent_Rec in Identifikátor riadku, alebo celej štruktúry - cieľ hodnôt.
srcIdent_Rec in Identifikátor riadku, alebo celej štruktúry - zdroj hodnôt.
Popis Parametre dstIdent_Rec a srcIdent_Rec musia mať vždy rovnaký typ štruktúry (ináč akcia generuje chybu _ERR_RECORD_NO_COMP) a taktiež rovnaký rozmer. Môžu byť typu: Akcia nastavuje hodnoty položiek v dstIdent_Rec hodnotami zo zodpovedajúcich položiek srcIdent_Rec. V prípade, že parameter dstIdent_Rec je odkaz na riadok, parameter srcIdent_Rec musí byť taktiež odkaz na riadok. Podobne ak dstIdent_Rec je odkaz na celú hodnotu, srcIdent_Rec musí byť taktiež odkaz na celú hodnotu.

Preto napríklad kombinácia:

RECORD (SD.RecordDef) _lArr1

SET _lArr1[1] WITH SV.Structure

nie je možná a editor skriptov pri kompilácii vyhlási chybu.

Pri nastavovaní celej hodnoty, musí byť počet riadkov rovnaký. Napríklad:

RECORD (SD.RecordDef) _lArr1

SET _lArr1 WITH SV.Structure

Akcia SET WITH bude generovať chybu _ERR_RANGE_ERROR (rozmer objektu SV.Struktura je 10 riadkov a rozmer lokálnej premennej _lArr1 po deklarácii len 1 riadok).
Správne skopírovanie celej hodnoty do lokálnej premennej je nasledovné:

RECORD (SD.RecordDef) _lArr1

REDIM _lArr1[SV.Structure\DIM]

SET _lArr1 WITH SV.Structure

Pri kopírovaní hodnôt do lokálnej premennej typu RECORD, ktorá obsahuje položky typu Objekt, akcia nastavuje hodnoty objektov, na ktoré jednotlivé nastavované položky ukazujú. Tento efekt nie je vždy žiaduci. Preto pri deklarácii lokálnej premennej typu RECORD je možné uviesť modifikátor NOALIAS nasledovne:

RECORD NOALIAS (SD.RecordDef) _lArr1

Pre takto definovanú lokálnu premennú, všetky položky typu Objekt majú vypnutú vlastnosť smerovania. Nemajú vopred definovaný typ. Je možné do nich priradiť hodnotu ľubovoľného typu.
Napríklad:

_lArr1[1]^Object := 1

_lArr1[1]^Object := "Text"

Pozri:

Príklad RECORD (SD.RecordDef) _lArr1
RECORD (SD.RecordDef) _lArr2

INT _index

REDIM _lArr1[5]
REDIM _lArr2[5]
;... naplnenie hodnôt lokálnej premennej lArr1
; prenesenie hodnôt z 3-tieho riadku v premennej _lArr1
; do 2-hého riadku v premennej _lArr2
SET _lArr2[2] WITH _lArr1[3]
; prenesenie celej hodnoty pomocou cyklu
; predpokladá sa rovnaký rozmer polí
_index := 1
NextRow:
IF _index <= _lArr1\DIM THEN
SET _lArr2[_index] WITH _lArr1[_index]
_index := _index + 1
GOTO NextRow
ENDIF ; zhodný výsledok dosiahneme použitím akcie SET WITH
SET _lArr2 WITH _lArr1

Súvisiace stránky:

Write a comment…