Aktualizační příkaz BROWSE
Úvod
Příkaz
BROWSE je jedním z příkazů pro interaktivní doplňování, vyhledávání,
aktualizování a rušení záznamů jednoho nebo více souborů (v relačním
propojení), v jednouživatelském nebo ve sdíleném režimu (více uživatelů
současně pracuje v síti se stejnými soubory).
Vyvinul
se z původně primitivního příkazu pro prohlížení obsahu databázových
souborů (odtud název). V současné době má široké možnosti uplatnění v
úlohách evidenčního charakteru a při programování tabulkových procesorů.
Zejména se však uplatňuje při údržbě souborů normativního charakteru (číselníků,
třídníků, katalogů, ceníků, a pod).
Příkaz
předpokládá otevřený databázový soubor (soubory). Pokud je předmětem zájmu
více souborů, musí být spojeny v relaci (jsou povoleny relace 1:1 a 1:N).
Při
relačním spojení databázových souborů (SET RELATION) je možno pro každý
z nich otevřít okno Browse. Při pohybu po větách v okně nadřazeného
souboru se automaticky posouvá obsah Browse oken spřežených (podřízených)
databázových souborů. Pokud byla příkazem SET SKIP vytvořena vazba typu
1:M mezi dvěma databázovými soubory, Browse může v jednom okně zobrazit
položky z záznamu nadřazeného souboru a vícenásobný výskyt odpovídajících
vět z podřízeného souboru. Při práci s oknem Browse lze využít funkce
VARREAD(), RECNO(), ROW() a COL().
Přidávání
záznamů do souborů se provádí klávesami CTRL+N (new). Označení záznamu
ke zrušení se provádí klávesami CTRL+T (toggle = ohoz) nebo stiskem myši těsně
vlevo od názvu. Vlastní rušení se provádí již jiným příkazem (PACK).
Znepřístupnění záznamů označených ke zrušen předpokládá dřívější
zadání příkazu SET DELETE ON (standard je off)..
Když
jsou soubory indexovány a provede se změna v klíčové položce, pak
"setřídění záznamů" se navenek projeví až když změněný záznam
opustí okno. Je to záměrně, aby uživatel viděl záznam na tom místě, kde
ho mění, ale pouze po dobu změny.
Zobrazení
záznamů
Záznamy
databázových souborů jsou zobrazeny v okně BROWSE ve tvaru tabulky (browse)
nebo s položkami uspořádanými pod sebou. Jeden záznam je na tolika řádcích,
kolik má záznam položek. Tomuto uspořádání se říká tvar EDIT nebo
CHANGE. Okno je možné rozdělit do dvou částí, s různým způsobem
zobrazení.
Položky
záznamu jsou zobrazené v tom pořadí, v jakém jsou uvedené v seznamu (položek).
Součástí seznamu mohou být i vypočtené položky. Uspořádání položek
lze měnit.
Obsah
memo položek se zobrazuje ve zvláštním editačním okně, které se aktivuje
klávesami CTRL+PgDn.
Pohyb
v tabulce se zajišťuje kurzorovými klávesami. K přechodu mezi sloupci se
doporučuje používat klávesy Tab (směr vpřed) nebo Shift+Tab (pro směr zpět).
Vypočtená
položka
Kromě
položek databázových souborů lze v okně BROWSE zobrazovat vypočtené položky.
Tyto položky mají dočasně platné pojmenování. Mají tvar
<jméno>
= <výraz>
Popis
položky
Každá
položka, zobrazena v okně BROWSE, může být doprovázena atributy zobrazení
a manipulace, oddělených navzájem dvoutečkou. Atributy jsou v podstatě
jednopísmenové zkratky klauzulí příkazu @...GET. Výraz určující hodnotu
atributu je oddělen rovnítkem. Neuvedením atributů se připouští jeho
standardní hodnota. Na pořadí atributů nezáleží.
:R
read
only - zobrazený údaj ve sloupci nelze přepsat
:<expN>
určí
novou šířku zobrazené položky (standardně je dána rozsahem položky).
:V=<expr4>
valid
- používá se na kontrolu správnosti hodnoty nebo k aktivaci jiných programů.
Když je hodnota výrazu <expr4> pravdivá, přemístí se kurzor na další
položku. Při hodnotě .F. kurzor nelze přemístit a vypíše se chybové hlášení.
Při hodnotě nula (0) kurzor nelze přemístit, hlášení se nevypíše.
:F
forced
- kontrola výrazu <expr4> se bude provádět i tehdy, nebyl-li obsah
sloupce modifikován
:E=<expC4>
error
- vypíše se namísto standardního chybového hlášení řetězec
<expC4>
:P=<expC5>
picture
- řetězec editačních symbolů (viz klauzuli picture příkazu
:B=<expr5>,<expr6>
between
- hodnota ve sloupci musí ležet v rozsahu určeném zadanými výrazy
:H=<expC6>
head
- zadání hlavičky sloupce (namísto standardního jména položky nebo výrazu)
:W=<expL4>
when
- při <expL4>=.F. je vstup do sloupce záznamu zakázán
Popis
příkazu BROWSE
BROWSE
[FIELDS <seznam položek>]
[FORMAT]
[FOR
<expL1>] [KEY <expr1> [, <expr2>]]
[FREEZE
<položka>] [LOCK <expN1>] [WIDTH <expN4>]
[PARTITION
<expN2>] [LPARTITION] [NOLINK] [NOLGRID]
[NORGRID]
[LEDIT]
[REDIT]
[LAST]
[PREFERENCE <expC1>] [TITLE <expC2>]
[NOCLEAR]
[SAVE] [TIMEOUT <expN3>] [NOWAIT]
[VALID
[F:] <expL2> [ERROR <expC3>][]
[[WINDOW
<okno1>] [IN [WINDOW] <okno2> | SCREEN]]
[COLOR
[<seznam dvojic barev>] | COLOR SCHEME <expN5>]
[NOAPPEND]
[NODELETE] [NOEDIT | NOMODIFY] [NOMENU] [NORMAL]
[NOOPTIMIZE]
[NOREFRESH]
[REST]
FIELDS
<seznam položek>
určuje,
jaké položky nebo výrazy se mají zobrazit. Současně určuje jejich pořadí.
Položky stejného jména, ale z různých souborů, nutno odlišit přeponami
(alias pracovní oblasti, zapsaná před jménem a oddělená tečkou). Když
není uvedena klauzule FIELDS, zobrazí se všechny položky v pořadí jejich výskytu
v záznamu. Seznam položek je seznam popisů jednotlivých položek (položek,
oddělovačem je čárka) a určuje jejich pořadí ve výpisu. Popis jednotlivých
položek bude uveden ve zvláštním odstavci
FORMAT
klauzule
se používá pouze při použití souboru formátů, který musí být otevřen
(SET FORMAT TO)
FOR
<expL1>
známá
klauzule pro výběr záznamů odpovídajících logickému výrazu
<expL1>
KEY
<expr1> [, <expr2>]
slouží
k výběru zobrazovaných vět (předpokládá indexovaný soubor). Jsou
zobrazené (a tím pádem přístupné) věty, u kterých je indexový výraz
roven <expr1> nebo leží v rozmezí <expr1> , <expr2>
FREEZE
<položka>
povoluje
modifikaci pouze jediného specifikovaného sloupce
WIDTH
<expN4>
definuje
největší přípustnou šířku sloupce (pro všechny ve výstupu)
PARTITION
<expN2>
provede
rozdělení okna Browse na dvě sekce, <expN2> určuje šířku levé
sekce. Kurzor je standardně umístěn v pravé sekci. Záměnu umístění
kurzoru provede klauzule LPARTITION. Obě sekce okna jsou standardně spřeženy
(vertikální pohyb v jedné má za následek odpovídající pohyb v druhé).
Zrušení tohoto spřežení se dosáhne uvedením NOLINK. Zobrazení rastru (mřížky)
v sekcích potlačí NOLGRID a NORGRID
LOCK
<expN1>
rozdělení okna na dvě sekce, velikost levé je
<expN1> položek (analogie PARTITION)
LEDIT
a REDIT
mění
standardní tabulkový vzhled zobrazení (věta v jednom řádku) na vzhled, při
kterém je každá položka na samostatném řádku)
LAST
zajistí,
že Browse bude mít stejné vlastnosti jako při předchozím použití
PREFERENCE
<expC1>
uloží
k uložení konfigurace BROWSE do <expC1>. Další vyvolání Browse s
PREFERENCE <expC1> tuto konfiguraci obnoví
TITLE
<expC2>
slouží
k zadání titulku okna (místo jména databázového souboru)
NOCLEAR
ponechá
pasivní obraz okna Browse na obrazovce i po ukončení práce s příkazem
SAVE
používá
se v programových aplikacích BROWSE případech, kdy požadujeme, aby okno
Browse zůstalo po jeho opuštění aktivní (viditelné) a bylo možné se do něj
z jiných oken vrátit
TIMEOUT
<expN3>
doba
(v sec.), po kterou program čeká na zásah obsluhy.
VALID
[F:] <expL2>
když
je <expL2> nepravdivý, pak nelze přemístit kurzor z právě modifikovaného
záznamu. [ :F ] vnutí test i když záznam nebyl modifikován
ERROR
<expC3>
slouží
k zadání chybového hlášení
WHEN
<expL3>
když
je <expL3> nepravdivé, pak nelze modifikovat záznamy
NOAPPEND
nedovolí
přidávání záznamů do souboru
NODELETE
zabrání
označování záznamů ke zrušení
NOEDIT
nebo NOMODIFY
nedovolí
provádět opravy, nezakazuje ale "DELETE"
NOMENU
znepřístupní
menu Browse (v systémovém menu)
NORMAL
zamezí
převzetí atributů uživatelsky definovaného okna pro Browse okno. (Pokud je
okno Browse do uživatelsky definovaného okna otevřeno)
NOREFRESH
nepovolí
pravidelné obnovování obsahu okna Browse (viz SET REFRESH). Je užitečné
pro soubory, určené pouze pro prohlížení
REST
ukazatel
záznamu si zachová stávající pozici namísto umístění na začátek
souboru (pouze v souvislosti s klauzulí FOR)
Příkaz
CHANGE
Slouží
podobně jako Příkaz BROWSE k editaci databázového souboru v okně. Oproti příkazu
BROWSE má navíc parametr <rozsah> a frázi WHILE. Naopak zde chybí
klauzule LOCK, NOREFRESH a REST. V praxi se používá velice málo. Jelikož
jsou klauzule příkazu známé, je zde uveden příkaz bez podrobného popisu.
CHANGE
[FIELDS <seznam položek>]
[FORMAT]
[<rozsah>]
[FOR <expL1>] [WHILE <expL2>] [KEY <expr1> [, <expr2>]]
[FREEZE
<položka>] [WIDTH <expN3>]
[PARTITION
<expN1>] [LPARTITION] [NOLINK] [NOLGRID]
[NORGRID]
[LEDIT]
[REDIT]
[LAST]
[PREFERENCE <expC1>] [TITLE <expC2>]
[NOCLEAR]
[SAVE] [TIMEOUT <expN2>] [NOWAIT]
[VALID
[F:] <expL3> [WHEN <expL4>]
[[WINDOW
<okno1>] [IN [WINDOW] <okno2> | SCREEN]]
[COLOR
[<seznam dvojic barev>] | COLOR SCHEME <expN4>]
[NOAPPEND]
[NODELETE] [NOEDIT | NOMODIFY]
[NOOPTIMIZE]
[NOREFRESH]
[NOMENU]
[NORMAL]
Cvičení
Evidence
a účtování léčiv
Příklad
byl použit při formulaci zadání subsystému Lékárna ASVŘ VLÚ. Umožnil
rychlou domluvu řešitelů s uživateli. Skutečné řešení bylo uživatelsky
příjemnější za cenu větší pracnosti i rozsahu programu. Poznámka: Účtování
léčiv probíhá pouze za běžný kalendářní rok. Program PR405_1
SET
TALK OFF
&& Nezobrazovat mezivýsledky
CLEAR
&& Výmaz obrazovky
CLEAR
ALL
&& Uzavření všech souborů
PUBLIC
recepty
&& Proměnná recepty je veřejná
SET
ESCAPE OFF
&& ESC nepřeruší výpočet
ON
KEY LABEL ctrl+s DO pr405_4
&& Klíče aktivace prog. PR405_4
ON
KEY LABEL ctrl+R DO pr405_2 &&
Klíče aktivace prog. PR405_2
ON
KEY LABEL ctrl+E DO pr405_3
&& Klíče aktivace prog. PR405_3
SELE
0
&& Volná pracovní oblast
USE
recepty
&& Otevření souboru
SUM
ALL castka TO recepty
&& Součet nákladů za recepty
SELE
0
&& Volná pracovní oblast
USE
lekarna ORDER TAG nazev
&& Otevření souboru
@16,1
CLEAR TO 18,78
&& Výmaz části obrazovky
@
16,42 SAY "Pohyb v tabulce
PgUp, PgDn"
@
17,42 SAY "Záznam bez jména bude zrušen
!!!!!"
@
18,42 SAY "Konec práce
Esc"
@
16,3 SAY "Přepínání tabulek
Ctrl+H"
@
17,3 SAY "Nový záznam
Ctrl+N"
@
18,3 SAY "Součty vyvoláte klávesami
Ctrl+S"
@
19,1 SAY " Recepty zaúčtujete Ctrl+R"
@
20,1 SAY " Expiraci zjistíte Ctrl+E"
DEFINE
WINDOW wind1 FROM 1,1 TO 14,79 COLOR SCHEME 2
&& Definice okna
DEFINE
WINDOW wind2 FROM 20,40 TO 24,79 COLOR SCHEME 3
DEFINE
WINDOW wind3 FROM 19,45 TO 24,70 COLOR SCHEME 4
SET
DATE TO GERMAN
&&
Naše konvence data
BROWSE
FIELD nazev:H="Název léku", ;
FORMA,
;
zakoupeno
, ;
expirace
, ;
kusu:H="Zakoupeno
[ks]" , ;
cena:H="Cena
za kus [Kčs]" , ;
spotr:H="Spotřebováno
[ks]" , ;
_="--------"
, ;
zust=kusu-spotr:H="Z
Ů S T A T E K ":p="99999999" , ;
cenpo=kusu*cena:H="CENA
POŘIZOVACÍ [Kčs]":p="99999.99" ;
TITLE
"S e z n a m l é k ů
v l é k á r n ě
V L Ú" ;
WINDOW
wind1 ;
PARTITION
30 REDIT
DELETE
ALL FOR LEN(TRIM(nazev))=0
&& Označení prázdných záznamů
PACK
&& Vlastní rušení
Evidence
receptů – PR405_2
Program
je volán z PR405_1
star
= RECNO()
&& Pamatování pozice ukazatele
prac
= ALIAS()
&& Pamatování pracovní oblasti
SELE
recepty
&& Prac. oblast souboru recepty
BROWSE
TITLE "R E C E P T Y";
WINDOW
wind3
GO
TOP
&& Ukazatel na začátek souboru
SUM
ALL castka TO recepty
&& Součet nákladů
SELE
&prac
&& Návrat do původ.prac.oblasti
GO
star
RETURN
&& Konec
Expirace
léčiv – PR405_3
Program
je volán z PR405_1
DEFINE
WINDOW wind5 FROM 1,1 TO 24,60
ACTIVATE
WINDOW wind5
star
= RECNO()
&& Pamatování pozice ukazatele
prac
= ALIAS()
&& Pamatování pracovní oblasti
SELE
lekarna
&&
Prac.oblast souboru lékárna
?
" S E Z N A M
N E P O U Ž I T E L N Ý C H
L É K Ů "
?
GO
TOP
&& Začátek souboru
DISPLAY
ALL FIELD nazev, expirace, kusu OFF FOR expirace<=DATE()
WAIT
"Pokračování libovolným klíčem" WINDOW
DEACTIVATE
WINDOW wind5
SELE
&prac
&&
Návrat do prac. oblasti
GO
star
&& Ukazatel na původní místo
Náklady
za léčivá v aktuálním kalendářním roce – PR405_4
Program
je volán z PR405_1
ACTIVATE
WINDOW wind2
&& Aktivace okna
star=RECNO()
&& Zapamatování pozice ukazatele
GO
TOP
&& Začátek souboru
rok
= YEAR(DATE())
&& Aktuální rok
SUM
ALL cena*kusu TO C ;
FOR
LEN(TRIM(nazev))>0 and rok = YEAR(porizeno)
@
0,1 SAY STR(rok,4)
&& Zobrazení kalendářního roku
@
1,1 SAY "Suma pořizovací ceny "+STR(C+recepty,10,2)
@
2,1 SAY "Z toho recepty
"+STR(recepty,10,2)
WAIT
"Pokračování libovolným klíčem" WINDOW
DEACTIVATE
WINDOW wind2
GO
star
&& Obnovení pozice ukazetele