Ukládání nastavení maker

U řady maker je potřeba, aby si ukládaly nastavení. Jednoznačně preferujeme ukládání těchto nastavení do databáze.

Nastavení dělíme na:

Uživatelská nastavení

Jak už název napovídá, jsou tato nastavení platná pouze pro aktuálně přihlášeného uživatele. Používáme makroprocedury a funkce:

Tyto procedury ukládají a čtou řetězcové proměnné až do délky 400 znaků podle longint indexu do databáze pro aktuálně přihlášeného uživatele. Je vhodné, aby makrosystem obsahoval společný include soubor s výčtem používaných indexů pro tyto účely.

Pod jedním indexem lze uložit jednoduché nastavení, nebo složené a rozebírané pomocí procedury StrExtract.

Příklad:

Uložení:

const cUSI_xxx	= 1
const cUSI_yyy	= 2
        
dim a   : Word;
dim d   : Date;
dim s10 : String[10];

s10 := "Text";
a := 555;
d := _ActDate;

SetUserSetItem(cUSI_xxx, _Str(a) + #9 + s10 + #9 + _Str(_DateToDay(d)) + #9);

Nahrání:

dim a   : Word;
dim d   : Date;
dim i	: Integer;
dim s10 : String[10];
dim sz	: StringZ;
dim s1	: StringZ;

if(_GetUserSetItem(cUSI_xxx, sz))then
    StrExtract(sz, s1, sz, #9);	a   := _Val(s1,i);
    StrExtract(sz, s1, sz, #9);	s10 := s1;
    StrExtract(sz, s1, sz, #9);	d   := _DayToDate(_Val(s1,i));
endif

Společné nastavení

Tato nastavení jsou společná pro všechny uživatele. Řeší se pomocí INI souborů ukládaných do databáze.

Používáme makroprocedury a funkce:

Příklad:

Uložení:

procedure UlozNastavení
    dim f   : Word;
    dim a	: Word;

    IOpen(f, "Test", true, "MACPOM");
    IPut(f, "GRP", "LAB1", "testovací hodnota");
    IClose(f)
endproc

Nahrání:

procedure PrectiNastaveni
    dim f : Word;
    dim a : Word;
    dim s : String;

    IOpen(f, "Test", true, "MACPOM");
    _IGet(f, "GRP", "LAB1", s);
    IClose(f)
endproc