V makrojazyku lze vytvářet tzv "uživatelské databáze". Jedná se o klasické
databáze s proměnlivou délkou věty, jejichž jednou větou je řetězec dlouhý
maximálně 255 znaků. Při zakládání databáze lze volit počet a délku indexů.
-
Počet použitých indexů je omezen na deset.
-
Index číslo jedna, je automatický a je typu LongInt. Vaše indexy tedy mohou mít
čísla 2,3,4,5,6,7,8,9 a 10.
-
Index číslo jedna dostane každá nová věta s hodnotou o jedničku vyšší než věta
poslední.
-
Ostatní indexy musí ležet ve větě a při otevírání databáze procedurou
DBOpen nebo DBRewrite se definuje, kde leží
a jak jsou dlouhé. O jejich tvar se musí postarat uživatel sám.
a) Příklad věty: ¸-------------------------------------------
| Index 1 | Index 2 | položky věty |
-------------------------------------------¶
^1 ^6
b) Otevření databáze: DBRewrite(F, FileName, 1,5, 6,7);
DBOpen(F, FileName, 1,5, 6,7);
-
Na konec všech uživatelských indexů (2..10) systém sám připojuje Ident věty
(LongInt) + atribut věty (Word). Tím je zaručena jednoznačnost klíčů. Při
používání vyhledávací funkce _DBFind, která
potřebuje přesné znění klíče, je nutné připojit i Ident a atribut. Jako atribut
pište 0.
-
Procedura pro otevírání existující databáze DBOpen, musí mít stejný počet a
délku klíčů.
-
Pro stavbu číselných indexů se používají funkce _Chr,
_ChrW, _ChrI, _ChrLI a
_ChrR. Předpokládejme, že v příkladu je Index 1 tvořen Byte + LongInt a
Index 2 je tvořen String[5] + Word. Pak vytvoření věty vypadá takto:
dim Record : String
dim LI : LongInt
dim B : Byte
dim W : Word
dim S5 : String[5]
....
Record := _Chr(B)+_ChrLI(LI)+_RightSP(S5,5)+_ChrW(W)+ položky věty;
DBAdd(F, Record)
....
-
Stejného výsledku dosáhnete použitím procedury StrPut:
....
StrPut(Record, B, LI, S5, W, ...)
DBAdd(F, Record)
....
-
Pozor! Při tvorbě klíče pro vyhledávání je potřeba přihlédnout k tomu, jak jsou
klíče tvořeny v síťovém a nesíťovém prostředí. Věta uživatelské databáze má
tuto strukturu:
-----------------------------------------------------------------
|Attr(Word)|Ident(LongInt)|Vlastní uživatelská struktura(String)|
-----------------------------------------------------------------
--klíč číslo 1-- ----- ostatní klíče -----
V nesíťové verzi je Ident konvertován do řetězcové formy klíče přímo programem.
V síťové verzi si řetězcový klíč tvoří až Btrieve server. Proto je potřeba pro
tvorbu klíče číslo 1 používat funkci _LIToKey, která
své vlastnosti mění podle verze programu: a) síťová -/ posílá longint b)
nesíťová -/ posílá řetězec funkcí _ChrLI Ostatní klíče
jsou ukládány v rámci uživatelské struktury, což může být pouze řetězec. Proto
pro klíče jejichž číslo je vyšší než 1, je potřeba používat funkce
_StrPut, nebo podobné funkce _ChrLI, ...
-
Maximální délka indexu je uložena v konstantě MaxKeyLen a může být u různých
programů (FluxPam4, Nestor, ..) různá.
-
Variabilní délka věty začíná až za posledním definovaným indexem. Proto nelze
nadefinovat jeden nebo více indexů a pak se pokusit přidat novou větu jejíž
délka bude menší než součet délky indexů.
-
Chcete-li používat řetězcového indexu, který má být řazen správně dle české
abecedy, musíte používat funkce _StrToCS a
_CSToStr.
Podívejte se na: Procedury a funkce
pro uživatelské databáze
Příklad