Copyright: Software602 a.s (Jan Š.)   Tuesday, February 29, 2000 17:05:38


Základní vlastnosti WinBase602
Základní charakteristika a vlastnosti WinBase602

Novinky verzí 5.0 a 5.1 a 6.0 a 6.1	Kompatibilita verzí 5.0 a 5.1 a 6.0 a 6.1

 WinBase602 je 32-bitový integrovaný relační databázový systém pro prostředí MS Windows95 nebo NT. Pracuje na běžných typech sítí s protokolem TCP/IP,  IPX/SPX (s dodatečnou podporou od Novell) a NetBEUI.

Hlavní rysy programu:

•	SQL server WinBase602 může pracovat pod MS Windows, Novell NetWare nebo Unixem (LINUX nebo FreeBSD);

•	jazyk SQL na úrovni SQL 2 (SQL 92) Intermediate level a vybraných částí normy SQL 3 (jazyk pro psaní uložených procedur a triggerů);

•	relační systém řízení báze dat obohacený o některé prvky síťového modelu;

•	moderní síťová architektura klient – server;

•	české prostředí, české třídění a vyhledávání;

•	interaktivní vizuální nástroje pro návrh komponent databázových aplikací (front-endových i back-endových);

•	připojení se ke grafovému serveru a tvorba grafů z dat v databázi;

•	zajištění vnitřní i vnější integrity dat, zajištění proti haváriím (dvoufázový commit, journal změn), automatické zálohování dat;

•	ODBC klient i server, ODBC driver je součástí dodávky;

•	podpora OLE2 - jako server i kontejner včetně in-place aktivace;

•	možnost vytváření jednodušších databázových aplikací bez programování pomocí předdefinovaných akcí;

•	možnost programování (včetně komfortního ladění) ve vnitřním jazyce vycházejícím z Pascalu;

•	ladění uložených procedur v jazyce SQL a triggerů;

•	interface na jazyk C/C++, Borland Pascal, Delphi a Visual Basic;

•	spolupráce s desítkami programových balíků pod Windows prostřednictvím rozhraní OLE (ActiveX) a ODBC;

•	digitální podpisy;

•	propracovaný systém zajištění bezpečnosti systému rozdělením kompetencí mezi správce databáze a správce aplikací, bezpečnostní autoritu, hierarchii certifikačních autorit;

•	na straně klienta i na straně serveru implementované používání (odesílání i přijímání) elektronické pošty - Mail602 nebo MAPI nebo SMTP/POP3

•	integrovaný koloběh dokumentů, přidělování práv k jednotlivým dokumentům;

•	replikace informací mezi servery;

•	plná podpora Internetu - přístup klienta na server po Internetu, přístup z WWW prohlížeče do databáze přes CGI (FastCGI, ISAPI, LCGI) script nebo ActiveX control;

•	interaktivní návrhář rozhraní Internetových aplikací - Form Wizard;


Novinky verze 6.1
Hlavní novinky ve verzi 6.1

WinBase602 verze 6.1 byla sestavena v únoru 2000

Internetové rozhraní aplikací

•	Form Wizard podrobnosti;

•	práce s COOKIES - podrobnosti;

•	příkaz WBC preprocesoru #if - podrobnosti;

•	blok WBC DeclareVariable - podrobnosti;

•	blok WBC SetVariable - podrobnosti;

•	operátor exists - podrobnosti;

Spolupráce s elektronickou poštou - podrobnosti

•	přijímání elektronické pošty serverem nebo klientem;

•	poštovní profily;

•	poštovní protokoly SMTP/POP3;

Replikace

•	replikace pomocí SMTP/POP3;

•	úprava replikací Direct IP při dial-up připojení do Internetu;

Provoz a instalace

•	režim klienta "RunTime" - slouží pouze pro běh aplikací, není k dispozici Řídicí panel - podrobnosti;

•	modifikovatelný instalační program v SETUP.INI - podrobnosti;

•	filtrování IP adres klientů - podrobnosti;

•	odpojování nekomunikujících klientů - podrobnosti;

•	zabránění anonymního přístupu k serveru - podrobnosti;

•	určení adresářů pro DLL knihovny volaných SQL serverem - podrobnosti;

Server

•	vlákna a synchronizace - podrobnosti;

•	Create_semaphore - vytvoření semaforu;

•	Close_semaphore - zavření semaforu;

•	Release_semaphore - zvednutí semaforu;

•	Wait_for_semaphore - čekání na zvednutý semafor;

•	Sleep - pozastavení provádění procedury na daný čas;

•	GRANT a REVOKE lze nyní použít i pro skupiny uživatelů;

•	volání SQL procedury pomocí CALL přes hranici aplikace;

•	systémové dotazy - podrobnosti;


Novinky verze 6.0
Hlavní novinky ve verzi 6.0

WinBase602 verze 6.0 byla sestavena na jaře 1999

Struktura aplikací, základní principy a nástroje

•	Lze oddělit datovou a prezentační část aplikace. Nad jednou datovou bází lze vytvořit více samostatných front-end aplikací, jednu front-end aplikaci lze používat na více datových bází - podrobnosti;

•	Speciální podpora pro vytváření vícejazyčných aplikací (překladové tabulky řetězců a další) - podrobnosti.

•	Programy ve vnitřním jazyce mohou obsahovat direktivy a makra, lze používat podmíněný překlad - podrobnosti;

•	Komponenty aplikace lze strukturovat do složek (folderů), sleduje se čas poslední změny - podrobnosti;

•	Cache na aplikaci na straně klienta (front-end objekty) - viz záložka Databáze a servery na Konfiguračním panelu;

•	Šifrování objektů aplikace kvůli ochraně práce programátora - viz změny na řídicím panelu a Export aplikace;

•	Lze zjistit počet současně běžících instancí aplikace a omezit ho (funkce Appl_inst_count);

•	Lze z programu exportovat aplikaci - funkce Export_appl_ex a importovat aplikaci (pouze externí jazyky) - funkce Import_appl;

•	Pohledy a menu mohou být svázány s určitým projektem a otevřít ho při vlastním otevření;

•	Lze vytvářet relace nad enticemi sloupců dvou tabulek;

•	Objekty, které lze editovat textovém tvaru, lze editovat také externím editorem - nastavení viz Parametry WinBase602, vyvolání z nabídky akcí v popup menu nad objektem;

•	Doplněna možnost posílat z klienta zprávu všem ostatním klientům stejného serveru (funkcí i interaktivně z okna Monitoru);

•	Lze spustit na jednom počítači dva a více serverů (nad různými databázemi) a přistupovat z klientů na libovolný z nich. Servery je nutno odlišit rozdílným číslem portu (na Konfiguračním panelu) a obdobně je zaregistrovat u klienta.

•	Na straně klienta i na straně serveru implementované používání (odesílání i přijímání) elektronické pošty - Mail602 nebo MAPI nebo SMTP/POP3 - podrobnosti;

Formuláře a sestavy - schopnosti a ovládání

•	Lze deklarovat proměnné typu formulář - podrobnosti Objektové programování;

•	Při programování práce s formuláři a sestavami lze používat objektový zápis, jako například: formulář.složka.metoda(parametry...) nebo formulář.složka.vlastnost:=hodnota

•	Objektový zápis dovoluje sestupovat k subformulářům nebo přecházet do rodičovských formulářů

•	Průvodce pro volání metod formulářů a práci s vlastnostmi

•	Do formulářů lze vkládat objekty ActiveX, volat jejich metody a pracovat s jejich vlastnostmi;

•	Vlastnosti ActiveX objektů lze propojit s hodnotami sloupců ze zdroje dat,  události v ActiveX objektech lze ošetřovat ve vnitřním jazyce;

•	Formuláře mají kromě hlavičky a datové oblasti také patu;

•	Přidána akce po vstupu na záznam a možnost vypnout synchronizování mezi formulářem a subformuláři;

•	Přidána akce při poklepání na záznam ve standardním formuláři;

•	Přidána akce na stisk pravého tlačítka myši nad složkou (např. zobrazit popup menu);

•	Speciální druh formuláře: pro výběr záznamu;

•	Ve formuláři možno zakázat použití QBE a třídění;

•	Speciální druh formuláře: pro výběr záznamu;

•	Nové vlastnosti složky Editační pole jednořádkové - podrobnosti Složka Editační pole;

•	Nový druh složky pro zadání data: kalendář a složka DTP - podrobnosti Složka Kalendářa Složka DTP;

•	Nový druh složky: čárový kód - podrobnosti Složka Čárový kód;

•	Relace lze vytvářet nad enticemi sloupců ze dvou tabulek;

•	Nový způsob popisu synchronizace formuláře se subformulářem: pomocí relace;

•	Standardní akce umožňující aktivaci souboru ležícího mimo WinBase602 dle jeho přípony: otevření, tisk atd.;

•	Standardní akce: otevření formuláře, jehož obsah je k obsahu jiného formuláři definován vztahem popsaným relací;

•	Standardní akce: tisk sestavy přesměrované na aktuální zdroj dat (kurzor) aktivního formuláře;

•	Standardní akce pro nabídnutí popup menu;

•	Použití dynamických barev ve formulářích a  ve složkách - podrobnosti;

Návrhář formulářů a sestav

•	Rozlišen návrh formuláře a návrh sestavy, formuláře lze konvertovat na sestavy pomocí příkazu menu

•	Nový vícekrokový průvodce (wizard) pro vytvoření formuláře nebo sestavy

•	Šablony pro vytváření formulářů a sestav s unifikovaným vzhledem - podrobnosti Šablony

•	Návrhář formulářů zobrazuje právě 3 oblasti pokrývající celou plochu formuláře

•	Seznam vlastností má záložky pro pohled jako celek a pro složku, informuje o počtu vybraných složek - podrobnosti Okno Seznam vlastností

•	Vlastnosti složek lze měnit po skupinách

•	Subpohled se v pohledu zobrazuje se svým skutečným obsahem

•	Schránka může obsahovat více než jednu složku, nemaže se při opuštění návrháře,

•	Funkce Paste - Vlepit funguje normálněji: napřed se provede Paste se schránky a pak umístění složky

•	Vypínatelné zobrazování měřítka v cm a/nebo zarovnávací mřížky v pixelech při návrhu pohledu

•	Vypínatelné zarovnávání na mřížku

•	Zobrazování složek na záložkách podle aktivní stránky

•	Přehledový seznam složek pohledu s jejich jménem, číslem, druhem a obsahem (záložka v okně Seznam vlastností)

Uživatelská menu

•	Zcela nový návrhář menu reprezentuje menu v podobě stromu a podporuje Undo - podrobnosti Návrhář menu;

•	Možnost vytváření popup menu (a vyvolat je standardní akcí Nabídnout popup menu, obvykle jako Akce na pravé tlačítko myši)

•	Položky menu a celé větve lze přesouvat na jiné místo, pomocí drag&drop, schránky nebo z klávesnice

•	V položkách menu lze používat obrázky místo textu

•	Stav zatržení/nezatržení lze indikovat také obrázkem v levé části položky menu

•	Lze vytvořit skupiny vzájemně se přepínajících položek menu (radio items)

•	Položky v menu lze vertikálně i horizontálně zalamovat

Editor textů

•	Akce Undo a Redo - podrobnosti;

•	Syntaktické vybarvování textu, respektuje druh textu (například SQL příkazy v programu ve vnitřním jazyce se vybarvují odlišně);

•	V jednom okně lze otevřít řadu editorů přepínatelných záložkami;

•	Editor již není omezen na 64 KB textu;

•	Do textu lze vkládat záložky a přecházet mezi nimi;

•	Režim přepisování nebo vkládání;

•	Řada nových kombinací kláves odpovídajících editačním standardům Windows;

•	Kontextové menu pro nápovědu, vyhledávání, ovládání záložek a bodů zastavení a další funkce;

Ladění programů a aplikací

•	Ladící režim práce se zapíná globálně pro celé vývojové prostředí- podrobnosti;

•	Kusy programu volané z formulářů a menu lze ladit, aniž by byl spuštěn běh programu;

•	Body zastavení lze nastavovat, i když se neladí, editor si trvale pamatuje jejich umístění;

•	Pokud během ladění umístíte kurzor nad proměnnou nebo zvýrazníte výraz, zobrazí se jejich hodnota v bublině (tooltipu);

•	Možnost prohlížení obsahů tabulek a proměnných kurzorů v samostatném okně v ladícím režimu;

•	Plovoucí monitorové okno sledující události na straně klienta;

•	Kombinace kláves více odpovídající standardům Windows;

Server

•	Verze serveru pro LINUX a FreeBSD;

•	Lze ověřit IP spojení mezi klientským a serverovým počítačem - zabudovaný PING;

•	Implicitní hodnota sloupce v tabulce smí být nyní zadána výrazem - tento výraz může například volat funkce uložené na serveru, může využívat sekvence a smí obsahovat subdotazy;

•	SQL procedury uložené na serveru lze ladit podobně, jako programy ve vnitřním jazyce - podrobnosti;

•	SQL příkazy CREATE SCHEMA a DROP SCHEMA - vytváření a rušení aplikace;

•	SQL příkaz ALTER TABLE lze používat nyní volitelně podle normy SQL nebo v původní syntaxi;

•	Rozšířena syntaxe příkazu GRANT a REVOKE pro přidělování práv spouštět uložené  procedury;

•	Nový druh objektů - sekvence - kompatibilní s Oracle – podrobnosti;

•	Nová funkce Client_number pro vrácení unikátního čísla SQL spojení (pouze v SQL);

•	Pomocí funkce Set_sql_option lze nastavit režim práce serveru, v němž po zrušení záznamu se automaticky provede jeho uvolnění;

•	Pomocí funkce Set_transaction_isolation_level lze nastavit z programu stupeň izolace transakce;

0	Funkce jazyka

•	Pomocí funkce Get_logged_user lze zjistit seznam klientů na serveru a jména jejich otevřených aplikací;

•	Pomocí funkce Appl_inst_count lze zjistit počet současně běžících instancí aplikace;

•	Pomocí funkce Set_progress_report_modulus lze určit frekvenci zpráv ze serveru o postupu dlouho trvajících SQL operací;

•	Pomocí funkce Connection_speed_test a z řídicího panelu lze změřit rychlost komunikace klienta se serverem;

•	Pomocí funkce GetSet_fil_blocks lze zjistit či nastavit velikost databázového souboru WB5.FIL (podobně jako GetSet_fil_size);

•	Pomocí funkce Message_to_clients lze rozeslat zprávu všem klientům připojeným k tomuto serveru;

•	Pomocí funkce Used_memory lze zjistit velikost paměti využívané programem;

•	Pomocí funkce Set_appl_starter lze označit objekt aplikace jako startovní objekt;

Návrh uživatelského rozhraní

•	Propojení všech návrhářů umožňující přechod z jednoho návrháře do druhého a návrat;

•	Grafické znázornění uživatelského rozhraní aplikace pomocí Schémat - podrobnosti;

•	Přepracovaný a rozšířený návrhář akcí - podrobnosti;

Funkce pro práci s elektronickou poštou - na klientské i serverové straně

•	InitWBMail - inicializace MAPI pošty

•	CloseWBMail - ukončení práce s poštou

•	MailDial - vytočení čísla telefonního spojení na Internet

•	MailHangUp - ukončení telefonního spojení na Internet

•	LetterCreate - vytvoření dopisu

•	LetterAddAddr - přidání adresáta k zásilce

•	LetterAddFile - přidání souboru k zásilce

•	LetterSend - odeslání dopisu

•	LetterCancel - zrušení neodeslaného dopisu

•	TakeMailToRemOffice - spuštění poštovní brány vzdáleného klienta Mail602

•	MailOpenInBox - otevření poštovní schránky

•	MailBoxLoad - načtení seznamu zásilek ze schránky

•	MailBoxGetMsg - získání textu došlé zásilky

•	MailBoxGetFilInfo - získání informací o připojených souborech k došlé zásilce

•	MailBoxSaveFileAs - uložení k zásilce připojených souborů na disk

•	MailBoxDeleteMsg - vymazání došlé pošty ze schránky

•	MailCloseInBox - uzavření poštovní schránky

•	MailGetInBoxInfo - získání informací o tabulkách použitých pro uložení došlých zásilek

•	MailGetType - získání typu inicializované pošty

Vytváření internetových aplikací

•	Šablony a konektory pro generování dynamických WWW stránek jsou uloženy v databázi;

•	Provoz WWW klienta bez nutnosti konfigurace;

•	Vizuální návrháře konektorů a selektorů včetně průvodce - podrobnosti;

•	Syntaktické vybarvování zdrojového textu WWW objektů

•	Grafické znázornění vztahů mezi WWW objekty;

•	Volání externího HTML editoru z prostředí WinBase602;

•	Průvodci pro vytvoření dynamických WWW stránek;

Ostatní

•	Replikace i pro server pro UNIX a Novell Netware;

•	Nový způsob replikace - bez pošty - pomocí IP protokolu;

•	Programové řízení replikací - pomocí funkce Repl_controla Replicate;

•	Klient dynamicky rozšiřuje svoji pracovní paměť (stejně jako server od verze 5.1);

•	Průvodce vytvářením triggeru;

•	Automatické zálohování dat v určitou dobu;

•	Možnost zobrazení obrázku na pozadí okna aplikace - funkce Background_bitmap;


Kompatibilita verze 6.1
Zpětná kompatibilita verze 6.1

Do WinBase602 6.1 byly pouze přidávány nové rysy, které by neměly ovlivnit chování stávajících aplikací. Ačkoliv v aplikacích spolupracujících s elektronickou poštou doporučujeme nově používání poštovních profilů, jsou všechny dosavadní funkce nadále platné, i když zastaralé.

SQL server je však nyní standardně pouze jednouživatelský, takže kdo využíval dvou licencí zdarma, musí je nyní dokoupit. Přístup z WB Internet Klienta je nyní licencován zvlášť a nepočítají se připojené úlohy.

V této verzi byl pozměněn režim RunTime - nyní se pouze spustí připravená aplikace a po ukončení aplikace se ukončí i klient. Není tedy k dispozici řídicí panel se svými akcemi, monitor apod. Parametry a nastavení se musí upravovat pomocí Personální databáze (Vývojové prostředí).

Drobné změny doznaly dialogy pro nastavení replikací a navazování sdílení, což je věc, kterou běžný uživatel nedělá.


Kompatibilita verze 6.0
Zpětná kompatibilita verze 6.0

WinBase602 6.0 může beze změny využívat databázový soubor z verzí 5.1 a 5.0. Objekty vytvořené nebo modifikované ve verzi 6.0 nejsou použitelné ve starších verzích.

Pro přenos aplikací z verzí starších než 5.0 platí vše, co bylo řečeno pro verzi 5.0.

Aplikace vyvinuté pro starší verze WinBase602 by měly fungovat stejně dobře, jako ve verzi 5.1.

Změny, které se mohou projevit v odladěné aplikaci:

1) Návrhář pohledů nyní důsledněji rozlišuje mezi formuláři pro práci na obrazovce a sestavami pro tisk. Některé sestavy z předchozích verzí může považovat za formuláře. V takovém případě otevřete návrh této sestavy a z menu proveďte příkaz Uložit jako sestavu. Příště se již otevře správný návrhář sestavy.

Pokud jste používali formuláře současně pro zobrazení i pro tisk a měli jste v nich patičky stránek, tyto patičky se nyní zobrazují i při otevření, což asi nebyl původní úmysl. V tomto případě vytvořte kopii formuláře jako sestavu pro tisk a rozlišujte jejich používání.

2) Definice objektů ve verzi 6 jsou uloženy v tabulce objektů a tabulek s informací o datu poslední editace a příslušnosti do složky. Tato informace zaujímá prvních 46 bajtů každé definice (včetně komentářových závorek).

Při běžné práci s objekty nezpozorujete žádnou změnu (ve  vyexportovaných objektech je změna patrná). Pokud vytvoříte (programově) objekt bez této informace, nebude mít (až do příštího uložení) datum poslední změny uvedeno.

Pokud v aplikaci čtete přímo definici objektu z tabulky tabulek nebo objektů a analyzujte jí, musíte počítat s tímto pozměněným začátkem.

3) Vzhledem k drobné změně způsobu přidělování práv anonymnímu uživateli můžete zaznamenat toto chování: Pokud server verze 6.0 spustíte na databázový soubor ze starší verze WinBase602 a do aplikace vytvořené ve starší verzi přidáte nový objekt, nemusí anonymní uživatel automaticky získat k tomuto objektu právo čtení. Pokud toto chování je nežádoucí, obsaďte anonymního uživatele do role Junior_user v této aplikaci.


Novinky verze 5.0
Hlavní novinky ve verzi 5.0

Pro úplnost zde uvádíme veškeré novinky od začátku vývoje 32-bitové verze WinBase602. Novinky uvedené již ve verzi 4.32 jsou označeny hvězdičkou (*).

WinBase602 verze 4.32 byla sestavena na jaře 1996, verze 5.0 na jaře 1997

Instalace a architektura

•	nové prostředí instalace - standardní instalační nástroj InstallShield;

•	dodatečná instalace a změna parametrů pomocí Instalačního panelu;

•	rozšiřování serveru (do počtu klientů) pomocí Add-on licencí;

•	NT server může pracovat jako tzv. služba (angl. service) ve Windows NT;

•	databáze a databázový server se zásadně označují jménem a nikoli cestou ke konfiguračnímu souboru - podrobnosti;

•	manuální zvětšování databázového souboru FIL (dialog Nástroje / Server / Provozní parametry);

•	možnost šifrování obsahu databázového souboru (dialog Nástroje / Server / Bezpečnost);

•	vývojové i provozní prostředí splynuly do jednoho programu;

•	program Berle přesunut na Instalační panel;

•	program Záloha již neexistuje;

•	databázové aplikace lze exportovat spolu s nastavením práv a lze je rozdělit na více disket;

•	lze vytvářet ikony, které spustí libovolný objekt v dané aplikaci, ne pouze startovní objekt - podrobnosti;

Principy

•	třídění podle české normy, včetně sekundární třídicí platnosti znaků;

•	replikace pomocí MAPI;

•	koloběh dokumentů;

•	Internetová strategie - CGI klient, FastCGIklient, ISAPI klient; ActiveX control; napojení na server přes Internet;

Řídicí panel

•	zcela přepracovaný řídicí panel, zobrazení komponent aplikací pomocí stromů objektů - podrobnosti;

•	multiselect objektů na řídicím panelu;

•	nabídka akcí pro objekt(y) pomocí pravého tlačítka myši;

•	návrh částí aplikace pomocí Schémat - podrobnosti;

•	definování Relace jako objektu aplikace - podrobnosti;

•	možnost přejmenování aplikace;

•	kopírování objektů mezi aplikacemi pomocí Drag&Drop;

•	vytváření zástupců objektů (aplikací) na desktopu pomocí Drag&Drop;

•	bublinová nápověda;

Práva

•	zcela přepracovaný systém přidělování práv - podrobnosti;

•	práva přidělovaná záznamům;

•	nový subjekt práva - Role, komponenta aplikace, která se s aplikací přenáší - podrobnosti;

•	export aplikace včetně práv;

•	certifikace, digitální podpisy;

Přenosy dat

•	univerzální nástroj pro přenos dat včetně ODBC zdrojů dat;

•	nové možnosti importu z textového souboru;

Uživatelé

•	nové subjekty práv vzniklé po instalaci: anonymní uživatel, skupina EVERYBODY a skupina DB_ADMIN - podrobnosti;

Práce s pohledy

•	třídění podle sloupců standardního pohledu - první poklepání vzestupně, druhé sestupně;

•	superpohled s dotazovými poli a se standardním subpohledem - setřídění standardního pohledu neovlivní dotaz položený v superpohledu;

•	otevření pohledu s klávesou Ctrl - režim obnovování zrušených záznamů;

•	přibalován grafový server MagicGraf;

Návrhář tabulek

•	změna velikosti i obsahu sloupce typu autorizace - nyní BINARY délky 12 obsahující identifikaci uživatele, ne pouze číslo objektu;

•	nové typy sloupců - Timestamp, Binary, Podpis - podrobnosti;

•	nové příznaky tabulky - podrobnosti;

Návrhář pohledů

•	pro editační a hodnotové složky pohledů lze definovat znakovou masku;

•	nové složky Formátovaný text, Posuvník, Krokovač (i pro čas a datum), Ukazatel postupu;

•	pro složku pohledu lze předepsat, které klávesy sama zpracovává a které předává pohledu; lze předepsat, které tlačítko reaguje na klávesu Enter (angl. Default Push Button);

•	nové složky Podpis, Záložky;

•	nový způsob označování skupiny složek tažením myši;

•	nový způsob vkládání složek s vyznačením velikosti složky myší;

•	nové standardní akce (setřídit podle sloupce, smazat označený záznam, překreslit menu, překreslit pohled aj.);

•	nové vlastnosti složek a pohledů;

•	návrhář pohledů lze vyvolat i z aplikačního programu v provozním prostředí;

Tisky

•	nové dialogy pro nastavení parametrů tisku a formátu stránky;

Štítky

•	možnost označit, od které pozice na archu se bude tisknout;

•	vyznačení netisknutelné plochy v preview;

•	tisk štítků s kopií;

Administrátor

•	příkazy pro administrování přesunuty na řídicí panel (submenu Nástroje / Server);

•	monitor serveru - diagnostický nástroj (dialog Nástroje / Server / Monitor);

•	zabezpečení databáze (dialog Nástroje / Server / Bezpečnost);

Programování

•	dynamicky alokované proměnné, funkce New, Dispose a Addr; typ ukazatel pro přístup k nim;

•	předsunutá deklarace procedur - direktiva Forward;

Nové procedury a funkce

•	funkce Quarter vracející číslo čtvrtletí z datumu;

•	funkce QBE_state, která vrací různé hodnoty podle stavu pohledu při kladení dotazů nebo setřídění.

•	funkce Edit_view pro otevření návrháře pohledů z programu;

•	funkce Move_data pro přenos dat

•	funkce Current_application pro zjištění jména otevřené aplikace;

•	funkce Am_I_db_admin pro zjištění příslušnosti do skupiny správců;

•	funkce Set_timer pro nastavení a spuštění časovače;

•	pomocné funkce pro řízení replikací Is_repl_destin a Token_control

•	funkce pro zjišťování stavu digitálních podpisů Signature_state;

•	funkce GetSet_next_user, Next_user_name a Waits_for_me pro řízení koloběhu dokumentů;

•	funkce Create_user pro vytvoření uživatele;

•	funkce Page_setup pro nastavení formátu stránky;

•	funkce Set_first_label pro nastavení pozice tisku prvního štítku na archu

•	funkce Tab_page, používaná v podmínkách viditelnosti složek v závislosti na vybrané záložce v pohledu;

•	funkce vracející číslo verze WinBase602_version;

•	funkce GetSet_fil_size pro správu velikosti databázového souboru FIL;

•	nová obecná funkce GetSet_privils k zjišťování a nastavování práv - nahrazuje několik funkcí starších;

•	nová obecná funkce GetSet_group_role k zjišťování a zařazování uživatelů do skupin, rolí apod., - nahrazuje několik funkcí starších;

•	funkce pro konverzi z a do typu Timestamp: Timestamp2time, Timestamp2date a Datetime2timestamp

•	funkce pro interaktivní nastavování parametrů pomocí dialogů: Acreate_user, Amodify_user, Aset_password, Atoken_control, Areplikate, Edit_privils, Edit_relation.


Kompatibilita verze 5.0
Zpětná kompatibilita verze 5.0

Naprostá většina aplikací vyvinutých pro verze WinBase602 4.x může beze změny pracovat ve verzi 5.0. Změny rozhraní se týkají pouze několika oblastí:

1) Jméno objektu a jméno sloupce má délku až 31 znaků. Proto pokud aplikace čte z databáze jméno objektu či sloupce, musí pro ně rezervovat řetězec délky 31 znaků. Předává-li se do funkce jméno objektu jako vstupní parametr, lze použít i kratší řetězec, dle skutečné délky jména.

2) Místo uživatele DB_ADMIN je nyní v databázi standardní skupina DB_ADMIN. Proto relace typu Who_am_I="DB_ADMIN" (používané např. jako podmínka viditelnosti) se musí nahradit funkcí Am_I_db_admin.

3) Funkce Set_password nyní umožňuje měnit heslo pouze toho uživatele, který je právě přihlášen. Její první parametr se proto ignoruje.

4) Částečně se změnila struktura systémových tabulek - sloupec APL_NAME v tabulkách OBJTAB nebo TABTAB již neexistuje. O náležení objektů do stejné aplikace lze rozhodovat na základě hodnoty sloupce APL_UUID typu Binary(12). Jméno právě otevřené aplikace vrátí funkce Current_application.

5) Ve verzi 5 byla změněna reprezentace sloupce typu Autorizace. Dřívější způsob, kdy hodnotou tohoto sloupce bylo číslo uživatele z tabulky objektů, nevyhovoval, neboť po přenesení dat do nové databáze došlo ke ztrátě obsahu. Nyní je v sloupce uloženo ID uživatele. Staré hodnoty autorizace nelze do nové verze přenést.

6) Při tisku štítků se nyní posouvá stránka doleva, aby se předešlo přetečení přes pravý okraj u tiskáren s netisknutelnou oblastí papíru. Pokud Vám vyhovuje původní způsob tisku (od hranice netisknutelné oblasti), nastavte přepínač v okně parametrů WinBase602 (menu Nástroje / Parametry - vyberte Pohledy: Kompatibilita tisku) do polohy Kompatibilita se starší verzí.

7) Zástupci spouštějící aplikaci (startovním objektem) musí ve verzi 5.0 mít na příkazové řádce parametr /S. Není-li parametr /S uveden, aplikace se pouze otevře, nikoliv spustí.

Mimo to je při přechodu na verzi 5.0 vhodné zkontrolovat, zda aplikace splňuje požadavky 32-bitových Windows. Tato kontrola je důležitá při přenášení aplikací z 16-bitové WinBase602:

1) Ověřte, zda se pro handle pohledu všude používá typ window_id (ve vnitřním jazyce) resp. HWND (v externích jazycích) a nikoli Short (SmallInt). Typ Short se dal použít v 16-bitových verzích WinBase602.

2) Ověřte, zda v deklaraci externích funkcí ve vnitřním jazyce používáte správné typy parametrů a výsledku.


Novinky verze 5.1
Hlavní novinky ve verzi 5.1

Verze 5.1 přicházející na jaře 1998 přináší zcela nový SQL server v duchu normy SQL 2 a dle posledního návrhu normy SQL 3 / PSM. Oproti tomu změny v klientské části (pokud nesouvisejí s novým serverem) jsou spíše kosmetické.

Obecné změny

•	Nový SQL server podle normy SQL 2 - podrobnosti viz SQL

•	Řídicí panel obsahuje nyní také objekty typu Rutina a Trigger

Zkompaktnění

•	Zkompaktnění tabulky - provede "přeházení a setřesení" záznamů tak, aby v tabulce nebyly zrušené a uvolněné záznamy. Pořadí záznamů nemusí být zachováno. Akce se nesmí provést do tabulky, do níž vedou ukazatele. Akce se provede z řídicího panelu nebo funkcí jazyka.

•	Zkompaktnění databáze - akce projde celý datový soubor WB5.FIL a přemístí bloky dat, aby výsledný soubor byl co nejmenší (při zachování integrity). Akce se provede z řídicího panelu nebo funkcí jazyka.

Export a import uživatelů

•	Byl zaveden hromadný export a import uživatelů a jejich případných klíčů, skupin uživatelů a vztahů "náležení do skupiny". Při vytvoření nového FILu se tak může jednoduše přenést prostředí z FILu starého.

Provoz a instalace serveru

•	Pomocí instalačního panelu serveru lze nastavit nové parametry: umístění souborů JOURNAL.FIL (žurnál aktualizací) a TRANSACT.FIL (transakční soubor) nebo rozdělení datového souboru WB5.FIL na více disků, pokud prostor na jednom disku nestačí.

•	Na instalačním panelu lze zapnout tzv. logování, tj. zápis důležitých informací do souboru na disku. Zapisuje se spouštění a skončení práce, chyby serveru apod.

•	Na instalačním panelu lze zapnout automatické zálohování databázového souboru v dané periodě.

•	Je možné šířit WinBase aplikaci umístěnou včetně dat na CD-ROMu. Rozdělený databázový soubor (druhá část na disku) dovolí k stávajícím neměnným datům na CD dopisovat poznámky, editovat formuláře apod.

Návrhář dotazů

•	Návrhář doznal drobných úprav v souvislosti se širšími možnostmi příkazu SELECT

Nové funkce jazyka WinBase

•	SQL_prepare - příprava SQL příkazu

•	SQL_exec_prepared - vykonání předem připraveného příkazu

•	SQL_drop - zrušení připraveného příkazu

•	Set_SQL_option - nastavení parametrů serveru (kompatibilita s dřívější verzí serveru)

•	Edit_query - zpřístupnění návrháře dotazů z jazyka

•	Edit_impexp - zpřístupnění návrháře přenosu dat z jazyka

•	Compact_table - zkompaktnění tabulky

•	Compact_database - zkompaktnění databáze

•	Current_application - vrátí jméno otevřené aplikace

•	Log_write - zapíše řetězec do okna serveru (a do logu)

ODBC

•	ODBC driver je nezávislý na knihovnách WinBase602. Proto lze používat WinBase602 jako zdroj dat, aniž by adresář WinBase602 byl uveden v proměnné PATH.


Kompatibilita verze 5.1
Zpětná kompatibilita verze 5.1

1. Zpřísnění syntaxe SELECT

V klauzuli ORDER BY se smějí (v souladu s normou) nyní používat pouze jména sloupců z odpovědi na dotaz, tedy to, co je uvedeno za SELECT. Například v dotazu začínajícím:

SELECT a, b+c, SUM(d), e+f AS eplusf, SUM(g) AS sumag ...

lze za ORDER BY uvést: a, EXPR1, SUM1, eplusf, sumag, ale nikoli b, c, e, f nebo jiné sloupce. Toto nově zavedené omezení se může projevit při přenosu aplikace z nižších verzí v případě plnění složek typu combo v pohledech. Dotazy plnící combo směly mít pouze jeden (editovatelné combo) nebo dva (překládané combo) sloupce a třídilo se často podle sloupce jiného. Pohled s takovýmto combem nepůjde ve verzi 5.1 otevřít. Proto byl klient upraven tak, aby v dotazu plnícím combo mohlo být libovolné množství sloupců, tedy i ten, podle něhož se třídí. Jako sloupce významné pro obsah comba pak slouží první (resp. první a druhý) sloupec dotazu.

2. Subřetězce v SELECTu

Ve výrazech použitých v příkazu SELECT nejde již použít zápis např. psc[1] pro získání prvního znaku řetězce (řetězec se chápal jako jednorozměrné pole znaků). Podle normy je nutné použít SQL funkce SUBSTRING.

Příklad: podle prvního znaku sloupce PSČ zjistěte počty záznamů v jednotlivých krajích:

SELECT SUBSTRING(psc FROM 1 FOR 1), COUNT(jmeno)

FROM  Adresy

GROUP BY SUBSTRING(psc FROM 1 FOR 1)

3. OUTER JOIN

Při zápisu podmínek pro OUTER JOIN došlo ke zpřísnění syntaktických pravidel v souladu s normou SQL. Propojovací podmínka joinu dvou tabulek smí obsahovat pouze jména sloupců těchto tabulek.

Nechť například tabulka TabA obsahuje sloupec A1, TabB sloupec B1 a TabC sloupce C1 a C2. Pak nelze psát:

SELECT *

FROM TabA, TabB LEFT OUTER JOIN TabC ON (B1=C1 AND A1=C2)

neboť v propojovací podmínce mezi TabB a TabC nemůže být sloupec z TabA, ale je nutno psát:

SELECT *

FROM TabA, TabB LEFT OUTER JOIN TabC ON (B1=C1)

WHERE A1=C2

4. Kombinování provozu serveru 5.0 a 5.1 nad stejnými daty

Databázový soubor vytvoření serverem 5.0 lze používat serverem 5.1 bez omezení. Obě verze serveru mohou na něm pracovat i střídavě (i když to nedoporučujeme).

Pokud pomocí serveru 5.1 vytvoříte v databázi tabulky které využívají nových rysů verze 5.1 (například volání nových funkcí v integritních omezeních), pak tyto tabulky nebude možno používat při provozu serveru 5.0 nad stejnou databází. Kontrola integrity databáze navíc ukáže tyto tabulky jako "zničené".

Pokud pomocí serveru 5.1 vytvoříte nový databázový soubor, pak na něj nepoužívejte server 5.0. Databázový server 5.1 má totiž zesílená pravidla vnitřní integrity databázového souboru, která server verze 5.0 porušuje.

5. Zpětná kompatibilita SQL

Server 5.1 může pracovat ve dvou režimech - nový režim vyhovující normě SQL2 nebo v drobnostech odlišný režim kompatibilní s verzí SQL ve WinBase 5.0. Podrobnosti o těchto režimech a jejich nastavení viz Kompatibilita SQL. Tato kompatibilita se netýká bodů vyjmenovaných v této stránce nápovědy!


Vývojové prostředí WinBase602

Právě pracujete s programem WB602.EXE, který tvoří klientskou část k WinBase602 SQL serveru. Klientský program umožňuje pracovat s daty uloženými v databázi spravované serverem. Podle způsobu instalace klient umožňuje vytvářet a modifikovat komponenty aplikace (vývojové prostředí, Vývojový klient) nebo toto neumožňuje a slouží pouze ke spouštění aplikace (provozní prostředí, Provozní klient, Runtime). Z prostředí vývojového se také provádějí administrátorské činnosti, které vyžadují připojení na server - položky submenu Nástroje / Server (na rozdíl od parametrů zapisovaných do registrační databáze Windows, které se provádějí samostatným programem Konfigurace WinBase602).

Na tomto místě můžete získat informace o následujících tématech:

 Základní charakteristika a vlastnosti WinBase602

 Řídicí panel aplikace

 Hlavní menu programu

 Lišta řídicího panelu


Ukončení práce s WinBase602

Chcete-li ukončit práci s vývojovým prostředím WinBase602 neboli s programem WB602, pak můžete postupovat kteroukoli z těchto cest:

•	z menu Aplikace vyberte položku Konec;

•	stiskněte kombinaci kláves ALT+F4;

•	zavřete okno WinBase602.

Tento postup způsobí pouze ukončení práce klienta, zatímco databázový server pracuje dále. Výjimkou je případ, kdy klient sám spustí server, na nějž se chce přihlásit. V tomto případě se server ukončí s ukončením klienta.

Pokud běží program ve WinBase602, je nutné nejdříve tento program ukončit způsobem, který určil autor.

Nedoporučujeme zavírat WinBase602 vypnutím počítače!


Jak používat nápovědu?
Jak používat systém nápověd?

WinBase602 je vybavena systémem nápověd, který Vám dovolí průběžně získat informace o prostředí, ve kterém se zrovna nacházíte, a o akcích, které můžete provádět.

Vyvolání nápovědy

Menu Nápověda

Volbou položky Lokální nápověda získáte informace o tom, jaké akce se dají provádět v tom prostředí, v němž právě jste.

Položka Rejstřík otevře rejstřík základních pojmů vývojového prostředí WinBase602.

Tlačítko na liště

Stiskem tohoto tlačítka se otevře stránka nápovědy příslušná k právě nastavenému prostředí.

Klávesa F1

Stiskem klávesy F1 v některých speciálních situacích (např. během návrhu objektů) získáte informace o režimu, v němž pracujete, resp. o poli, v němž je kurzor. během editace textu v editoru vyvoláte nápovědu k objektu, na jehož identifikátoru se právě nachází kurzor. Takto lze získat popisy standardních procedur, funkcí, konstant a typů WinBase602 a vysvětlení ke klíčovým slovům jazyka

Tlačítko Nápověda

V dialogových oknech se nachází tlačítko Nápověda, jehož stisknutím se přenesete přímo na příslušnou stránku v systému nápověd.


SQL ve WinBase602

Popis jazyka je rozdělen do následujících kapitol. V rámci kapitoly se lze posouvat po stránkách pomocí šipek v záhlaví okna helpu.

•	Jazyk SQL

•	Lexikální elementy

•	Datové typy

•	Funkce SQL

•	Dotazy

•	Výrazy

•	Podmínka

•	Příkazy SQL

•	Deklarace

•	Řídící příkazy

•	Rutiny uložené na serveru

•	Triggery

•	Sekvence

•	Kurzory

•	Transakce a body návratu

•	Vlákna  a synchronizace

•	Chyby a výjimky

•	Embedded SQL(vnitřní jazyk)


Jazyk SQL ve WinBase602

Implementovaná verze jazyka SQL vychází z normy SQL 2 (SQL 92), Intermediate level a z návrhu normy SQL 3 / PSM. Případné odlišnosti od této úrovně nebo od normy jsou vždy v textu explicitně uvedeny.

Pojmu schéma odpovídá ve WinBase602 pojem aplikace. Pojem “hodnota NULL” odpovídá pojmu hodnota NONE na klientské straně. Hodnota predikátu UNKNOWN je (v souladu s SQL 3) zaměnitelná s Booleovskou hodnotou NULL. Pojmy “sloupec” a “atribut” jsou zaměnitelné.


Kompatibilita SQL
Kompatibilita s normami SQL a staršími verzemi WinBase602

Starší verze serveru WinBase602 se v řadě případů chovaly odlišně, než předepisují nové normy jazyka SQL. Kupříkladu pokud je při vytváření odpovědi na dotaz požadována typová konverze, kterou nelze provést, starší WinBase602 vracela hodnotu NULL, zatímco dle normy má celá operace skončit neúspěchem.

Aby byla zachována nezměněná funkce starších aplikací a přitom aby bylo možno vytvářet nové aplikace v souladu s normami SQL, umožňuje server WinBase602 nastavit, do jaké míry se má zachovat kompatibilita funkce se staršími verze proti striktnímu dodržení norem. Toto nastavení lze libovolně měnit i za běhu jedné aplikace a pro různé klienty mohou ve stejném okamžiku platit různá nastavení. Změnu nastavení provádí klient voláním API funkce Set_sql_option.


Popis syntaxe SQL
Popis syntaxe jazyka SQL ve WinBase602

Pro zápis syntaxe používáme upravené BNF (Backus Naur Form). Syntaxe je popsána soustavou pravidel, na jejich levé straně stojí neterminál, jehož význam pravidlo definuje pomocí pravé strany. Mezi levou a pravou stranou pravidla je znak ::=.

V pravidlech se neterminály zapisují kurzívou, terminály normálním písmem.

V pravidlech se vyskytují tyto metasymboly (symboly, které nejsou součástí syntaxe, ale umožňují zápis syntaxe):

| 	oddělovač variant

[ ]	závorky vymezující nepovinnou část

{ }	metazávorky (ohraničují určitou část pravidla)

…	symbol označující nula nebo více opakování bezprostředně předcházejícího symbolu (nebo více symbolů v metazávorkách)

Příklad použití zápisu:

příkaz_INSERT ::= INSERT INTO jméno_tabulky [(jméno_sloupce {,jméno_sloupce}… )] obsah

obsah ::= VALUES ( hodnota {, hodnota }… ) | DEFAULT VALUES | dotazový_výraz

Jak číst takovýto zápis:

Příkaz INSERT je definován takto: začíná povinnými terminály (vyhrazenými slovy) INSERT INTO následovanými neterminálem jméno_tabulky. Obsah neterminálu je definován na následujících řádcích nebo v některém předcházejícím zápisu syntaxe nebo je jeho význam zřejmý jako v tomto případě.

Následuje nepovinná část uzavřená do hranatých závorek obsahující jeden nebo více neterminálů jméno_sloupce. Kulaté závorky nepatří mezi metasymboly, jsou tedy součástí příkazu. Složené závorky vymezují část, ke které se vztahuje symbol pro opakování.

Následuje neterminál obsah definovaný na následujícím řádku. Pomocí oddělovačů variant jsou naznačeny tři různé, navzájem se vylučující možnosti syntaxe. První způsob začíná vyhrazeným slovem VALUES a pokračuje výčtem jedné nebo více hodnot v kulatých závorkách, druhý způsob je definován pouze terminály DEFAULT VALUES, třetí způsob odkazuje na neterminál dotazový výraz. Dotazový výraz je jedním z nejdůležitějších pojmů SQL a je na něj odkazováno z mnoha míst, má proto svou vlastní stránku, na níž ukazuje odkaz níže v textu

Nedílnou součástí syntaxe je i popis a konkrétní příklad použití.

V příkladech dodržujeme tuto konvenci: zapisujeme jména tabulek s prvním písmenem velkým, jména sloupců malými písmeny, terminály SQL velkými písmeny. Tato konvence není povinná.


Lexikální elementy SQL
Lexikální elementy

Znaky, vyskytující se v příkazech jazyka SQL, se interpretují dle kódové stránky 1250. Nejnižší úroveň syntaxe tvoří tzv. lexikální elementy.

Lexikálními elementy jsou identifikátory, vyhrazená slova, literály a komentáře.

Literály slouží k zápisu pevně dané hodnoty v textu příkazu SQL. Rozlišujeme je podle typu:

literál ::= číslo | znakový_řetězec | binární_řetězec | zápis_data_a_času

Podrobnosti o jednotlivých typech lexikálních elementů naleznete na následujících stránkách:

•	identifikátory a vyhrazená slova

•	čísla

•	znakové a binární řetězce

•	zápis času a data

•	komentáře


Identifikátory a vyhrazená slova SQL
Identifikátory a vyhrazená slova

Identifikátory začínají písmenem nebo podtržítkem a obsahují písmena, číslice a znak “_” (podtržítko). Přípustná jsou i písmena národní abecedy obsahující diakritické znaky. Počet signifikantních znaků v identifikátorech je 18, proto identifikátory, které se liší až za 18. znakem budou považovány za stejné. V identifikátorech se nerozlišuje mezi velkými a malými písmeny.

Identifikátory se musí lišit od tzv. vyhrazených slov, což je skupina identifikátorů s pevně daným neměnným významem. Vyhrazená slova jsou:

"ADD", "AFTER", "ALL", "ALTER", "AND", "ANY", "AS", "ASC", "AUTHOR", "AUTOR", "AVG", "BEFORE", "BEGIN", "BETWEEN", "BIGINT", "BINARY", "BIPTR", "BIT", "BLOB", "BOOLEAN", "BY", "CALL", "CASCADE", "CASE", "CAST", "CHAR", "CHARACTER", "CHECK", "CLOB", "CLOSE", "COALESCE", "COLLATE", "COMMIT", "CONCAT", "CONDITION", "CONSTANT", "CONSTRAINT", "CONTINUE", "CORRESPONDING", "COUNT", "CREATE", "CROSS", "CURRENT", "CURSOR", "DATE", "DATIM", "DEC", "DECIMAL", "DECLARE", "DEFAULT", "DELETE", "DESC", "DISTINCT", "DIV", "DO", "DOUBLE", "DROP", "ELSE", "ELSEIF", "END", "ESCAPE", "EXCEPT", "EXISTS", "EXIT", "EXTERNAL", "FETCH", "FLOAT", "FOR", "FOREIGN", "FROM", "FULL", "FUNCTION", "GRANT", "GROUP", "HANDLER", "HAVING", "HISTORY", "IF", "IN", "INDEX", "INNER", "INOUT", "INSERT", "INT", "INTEGER", "INTERSECT", "INTO", "IS", "JOIN", "KEY", "LARGE", "LEAVE", "LEFT", "LIKE", "LONG", "LOOP", "MAX", "MIN", "MOD", "NATIONAL", "NATURAL", "NCHAR", "NOT", "NULL", "NULLIF", "NUMERIC", "OBJECT", "OF", "ON", "OPEN", "OR", "ORDER", "OTHERS", "OUT", "OUTER", "POINTER", "PRECISION", "PRIMARY", "PROCEDURE", "PUBLIC", "REAL", "REDO", "REFERENCES", "REFERENCING", "RELEASE", "REPEAT", "RESIGNAL", "RESTRICT", "RETURN", "RETURNS", "REVOKE", "RIGHT", "ROLLBACK", "SAVEPOINT", "SELECT", "SET", "SIGNAL", "SIGNATURE", "SMALLINT", "SOME", "SQLEXCEPTION", "SQLSTATE", "SQLWARNING", "START", "SUM", "TABLE", "THEN", "TIME", "TIMESTAMP", "TO", "TRIGGER", "TUPLE", "UNDO", "UNION", "UNIQUE", "UNTIL", "UPDATABLE", "UPDATE", "USER", "USING", "VALUES", "VARBINARY", "VARCHAR", "VARYING", "VIEW", "WHEN", "WHERE", "WHILE", "WITH".

Řada dalších slov má v SQL předem daný význam, nejsou však vyhrazena, a tudíž je lze volně používat ve funkci identifikátorů.

Lze také zapsat identifikátor, který obsahuje jiné než výše uvedené povolené znaky nebo který se shoduje s vyhrazeným slovem. Takový identifikátor musí být uzavřen do vymezujících znaků, kterými ve WinBase602 jsou obrácené apostrofy. Zápisy `TO JE ONO!` nebo `UPDATE` jsou tedy platnými identifikátory.

Odlišnosti od normy

•	Na rozdíl od SQL 2 se identifikátory, které obsahují nealfanumerické znaky nebo které jsou shodné s některým vyhrazeným slovem, neuzavírají do uvozovek, nýbrž do obrácených apostrofů.


Čísla v SQL
Čísla

Čísla se zapisují obvyklým způsobem. Pokud místo desetinné tečky uvedete znak $ a za nim nejvýše dvě číslice, typ takového čísla bude Money. Zápis reálného čísla může začínat desetinnou tečkou, interpretuje se jako "nula celá ...".

Příklady celých čísel: 0, 123456789, -987654321, +456

Příklady reálných čísel: 123.456, -123.456, 123.456e78, 123.456e-78, 1e12, .555,

Příklady čísel typu Money: 12$70, -57$45, 123456789$00


Znakové a binární řetězce v SQL
Znakové a binární řetězce

Znakové řetězce se zapisují v apostrofech. WinBase602 sice také připouští jejich zápis v uvozovkách, je to však v rozporu s normami SQL. Pokud znakový řetězec má obsahovat znak apostrof, napíše se zdvojeně.

Binární řetězce se zapisují jako znak X a v apostrofech uzavřený výčet jednotlivých bajtů, z nichž každý je zapsán dvěma hexadecimálními číslicemi. Alternativně je lze zapsat jako znak B a v apostrofech uzavřený výčet jednotlivých bajtů, z nichž každý je zapsán osmi číslicemi 0 nebo 1 reprezentujícími bity. Např. zápis X’C105’ označuje binární řetězec skládající se ze dvou bajtů s hodnotami 193 a 5. Jeho alternativní zápis je B’1100000100000101’.

Odchylky od Intermediate level směrem k Full level nebo k SQL 3

•	Binární a hexadecimální řetězce patří do Full level.

Rozšíření jazyka SQL proti normě

•	Znakové a bitové řetězce lze zapisovat nejen v apostrofech, ale i v uvozovkách. Tohoto způsobu zápisu však nedoporučujeme využívat, protože uvozovky mají v normě SQL jiný význam.


Zápis času a data v SQL
Zápis času a data

Hodnoty typu DATE, TIME a TIMESTAMP lze zapisovat až trojím způsobem: dle norem SQL, dle specifikace ODBC a dle konvencí WinBase602. Tabulka shrnuje jednotlivé způsoby zápisu:

	Datum	Čas	Datum s časem
norma SQL	DATE’1962-04-27’	TIME’12:34:56.789’	TIMESTAMP’1962-04-27 12:34:56’
specifikace ODBC	{d ‘1962-04-27’}	{t ’12:34:56.789’}	{ts ’1962-04-27 12:34:56’}
styl WinBase602	27.4.1962	12:34:56.789	27.4.1962 12:34:56

Zápis podle specifikace ODBC ve složených závorkách není chápán jako komentář. Desetinná část sekund v zápisu času se ignoruje.

Použijete-li ' styl WinBase602 ', pak lze z data vypustit rok - doplní se běžný rok.

Odchylky od Intermediate level směrem k Entry level

•	V zápisech data ani času nelze specifikovat časovou zónu

Příklad:

vložení datumu, času a časové značky třemi způsoby:

procedure InsDat();

BEGIN

  INSERT INTO DatCas(dat,cas,datcas)

         VALUES (27.2.1998,12:34:56,27.2.1998 12:34:56);

  INSERT INTO DatCas(dat,cas,datcas)

         VALUES (DATE'1998-02-27',TIME'12:34:56',TIMESTAMP'1998-02-27 12:34:56');

  INSERT INTO DatCas(dat,cas,datcas)

        VALUES ({d'1998-02-27'},{t'12:34:56.789'},{ts'1998-02-27 12:34:56.789'});

END


Komentáře v SQL
Komentáře

Komentáře lze v SQL zapisovat dvojím způsobem. Buď komentář začíná úvodním dvojznakem a končí na konci řádky, nebo začíná otevírací komentářovou závorkou a končí uzavírací komentářovou závorkou.

Úvodním dvojznakem je buď dvojitá pomlčka -- nebo dvojité lomítko //.

Dvojicemi otevírací a uzavírací komentářové závorky mohou být /* a */ nebo { a }.

Zápisy začínající znakem { mají navíc specifický význam definovaný ODBC. Proto doporučujeme se jim ve funkci komentářů vyhýbat.

Rozšíření jazyka SQL proti normě

•	Použití znaků //, { a } pro vymezení komentáře je rozšíření specifické pro WinBase602.


Datové typy v SQL
Datové typy

Datový typ se uvádí v definici sloupce v tabulce, v deklaraci proměnné, v popisu parametrů rutiny nebo hodnoty funkce. Typ určuje, jakých hodnot může proměnná, sloupec atd. nabývat.

typ ::= řetězec_znaků | binární_objekt | řetězec_bitů | přesný_číselný_typ | přibližný_číselný_typ | BOOLEAN | DATE | TIME | TIMESTAMP | specifický_typ_WinBase602

řetězec_znaků ::= CHAR [( délka )] | CHAR VARYING ( délka ) | VARCHAR ( délka ) | NCHAR [( délka )] | NCHAR VARYING ( délka ) | CLOB [( délka )]

binární_objekt ::= BLOB [( délka )]

řetězec_bitů ::= BINARY ( délka ) | VARBINARY ( délka ) | BIT [( délka )] | BIT VARYING ( délka )

přesný_číselný_typ ::= INT | SMALLINT | DEC [( přesnost [, decim ] )] | NUMERIC [( přesnost [, decim ] )]

přibližný_číselný_typ ::= REAL | DOUBLE PRECISION | FLOAT [( přesnost )]

specifický_typ_WinBase602 ::= AUTOR | AUTHOR | DATIM | HISTORY | SIGNATURE | POINTER | BIPTR

Ve výše uvedených pravidlech lze beze změny významu místo INT psát INTEGER, místo DEC psát DECIMAL, místo CHAR psát CHARACTER, místo NCHAR psát NATIONAL CHAR nebo NATIONAL CHARACTER, místo CLOB psát CHAR LARGE OBJECT nebo CHARACTER LARGE OBJECT a místo BLOB psát BINARY LARGE OBJECT.

Kvůli kompatibilitě s ODBC lze místo CLOB psát také LONG VARCHAR a místo BLOB psát LONG VARBINARY, místo BIT VARYING psát VARBINARY a místo INT psát BIGINT.

WinBase602, stejně jako každý systém řízení báze dat, disponuje vlastní množinou “fyzických” datových typů používaných při skutečném uložení dat. Tyto fyzické typy jsou přímo přístupné z vývojových nástrojů WinBase602 a v jejím vnitřním programovacím jazyce.

Jazyk SQL specifikuje množinu “ideálních” typů, které se budou používat v příkazech SQL a které by měly být na serveru reprezentovány fyzickými typy. Níže uvedená tabulka definuje vzájemnou souvislost obou množin typů.

Popis typu v SQL	fyzický typ WinBase602
CHAR, NCHAR	Char
CHAR(n), CHAR VARYING(n), VARCHAR(n), NCHAR(n), NCHAR VARYING(n) pro n<256	String, CSString, CSIString délky n bajtů
CLOB, CLOB(n) nebo CHAR(n), CHAR VARYING(n), VARCHAR(n), NCHAR(n), NCHAR VARYING(n) pro n>=256	Text
BLOB, BLOB(n)	Nospec
VARBINARY(n), BINARY(n) pro n>=256	Raster
BINARY(n) pro n<256	Binary délky n bajtů
BIT, BIT(1), BOOLEAN	Boolean
BIT(n), BIT VARYING(n) pro 1<n<=2048	Binary délky (n-1) / 8 + 1 bajtů
BIT(n), BIT VARYING(n) pro n>2048	Raster
INT	Integer
SMALLINT	Short
DEC(n, 0), NUMERIC(n, 0) pro n <= 4	Short
DEC(n, 0), NUMERIC(n, 0) pro n > 4	Integer
DEC(n, d), NUMERIC(n, d) pro n<=14 a d=2	Money
DEC(n, d), NUMERIC(n, d) pro n>14 nebo d<>2 a d<>0	Real
REAL, DOUBLE PRECISION, FLOAT, FLOAT(n)	Real
DATE	Date
TIME	Time
TIMESTAMP	Timestamp
AUTOR, AUTHOR	Autorizace
DATIM	Datumovka
HISTORY	Historie
SIGNATURE	Podpis
POINTER	Ukazatel
BIPTR	Obousměrný ukazatel

Odchylky od Intermediate level směrem k Entry level

•	Není implementován typ INTERVAL, je však do značné míry nahrazen celočíselným typem INT. Nejsou implementovány typy TIME WITH TIME ZONE a TIMESTAMP WITH TIME ZONE.

•	Typ řetězec znaků nemůže obsahovat specifikaci CHARACTER SET.

Odchylky od Intermediate level směrem k Full level nebo k SQL 3

•	Lze používat také typy BIT a BIT VARYING patřící do Full SQL.

•	Lze používat také typy CLOB, BLOB a BOOLEAN patřící do SQL 3.

Implementací definované vlastnosti SQL ve WinBase602

•	Typ TIME má přesnost jednu tisícinu sekundy, typ TIMESTAMP má přesnost jednu sekundu. V literálech lze čas specifikovat s vyšší přesností, ta se však neuplatní. Typ TIMESTAMP zaznamenává data od 1.1.1900.

•	Typy DECIMAL a NUMERIC smějí mít buď decim 0 nebo decim rovno 2 a přesnost nejvýše 14. Je-li zadána hodnota jiná, jsou tyto typy automaticky nahrazeny datovým typem DOUBLE PRECISION. Je-li decim vypuštěno, použije se hodnota 0.

•	Typ INT má rozsah -2147483648 až +2147483648, typ SMALLINT má rozsah -32768 až 32768.

•	Typy REAL, FLOAT a DOUBLE PRECISION mají stejnou přesnost cca 15 míst a rozsah 1e308 až 1e-308. Hodnota případného parametru přesnost se ignoruje.

•	U typů, které se zobrazí na fyzické typy Text, Raster nebo Nospec, nehraje konkrétní hodnota délky uvedené v popisu typu žádnou roli. Maximální délka těchto objektů činí 16 760 832 bajtů.

Ještě jednou shrnutí používaných typů

Typ ve WinBase602	Typ SQL
Boolean	BOOLEAN
Short	SMALLINT
Integer	INT
Money	NUMERIC(14,2)
Real	REAL
Date	DATE
Time	TIME
Timestamp	TIMESTAMP
Text	CLOB
Raster	VARBINARY


Funkce v SQL
Funkce

funkce ::= 	SQL_funkce	|

funkce_WinBase602 |

funkce_uložené na serveru	|

funkce_z_externích_DLL

Ve WinBase602 lze v jazyce SQL používat funkce patřící do čtyř skupin:

•	standardní funkce definované normou SQL - seznam

•	standardní funkce vnitřního programovacího jazyka WinBase602 - seznam;

•	uživatelem definované funkce zapsané v jazyce SQL uložené na serveru - popis ;

•	uživatelem definované funkce umístěné v externích knihovnách DLL - popis.

Funkce z první a druhé skupiny se částečně překrývají, neboť vnitřní funkce WinBase602 byly navrženy v době, kdy jazyk SQL nebyl v potřebné míře normován.

Z prostředí jazyka SQL nelze volat uživatelem definované funkce zapsané ve vnitřním programovacím jazyce klienta WinBase602.


Funkce jazyka WinBase602 v SQL
Standardní funkce vnitřního jazyka WinBase602

Všechny funkce, které bylo možno volat v SQL ve starších verzích WinBase602, zůstaly zachovány, i přesto, že jsou v SQL nahrazeny jinými funkcemi definovanými normou SQL (například funkci Strpos lze nahradit funkce POSITION).

Jedná se o:

•	Konverzní funkce (převody na řetězec umožňují formátovat výstup, CAST nikoliv):

Str2int, Str2money, Str2real, Str2date, Str2time, Str2timestamp, Int2str, Money2str, Real2str, Date2str, Time2str, Timestamp2str, Datetime2timestamp, Timestamp2date, Timestamp2time, Ord, Chr,

•	Matematické funkce:

Odd, Abs, Round, Trunc,

•	Funkce pro práci s datem a časem:

Make_date, Day, Month, Quarter, Year, Today, Day_of_week, Make_time, Hours, Minutes, Seconds, Sec1000, Now,

•	Řetězcové funkce

Pref, Substr, Strcat, Strinsert, Strdelete, Strcopy, Strpos, Strlength, Strtrim,

•	Poštovní funkce a procedury - podrobnosti.

InitWBMail, CloseWBMail, MailDial, MailHangUp, LetterCreate, LetterAddAddr, LetterAddFile, LetterSend, LetterCancel, TakeMailToRemOffice, MailOpenInBox, MailBoxLoad, MailBoxGetMsg, MailBoxGetFilInfo, MailBoxSaveFileAs, MailBoxDeleteMsg, MailCloseInBox, MailGetInBoxInfo, MailGetType,

•	Synchronizace vláken

Create_semaphore, Close_semaphore, Release_semaphore, Wait_for_semaphore,

•	Ostatní funkce:

WinBase602_version, Waits_for_me, Who_am_I, Current_application, Client_number, Sleep,

Tyto funkce nemají žádné vedlejší efekty na hodnoty svých argumentů. Funkce Strinsert nebo Strdelete tedy vracejí výslednou hodnotu, ale nemění řetězec předaný jako jejich argument (na rozdíl od volání stejných funkcí ve vnitřním programovacím jazyce klienta WinBase602).

Na serveru je také použitelná procedura Free_deleted a procedura Log_write (jakožto procedury nutno volat pomocí CALL (CALL Free_deleted("MY_TABLE"))

Nastavit parametry SQL serveru lze pomocí procedury Set_sql_option.


Funkce SQL
Funkce definované normou SQL

Lze volat následující funkce:

•	POSITION - hledá subřetězec v řetězci nebo textu

•	CHAR_LENGTH, OCTET_LENGTH, BIT_LENGTH - vracejí délku řetězce

•	EXTRACT - vrací složku data nebo času

•	SUBSTRING - vybírá podřetězec z řetězce nebo textu

•	UPPER, LOWER - provádějí konverzi znakového řetězce nebo textu na velká resp. malá písmena

•	CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP - vrací momentální datum a čas

•	NULLIF - porovnává hodnoty výrazů

•	COALESCE - vrací hodnotu prvního výrazu, který nemá hodnotu NULL

•	CAST - přetypovává argument

•	Agregační funkce - funkce AVG, SUM, MIN, MAX a COUNT, počítají hodnoty nad množinou záznamů


Funkce POSITION (SQL)
Funkce POSITION

POSITION(str IN str2)

Funkce hledá řetězec nebo text str v řetězci nebo textu str2. Funkce vrací nulu, pokud řetězec nenašla, nebo první pozici, v níž se str v str2 nachází, počítáno od jedné.

Je-li str prázdný řetězec, funkce vrací 1, je-li str2 prázdný řetězec, funkce vrací 0.

Při hledání v řetězci se hledá bez ohledu na velikost písmen, pokud str2 je typu CSIString. Při hledání řetězce v textu se hledá bez ohledu na velikost písmen, pokud str je typu CSIString. Druh řetězce lze zadat pomocí klíčového slova COLLATE.

Odchylky od Intermediate level směrem k Full level nebo k SQL 3

•	Tato funkce patří do Full SQL2.

Odlišnosti od normy

•	Ve WinBase602 není v typech řetězec a text rozdílu mezi prázdnou hodnotou a hodnotou NULL. Proto je-li první argument funkce POSITION NULL, funkce vrací 1, je-li druhý argument NULL, funkce vrací 0.

Příklad použití:

funkce, která vrátí první mezeru v parametru

FUNCTION PRVNIMEZERA (strpar CHAR (100) COLLATE CSISTRING)

  RETURNS INT;

BEGIN

  RETURN (POSITION(" " IN strpar));

END


Funkce pro délku řetězce (SQL)
Funkce pro délku řetězce

CHAR_LENGTH(arg)

OCTET_LENGTH(arg)

BIT_LENGTH(arg)

Funkce CHAR_LENGTH, OCTET_LENGTH a BIT_LENGTH vracejí délku argumentu. Argument musí být typu řetězec znaků, řetězec bitů nebo binární objekt. První dvě funkce vracejí délku v bajtech, třetí v bitech. Praktický význam má pouze funkce CHAR_LENGTH.

Implementací definované vlastnosti SQL ve WinBase602

•	Tyto funkce použité na argument fyzického typu Binary vracejí plnou délku argumentu, bez ohledu na jeho hodnotu. Na fyzickém typu Boolean vracejí 1. Na typech řetězec znaků vracejí aktuální délku řetězce. Na fyzických typech proměnné velikosti vracejí aktuální délku hodnoty.

Odlišnosti od normy

•	Ve WinBase602 není v typech řetězec a text rozdílu mezi prázdnou hodnotou a hodnotou NULL. Je-li argumentem řetězec nebo text s hodnotou NULL, je výsledek 0.

Příklad použití:

funkce, která vrátí délku (počet znaků) parametru

FUNCTION DELKACHAR (strpar CHAR (100))

  RETURNS INT;

BEGIN

  RETURN (CHAR_LENGTH(strpar));

END


Funkce EXTRACT (SQL)
Funkce EXTRACT

EXTRACT ( { DAY | MONTH | YEAR | HOUR | MINUTE | SECOND } FROM arg )

Funkce vrací zadanou složku data nebo času specifikovaného výrazem arg. Arg musí být typu DATE, TIME nebo TIMESTAMP. Pokud arg má hodnotu NULL, funkce vrací NULL.

Funkce EXTRACT vrací celočíselnou hodnotu kromě případu EXTRACT(SECOND FROM arg), kdy vrací reálnou hodnotu s třemi desetinnými místy (tisíciny vteřiny). Nelze extrahovat údaj o časové zóně. Při extrahování neexistujícího údaje (např. MINUTE z typu DATE) funkce vrací hodnotu 0. Dny a měsíce se počítají od 1.

Funkce se částečně překrývá se standardními funkcemi jazyka WinBase602, např. Month, Year, Hours, apod.

Příklad:

dotaz, který spočítá součty po měsících

SELECT Firmy.nazev, EXTRACT( MONTH FROM dat1) AS MĚSÍC, Sum(Faktury.castka) AS SUMA_KČ

FROM Fakturyy

WHERE Faktury.Firma=Firmy.Cislo

GROUP BY Firmy.nazev, EXTRACT( MONTH FROM dat1)


Funkce SUBSTRING (SQL)
Funkce SUBSTRING

SUBSTRING ( str FROM start [ FOR délka ] )

Funkce SUBSTRING vybírá podřetězec z řetězce nebo textu str. Podřetězec začíná od pozice start a sahá nevýše do konce argumentu str. Je-li uvedena délka, pak výsledný řetězec není delší než tato délka.

Parametry start a délka musí být celočíselné. Pozice v řetězci se číslují od 1. Je-li některý argument NULL, pak výsledek je NULL.

Typ hodnoty funkce je stejný jako typ argumentu.

Příklad použití:

Test, začíná-li proměnná na znak X

IF SUBSTRING(Polozka FROM 1 FOR 1) = "X" THEN

    UPDATE  SET cena = cena*1.1 WHERE CURRENT OF curcen;


Znakové konverzní funkce UPPER a LOWER (SQL)
Znakové konverzní funkce UPPER a LOWER

UPPER(str)

LOWER(str)

Funkce UPPER a LOWER provádějí konverzi znakového řetězce nebo textu str na velká resp. malá písmena. Konvertují i česká písmena s diakritikou. Hodnota funkce je stejného typu jako str.

Odchylky od Intermediate level směrem k Full level nebo k SQL 3

•	Tyto funkce patří do Full SQL 2.

Příklad použití:

Trigger zajistí, že při vkládání záznamu do tabulky Firmy bude sloupec nazev zapsán velkými písmeny

TRIGGER VelkaPismena AFTER INSERT ON Firmy

REFERENCING NEW ROW AS novaradka

FOR EACH ROW

BEGIN

 SET novaradka.nazev=UPPER(novaradka.nazev);

END


Funkce vracející momentální čas a datum (SQL)
Funkce vracející momentální čas a datum

CURRENT_DATE

CURRENT_TIME

CURRENT_TIMESTAMP

Tyto funkce vracejí datum resp. čas resp. datum s časem platné v okamžiku jejich zavolání.

Příklad použití:

V návrhu tabulky se použijí tyto funkce jako implicitní hodnoty:

CREATE TABLE `Tabpokus` (

cislo SMALLINT ,

dat DATE DEFAULT CURRENT_DATE ,

cas TIME DEFAULT CURRENT_TIME ,

datcas TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,

CONSTRAINT `INDEX1` PRIMARY KEY (`cislo`))


Funkce NULLIF (SQL)
Funkce NULLIF

NULLIF ( výraz1, výraz2 )

Funkce NULLIF vrací hodnotu NULL pokud se hodnoty obou výrazů rovnají, jinak vrací hodnotu prvního výrazu. Výraz1 a výraz2 musí být takových typů, aby je bylo možno porovnat.

Jedná se v podstatě o zjednodušení zápisu využívajícího podmíněný výraz CASE:

CASE

  WHEN výraz1=výraz2 THEN NULL

  ELSE výraz1

END

Poznámka: Jeden z důvodů zavedení je historický - pokud starší databáze neměly zavedenu hodnotu NULL, musely tuto hodnotu reprezentovat jiným způsobem (např. -1 pro plat apod.). Při přechodu na SQL, které vyžaduje hodnotu NULL, se tyto hodnoty musí transformovat, např. pomocí funkce NULLIF:

... NULLIF(plat, -1) ...


Funkce COALESCE (SQL)
Funkce COALESCE

COALESCE ( výraz {, výraz }… )

Funkce COALESCE vrací hodnotu prvního výrazu, který nemá hodnotu NULL. Pokud všechny výrazy mají hodnotu NULL, funkce vrací NULL. Výrazy musí být takových typů, aby je bylo možno porovnat.

Příklad použití:

Ve výsledku vnějšího propojení nahradit prázdnou hodnotu konstantou nula

SELECT Firmy.nazev,COALESCE(SUM(Faktury.cena),0)

FROM Firmy LEFT OUTER JOIN Faktury ON (Firmy.cislo=Faktury.firma)

GROUP BY Firmy.nazev


Funkce CAST (SQL)
Funkce CAST

Funkce CAST provádí typovou konverzi argumentu arg na zadaný typ.

CAST (arg AS typ)

Při provádění funkce může dojít k chybám trojího druhu:

•	pokud se konvertuje řetězec znaků na jiný typ a hodnota řetězce znaků nereprezentuje hodnotu cílového typu, pak nastane chybový sqlstate 22018;

•	pokud se konvertuje na číselný typ a výsledná hodnota se v tomto typu nedá zobrazit (je příliš velká nebo příliš malá), pak nastane chybový sqlstate 22003;

•	pokud se konvertuje na znakový řetězec stanovené délky a převedená hodnota je delší, pak nastane chybový sqlstate 22001.

Těmto chybám lze zabránit nastavením vhodných voleb. Jsou-li tyto volby zapnuty, pak v prvních dvou případech je výsledkem hodnota NULL, ve třetím případě je řetězec seříznut zprava.

Odlišnosti od normy

•	Převody binárních typů nejsou implementovány.

Příklad použití:

Přetypování výrazu z Money na Integer

SELECT Firmy.firma,CAST(SUM(Objednavky.objednavka) AS INT)

FROM Firmy, Objednavky

WHERE Objednavky.firma=Firmy.firma

GROUP BY Firmy.firma


Agregační funkce (SQL)
Agregační funkce

agregační_funkce ::= { COUNT | SUM | AVG | MIN | MAX } ([ ALL | DISTINCT ] výraz) | COUNT(*)

Agregační funkce počítají nad množinou hodnot výrazu v odpovědi na dotaz počet hodnot (COUNT), součet (SUM), průměr (AVG), minimum (MIN) a maximum (MAX). Výpočet se provádí buď nad všemi záznamy v odpovědi na dotaz (pokud dotaz neobsahuje GROUP BY) nebo nad každou skupinou určenou GROUP BY. Argumentem těchto funkcí může být libovolný výraz neobsahující jinou agregační funkci - hodnota funkce se počítá z těch hodnot argumentů, které jsou různé od NULL. Pro funkce SUM a AVG argument musí být číselného typu, pro funkce MAX a MIN buď číselného typu nebo některého z typů typu DATE, TIME, TIMESTAMP, BOOLEAN a řetězec znaků.

Mimo to argumentem funkce COUNT smí být také znak *, v takovém případě funkce vrací počet všech hodnot, včetně těch, které se rovnají NULL.

Pokud se před argumentem funkce uvede DISTINCT, uvažují se pouze různé hodnoty argumentů (u funkcí MAX a MIN to nemá žádný význam), pokud se uvede ALL nebo se neuvede nic, uvažují se všechny hodnoty.

Agregační funkce se v dotazech používají v klauzuli SELECT nebo HAVING. Nelze je používat v klauzulích WHERE nebo GROUP BY. V klauzuli ORDER BY je nutno je nahradit jménem výsledného sloupce, které lze specifikovat pomocí AS v klauzuli SELECT.

Pokud funkce pracují nad prázdnou množinou hodnot, pak COUNT vrací 0 a ostatní funkce vracejí NULL.

Odchylky od Intermediate level směrem k Full level nebo k SQL 3

•	V argumentech agregačních funkcí lze používat DISTINCT s výrazem.

•	V argumentech agregačních funkcí lze používat odkazy na sloupce, které obsahují výsledky agregačních funkcí.

Odchylky od Intermediate level směrem k Entry level

•	Agregační funkce nelze používat na sloupce proměnné velikosti (typu CLOB a BLOB);

Implementací definované vlastnosti SQL ve WinBase602

•	Výsledek agregační funkce COUNT je typu Integer, výsledek ostatních funkcí je stejného typu jako argument s touto výjimkou: pro funkce AVG a SUM a argument typu Short je výsledek typu Integer. Proto například výpočet reálného průměru celých čísel vyžaduje konverzi argumentu na typu Real, například takto AVG(I + 0.0).

Příklad použití:

Vybrat faktury s hodnotou rovné minimální

SELECT *

FROM Faktury

WHERE castka = (SELECT MIN(castka) FROM faktury)

Vybrat firmy, které mají faktury za více než 10000 (tento dotaz lze zapsat efektivněji s využitím klauzule HAVING):

SELECT A.nazev

FROM Firmy A

WHERE 10000 < (SELECT SUM(B.castka)

              FROM Faktury B

              WHERE A.cislo=B.firma)


Výrazy v SQL
Výrazy

výraz ::= 	literál	|

název_sloupce	|

konstanty	|

podmíněný_výraz	|

aritmetický_výraz	|

výraz_nad_řetězci	|

výraz_nad_datem_a_časem	|

podmínka	|

volání_funkce	|

proměnná_serveru	|

proměnná_klienta	|

dynamický_parametr

Dynamické parametry se využívají pouze při přístupu přes ODBC.

Podrobnosti o výrazech a jejich prvcích můžete nalézt na těchto stránkách:

•	literály

•	název sloupce

•	podmíněný výraz CASE

•	aritmetické výrazy

•	výrazy nad znakovými a binárními řetězci

•	výrazy nad datem a časem

•	podmínky

•	rutiny uložené na serveru

•	deklarace proměnných serveru

•	proměnné klienta


Názvy sloupců tabulek v SQL
Názvy sloupců tabulek

název_sloupce ::= [ jméno_tabulky. ]jméno_sloupce

Popis:

Jméno sloupce je možno (a případě, kdy může dojít k záměně nutno) prefixovat jménem tabulky, resp. zástupným jménem (aliasem) tabulky.

Rozšíření jazyka SQL proti normě

•	Za multiatributem lze uvést v hranatých závorkách výraz určující složku multiatributu; pokud tato složka neexistuje, hodnota je NULL. Za multiatributem lze také uvést znak # označující počet složek multiatributu. Za sloupcem proměnné velikosti lze uvést znak # označující délku hodnoty (počet bajtů) tohoto sloupce. Za sloupcem typu Text lze uvést v hranatých závorkách dva výrazy oddělené čárkou a tím vybrat z něj subřetězec začínající v pozici udané prvním výrazem a délky udané druhým. Typ takového zápisu je řetězec délky nejvýše 255 znaků.

Příklad použití v dotazu:

SELECT A.nazev

FROM Firmy A

WHERE 10000 < (SELECT SUM(B.castka)

              FROM FAKTURY B

              WHERE A.cislo=B.firma)


Podmíněný výraz CASE (SQL)
Podmíněný výraz CASE

výraz_CASE ::= jednoduchý_CASE | podmínkový_CASE

jednoduchý_CASE ::= CASE výraz1 { WHEN výraz2 THEN výraz3 }… [ ELSE výraz4 ] END

podmínkový_CASE ::= CASE { WHEN podmínka THEN výraz3 }… [ ELSE výraz4 ] END

Výraz CASE slouží k výběru hodnoty jednoho z výrazů na základě udaných podmínek. V jednoduchém CASE se zleva doprava hledá větev WHEN, v níž výraz2 má stejnou hodnotu jako výraz1. V podmínkovém CASE se zleva doprava hledá větev WHEN, v níž je podmínka splněná. Je-li nalezena vyhovující větev, pak hodnotou výrazu CASE se stane hodnota výrazu3 v této větvi. Pokud žádná větev nevyhoví, je hodnotou výrazu CASE hodnota výrazu4, a není-li výraz4 uveden, pak NULL.

Všechny výrazy2 musí být takového typu, aby byly porovnatelné s výrazem1. Všechny výrazy3 a výraz4 musí být převeditelné na společný typ.

Příklad použití:

SELECT Zakaznici.jmeno, CASE

                          WHEN SUM(Vypujcky.cena) IS NULL THEN 0

                          ELSE SUM(Vypujcky.cena)

                        END

FROM Zakaznici LEFT OUTER JOIN Vypujcky ON (Zakaznici.rod_cis=Vypujcky. rod_cis)

GROUP BY Zakaznici.jmeno

Poznámka:

Stejný příklad lze vyřešit elegantněji pomocí funkce COALESCE

Příklad použití:

...

CASE

  WHEN n <> 0 THEN x/n

  ELSE 0

END

...

Příklad použití jednoduchého CASE:

SELECT jmeno, vek, CASE pohlavi

                     WHEN 1 THEN "muž"

                     WHEN 2 THEN "žena"

                     ELSE "neurčeno"

                   END,

       adresa

FROM Lidi


Aritmetické výrazy (SQL)
Aritmetické výrazy

V aritmetických výrazech lze používat binární operátor + pro sčítání, - pro odečítání, * pro násobení, / pro dělení, DIV pro celočíselné dělení a MOD pro zbytek po celočíselném dělení. Lze také používat unární minus - pro obrácenou hodnotu.

Pro porovnání numerických hodnot slouží operátory >, <, =, <=, >= a <>.

Při vyhodnocování výrazů dochází k implicitním konverzím typů operandů v rámci numerických typů. Konverze probíhá vždy na typ s vyšším rozsahem, tedy postupně SMALLINT na INTEGER na DECIMAL na REAL.

Rozšíření jazyka SQL proti normě

•	Operátory DIV a MOD jsou specifické pro WinBase602.


Výrazy nad znakovými a binárními řetězci v SQL
Výrazy nad znakovými a binárními řetězci

Znakové řetězce lze spojovat operátorem zřetězení ||. Délka řetězce není omezena jako ve vnitřním jazyce na 255 znaků.

Pro porovnání hodnot znakových nebo binárních řetězců slouží operátory >, <, =, =<, => a <>.

Znakové řetězce různých typů lze v operacích mezi sebou libovolně kombinovat.

Odchylky od Intermediate level směrem k Entry level

•	Operátor zřetězení nelze použít na binární řetězce.

Implementací definované vlastnosti SQL ve WinBase602

•	Operace nad dvojicemi řetězců se provádějí tak, že je-li některý operand typu CSString, pak se pracuje jako s operandy typu CSString, jinak je-li některý operand typu CSIString, pak se pracuje jako s operandy typu CSIString, jinak se pracuje jako s operandy typu String. Toto pravidlo ovlivňuje typ výsledku zřetězení a způsob vyhodnocení predikátu LIKE.


Výrazy nad datem a časem v SQL
Výrazy nad datem a časem

K hodnotám typu DATE, TIME a TIMESTAMP lze přičítat a odečítat celé číslo ve významu intervalu, lze také počítat rozdíl dvou hodnot těchto stejných typů a obdržet celé číslo.

Interval pro typ DATE vyjadřuje počet dnů, pro typ TIME počet tisícin sekundy a pro typ TIMESTAMP počet sekund. Proto například interval získaný jako rozdíl dvou hodnot typu TIME je nutno před přičtením k hodnotě typu TIMESTAMP vydělit tisícem.

Odlišnosti od normy

•	Použití celočíselného typu místo typu zvláštního typu INTERVAL je specifické pro WinBase602.

Příklad použití:

Vybrat faktury za posledních deset dní, použita funkce CURRENT_DATE pro získání dnešního data

SELECT cislo,dat1

FROM Faktury

WHERE dat1 BETWEEN CURRENT_DATE-10 AND CURRENT_DATE


Podmínka v SQL
Podmínka

podmínka ::= booleovský_faktor { OR booleovský_faktor }…

booleovský_faktor ::= booleovský_term { AND booleovský_term }…

booleovský_term ::= [ NOT ] predikát

predikát ::= výraz relační_operátor výraz

| predikát_IS

| zobecněné_porovnání

| predikát_BETWEEN

| predikát_IN

| predikát_EXISTS

| predikát_UNIQUE

| predikát_LIKE

| predikát_IS_NULL

| ( podmínka )

relační_operátor ::= > | < | <= | >= | = | <>

predikát_IS ::= výraz IS [NOT] { TRUE | FALSE | UNKNOWN }

Popis:

Podmínka se používá při vyhodnocování podmíněného výrazu CASE, klauzule WHERE a klauzule HAVING specifikace dotazu, klauzule CHECK v návrhu tabulky nebo specifikace JOINu, v příkazech UPDATE a DELETE, v definici triggeru nebo při vyhodnocení řídicích příkazů IF, CASE, WHILE a REPEAT.

Priorita operátorů v podmínkách je následující:

1. *,/,DIV a MOD pro násobení, dělení, celočíselné dělení a zbytek po dělení;

2. unární - , binární + a - pro sčítání a odečítání;

3. relační operátory <,>,=,>=,<=,<>,.=,.=.,~ a predikáty (BETWEEN, LIKE apod.);

4. negace NOT;

5. spojka AND;

5. spojka OR.

Podmínka může nabývat tří hodnot: TRUE, FALSE nebo UNKNOWN. Hodnota UNKNOWN je ekvivalentní hodnotě NULL.

Operátor OR provádí disjunkci pravdivostních hodnot. Jeho výsledek je TRUE, pokud alespoň jeden operand má hodnotu TRUE, výsledek je FALSE, pokud oba operandy jsou FALSE, jinak je výsledek UNKNOWN.

Operátor AND provádí konjunkci pravdivostních hodnot. Jeho výsledek je TRUE, pokud oba operandy mají hodnotu TRUE, výsledek je FALSE, pokud alespoň jeden operand je FALSE, jinak je výsledek UNKNOWN.

Operátor NOT provádí negaci pravdivostních hodnot, negace TRUE je FALSE, negace FALSE je TRUE, negace UNKNOWN je UNKNOWN.

Tabulka pravdivostních hodnot v tříhodnotové logice

A	b	a AND b	a OR b	NOT a
TRUE	TRUE	TRUE	TRUE	FALSE
TRUE	FALSE	FALSE	TRUE	FALSE
TRUE	UNKNOWN	UNKNOWN	TRUE	FALSE
FALSE	TRUE	FALSE	TRUE	TRUE
FALSE	FALSE	FALSE	FALSE	TRUE
FALSE	UNKNOWN	FALSE	UNKNOWN	TRUE
UNKNOWN	TRUE	UNKNOWN	TRUE	UNKNOWN
UNKNOWN	FALSE	FALSE	UNKNOWN	UNKNOWN
UNKNOWN	UNKNOWN	UNKNOWN	UNKNOWN	UNKNOWN

Porovnání hodnot dvou výrazů pomocí relačních operátorů předpokládá, že oba výrazy jsou číselného typu, typu znakový řetězec, typu binární řetězec nebo typu DATE, TIME nebo TIMESTAMP.

Predikát IS předpokládá, že v něm obsažený výraz je booleovského typu, a porovnává jej s booleovskou konstantou. WinBase602 umožňuje použít v této funkci i relační operátory.

Popis dalších typů predikátů je na následujících stránkách:

•	zobecněné porovnávání (ANY, SOME, ALL)

•	predikát BETWEEN

•	predikát IN

•	predikát EXISTS

•	predikát UNIQUE

•	predikát LIKE

•	predikát IS NULL

Odchylky od Intermediate level směrem k Full level nebo k SQL 3

•	Predikát IS patří do Full level. Některé varianty použití booleovských operátorů patří do SQL 3.

Odchylky od Intermediate level směrem k Entry level

•	Není implementován predikát OVERLAPS pro překrytí intervalů.


Zobecněné porovnávání v SQL
Zobecněné porovnávání

zobecněné_porovnání ::= výraz  relační_operátor kvantifikátor ( dotazový_výraz )

relační_operátor ::= < | > | = | <= | >= | <>

kvantifikátor  ::= SOME | ANY | ALL

Zobecněné porovnání porovnává hodnotu výrazu s množinou hodnot získanou jako odpověď na dotazový výraz (subdotaz).

Pokud kvantifikátor je SOME nebo ANY, pak zobecněné porovnání má hodnotu TRUE, když relace vyjádřena relačním operátorem platí pro alespoň jednu hodnotu z odpovědi na subdotaz, má hodnotu UNKNOWN, když relace je UNKNOWN pro alespoň jednu hodnotu z odpovědi na subdotaz, jinak má hodnotu FALSE.

Pokud kvantifikátor je ALL, pak zobecněné porovnání má hodnotu TRUE, když relace platí pro všechny hodnoty z odpovědi na subdotaz, má hodnotu UNKNOWN, když relace platí nebo je UNKNOWN pro všechny hodnoty z odpovědi na subdotaz, jinak má hodnotu FALSE.

Z toho vyplývá, že je-li odpověď na subdotaz prázdná, pak zobecněné porovnání má pro kvantifikátor SOME nebo ANY hodnotu FALSE, pro kvantifikátor ALL hodnotu TRUE.

Odpověď na subdotaz musí být skalární a její typ musí být porovnatelný s typem výrazu.

Identifikátory ANY a SOME jsou zcela ekvivalentní. Zápis =ANY je ekvivalentní s predikátem IN

Příklad použití:

Vybrat ty zaměstnance, kteří mají plat větší než všichni zaměstnanci z Prahy

SELECT TAB1.jmeno,TAB1.plat

FROM Lidi TAB1

WHERE plat > ALL (SELECT plat

                  FROM Lidi

                  WHERE adresa LIKE "%Praha%")


Predikát BETWEEN (SQL)
Predikát BETWEEN

predikát_BETWEEN ::= výraz [ NOT ] BETWEEN výraz2 AND výraz3

Predikát BETWEEN říká, zda hodnota výrazu je mezi hodnotou výrazu2 a výrazu3. Typy všech výrazů musí být porovnatelné.

Jedná se o zjednodušený zápis podmínky (výraz >= výraz2) AND (výraz =< výraz3).

Příklad použití:

SELECT *

FROM Lidi

WHERE dat_nastupu BETWEEN 1.1.1997 AND 31.12.1997


Predikát IN (SQL)
Predikát IN

predikát_IN ::= výraz1 [NOT] IN {( výraz { , výraz }… ) | ( dotazový_výraz )}

Predikát IN říká, zda hodnota výrazu1 je mezi hodnotami uvedených výrazů nebo mezi hodnotami v odpovědi na dotazový výraz (subdotaz).

Odpověď na dotazový výraz musí být skalární. Typ odpovědi na subdotaz a typy všech výrazů musí být porovnatelné s typem výrazu1.

Příklad použití (výčet hodnot):

Vybrat faktury z lichých měsíců:

SELECT *

FROM Faktury

WHERE Month(dat1) IN (1,3,5,7,9,11)

Příklad použití (subdotaz):

Vyberte faktury, které patří firmám z Prahy

SELECT Faktury.cislo,Faktury.firma

FROM Faktury

WHERE firma IN (SELECT cislo

                FROM Firmy

                WHERE mesto LIKE "Praha%")

Stejný výsledek lze dostat pomocí JOINu

SELECT DISTINCT Faktury.cislo, Faktury.firma

FROM Faktury, Firmy

WHERE Firmy.cislo=Faktury.firma

 AND (Firmy.mesto.="Praha")


Predikát EXISTS (SQL)
Predikát EXISTS

predikát_EXISTS ::= EXISTS ( dotazový_výraz )

Predikát EXISTS říká, zda v odpovědi na dotazový výraz (subdotaz) je alespoň jeden záznam.

Příklad použití:

Vyberte firmy, které nemají žádné faktury

SELECT nazev

FROM Firmy F

WHERE NOT EXISTS (SELECT * FROM Faktury A

                  WHERE A.nazev=F.nazev)


Predikát UNIQUE (SQL)
Predikát UNIQUE

predikát_UNIQUE ::= UNIQUE ( dotazový_výraz )

Predikát UNIQUE říká, zda všechny záznamy v odpovědi na dotazový výraz (subdotaz) mají unikátní hodnoty. Přitom bere v úvahu pouze řádky obsahující hodnotu různou od NULL.


Predikát LIKE (SQL)
Predikát LIKE

predikát_LIKE ::= výraz [ NOT ] LIKE výraz2 [ ESCAPE výraz3 ]

Predikát LIKE slouží k porovnávání výrazu se vzorem zadaným výrazem2. Všechny výrazy musí být typu řetězec znaků.

Obsah výrazu se porovnává s výrazem2 znak po znaku s těmito výjimkami: znak _ ve výrazu2 odpovídá libovolnému znaku ve výrazu a znak % ve výrazu2 odpovídá libovolnému řetězci znaků (případně i prázdnému) ve výrazu1.

Je-li uveden výraz3, pak jeho hodnotou musí být jediný znak, jinak nastane chybový sqlstate 22019. Pokud je tento znak použit ve výrazu2 bezprostředně před znakem _ nebo %, pak tato dvojice reprezentuje znak _ resp. %, jemuž musí ve výrazu odpovídat stejný znak.

Existuje-li způsob, jak podle těchto pravidel srovnat všechny znaky ve výrazu a výrazu2, predikát má hodnotu TRUE, jinak má hodnotu FALSE.

Příklad použití:

Najít jména končící na "ová"

SELECT Zamestnanci.jmeno

FROM Zamestnanci

WHERE (jmeno LIKE "%ová")


Predikát IS NULL (SQL)
Predikát IS NULL

predikát_IS_NULL ::= výraz IS [ NOT ] NULL

Predikát IS NULL slouží k porovnávání s prázdnou hodnotou NULL. Dle normy SQL není porovnání ve tvaru “výraz = NULL” přípustné.

Příklad použití:

Vybrat nezaplacené faktury:

SELECT *

FROM FAKTURY

WHERE zaplaceno IS NULL


Dotazy v SQL

Dotazy slouží k nalezení v databázi nebo vypočtení množiny řádků, které odpovídají zadaným kritériím. Tuto množinu nazýváme odpovědí na dotaz. Pokud každý řádek obsahuje jedinou hodnotu, hovoříme o skalárním dotazu.

Nejznámější a nejpoužívanější forma dotazu se zapisuje ve tvaru SELECT...FROM...WHERE... .Tento tvar dotazu je popsán v sekci specifikace dotazu. WinBase602 v souladu s SQL 2 umožňuje vytvářet složitější dotazové konstrukce spojováním jednodušších dotazů pomocí operátorů UNION, INTERSECT a EXCEPT. Tyto konstrukce se jmenují dotazové výrazy.

Ve funkci tabulky lze v dotazu použít nejen tabulku nebo odpověď na dotaz uložený v databázi (VIEW), také libovolný dotaz uzavřený v kulatých závorkách nebo spojení dvou tabulek pomocí některého druhu operace JOIN. Tyto možnosti popisuje sekce zobecněná tabulka.

Dotaz není sám o sobě příkazem, dá se však použít v řadě příkazů, např. INSERT, DECLARE CURSOR, CREATE VIEW. Je třeba rozlišovat mezi dotazem a příkazem SELECT INTO, který má podobnou syntaxi, ale slouží k přečtení jednoho řádku odpovědi na dotaz do proměnných.

Dotazy jsou definovány pomocí těchto syntaktických konstrukcí:

•	Zobecněná tabulka

•	Specifikace dotazu

•	Dotazový výraz

Viz také:	Sbírka dotazů

Interaktivní návrhář dotazů


Zobecněná tabulka (SQL)
Zobecněná tabulka

zobecněná tabulka ::= { identifikátor_tabulky [ specifikace_indexu ] | identifikátor_uloženého_dotazu | ( dotazový_výraz ) | join } [ přejmenování ]

specifikace_indexu ::= INDEX jméno_indexu

join ::= zobecněná_tabulka druh_joinu zobecněná_tabulka [ specifikace_joinu ]

druh_joinu ::= CROSS JOIN | [ NATURAL ] [ INNER | { LEFT | RIGHT | FULL } [ OUTER ] ] JOIN

specifikace_joinu ::= ON podmínka | USING ( název_sloupce { , název_sloupce }…)

přejmenování ::= [ AS ] jméno [( jméno_sloupce { , jméno_sloupce }…)]

Pojem zobecněná tabulka definuje, které objekty mohou v jazyce SQL plnit funkci tabulky. Kromě skutečné tabulky nebo dotazu uloženého v databázi (VIEW) to může být i dotazový výraz v závorkách nebo join.

Pojem join vyjadřuje vytvoření spojených záznamů ze dvou tabulek zřetězením hodnot sloupců z jednoho záznamu první tabulky a jednoho záznamu druhé tabulky. Druh joinu a specifikace joinu určují, který záznam s kterým se takto spojí:

•	CROSS JOIN znamená spojení každého záznamu s každým. V praxi se příliš nepoužívá, výsledkem je většinou příliš velká množina záznamů.

•	NATURAL znamená, že obě zobecněné tabulky musí mít sloupec stejného jména. Spojí se ty dvojice záznamů, které mají v tomto sloupci stejnou hodnotu. Specifikace joinu pak nesmí být uvedena.

•	specifikace joinu ve tvaru ON podmínka znamená, že se spojí dvojice záznamů, pro něž je splněna zadaná podmínka. Podrobnosti o jejím sestavení viz podmínka.

•	specifikace joinu ve tvaru USING ( název_sloupce { , název_sloupce }…) znamená, že se spojí ty dvojice záznamů, ve kterých jsou ve všech uvedených sloupcích stejné hodnoty. Sloupce zadaných názvů musí existovat v obou tabulkách. Jde tedy o zobecnění varianty NATURAL.

•	není-li uvedena specifikace joinu ani NATURAL, spojuje se každý záznam s každým.

•	LEFT [ OUTER ] JOIN znamená, že každý záznam první tabulky se musí spojit s některým (alespoň jedním) záznamem druhé tabulky. Není-li v druhé tabulce nalezen žádný záznam vyhovující podmínkám spojení, pak se záznam z první tabulky spojí s hodnotami NULL.

•	RIGHT [ OUTER ] JOIN znamená, že každý záznam druhé tabulky se musí spojit s některým (alespoň jedním) záznamem první tabulky. Není-li v první tabulce nalezen žádný záznam vyhovující podmínkám spojení, pak se záznam z druhé tabulky spojí s hodnotami NULL.

•	FULL [ OUTER ] JOIN znamená, že každý záznam z každé tabulky se musí spojit s některým (alespoň jedním) záznamem protější tabulky. Není-li v protější tabulce nalezen žádný záznam vyhovující podmínkám spojení, pak se záznam spojí s hodnotami NULL.

•	INNER JOIN nebo JOIN znamená spojení těch záznamů, které vyhoví specifikaci joinu.

Specifikace indexu u jména tabulky vnutí použití konkrétního indexu bez ohledu na volbu optimalizátoru.

Případné přejmenování na konci zobecněné tabulky dovoluje zadat jméno, jimž se bude možno na tuto tabulku dále odkazovat, a případně také jména sloupců této tabulky. Počet uvedených jmen sloupců musí být stejný jako počet sloupců v zobecněné tabulce.

Odchylky od Intermediate level směrem k Full level nebo k SQL 3

•	Použití dotazového výrazu v závorkách ve funkci zobecněné tabulky patří do Full level.

Rozšíření jazyka SQL proti normě

•	Použití specifikace indexu je rozšířením WinBase602.

Viz také: Sbírka dotazů


Specifikace dotazu v SQL
Specifikace dotazu

specifikace_dotazu ::= SELECT [ DISTINCT ] výraz { , výraz }…

FROM zobecněná tabulka { , zobecněná tabulka }…

[ WHERE podmínka_where ]

[ GROUP BY výrazg { , výrazg }… ]

[ HAVING podmínka_having ]

Specifikace dotazu vybere nebo vytvoří množinu záznamů ze záznamů uvedených zobecněných tabulek.

Je-li uvedena více než jedna zobecněná tabulka, provede se mezi nimi operace JOIN, tedy každý záznam se spojí s každým. Jinak se použijí všechny záznamy zobecněné tabulky.

Je-li uvedena podmínka_where, ze získaných záznamů se vyberou pouze ty, na nich je tato podmínka splněna.

Je-li uvedena klauzule GROUP BY, záznamy se rozčlení do skupin tak, že každá skupina obsahuje záznamy se stejnými hodnotami všech výrazůg.

Je-li uvedena klauzule HAVING, vyberou se pouze ty skupiny, na nichž je splněna podmínka having.

Odpověď na dotaz zadaný touto specifikací tvoří sloupce zadané hodnotami výrazů na získaných záznamech nebo skupinách záznamů. Aby bylo možno vyhodnotit výrazy nad skupinami, vyžaduje se, aby každý výraz byl buď totožný s některým výrazemg nebo aby obsahoval odkazy na sloupce pouze jako argumenty agregačních funkcí.

V podmínce where se nesmí vyskytovat agregační funkce (s výjimkou subdotazů). Tyto funkce je možno použít pouze ve výrazech v klauzuli SELECT a v podmínce having. Pokud specifikace dotazu neobsahuje GROUP BY, pak se tyto agregační funkce počítají vzhledem k celé odpovědi na dotaz, jinak se počítají zvlášť pro každou skupinu.

Žádný výrazg nesmí být multiatributem.

Podrobnosti o sestavení podmínek ve specifikaci dotazu viz podmínka

Viz také: Sbírka dotazů


Dotazový výraz v SQL
Dotazový výraz

dotazový_výraz ::= { dotazový_term | dotazový_výraz { UNION | EXCEPT } [ ALL ] [ corresponding ] dotazový_term } [ třídění ]

dotazový_term ::= specifikace_dotazu | dotazový_term INTERSECT [ ALL ] [ corresponding ] specifikace_dotazu

corresponding ::= CORRESPONDING [ BY ( jméno_sloupce {, jméno_sloupce }… )]

třídění ::= ORDER BY výraz [ ASC | DESC ] {, výraz [ASC | DESC ] }…

Dotazový výraz umožňuje povést nad výsledkem specifikace dotazu operace relační algebry UNION, INTERSECT a EXCEPT a výsledek setřídit.

Operace UNION znamená sjednocení množin záznamů, operace EXCEPT rozdíl, operace INTERSECT průnik. Pokud není uvedeno ALL, pak každý záznam bude ve výsledku nejvýše jednou. Pokud je uvedeno ALL, pak záznam, který se vyskytuje M-krát v prvním operandu a N-krát v druhém operandu, bude ve výsledku operace UNION (M+N) krát, ve výsledku operace EXCEPT MAX(M-N, 0) krát, ve výsledku operace INTERSECT MIN(M, N) krát.

Oba operandy množinové operace musí mít stejný počet sloupců a typy odpovídajících si sloupců jsou stejné. V případě EXCEPT a INTERSECT se předpokládá, že v obou operandech jsou stejné záznamy (které tvoří průnik nebo jsou vyloučeny z rozdílu).

Pomocí specifikace corresponding lze zadat množinu sloupců ve výsledku operace:

•	Pokud CORRESPONDING není uvedeno, pak se pouze očekává, že oba operandy mají stejný počet sloupců a typy odpovídajících si sloupců jsou stejné. Tytéž sloupce budou i ve výsledku.

•	Pokud v corresponding není uvedeno BY, pak ve výsledku budou pouze ty sloupce, které se v obou operandech jmenují stejné. Očekává se, že jsou i stejného typu a že alespoň jedna taková dvojice sloupců existuje.

•	Pokud v corresponding je uvedeno BY, pak ve výsledku budou sloupce, jejichž jména následují na BY. Očekává se, že všechny tyto sloupce existují v obou operandech a že jsou stejného typu.

Výsledek dotazového výrazu se třídí podle hodnot výrazů, přičemž DESC znamená sestupné třídění, ASC nebo nic vzestupné. Pokud některý výraz má na dvou záznamech stejnou hodnotu, o pořadí záznamů rozhodné další výraz. Hodnoty NULL jsou při třídění považovány za menší než všechny ostatní hodnoty. Výrazy obsažené v klauzuli ORDER BY smějí obsahovat pouze jména sloupců dotazového výrazu, nikoli jména sloupců z tabulek použitých v dotazovém výrazu. Výraz definující třídění nesmí být multiatributem.

Rozšíření jazyka SQL proti normě

•	Klauzule ORDER BY na tomto místě je rozšířením WinBase602.

Odchylky od Intermediate level směrem k Full level nebo k SQL 3

•	Operace UNION, EXCEPT a INTERSECT je možno použít i v subdotazech

Příklady použití:

Seznam firem, které již objednaly (mají alespoň jednu fakturu)

SELECT F.cislo_firmy,F.nazev

FROM Firmy F

WHERE EXISTS (

    SELECT *

    FROM Fakt_hlav H

    WHERE F.cislo_firmy=H.cislo_firmy)

Seznam firem, které dosud neobjednaly

SELECT F.cislo_firmy,F.nazev

FROM Firmy F

EXCEPT

SELECT F.cislo_firmy,F.nazev

FROM Firmy F

WHERE EXISTS (

    SELECT *

    FROM Fakt_hlav H

    WHERE F.cislo_firmy=H.cislo_firmy)

Viz také: Sbírka dotazů


Příkazy SQL
SQL příkazy

SQL příkazy lze rozdělit na příkazy definiční, manipulační, transakční a řídící.

Definiční příkazy:

•	příkaz CREATE SCHEMA

•	příkaz DROP SCHEMA

•	příkaz CREATE TABLE

•	příkaz ALTER TABLE

•	příkaz DROP TABLE

•	příkaz CREATE INDEX

•	příkaz DROP INDEX

•	příkaz CREATE VIEW

•	příkaz DROP VIEW

•	příkaz GRANT

•	příkaz REVOKE

Mezi definiční příkazy patří také příkazy pro vytváření, modifikaci a rušení rutin (procedur a funkcí) na serveru popsané v samostatné kapitole - viz Rutiny uložené na serveru.

•	příkaz CREATE PROCEDURE

•	příkaz CREATE FUNCTION

•	příkaz ALTER PROCEDURE

•	příkaz ALTER FUNCTION

•	příkaz DROP PROCEDURE

•	příkaz DROP FUNCTION

Mezi definiční příkazy patří také příkazy pro vytváření, modifikaci a rušení triggerů popsané v samostatné kapitole - viz Triggery.

•	příkaz CREATE TRIGGER

•	příkaz ALTER TRIGGER

•	příkaz DROP TRIGGER

Mezi definiční příkazy patří také příkazy pro vytváření, modifikaci a rušení sekvencí popsané v samostatné kapitole - viz Sekvence.

•	příkaz CREATE SEQUENCE

•	příkaz ALTER SEQUENCE

•	příkaz DROP SEQUENCE

Manipulační příkazy:

•	příkaz SELECT INTO

•	příkaz UPDATE

•	příkaz INSERT

•	příkaz DELETE

Mezi manipulační příkazy patří také příkazy pro práci s kurzory pospané v samostatné kapitole - viz Kurzory v SQL.

•	příkaz OPEN

•	příkaz FETCH

•	příkaz UPDATE CURRENT OF

•	příkaz DELETE CURRENT OF

•	příkaz CLOSE

Transakční příkazy:

Transakční příkazy jsou popsány v samostatné kapitole - viz Transakce a body návratu

•	příkaz START TRANSACTION

•	příkaz COMMIT

•	příkaz ROLLBACK

•	příkaz SET TRANSACTION

•	příkaz SAVEPOINT

•	příkaz RELEASE SAVEPOINT

Řídící příkazy:

Řídící příkazy jsou popsány v samostatné kapitole - viz Řídící příkazy

•	složený příkaz

•	přiřazovací příkaz SET

•	příkaz RETURN

•	příkaz IF

•	příkaz CASE

•	příkaz LOOP

•	příkaz WHILE

•	příkaz REPEAT

•	příkaz LEAVE

•	příkaz FOR

•	příkaz CALL

•	příkaz SIGNAL

•	příkaz RESIGNAL


Příkaz CREATE SCHEMA (SQL)
Příkaz CREATE SCHEMA

příkaz_CREATE_SCHEMA ::= CREATE SCHEMA jméno_aplikace

Popis

Příkaz CREATE SCHEMA vytvoří v databázi novou aplikaci a otevře ji. Každá další manipulace s objekty (CREATE TABLE, DROP VIEW apod.) se již provádí v této aplikaci.

Jméno_aplikace musí být unikátní.


Příkaz DROP SCHEMA (SQL)
Příkaz DROP SCHEMA

příkaz_DROP_SCHEMA ::= DROP SCHEMA jméno_aplikace

Popis

Příkaz DROP SCHEMA vymaže aplikaci i s celým obsahem z databáze.


Příkaz CREATE TABLE (SQL)
Příkaz CREATE TABLE

příkaz_CREATE_TABLE ::= CREATE TABLE [schema.]jméno_tabulky [ WB_příznak … ] (popis_elementu {, popis_elementu}… )

WB_příznak ::= NO_JOURNAL | ZCR | UNIKEY | LUO | TOKEN | DETECT | REC_PRIVILS | DOCFLOW

popis_elementu ::= popis_sloupce | popis_omezení_tabulky

popis_sloupce ::= jméno_sloupce typ [ [cíl] ][ PREALLOC=n ][ EXPANDABLE ] [ DEFAULT implic_hodnota ] [vlastnost_sloupce {, vlastnost_sloupce}… ] [ COLLATE uspořádání_řetězce ]

implic_hodnota ::= výraz | USER | UNIQUE

vlastnost_sloupce ::= UNIQUE | PRIMARY KEY | INDEX | NOT NULL | REFERENCES jméno_tabulky jméno sloupce | CHECK ( podmínka )

uspořádání_řetězce ::= CSISTRING | CSSTRING

popis_omezení_tabulky ::= [CONSTRAINT jméno_vlastnosti] vlastnost_tabulky

vlastnost_tabulky ::= { UNIQUE | PRIMARY KEY | INDEX } (výraz [směr] {, výraz [směr] }… ) | CHECK ( podmínka ) | omezení_FOREIGN_KEY

směr ::= ASC | DESC

omezení_FOREIGN_KEY ::= FOREIGN KEY (jméno_sloupce {, jméno_sloupce}… ) REFERENCES [schema.]jméno_tabulky [ jméno_sloupce {, jméno_sloupce}… ] [ UPDATE_akce ] [ DELETE_akce ]

UPDATE_akce ::= ON UPDATE akce_referenční_integrity

akce_referenční_integrity ::=  SET NULL | SET DEFAULT | CASCADE | NO ACTION

DELETE_akce ::= ON DELETE akce_referenční_integrity

Popis

Příkaz CREATE TABLE vytvoří novou prázdnou tabulku.

Příkaz obsahuje jméno nové tabulky a její popis. Popis tvoří popisy jednotlivých sloupců a popis takových vlastností tabulky, které nelze definovat již v popisu sloupce (např. index podle výrazu nebo referenční integritu).

WB příznaky jsou označení pro WinBase602 specifických vlastností tabulky (které jsou nad rámec normy SQL). NO_JOURNAL - nezapisovat změny v tabulce do žurnálu změn, ZCR - umožnit replikace, UNIKEY - vytvořit unikátní index pro replikace, LUO - bránit vzniku replikačních ozvěn, TOKEN - umožnit předávání replikačního peška, DETECT - detekovat replikační konflikty, REC_PRIVILS - přidělovat záznamová práva, DOCFLOW - umožnění koloběhu dokumentů.

Popis jednotlivého sloupce začíná jménem a typem. Jako datový typ je nutné uvést typ z jazyka SQL a nikoliv z WinBase602. Přehled vzájemně ekvivalentních datových typů z obou dvou jazyků - viz přehled typů . Definujete-li ukazatel, uveďte za typem cílovou tabulku v hranatých závorkách. Definujete-li multiatribut, musíte uvést za daným typem klíčové slovo PREALLOC s počtem rezervovaných hodnot nebo EXPANDABLE pro překročení rezervovaného počtu hodnot, případně obojí.

Další údaj je nepovinné zadání implicitní hodnoty sloupce. Zadaná hodnota musí být výraz stejného typu jako sloupec. Implicitní hodnotu nelze zadat pro multiatribut, sloupce proměnné velikosti a sledovací atributy.

Pro řetězce lze jako implicitní hodnotu použít speciální hodnotu USER, která způsobí, že se do tohoto sloupce uloží jméno uživatele vkládajícího záznam. Pro binární řetězec se při použití USER zapíše binární ID uživatele. Pro sloupce typu datum, čas nebo Timestamp lze jako implicitní hodnoty použít funkce CURRENT_DATE, CURRENT_TIME nebo CURRENT_TIMESTAMP.

Pro typ Integer lze použít speciální hodnotu UNIQUE, který způsobí, že systém mu bude automaticky přidělovat unikátní hodnoty. Tento mechanismus funguje pouze tehdy, pokud do tohoto sloupce nebudete nikdy nic explicitně zapisovat. V opačném případě se může stát, že systém zapíše do nového záznamu stejnou hodnotu, jakou jste ručně zapsali do jiného záznamu. Častější je pro získávání unikátních hodnot použití sekvencí.

Vlastnosti sloupce mají tento význam:

•	UNIQUE - bude vytvořen unikátní index z hodnot tohoto sloupce, hodnota NULL je z indexu vyloučena

•	PRIMARY KEY - totéž jako unikátní index, může však být v tabulce použit pouze jednou

•	INDEX - bude vytvořen index s možnými duplicitami hodnot klíče

•	NOT NULL - sloupec nebude smět mít hodnotu NONE

•	REFERENCES - uplatní se referenční integrita

•	CHECK - nemá-li podmínka integritního omezení po vyhodnocení hodnotu TRUE nebo UNKNOWN, nepovolí se zápis hodnoty; v podmínce nesmí být použit subdotaz používající právě vytvářenou tabulku

Uspořádání řetězce se smí použít pouze u řetězcových typů. Pokud chcete mít řetězec typu CSSTRING nebo CSISTRING uveďte tento typ za vyhrazené slovo COLLATE.

V popisu vlastností tabulky se definují ty vlastnosti, které se týkají jednoho nebo více sloupců.

•	UNIQUE - bude vytvořen unikátní index podle výrazu nebo skupiny výrazů, hodnota NULL je z indexu vyloučena; za každým výrazem může následovat ASC nebo DESC pro určení způsobu třídění

•	PRIMARY KEY - totéž jako unikátní index, může však být v tabulce použit pouze jednou

•	INDEX - bude vytvořen obecný index s možnými duplicitami

•	FOREIGN KEY …REFERENCES - uplatní se referenční integrita

•	CHECK - uplatní se obecné integritní omezení,

Pro popis referenční integrity se používají následující pojmy:

•	nadřízená tabulka - tabulka uvedená za REFERENCES - musí obsahovat unikátní index pro sloupec nebo sloupce v popisu uvedené;

•	podřízená tabulka - tabulka, v níž se referenční integrita definuje; lze definovat (v souladu s normou) i v případě, kdy neexistuje neunikátní index pro sloupec (sloupce) tvořící FOREIGN KEY

Akce referenční integrity dovoluje specifikovat, co má server provést, pokud:

•	v nadřízené tabulce je zrušen záznam, k němž jsou v podřízené tabulce připojeny jiné záznamy (akce ON DELETE);

•	v nadřízené tabulce je v některém záznamu změněna hodnota klíče, který tento záznam propojuje se záznamy z podřízené tabulky (akce ON UPDATE).

K pravidlu referenční integrity smí být připojena nejvýše jedna akce ON UPDATE a nejvýše jedna akce ON DELETE.

Ne-li specifikována žádná akce referenční integrity nebo je-li specifikována akce NO ACTION, pak ve výše popsaných situacích dojde k chybě, která způsobí odvolání příkazu. Tímto způsobem server zamezí porušení pravidla referenční integrity. Ostatní akce dovolují předepsat odlišné chování:

•	SET NULL - v připojených záznamech podřízené tabulky se do sloupců, které podřízený záznam propojují s nadřízeným záznamem, zapíše hodnota NULL;

•	SET DEFAULT - v připojených záznamech podřízené tabulky se do sloupců, které podřízený záznam propojují s nadřízeným záznamem, zapíše implicitní hodnota určena v definici tabulky;

•	CASCADE - změna provedena v nadřízené tabulce se provede i na připojených záznamech podřízené tabulky: při zrušení nadřazeného záznamu se zruší všechny k němu připojené podřízené záznamy, při změně hodnot propojovacího klíče se stejná změna provede i na klíčích v podřízených záznamech.

Při provádění akcí referenční integrity se nekontrolují práva k provádění změn v podřízené tabulce. Akce se provede, pokud klient má právo provést změnu, která akci vyvolává, v nadřazené tabulce.

Při porušení omezení sloupců nebo tabulky (NOT NULL, UNIQUE, CHECK nebo referenční integrity) nastane při ukončení transakce chybový sqlstate 40002.

Příklad použití:

CREATE TABLE Zamestnan (

cislo INTEGER PRIMARY KEY NOT NULL CHECK (cislo > 0),

jmeno CHAR(12) COLLATE CSISTRING,

prijmeni CHAR(20) INDEX COLLATE CSISTRING,

dat_nast DATE,

plat NUMERIC(14,2) DEFAULT 10000 INDEX,

oddeleni SMALLINT,

podobenka VARBINARY,

deti CHAR(12) EXPANDABLE COLLATE CSISTRING,

INDEX (oddeleni),

INDEX (prijmeni, jmeno),

CONSTRAINT pojisteni INDEX (plat*0.135 DESC) ,

FOREIGN KEY (oddeleni) REFERENCES Oddeleni (cislo_odd) ON UPDATE CASCADE)


Příkaz ALTER TABLE (SQL)
Příkaz ALTER TABLE

Syntaxe podle normy SQL:

příkaz_ALTER_TABLE ::= ALTER TABLE [schema.]jméno_tabulky [ WB_příznak … ] akce {, akce }…

WB_příznak ::= NO_JOURNAL | ZCR | UNIKEY | LUO | TOKEN | DETECT | REC_PRIVILS | DOCFLOW

akce ::= přidání_sloupce | odstranění_sloupce | změna_sloupce | přidání_omezení_tabulky | odstranění_omezení_tabulky

přidání_sloupce ::= ADD [ COLUMN ] jméno_sloupce typ [ [cíl] ][ PREALLOC=n ][ EXPANDABLE ][ COLLATE uspořádání_řetězce ]

odstranění_sloupce ::= DROP [ COLUMN ] jméno_sloupce

změna_sloupce ::= ALTER [ COLUMN ] jméno_sloupce akce_změny_sloupce

akce_změny_sloupce ::= SET DEFAULT implic_hodnota | DROP DEFAULT

implic_hodnota ::= výraz | USER | UNIQUE

přidání_omezení_tabulky ::= ADD [ CONSTRAINT jméno_vlastnosti ] vlastnost_tabulky

vlastnost_tabulky ::= { UNIQUE | PRIMARY KEY | INDEX } (výraz [směr] {, výraz [směr] }… ) | CHECK ( podmínka ) | omezení_FOREIGN_KEY

směr ::= ASC | DESC

omezení_FOREIGN_KEY ::= FOREIGN KEY (jméno_sloupce {, jméno_sloupce}… ) REFERENCES [schema.]jméno_tabulky [ jméno_sloupce {, jméno_sloupce}… ] [ UPDATE_akce ] [ DELETE_akce ]

UPDATE_akce ::= ON UPDATE akce_referenční_integrity

akce_referenční_integrity ::=  SET NULL | SET DEFAULT | CASCADE | NO ACTION

DELETE_akce ::= ON DELETE akce_referenční_integrity

odstranění_omezení_tabulky ::= DROP CONSTRAINT jméno_vlastnosti

Syntaxe podle starších verzí WinBase602 (používá stávající návrhář tabulek):

příkaz_ALTER_TABLE ::= ALTER TABLE jméno_tabulky [ WB_příznak … ] akce {, akce }…

akce ::= přidání_sloupce | odstranění_sloupce | popis_omezení

přidání_sloupce ::= ADD [ pořadí ] jméno_sloupce typ [ [cíl] ][ PREALLOC=n ][ EXPANDABLE ][ COLLATE uspořádání_řetězce ][ VALUES " výraz_pro_přenos_hodnoty " ]

odstranění_sloupce ::= DROP jméno_sloupce

popis_omezení ::= CONSTRAINT [jméno_vlastnosti] vlastnost_tabulky

Popis

Příkaz ALTER TABLE změní definici zadané tabulky. V odladěných aplikacích je nutné  takovéto změny provádět z rozvahou - poté je nezbytné provést odpovídající změny ve všech objektech (na back-endu i front-endu), které danou tabulku využívají.

ALTER TABLE má od verze 6.0c dvě poněkud odlišné podoby. O tom, jakou syntaxi server rozeznává, rozhoduje nastavení funkcí Set_sql_option.

1) Varianta ALTER TABLE odpovídající normě SQL je rozšířena o nastavení příznaků tabulky, které se týkají specifických vlastností tabulek WinBase602 (popis - viz CREATE TABLE). Oproti normě umožňuje v jediném ALTER TABLE příkazu zadat i více akcí oddělených čárkami.

Při změně sloupce lze pouze zadat nebo rušit implicitní hodnotu, ostatní změny vlastností sloupců (integritní omezení, indexy apod.) se provádějí v rámci přidání nebo odstranění obecnějších vlastností tabulky.

2) Původní podoba příkazu je stále využívaná interaktivním návrhářem tabulek. Tato podoba příkazu je vhodná, když měníte strukturu naplněné tabulky, neboť data z rušeného sloupce lze zachovat definováním výrazu pro přenos hodnoty do nového sloupce. Také lze určit pořadí vkládaného sloupce mezi stávajícími sloupci (číslováno od 1). V popisu_omezení uveďte všechna omezení tabulky, které se mají po skončení příkazu v tabulce objevit (tj. i ta, které již existovala před ALTER TABLE).

POZOR!! Při použití interaktivního návrháře tabulek se automaticky nastaví původní varianta syntaxe bez ohledu na nastavení pomocí Set_SQL_option!!

Přidání nebo odstranění indexu provádějí také příkazy CREATE INDEX a DROP INDEX.

Odlišnosti od normy

•	Množina typů je specifická pro WinBase602 (ukazatele, multiatributy);

•	Mazání závislých objektů ze schématu pomocí RESTRICT | CASCADE není implementováno

Příklad (SQL varianta):

V tabulce Tab1 je třeba odstranit sloupec A, přidat sloupec NewCol,  vytvořit pro něj neunikátní index a nastavit referenční integritu s nadřízenou tabulkou Tab2, změnit implicitní hodnotu ve sloupci D, vytvořit primární klíč na sloupci B a zároveň změnit integritní omezení pro tento sloupec.

ALTER TABLE Tab1

   DROP COLUMN A,

   ADD COLUMN NewCol CHAR(20) COLLATE CSISTRING,

   ALTER COLUMN D SET DEFAULT CURRENT_DATE,

   ADD PRIMARY KEY (B) ,

   ADD CONSTRAINT `Pro ref.integ.` INDEX (NewCol) ,

   DROP CONSTRAINT `Check_B`,

   ADD CONSTRAINT `Check_B` CHECK (B > 0) ,

   ADD CONSTRAINT `Tab1-Tab2` FOREIGN KEY (NewCol) REFERENCES Tab2 (Col) ON UPDATE CASCADE ON DELETE NO ACTION


Příkaz DROP TABLE (SQL)
Příkaz DROP TABLE

příkaz_DROP_TABLE ::= DROP TABLE [schema.]jméno_tabulky [ způsob ]

způsob ::= CASCADE | RESTRICT

Popis

Příkaz zruší zadanou tabulku. Je-li použit způsob CASCADE, zruší se i všechny podřízené tabulky v rámci referenční integrity. Použije-li se způsob RESTRICT, tabulku se nepodaří smazat, je-li na ní závislá jiná tabulka v rámci referenční integrity.

Odlišnosti od normy

•	použití CASCADE nezpůsobí odstranění dotazů (VIEW) ani jiných objektů schématu, které závisí na této tabulce

Příklad použití:

DROP TABLE Zamestnan


Příkaz CREATE INDEX (SQL)
Příkaz CREATE INDEX

příkaz_CREATE_INDEX ::= CREATE [ UNIQUE ] INDEX jméno_indexu ON [schema.]jméno_tabulky ( výraz [ směr ] {, výraz [ směr ] }… )

směr ::= ASC | DESC

Popis

Příkaz CREATE INDEX vytvoří nový index k zadané tabulce.

Vyhrazené slovo UNIQUE způsobí vytvoření unikátního (jedinečného) indexu.

Každý index musí mít své jméno, na které se lze odkazovat.

Index je popsán množinou výrazů, následujících za vyhrazeným slovem ON. Každý výraz může být doplněn slovem DESC pro sestupné třídění. Implicitně se používá vzestupné třídění (slovo ASC).

Častěji se pro vytváření indexů k tabulkám WinBase602 používá interaktivní návrhář tabulek.

Odlišnosti od normy

•	příkaz CREATE INDEX není v SQL zaveden

Příklady použití:

CREATE UNIQUE INDEX ind

   ON Per_agen.Zamestnan (cislo)

CREATE INDEX penize

   ON Zamestnan (plat DESC, prijmeni)


Příkaz DROP INDEX (SQL)
Příkaz DROP INDEX

příkaz_DROP_INDEX ::= DROP INDEX jméno_indexu FROM [schema.]jméno_tabulky

Popis

Příkaz DROP INDEX zruší index zadaný jménem jméno indexu k tabulce jméno tabulky.

Odlišnosti od normy

•	příkaz DROP INDEX není v SQL zaveden

Příklady použití:

DROP INDEX ind FROM Per_agen.Zamestnan

DROP INDEX penize FROM Zamestnan


Příkaz CREATE VIEW (SQL)
Příkaz CREATE VIEW

příkaz_CREATE_VIEW ::= CREATE VIEW [schéma.]jméno_dotazu [ ( jméno_sloupce {, jméno_sloupce }… ) ] AS dotazový_výraz

Popis

Příkaz vytvoří dotaz uložený v databázi. Základem dotazu je dotazový výraz, který vybere množinu záznamů z jedné nebo více tabulek. Jména sloupců v odpovědi na dotazový výraz lze změnit uvedením seznamu jmen v závorkách před vyhrazeným slovem AS.

Odlišnosti od normy

•	klauzule WITH CHECK OPTION není implementována

Příklady použití:

CREATE VIEW Plat6000 AS

SELECT *

FROM Zamestnan

WHERE plat<6000

ORDER BY prijmeni

CREATE VIEW Platy (Suma_Platu, Nazev_Odd) AS

SELECT SUM(Zamestnan.plat),Oddeleni.nazev

FROM Zamestnan, Oddeleni

WHERE Oddeleni.cislo=Zamestan.oddeleni

GROUP BY Zamestan.oddeleni


Příkaz DROP VIEW (SQL)
Příkaz DROP VIEW

příkaz_DROP_VIEW ::= DROP VIEW [schéma.]jméno_dotazu

Popis

Příkaz zruší dotaz uložený v databázi. Jméno dotazu může být uvedeno i s názvem aplikace ve tvaru:

[schéma.]jméno_dotazu

Odlišnosti od normy

•	mazání závislých objektů ze schématu pomocí RESTRICT | CASCADE není implementováno

Příklad použití:

DROP VIEW Platy


Příkaz GRANT (SQL)
Příkaz GRANT

příkaz_GRANT ::= příkaz_GRANT_pro_tabulky | příkaz_GRANT_pro_rutiny

příkaz_GRANT_pro_tabulky ::= GRANT výčet_práv ON [schema.]jméno_tabulky TO seznam_uživatelů [ WITH GRANT OPTION ]

výčet_práv ::= ALL [ PRIVILEGES ] | jednotlivé_právo {, jednotlivé_právo }…

jednotlivé_právo ::=  DELETE | INSERT | SELECT | UPDATE [( seznam_sloupců )] |  REFERENCES [( seznam_sloupců )]

seznam_uživatelů ::= PUBLIC | jméno_subjektu {, jméno_subjektu }…

seznam_sloupců ::= sloupec { , sloupec }…

příkaz_GRANT_pro_rutiny ::= GRANT výčet_práv ON [ PROCEDURE | FUNCTION ] [schema.]jméno_rutiny TO seznam_uživatelů [ WITH GRANT OPTION ]

výčet_práv ::= ALL [ PRIVILEGES ] | jednotlivé_právo {, jednotlivé_právo }…

jednotlivé_právo ::= EXECUTE | UPDATE

seznam_uživatelů ::= PUBLIC | jméno_subjektu {, jméno_subjektu }…

Popis

Příkaz GRANT  nastaví práva k tabulce jméno_tabulky nebo SQL rutině jméno_rutiny (proceduře či funkci) pro uživatele a skupiny uživatelů určené v seznamu_uživatelů.

Pro možný konflikt jména tabulky a jména rutiny je rozumné rutiny odlišit slovem PROCEDURE nebo FUNCTION.

Ve výčtu_práv definujete, jaká práva se mají nastavit. Použijete-li slovo ALL, nastaví se všechna možná práva. Chcete-li nastavit pouze některá práva, jednotlivě je vypíšete a oddělíte čárkami. K dispozici jsou pro tabulky tato práva:

•	DELETE - právo rušit záznamy;

•	INSERT - právo vkládat záznamy;

•	SELECT - právo číst všechny sloupce;

•	REFERENCES - právo číst pouze některé sloupce specifikované v seznamu_sloupců. Není-li seznam_sloupců uveden, právo číst platí pro všechny sloupce (totéž co SELECT);

•	UPDATE - právo přepisovat jednotlivé sloupce specifikované v seznamu_sloupců. Není-li seznam_sloupců uveden, právo přepisovat platí pro všechny sloupce.

Pro rutiny je výčet práv jednodušší:

•	UPDATE - právo přepisovat definici objektu;

•	EXECUTE - právo spouštět rutinu.

V seznamu_uživatelů určujete, koho se nastavení práv týká. Použijete-li slovo PUBLIC, práva se nastaví pro skupinu EVERYBODY. V jiném případě se nastaví těm uživatelům a skupinám, kteří jsou uvedeni jmenovitě. Použijte-li jméno skupiny uživatelů (již definované na serveru), nastaví se práva této skupině, tzn. že uživatelé v ní zařazení práva dědí automaticky. Pokud se shoduje jméno skupiny se jménem uživatele, přednost má uživatel a této skupině nejde právo přidělit.

Pokud uživatel nebo skupina má již určitá práva, pak práva uvedená v příkazu GRANT se k nim přidají.

Uvede-li se klauzule WITH GRANT OPTION, pak uživatelé a skupiny získají možnost svá práva poskytovat dalším uživatelům.

V současné verzi není možné příkazem GRANT nastavovat práva k objektům (výjimku tvoří procedury).

Příklad použití:

Dejte uživateli PETR právo mazat záznamy a editovat číslo pracovníka a jeho plat a spouštět proceduru Zmena Ceniku.

GRANT DELETE, UPDATE (Plat, Cislo)

ON Zamestan

TO Petr

GRANT EXECUTE

ON PROCEDURE ZmenaCeniku

TO Petr


Příkaz REVOKE (SQL)
Příkaz REVOKE

příkaz_REVOKE ::= příkaz_REVOKE_pro_tabulky | příkaz_REVOKE_pro_rutiny

příkaz_REVOKE_pro_tabulky ::= REVOKE [ GRANT OPTION FOR ] výčet_práv ON [schema.]jméno_tabulky FROM seznam_uživatelů

výčet_práv ::= ALL [ PRIVILEGES ] | jednotlivé_právo {, jednotlivé_právo }…

jednotlivé_právo ::=  DELETE | INSERT | SELECT | UPDATE [( seznam_sloupců )] |  REFERENCES [( seznam_sloupců )]

seznam_uživatelů ::= PUBLIC | jméno_subjektu {, jméno_subjektu }…

seznam_sloupců ::= sloupec { , sloupec }…

příkaz_REVOKE_pro_rutiny ::= REVOKE [ GRANT OPTION FOR ] výčet_práv ON [ PROCEDURE | FUNCTION ] [schema.]jméno_rutiny TO seznam_uživatelů

výčet_práv ::= ALL [ PRIVILEGES ] | jednotlivé_právo {, jednotlivé_právo }…

jednotlivé_právo ::= EXECUTE | UPDATE

seznam_uživatelů ::= PUBLIC | jméno_subjektu {, jméno_subjektu }…

Popis

Příkaz REVOKE  odebere práva k tabulce jméno_tabulky nebo rutině uložené na serveru jméno_rutiny uživatelům a skupinám určeným v seznamu_uživatelů.

Pro možný konflikt jména tabulky a jména rutiny je rozumné rutiny odlišit slovem PROCEDURE nebo FUNCTION.

Ve výčtu_práv definujete, jaká práva se mají odebrat. Použijete-li slovo ALL, odeberou se všechna možná práva k tabulce. Chcete-li odebrat pouze některá práva, jednotlivě je vypíšete a oddělíte čárkami. K dispozici jsou pro tabulky tato práva:

•	DELETE - právo rušit záznamy;

•	INSERT - právo vkládat záznamy;

•	SELECT - právo číst všechny sloupce;

•	REFERENCES - právo číst pouze některé sloupce specifikované v seznamu_sloupců. Není-li seznam_sloupců uveden, právo číst platí pro všechny sloupce (totéž co SELECT);

•	UPDATE - právo přepisovat jednotlivé sloupce specifikované v seznamu_sloupců. Není-li seznam_sloupců uveden, právo přepisovat platí pro všechny sloupce.

Pro rutiny je výčet práv jednodušší:

•	UPDATE - právo přepisovat definici objektu;

•	EXECUTE - právo spouštět rutinu.

V seznamu_uživatelů určujete, koho se odebrání práv týká. Použijete-li slovo PUBLIC, práva se odeberou skupině EVERYBODY. V jiném případě se odeberou těm uživatelům a skupinám, kteří jsou uvedeni jmenovitě. Použijete-li jméno skupiny uživatelů (již definované na serveru), odeberou se práva této skupině, tzn. že uživatelé v ní zařazení práva ztratí automaticky (pokud je nemají přidělena explicitně). Pokud se shoduje jméno skupiny se jménem uživatele, přednost má uživatel a této skupině nejde právo odebrat.

Uvede-li se klauzule GRANT OPTION FOR, pak uživatelé a skupiny ztratí možnost svá práva poskytovat dalším uživatelům.

Příklad použití:

Všem uživatelům zabraňte v mazání záznamů a editaci čísla pracovníka a jeho platu.

REVOKE DELETE, UPDATE (Plat, Cislo)

ON Zamestan

TO PUBLIC


Příkaz UPDATE (SQL)
Příkaz UPDATE

příkaz_UPDATE ::= UPDATE [schema.]jméno_tabulky SET jméno_sloupce = výraz {, jméno_sloupce = výraz }… [WHERE podmínka]

Popis

Příkaz UPDATE umožňuje hromadně změnit hodnoty sloupců v tabulce. Provedením příkazu se každému uvedenému sloupci přiřadí hodnota zadaná výrazem. Akce se provede s každým záznamem vyhovujícím podmínce, resp. se všemi záznamy v tabulce, pokud podmínka není uvedena.

Příklad použití:

Zvýšit všem zaměstnancům z oddělení plat o 10%:

UPDATE Zamestnan

SET plat = plat*1.1

WHERE oddeleni = 1

Je tabulka Cenik obsahující sloupce id a cena, dále je tabulka Katalog se sloupci id a nova_cena stejných typů. Úkolem je změnit hodnoty sloupce cena v tabulce Cenik podle odpovídajících hodnot v Katalog:

UPDATE Cenik

 SET cena = (SELECT nova_cena

             FROM Katalog

             WHERE Katalog.id=Cenik.id)

 WHERE EXISTS (SELECT nova_cena

               FROM Katalog

                WHERE Katalog.id=Cenik.id);


Příkaz INSERT (SQL)
Příkaz INSERT

příkaz_INSERT ::= INSERT INTO [schema.]jméno_tabulky [( jméno_sloupce {, jméno_ sloupce }… )] obsah

obsah ::= VALUES ( hodnota {, hodnota }… ) | DEFAULT VALUES | dotazový_výraz

Popis

Příkaz INSERT vloží do dané tabulky jeden nebo více záznamů. Jsou-li za jménem tabulky uvedena v závorkách jména sloupců, pak se zadané hodnoty zapíší po řadě do těchto sloupců, a do ostatních se zapíší implicitní hodnoty. Pokud se jména sloupců neuvedou, pak se hodnoty zapisují do všech sloupců tabulky postupně počínaje prvním.

•	Použijete-li variantu VALUES, do tabulky se vloží jeden záznam s explicitně zadanými hodnotami. Počet zadávaných hodnot musí být menší nebo roven počtu sloupců uvedených za jménem tabulky, resp. všech sloupců tabulky.

•	DEFAULT VALUES vloží jeden záznam a vyplní ho implicitními hodnotami definovanými pro tuto tabulku.

•	Chcete-li vložit hodnoty vybrané z jiných tabulek, použijte poslední možnost. Potřebnou množinu záznamů zadáte pomocí dotazového výrazu. Sloupce v odpovědi na dotazový výraz musí typem odpovídat sloupcům uvedeným za jménem tabulky v příkazu INSERT, resp. všem sloupcům tabulky.

Příklady použití:

INSERT INTO Zamestnan (cislo, jmeno, prijmeni)

VALUES (55, "Jan", "Novák")

INSERT INTO Zamestnan DEFAULT VALUES

INSERT INTO Zamestnan

SELECT * FROM Kartoteka WHERE cis_oddel = 1

INSERT INTO Zamestnan (jmeno, prijmeni)

SELECT jmeno_n, prijmeni_n FROM Nabor WHERE prijaty


Příkaz DELETE (SQL)
Příkaz DELETE

příkaz_DELETE ::= DELETE FROM [schema.]jméno_tabulky [ WHERE podmínka ]

Popis

Příkaz DELETE vymaže záznamy z dané tabulky. Není-li použita omezující podmínka, příkaz vymaže všechny záznamy v tabulce, jinak se vymažou pouze záznamy podmínce vyhovující.

Příklad použití

Vymazat záznamy patřící do oddělení 1

DELETE FROM Zamestnan WHERE Oddeleni = 1

Vymazat záznamy, které mají hodnotu sloupce cislo větší než průměrné

DELETE FROM Tab3

 WHERE cislo > (SELECT Avg(cislo) FROM Tab3);


Příkaz SELECT INTO (SQL)
Příkaz SELECT INTO

Příkaz slouží k rychlému získání odpovědi na dotaz, která obsahuje právě jeden řádek, do proměnných.

Příkaz SELECT  INTO (někde nazývaný Singleton Select) má stejnou syntaxi jako specifikace dotazu, avšak mezi klauzulemi SELECT a FROM obsahuje navíc klauzuli INTO ve tvaru:

klauzule_INTO ::= INTO proměnná {, proměnná }…

Počet proměnných musí být stejný jako počet výrazů v klauzuli SELECT a jejich typy musí být takové, aby se jim daly hodnoty výrazů z klauzule SELECT po řadě přiřadit. Proměnnou smí být také proměnná klienta uvedena dvojtečkou.

Pokud odpověď na dotaz obsahuje žádný nebo více než jeden záznam, nastane chybový sqlstate 21000. Je-li v odpovědi právě jeden záznam, pak se hodnoty jeho sloupců přiřadí do proměnných uvedených v klauzuli INTO.

Příklad použití:

FUNCTION maxcislo () RETURNS INT;

BEGIN

 DECLARE maxval INT;

 SELECT MAX(cis)+1 INTO maxval FROM Tab1;

 RETURN (maxval);

END


Deklarace rutin a lokálních objektů v SQL
Deklarace lokálních objektů

Jazyk SQL umožňuje deklarovat řadu objektů, na něž se mohou odvolávat příkazy SQL. Těmito objekty jsou proměnné, rutiny, výjimky, handlery a kurzory. Všechny tyto objekty se deklarují jako lokální uvnitř složeného příkazu a pak jsou použitelné pouze v tomto příkazu. Mimo to lze rutiny deklarovat i globálně a pak jsou k dispozici celé databázové aplikaci - rutiny uložené na serveru.

Odchylky od Intermediate level směrem k Full level nebo k SQL 3

•	Veškeré deklarace jsou implementovány dle úrovně SQL 3.

V SQL WinBase602 lze provádět následující deklarace:

•	deklarace proměnných

•	deklarace rutiny

•	deklarace výjimky

•	deklarace handleru

•	deklarace kurzoru


Deklarace proměnných v SQL
Deklarace proměnných

deklarace_proměnných ::= DECLARE identifikátor {, identifikátor }… [ CONSTANT | UPDATABLE ] typ [ DEFAULT výraz ];

Příkaz deklaruje proměnné uvedeného typu označené zadanými identifikátory. Je-li uvedeno DEFAULT, pak se proměnné resp. proměnným při jejich vzniku přiřadí hodnota výrazu. Je-li uvedeno CONSTANT, pak DEFAULT musí být uvedeno a hodnotu proměnné resp. proměnných nelze změnit. Je-li uvedeno UPDATABLE nebo není-li uvedeno CONSTANT ani UPDATABLE, lze proměnné přiřazovat hodnotu (např. v příkazu SET, v příkazu UPDATE, předáním proměnné jako výstupní parametr do rutiny).

Jako lokální proměnné nelze deklarovat multiatributy ani typy Podpis, Historie, Autorizace, Datumovka a ukazatele.

Rozšíření jazyka SQL proti normě

•	Specifikace CONSTANT a UPDATABLE byly vypuštěny z posledních návrhů SQL 3.

Příklad použití:

DECLARE err_notfound BIT DEFAULT FALSE;

DECLARE TatoHodnota INT;

DECLARE TatoFirma CHAR(20);


Deklarace rutiny v SQL
Deklarace rutiny

deklarace_rutiny ::= DECLARE { popis_procedury | popis_funkce };

Deklarace rutiny slouží k definování lokální procedury nebo funkce, kterou lze volat jako příkaz jazyka SQL. Rutina deklarovaná uvnitř složeného příkazu může být volaná pouze uvnitř tohoto příkazu a po opuštění příkazu zanikne.

Globálně dostupné rutiny lze vytvářet příkazy CREATE PROCEDURE a CREATE FUNCTION.

Rozšíření jazyka SQL proti normě

•	Deklarace lokální rutiny byla vypuštěna z posledních návrhů SQL 3, ve WinBase602 ji však lze používat.


Deklarace výjimky v SQL
Deklarace výjimky

deklarace_výjimky ::= DECLARE identifikátor CONDITION [ FOR SQLSTATE [ VALUE ] sqlstate ];

Touto deklarací se deklaruje výjimka označená identifikátorem. Deklarovanou výjimku lze vyvolat příkazem SIGNAL a lze jí přiřadit handler v deklaraci handleru. Je-li uveden řetězec znaků sqlstate, pak se deklarovaná výjimka s ním sdruží. Případný handler deklarovaný pro tuto výjimku bude platit i pro uvedený sqlstate. Stejný sqlstate se nesmí použít ve více výjimkách deklarovaných se stejným rozsahem platnosti.


Deklarace handleru v SQL
Deklarace handleru

deklarace_handleru ::= DECLARE { CONTINUE | EXIT | REDO | UNDO } HANDLER FOR výjimka {, výjimka }…  příkaz;

výjimka ::=  identifikátor_výjimky | SQLSTATE [ VALUE ] sqlstate | SQLEXCEPTION | SQLWARNING | NOT FOUND

Touto deklarací se handler zadaný příkazem přiřadí ke specifikovaným výjimkám nebo třídám výjimek a může se v rozsahu platnosti této deklarace uplatnit při ošetření výjimky.

Je-li v deklaraci handleru uveden identifikátor_výjimky, musí být dříve deklarován v deklaraci výjimky. Handler se zavolá, pokud je tato výjimka aktivována příkazem SIGNAL. Stejná výjimka nesmí být uvedena dvakrát ve stejných nebo různých deklaracích handleru ve stejném rozsahu platnosti. Je-li v deklaraci této výjimky uveden sqlstate, pak handler je přiřazen i k tomuto sqlstate.

Je-li v deklaraci handleru uvedeno SQLSTATE sqlstate, pak handler se zavolá, kdykoli tento sqlstate nastane.

Je-li v deklaraci handleru uvedeno slovo SQLEXCEPTION, SQLWARNING nebo NOT FOUND, handler se zavolá, nastane-li libovolná chyba kromě čtení neexistujícího záznamu v příkazu FETCH (pro SQLEXCEPTION), libovolné varování (pro SQLWARNING) nebo čtení neexistujícího záznamu v příkazu FETCH (pro NOT FOUND). Výjimka Čtení z neexistujícího záznamu (sqlstate '02000') je výjimečná tím, že handler pro ní se musí deklarovat při každém použití konstrukce LOOP...FETCH...END LOOP, zřejmě z tohoto důvodu má tak výsadní postavení.

Nastane-li při provádění SQL příkazů výjimka, hledá se nejbližší handler pro tuto výjimku. Je-li nějaký handler nalezen, pak v závislosti na druhu handleru:

•	CONTINUE: provede se handler a pokračuje se v provádění příkazů za příkazem, který způsobil výjimku;

•	EXIT: provede se handler a pokračuje se v provádění příkazů za koncem složeného příkazu, který obsahuje deklaraci handleru;

•	UNDO: provede se ROLLBACK do stavu při vstupu do složeného příkazu, poté se provede handler a pokračuje se v provádění příkazů za koncem složeného příkazu, který obsahuje deklaraci handleru;

•	REDO: provede se ROLLBACK do stavu při vstupu do složeného příkazu, poté se provede handler a pokračuje se v provádění příkazů od začátku složeného příkazu, který obsahuje deklaraci handleru.

Handlery REDO a UNDO smějí být deklarovány pouze v atomickém složeném příkazu. Nelze v nich používat transakční příkazy.

Příklad použití:

při průchodu kurzoru je třeba testovat existenci dalšího řádku

DECLARE CONTINUE HANDLER FOR NOT FOUND BEGIN SET err_notfound=TRUE; END;

LabelLoop: LOOP

    FETCH NEXT FROM cur INTO TatoFirma, TatoHodnota;

    IF err_notfound IS TRUE THEN LEAVE LabelLoop; END IF;

...


Deklarace kurzoru v SQL
Deklarace kurzoru

deklarace_kurzoru ::= DECLARE jméno [ INSENSITIVE | SENSITIVE ] [ SCROLL ] CURSOR FOR specifikace_kurzoru;

specifikace_kurzoru  ::= dotazový_výraz FOR { READ ONLY | UPDATE [ OF sloupec {, sloupec }… ] }

Touto deklarací se deklaruje kurzor, který lze otevřít příkazem OPEN, posouvat se a číst z něj řádky příkazem FETCH nebo jej používat v příkazech  UPDATE CURRENT OF a DELETE CURRENT OF, a uzavřít jej příkazem CLOSE.

Je-li uvedeno INSENSITIVE, pak změny v datech provedené prostřednictvím kurzoru se v databázi neprojeví. Kurzor bude pracovat s vlastní tabulkou obsahující odpověď na dotazový výraz. Je-li uvedeno SENSITIVE, pak se změny v datech provedené prostřednictvím kurzoru projevují v databázi, což je implicitní stav. SENSITIVE nesmí být uvedeno v deklaraci kurzoru obsahujícího grupování.

Specifikace SCROLL požaduje přístup k datům v kurzoru v libovolném pořadí. Tuto vlastnost mají ve WinBase602 všechny kurzory a proto se SCROLL ignoruje.

Klauzule FOR UPDATE se vylučuje s INSENSITIVE a dá se použít pouze na editovatelné kurzory. Klauzule FOR READ ONLY zabraňuje v editaci dat a vkládání nebo rušení záznamů pomocí tohoto kurzoru.

Odchylky od Intermediate level směrem k Full level nebo k SQL 3

•	Specifikace INSENSITIVE patří do úrovně Full SQL.

•	Klauzuli FOR UPDATE je možno libovolně kombinovat se SCROLL a ORDER BY.

Příklad použití:

DECLARE cur CURSOR FOR

  SELECT Firmy.adresa, CAST (SUM(Objednavky.objed) AS INT)

  FROM Firmy, Objednavky

  WHERE Objednavky.firma=Firmy.firma

  GROUP BY Firmy.firma

FOR READ ONLY;


Řídicí příkazy v SQL
Řídicí příkazy

Jazyk SQL ve WinBase602 obsahuje kromě konceptů z SQL 2 také konstrukce pocházející z SQL 3/PSM. Jde o deklarace lokálních objektů a řídicí příkazy, s jejichž pomocí lze kombinovat provádění tradičních příkazů jazyka SQL, tvořit rutiny a triggery.

Řídicí příkazy dovolují přiřazovat proměnným hodnoty, volat rutiny, vyvolávat a ošetřovat výjimky a vytvářet strukturované programové konstrukce.

Odchylky od Intermediate level směrem k Full level nebo k SQL 3

•	Všechny řídicí příkazy jsou implementovány dle úrovně SQL 3.

V SQL WinBase602 lze použít následující řídicí příkazy:

•	složený příkaz

•	přiřazovací příkaz SET

•	příkaz RETURN

•	příkaz IF

•	příkaz CASE

•	příkaz LOOP

•	příkaz WHILE

•	příkaz REPEAT

•	příkaz LEAVE

•	příkaz FOR

•	příkaz CALL

•	příkaz SIGNAL

•	příkaz RESIGNAL


Složený příkaz v SQL
Složený příkaz

složený příkaz ::= [ návěští : ] BEGIN [ [ NOT ] ATOMIC ]

[ deklarace_proměnných … ]

[ deklarace_rutiny … ]

[ deklarace_výjimky … ]

[ deklarace_kurzoru …]

[ deklarace_handleru …]

[ příkaz …]

END [ návěští ];

Složený příkaz je tvořen jedním nebo více SQL příkazů. Začíná klíčovým slovem BEGIN a končí slovem END. Ve složeném příkazu lze deklarovat lokální objekty (např. proměnné, rutiny, kurzory), které budou existovat (pouze) po dobu provádění složeného příkazu a budou moci být využívány v příkazech obsažených ve složeném příkazu (včetně vnořených složených příkazů). Je-li uvnitř složeného příkazu volána procedura, lokální objekty v ní nejsou viditelné.

Při vstupu do složeného příkazu se vytvoří lokální proměnné. Poté se po řadě provedou v něm obsažené příkazy, leda že dojde k výjimce nebo je proveden příkaz LEAVE. Při opuštění složeného příkazu se uzavřou všechny otevřené lokální kurzory, zaniknou proměnné a zruší se body návratu vytvořené během jeho provádění.

ATOMIC označuje atomický složený příkaz, což znamená, že se provádí jako jeden celek a může být jako celek odvolán v případě chyby. Není-li uvedeno ATOMIC ani NOT ATOMIC, složený příkaz není atomický. V atomickém složeném příkazu nesmí být obsaženy ani provedeny transakční příkazy COMMIT nebo ROLLBACK kromě ROLLBACK TO SAVEPOINT na bod návratu vytvořený uvnitř tohoto složeného příkazu. Deklarace handleru typu REDO nebo UNDO smí být obsažena pouze v atomickém složeném příkazu.

Je-li uvedeno koncové návěští, pak musí být uvedeno také stejné počáteční návěští. Uvnitř složeného příkazu nesmí být žádný příkaz označen stejným návěštím.

V deklaracích bezprostředně obsažených ve složeném příkazu se nesmí vyskytnout dvakrát stejné jméno proměnné resp. rutiny, dvakrát stejné jméno výjimky nebo dvakrát stejné jméno kurzoru.

Rozšíření jazyka SQL proti normě

•	Deklarace rutiny ve složeném příkazu byla vypuštěna z posledních návrhů SQL 3, ve WinBase602 je však přípustná.


Přiřazovací příkaz SET v SQL
Přiřazovací příkaz SET

přiřazovací_příkaz ::= SET cíl_přiřazení = výraz;

Příkaz vyčíslí hodnotu výrazu a přiřadí ji do cíle přiřazení. Cílem přiřazení může být lokální proměnná, parametr, proměnná klienta, dynamický parametr nebo sloupec s případným indexem, znakem # nebo dvojindexem.

Nejsou-li typy výrazu a cíle přiřazení stejné, pak

•	jsou-li oba numerické typy, dojde k implicitní konverzi; přitom může nastat chybový sqlstate 22003, pokud hodnota výrazu nepatří do typu cíle přiřazení;

•	jsou-li oba řetězce znaků, dojde k implicitní konverzi; přitom může nastat chybový sqlstate 22001, pokud je hodnota výrazu delší, než maximální délka cíle přiřazení;

•	je-li na jedné straně přiřazení typ DATE nebo TIME a na druhé straně typ TIMESTAMP, dojde k implicitní konverzi;

•	jinak nastane chyba (nekompatibilní typy) již při překladu přiřazovacího příkazu.

Příklad: přiřazení konstanty do lokální proměnné

  DECLARE EmiPath CHAR(30);

  DECLARE TypAdr CHAR(20);

  SET EmiPath="p:\mail";

  SET TypAdr="Internet";

Příklad: přiřazení hodnoty výrazu do sloupce tabulky

TRIGGER DatTabControlUpd AFTER UPDATE OF dat1 ON Castab

REFERENCING NEW AS novarad

            OLD AS stararad

FOR EACH ROW

BEGIN

  SET novarad.kolikdni=CAST(Abs(novarad.dat1-stararad.dat1) AS INT);

END


Příkaz RETURN v SQL
Příkaz RETURN

příkaz_RETURN ::= RETURN výraz;

Příkaz RETURN určuje hodnotu funkce jako hodnotu výrazu. Tento příkaz musí být umístěn v těle funkce. Typ výrazu musí být takový, aby se dal přiřadit do výsledku funkce. Pro přiřazení platí pravidla uvedená v popisu příkazu SET.

Příkaz RETURN může být obsažen v těle funkce vícekrát a může být proveden opakovaně. Musí však být proveden nejméně jednou, kromě případu, že je funkce (netypicky) volána příkazem CALL jako procedura.

Příklad použití:

FUNCTION maxcislo () RETURNS INT;

BEGIN

  DECLARE maxval INT;

  SELECT MAX(cis)+1 INTO maxval FROM Tab1;

  RETURN (maxval);

END


Příkaz IF v SQL
Příkaz IF

příkaz_IF ::= IF podmínka THEN příkaz …

[ ELSEIF podmínka THEN příkaz … ] …

[ ELSE příkaz … ]

END IF;

Při provádění příkazu IF se po řadě vyhodnocují podmínky, dokud se nenajde první, která má hodnotu TRUE, a pak se provedou za ní následující příkazy. Není-li splněna žádná z podmínek (všechny mají hodnotu FALSE nebo UNKNOWN), provedou se případné příkazy za ELSE.

Příklad: trigger, který zajistí zapsání absolutní hodnoty čísla

TRIGGER befupd BEFORE UPDATE OF CISINT ON Tab2

REFERENCING NEW ROW AS novaradka

FOR EACH ROW

BEGIN

  IF novaradka.cisint < 0 THEN

    SET novaradka.cisint=-novaradka.cisint;

  END IF;

END


Příkaz CASE v SQL
Příkaz CASE

příkaz_CASE ::= jednoduchý_příkaz_CASE | vyhledávací_příkaz_CASE

jednoduchý_příkaz_CASE ::= CASE výraz { WHEN výraz2 THEN příkaz… }… [ ELSE příkaz… ] END CASE;

vyhledávací_příkaz_CASE ::= CASE { WHEN podmínka THEN příkaz… }… [ ELSE příkaz… ] END CASE;

Příkaz CASE slouží k výběru a provedení jedné z několika možných posloupností příkazů. Jednotlivé posloupnosti jsou uvedeny ve větvích začínajících WHEN nebo ELSE.

V jednoduchém příkazu CASE se hodnota výrazu hledá po řadě ve větvích mezi hodnotami výrazů2. Ve vyhledávacím příkazu CASE se po řadě hledá větev, v níž je podmínka splněná. Nalezne-li se taková větev, provedou se příkazy v této větvi následující za THEN.

Pokud není nalezena žádná vyhovující větev, pak obsahuje-li příkaz větev s ELSE, provedou se příkazy za ELSE. Jinak nastane chybový sqlstate 20000.

Dojde-li při provádění posloupnosti příkazů k výjimce, pokračuje se dále v závislosti na dostupném handleru této výjimky. Není-li nalezen CONTINUE handler, provádění příkazů v posloupnosti se ukončí.

Odlišnosti od normy

•	Na rozdíl od návrhu normy SQL 3 WinBase602 nevyžaduje, aby vyhodnocení výrazu bylo deterministické a bez vedlejších efektů. Výraz se vyhodnotí pouze jednou.

Příklad použití:

vyhledávací CASE (obdoba příkladu u IF)

TRIGGER befupd BEFORE UPDATE OF CISLO ON Tab3

REFERENCING NEW ROW AS novaradka

FOR EACH ROW

BEGIN

  CASE

    WHEN novaradka.cislo < 0 THEN

      SET novaradka.cislo=-novaradka.cislo;

  END CASE;

END

jednoduchý CASE

Změňte cenu u položek ceníku takto: položky ceníku začínající na X +10%, začínající na A +100%, začínající na B smazat (obdoba příkladu u FOR)

PROCEDURE ZmenaCeniku();

BEGIN

  FOR radek AS curcen SENSITIVE CURSOR FOR

    SELECT cislo_pol, cena

    FROM Cenik

  DO

    BEGIN

      CASE SUBSTRING(radek.cislo_pol FROM 1 FOR 1)

        WHEN "X" THEN

          UPDATE  SET cena = cena*1.1 WHERE CURRENT OF curcen;

        WHEN "A" THEN

          UPDATE  SET cena = cena*2 WHERE CURRENT OF curcen;

        ELSE

          DELETE WHERE CURRENT OF curcen;

      END CASE;

    END;

  END FOR;

END;


Příkaz LOOP v SQL
Příkaz LOOP

příkaz_LOOP ::= [ návěští : ] LOOP příkaz … END LOOP [ návěští ];

Příkazy (resp. složené příkazy) obsažené v příkazu LOOP se provádějí opakovaně, dokud se neprovede příkaz LEAVE nebo dokud nedojde k výjimce.

Je-li uvedeno koncové návěští, pak musí být uvedeno také stejné počáteční návěští. Uvnitř příkazu LOOP nesmí být žádný příkaz označen stejným návěštím.

Velmi časté použití nachází LOOP při procházení záznamů kurzoru otevřeného příkazem OPEN (prakticky jediná možnost, jak lze záznamy projít).

Příklad použití:

do tabulky vložit 10 záznamů a vzestupně je očíslovat (zápis ve vnitřním jazyce pomocí SQL_execute)

var

  ss : string[500];

begin

  ss := "BEGIN ATOMIC "

        "DECLARE i INT; "

        "SET i = 1; "

        "label: LOOP INSERT INTO Tab3 (cislo) VALUES (i); "

           "IF i >= 10 THEN LEAVE label; END IF; "

           "SET i = i + 1; "

        "END LOOP label; "

      "END";

  if SQL_execute(ss) then Signalize;

end.

použití LOOP při procházení kurzoru:

PROCEDURE ZmenaCeniku();

BEGIN

  DECLARE err_notfound BIT DEFAULT FALSE;

  DECLARE CONTINUE HANDLER FOR NOT FOUND

    BEGIN

      SET err_notfound=TRUE;

    END;

  DECLARE curcen SENSITIVE CURSOR FOR

    SELECT cislo_pol, cena

    FROM Cenik

  FOR UPDATE;

  DECLARE Polozka CHAR(20);

  DECLARE Cena NUMERIC(14,2);

  OPEN curcen;

  LabelLoop: LOOP

     FETCH NEXT FROM curcen INTO Polozka, Cena;

     IF err_notfound IS TRUE THEN LEAVE LabelLoop; END IF;

     CASE SUBSTRING(Polozka FROM 1 FOR 1)

       WHEN "X" THEN

         UPDATE SET Cena = Cena*0.9 WHERE CURRENT OF curcen;

       WHEN "A" THEN

         UPDATE SET Cena = Cena*2 WHERE CURRENT OF curcen;

       ELSE

         DELETE WHERE CURRENT OF curcen;

     END CASE;

  END LOOP LabelLoop;

  CLOSE curcen;

END;


Příkaz WHILE v SQL
Příkaz WHILE

příkaz_WHILE ::= [ návěští : ] WHILE podmínka DO příkaz … END WHILE [ návěští ];

Při provádění příkazu WHILE se opakovaně vyhodnocuje podmínka a provádějí se příkazy (resp. složené příkazy) v něm obsažené. Provádění skončí, jakmile podmínka bude mít hodnotu jinou než TRUE, provede se příkaz LEAVE nebo dojde k výjimce.

Je-li uvedeno koncové návěští, pak musí být uvedeno také stejné počáteční návěští. Uvnitř příkazu WHILE nesmí být žádný příkaz označen stejným návěštím.

Příklad použití:

do tabulky vložit 10 záznamů a vzestupně je očíslovat (zápis ve vnitřním jazyce pomocí direktiv)

begin

#sqlbegin

  BEGIN

    DECLARE i INT;

    SET i = 1;

    WHILE i <= 10 DO

      INSERT INTO Tab3 (cislo) VALUES (i);

      SET i = i + 1;

    END WHILE;

  END ;

#sqlend

  Signalize;

end.


Příkaz REPEAT v SQL
Příkaz REPEAT

příkaz_REPEAT ::= [ návěští : ] REPEAT příkaz … UNTIL podmínka END REPEAT [ návěští ];

Při provádění příkazu REPEAT se opakovaně provádějí příkazy (resp. složené příkazy) v něm obsažené a vyhodnocuje se podmínka. Provádění skončí, jakmile podmínka bude mít hodnotu TRUE, provede se příkaz LEAVE nebo dojde k výjimce.

Je-li uvedeno koncové návěští, pak musí být uvedeno také stejné počáteční návěští. Uvnitř příkazu REPEAT nesmí být žádný příkaz označen stejným návěštím.

Příklad použití:

do tabulky vložit 10 záznamů a vzestupně je očíslovat (zápis v jazyce SQL)

PROCEDURE Rep ();

  BEGIN

    DECLARE i INT;

    SET i = 1;

    REPEAT

      INSERT INTO Tab3 (cislo) VALUES (i);

      SET i = i + 1;

    UNTIL  i > 10

    END REPEAT;

  END ;


Příkaz LEAVE v SQL
Příkaz LEAVE

příkaz_LEAVE ::= LEAVE návěští;

Příkaz LEAVE způsobí ukončení provádění příkazů ve složeném příkazu, příkazu LOOP, REPEAT, WHILE nebo FOR a pokračování příkazem na prvním řádku za návěštím.

Návěští musí být shodné s návěštím některého příkazu, v němž je příkaz LEAVE obsažen. Je-li příkaz LEAVE použit k ukončení složeného příkazu tvořícího tělo procedury, je možné jak návěští použít jméno procedury.


Příkaz FOR v SQL
Příkaz FOR

příkaz_FOR ::= [ návěští : ] FOR řídicí_proměnná AS [ jméno_kurzoru [ SENSITIVE | INSENSITIVE] CURSOR FOR ] specifikace_kurzoru

DO příkaz… END FOR [ návěští ];

Příkaz FOR slouží k zopakování posloupnosti příkazů pro všechny řádky odpovědi na dotaz zadaného specifikací kurzoru. Provádění příkazu skončí předčasně tehdy, provede-li se příkaz LEAVE na vnější návěští nebo dojde k výjimce.

V příkazech obsažených uvnitř příkazu FOR lze s hodnotami sloupců na aktuálním řádku kurzoru pracovat pomocí zápisu ve tvaru:

řídicí_proměnná.jméno_sloupce

Lze použít např. pro předání hodnoty sloupce proceduře - viz příklad 2. Pokud však přiřadíte sloupci novou hodnotu, na datech v databázi se to neprojeví.

Pro editaci sloupce je nutno použít příkazu UPDATE CURRENT OF, pak se na sloupce odkazuje pouze jejich jménem, bez řídicí proměnné (viz příklad 1).

Je-li uvedeno koncové návěští, pak musí být uvedeno také stejné počáteční návěští. Uvnitř příkazu FOR nesmí být žádný příkaz označen stejným návěštím.

Význam specifikace kurzoru a specifikací SENSITIVE a INSENSITIVE je popsán v části o deklaraci kurzoru.

Je-li uvedeno jméno kurzoru, lze toto jméno uvnitř příkazu FOR používat v příkazech UPDATE CURRENT OF a DELETE CURRENT OF, ale nikoli v příkazech OPEN, CLOSE nebo FETCH.

Příklad použití č.1:

Změňte cenu u položek ceníku takto: položky ceníku začínající na X +10%, začínající na A +100%, ostatní smazat.

PROCEDURE ZmenaCeniku();

BEGIN

  FOR radek AS curcen SENSITIVE CURSOR FOR

    SELECT cislo_pol, cena

    FROM Cenik

  DO

    BEGIN

     IF SUBSTRING(radek.cislo_pol FROM 1 FOR 1) = "X" THEN

       UPDATE  SET cena = cena*1.1 WHERE CURRENT OF curcen;

     ELSEIF SUBSTRING(radek.cislo_pol FROM 1 FOR 1) = "A" THEN

       UPDATE  SET cena = cena*2 WHERE CURRENT OF curcen;

     ELSE

       DELETE WHERE CURRENT OF curcen;

     END IF;

    END;

  END FOR;

END;

Příklad použití č.2:

Příklad z aplikace Knihovna - zrušit rezervace knih, které jsou rezervovány déle než limit.

PROCEDURE CancelRes(IN lim INT);

BEGIN

  DECLARE PROCEDURE CheckResBook(code CHAR(8));  // pomocná lokální procedura

  BEGIN

    DECLARE pocet INT;

    SELECT COUNT(co) INTO pocet                // kolikrát je daná kniha rezervována?

    FROM Rezervace

    WHERE Rezervace.co = code;

    IF pocet = 1 THEN                          // pouze jednou, pak odstraň označení

      UPDATE Knihy

      SET Knihy.rezervovana = FALSE

      WHERE Knihy.kod = code;

    END IF;

  END;

  FOR radek AS pomc SENSITIVE CURSOR FOR      // pro všechny rezervace po limitu proveď

    SELECT *

    FROM Rezervace

    WHERE CURRENT_DATE - Rezervace.dat_rez > lim

  DO BEGIN

      CALL CheckResBook(radek.co);            // změň příznak Rezervovano v tabulce Knihy, je-lirezervace jediná

      DELETE WHERE CURRENT OF pomc;           // smaž záznam v tab. Rezervace

    END;

  END FOR;

END


Příkaz CALL - volání procedury v SQL
Příkaz CALL - volání procedury

volání_procedury ::= CALL [DETACHED] [schema.]jméno ([skutečný_parametr {, skutečný_parametr}… ]);

skutečný_parametr ::= klíčový_parametr | poziční_parametr

klíčový_parametr ::= jméno_formálního_parametru => výraz

poziční_parametr ::= výraz

Příkaz CALL zavolá proceduru vytvořenou příkazem CREATE PROCEDURE (globální - uloženou jako objekt aplikace) nebo lokální (deklarovanou pomocí DECLARE PROCEDURE).

Je možné volat i procedury uložené v jiné aplikaci - jméno procedury prefixujte jménem aplikace (v SQL jazyce schématu) a tečkou. Upozornění: procedura je kompilovaná v kontextu aplikace, kde je uložena, ne v kontextu aplikace, odkud je volána. Zavolá-li procedura tabulku neprefixovanou jménem aplikace, použije se tabulka v té aplikaci, kde je procedura uložena.

Je-li použito slovo DETACHED, procedura se spustí v samostatném vlákně - podrobnosti.

Poziční skutečné parametry se přiřazují formálním parametrům uvedeným v popisu procedury na základě své pozice (po řadě zleva doprava), zatímco klíčové parametry jsou rozlišeny na základě jména formálního parametru. Poziční parametry musí být uvedeny před klíčovými.

Hodnota vstupního parametrem je udána hodnotou výrazu. Typ výrazu musí být takový, aby se jeho hodnota dala přiřadit do formálního parametru. Výstupním nebo vstupně-výstupním skutečným parametrem musí být proměnná nebo sloupec stejného typu, jakého je formální parametr.

Rozšíření jazyka SQL proti normě

•	Skutečný poziční parametr lze přeskočit - místo parametru se uvede pouze za ním následující čárka (následují-li další skutečné parametry) nebo závorka (jde-li o poslední parametr);

Implementací definované vlastnosti SQL ve WinBase602

•	Nespecifikovaný vstupní parametr, pro nějž není definována implicitní hodnota, má hodnotu NULL, nespecifikovaný výstupní parametr se při výstupu nikam nezapíše;

Příklady použití:

Mějme proceduru PARAM s jedním vstupním a jedním výstupním parametrem definovanou takto:

PROCEDURE PARAM( IN dt DATE, OUT res INT );

BEGIN

  SELECT COUNT(*) INTO res

  FROM Tab1

  WHERE dat = dt;

END

Proceduru lze volat (např. z vnitřního jazyka) takto (poziční parametry):

var

  datum : date;

  kolik : integer;

begin

  datum := 19.3.1999;

#sql CALL PARAM(:<datum, :>kolik);

  Info_box("",Int2str(kolik)) ;

end.

nebo takto (klíčové parametry):

#sql CALL PARAM(res=>:>kolik, dt=>:<datum);


Příkaz SIGNAL v SQL
Příkaz SIGNAL

příkaz_SIGNAL ::= SIGNAL identifikátor_výjimky;

Příkaz vyvolá zadanou uživatelem definovanou výjimku. Výjimka musí být předem deklarována. Je-li deklarován handler pro tuto výjimku, handler se provede a v provádění příkazů se pokračuje v závislosti druhu handleru a místě, kde byl nalezen.

Pokud se pro zadanou výjimku nenajde handler na žádné úrovni, nastane chybový sqlstate 45000.


Příkaz RESIGNAL v SQL
Příkaz RESIGNAL

příkaz_RESIGNAL ::= RESIGNAL [ identifikátor_výjimky ];

Příkaz se smí použít pouze uvnitř handleru výjimky. Příkaz předá zadanou výjimku resp. výjimku, která je právě zpracovávána (není-li identifikátor_výjimky uveden), ke zpracování vnějšími handlery. Je-li vně prováděného handleru deklarován handler pro tuto výjimku, handler se provede a v provádění příkazů se pokračuje v závislosti na druhu handleru a místě, kde byl nalezen.

Pokud se pro zadanou výjimku nenajde handler na žádné úrovni, nastane chybový sqlstate 45000.


Rutiny uložené na serveru v SQL
Procedury a funkce uložené na serveru

Procedury a funkce uložené na serveru (označované souhrnně jako rutiny) zjednodušují tvorbu databázových aplikací a urychlují jejich běh. Klientská aplikace využívající uložených rutin pouze volá hotové rutiny (přitom jim předává vstupní parametry a přebírá výstupní), místo aby posílala serveru zvláštní požadavek na provedení každého příkazu obsaženého v rutinách.

Proceduru lze provést tak, že se zavolá pomocí SQL příkazu CALL.

Funkce se provede, vyskytne-li se její volání jako součást výrazu. Během provádění funkce musí být v jejím těle proveden příkaz RETURN. Pokud proveden není, nastane chybový sqlstate 2F001.

Rutinu lze vytvořit, modifikovat a zrušit:

•	buď interaktivně ve vývojovém prostředí WinBase602 pomocí nástrojů na řídicím panelu aplikace,

•	nebo pomocí příkazů jazyka SQL CREATE, ALTER a DROP.

V obou prostředích se rutina definuje pomocí jazyka pro psaní rutin a triggerů z SQL 3. Ve vývojovém prostředí WinBase602 začíná text editované rutiny slovem PROCEDURE nebo FUNCTION, slovo CREATE nebo ALTER se neuvádí.

Rozšíření jazyka SQL proti normě

•	Ve WinBase602 lze funkci volat příkazem CALL stejně jako proceduru. Při tomto způsobu volání se hodnota funkce ignoruje a provedení příkazu RETURN se nevyžaduje - je-li proveden, nemá žádný efekt.

Podrobnosti o uložených rutinách lze najít na následujících stránkách:

•	Příkaz CALL - předávání parametrů při volání rutiny

•	Syntaxe rutiny

•	Vytvoření rutiny (CREATE ...)

•	Modifikování rutiny (ALTER ...)

•	Zrušení rutiny (DROP ...)

•	Volání externích rutin a předávání parametrů

•	Ladění procedur

Příklad použití funkce jakožto integritního omezení v tabulce:

V tabulce je sloupec RETEZEC a klauzule CHECK (KONTROLA(RETEZEC))).

V téže aplikaci je rutina KONTROLA, která kontroluje, je-li předaný řetězec delší než 8 znaků, jestliže ne, vrátí funkce FALSE a integritní omezení není splněno:

FUNCTION `KONTROLA`(IN str CHAR(12)) RETURNS BOOLEAN;

BEGIN

  DECLARE pom BOOLEAN DEFAULT FALSE;

  IF CHAR_LENGTH(str)>8 THEN

    SET pom=TRUE;

  END IF;

  RETURN pom;

END


Syntaxe rutiny v SQL
Syntaxe rutiny

popis_rutiny ::= { popis_procedury | popis_funkce };

popis_procedury ::= PROCEDURE [schéma.]jméno ([ formální_parametr {, formální_parametr }… ]) ; tělo

popis_funkce ::= FUNCTION jméno ([ formální_parametr {, formální_parametr }… ]) RETURNS typ; tělo

formální_parametr ::= [ mód_parametru ] [ jméno ] typ [ DEFAULT výraz ]

mód_parametru  ::= IN | OUT | INOUT

tělo ::= příkaz | EXTERNAL NAME  označení_externí_rutiny

Každá rutina mu svoje jméno, pomocí něhož se volá. Dále rutina obsahuje výčet formálních parametrů, jimž se při volání rutiny přiřadí skutečné parametry. Po zavolání rutiny se provede její tělo -jednoduchý nebo složený příkaz.

Je-li v těle rutiny v rámci složeného příkazu zavolán příkaz LEAVE, je možné jako návěští použít jméno rutiny.

Mód parametru určuje způsob předávání hodnoty parametru na začátku a konci provádění rutiny. Pokud tělo neobsahuje specifikaci EXTERNAL, pak platí tato pravidla: Při zahájení provádění rutiny se hodnoty skutečných parametrů s módy IN (vstupní parametr) a INOUT (vstupně-výstupní parametry) zkopírují do formálních parametrů. Po skončení provádění rutiny se hodnoty formálních parametrů s módy OUT (výstupní parametry) a INOUT zkopírují (zpět) do skutečných parametrů. Pokud mód není uveden, pak se v případě funkce předpokládá IN, v případě procedury se odvodí ze zacházení s formálním parametrem v těle procedury takto: parametry, jejichž hodnota se čte, mají mód IN, parametry, do nichž se zapisuje, mód OUT, a parametry, jejichž hodnota se čte i přepisuje, mód INOUT.

Pokud při volání rutiny není některý parametr uveden, pak příslušný formální parametr bude mít hodnotu výrazu uvedeného za DEFAULT. Není-li takový výraz uveden, bude hodnota parametru NULL. Je-li mód takového parametru OUT nebo INOUT, nezapíše se při ukončení rutiny hodnota formálního parametru nikam.

Jméno parametru lze ve specifikaci formálního parametru vynechat. Na takový parametr se však nelze v těle odvolávat. Vynechání jména má proto smysl pouze u externích rutin.

Rutina, v jejímž těle je specifikováno EXTERNAL, je implementována v externí knihovně DLL. Označení externí rutiny je řetězec znaků ve tvaru ‘jméno_funkce@jméno_knihovny’. Ve jméně knihovny lze uvést cestu - pokud cesta uvedena není, hledá se podle pravidel operačního systému. Pokud knihovna není nalezena nebo pokud v knihovně není nalezena funkce uvedeného jména, nastane chybový sqlstate 38001.

Pro předávání parametru do externích rutin platí přísná pravidla definující vztah mezi formálními parametry uvedenými v deklaraci a parametry volaných rutin vytvořených v externím jazyce. Viz Volání externích rutin a předávání parametrů.

Hodnota funkce nesmí být typu Podpis, Historie, Datumovka, ukazatele nebo multiatribut. Typ formálních parametrů rutin nesmí být multiatribut.

Rozšíření jazyka SQL proti normě

•	Ve WinBase602 funkce smějí mít parametry s módem IN, OUT nebo INOUT, zatímco SQL 3 povoluje pouze mód IN.

Příklad použití: (z aplikace Knihovna)

PROCEDURE CancelRes(IN lim INT);

BEGIN

  DECLARE PROCEDURE CheckResBook(code CHAR(8));  // pomocná lokální procedura

  BEGIN

    DECLARE pocet INT;

    SELECT COUNT(co) INTO pocet               // kolikrát je daná kniha rezervována?

    FROM Rezervace

    WHERE Rezervace.co = code;

    IF pocet = 1 THEN                        // pouze jednou, pak odstraň označení

      UPDATE Knihy

      SET Knihy.rezervovana = FALSE

      WHERE Knihy.kod = code;

    END IF;

  END;

  FOR radek AS pomc SENSITIVE CURSOR FOR        // pro všechny rezervace po limitu proveď

    SELECT *

    FROM Rezervace

    WHERE CURRENT_DATE - Rezervace.dat_rez > lim

  DO BEGIN

      CALL CheckResBook(radek.co);      // změň příznak Rezervovano v tabulce Knihy, je-li rezervace jediná

      DELETE WHERE CURRENT OF pomc;     // smaž záznam v tab. Rezervace

    END;

  END FOR;

END


Vytvoření rutiny - CREATE PROCEDURE a CREATE FUNCTION v SQL
Vytvoření rutiny - CREATE PROCEDURE a CREATE FUNCTION

příkaz_CREATE_routine ::= CREATE popis_rutiny;

Příkaz vytváří novou rutinu uloženou na serveru podle definice popis rutiny.

Alternativně lze rutinu vytvořit pomocí řídicího panelu vývojového prostředí WinBase602.

Příklad použití:

Funkce, která vrátí o 1 větší číslo než je největší současné

CREATE FUNCTION maxcislo () RETURNS INT;

  BEGIN  DECLARE maxval INT;

  SELECT MAX(cis)+1 INTO maxval FROM Tab1;

  RETURN (maxval);

END

Příklad požití:

Procedura, která spočítá, kolik je v tabulce záznamů vyhovujících podmínce

PROCEDURE RecCount (IN cislo INT, OUT res INT);

  BEGIN

    SELECT  COUNT(*) INTO res

    FROM    Tab2

    WHERE   cisint = cislo;

  END


Modifikování rutiny - ALTER PROCEDURE a ALTER FUNCTION v SQL
Modifikování rutiny - ALTER PROCEDURE a ALTER FUNCTION

příkaz_ALTER_routine ::= ALTER popis_rutiny;

Příkaz modifikuje rutinu, jejíž jméno je součástí popisu procedury nebo popisu funkce. Příkaz předpokládá, že taková globální rutina existuje. Rutiny deklarované jako lokální uvnitř složeného příkazu nelze modifikovat.

Při modifikování se v rutině stávající popis procedury nebo popis funkce nahradí zadaným popisem procedury resp. popisem funkce. Přitom se neprovádí syntaktická kontrola popisu, takže na serveru lze uložit i nehotovou rutinu.

POZOR: Změna definice rutiny se projeví po uzavření transakce obsahující tento příkaz. I po tomto okamžiku pracují se starou verzí rutiny:

•	příkazy zaslané serveru ve stejném požadavku klienta jako příkaz ALTER routine;

•	dříve připravené příkazy odvolávající se na tuto rutinu (včetně příkazů připravených jinými klienty);

•	dříve otevřené kurzory (včetně kurzorů otevřených jinými klienty).


Zrušení rutiny - DROP PROCEDURE a DROP FUNCTION v SQL
Zrušení rutiny - DROP PROCEDURE a DROP FUNCTION

příkaz_DROP_routine ::= DROP { PROCEDURE | FUNCTION } [schéma.]jméno;

Příkaz zruší rutinu zadanou jménem. Příkaz předpokládá, že taková globální rutina existuje. Rutiny deklarované jako lokální uvnitř složeného příkazu nelze (a nemá smysl) rušit.

POZOR: Rutina skutečně zanikne až poté, co je dokončen požadavek klienta na server obsahující tento příkaz a co jsou zrušeny všechny připravené příkazy odvolávající se na tuto rutinu (včetně příkazů připravených jinými klienty).


Volání externích rutin v SQL
Volání externích rutin a předávání parametrů

Rutiny uložené na serveru mohou volat procedury a funkce vytvořené v externím programovacím prostředí. Způsob volání těchto rutin je popsán v popisu procedury.

O externích rutinách se předpokládá, že používají volací konvenci _STDCALL. Musí být umístěny v 32-bitové knihovně DLL. Volání 16-bitových rutin nebo rutin s jinou volací konvencí není možné.

Formální parametry označené OUT nebo INOUT se jim předávají referencí (tedy předává se adresa hodnoty parametru), formální parametry označené IN nebo neoznačené se předávají hodnotou. Označení a typ formálního parametru v deklaraci rutiny musí souhlasit s typem a způsobem předávání parametru v modulu, v němž je rutina implementována, podle pravidel daných touto tabulkou:

typ v popisu rutiny v SQL	typ v jazyce C/C++	typ v jazyce PASCAL
IN INT	int	Integer
OUT INT	int *	VAR Integer
IN SMALLINT	short	SmallInt
OUT SMALLINT	short *	VAR SmallInt
IN REAL	double	Double
OUT REAL	Double *	VAR Double
IN CHAR(N)	Struct { char[N]; }	pole znaků předávané hodnotou
OUT CHAR(N)	char *	PChar
IN BIT(1)	char	Boolean
OUT BIT(1)	char *	VAR Boolean
IN BIT(N), N > 1	Struct { char[N]; }	pole bajtů předávané hodnotou
OUT BIT(N) , N > 1	char *	PChar
OUT CLOB	char *	PChar

Pro mód INOUT platí stejná pravidla jako pro mód OUT.

S type REAL lze zacházet stejně jako s DOUBLE PRECISION. S typy TIME, DATE a TIMESTAMP lze zacházet stejně jako s type INT, ale na straně externí rutiny je nutné správné dekódování hodnoty.

Externí rutině lze předat jako parametr hodnotu proměnné velikosti (BLOB, CLOB). Hodnotu lze měnit, nesmí však zvětšít svoji velikost.


Triggery v SQL
Triggery

Trigger je nástroj, který zajišťuje automatické provedení programu v jazyce SQL při vložení, zrušení nebo změně záznamu v určité tabulce. Trigger může například zajistit, že:

•	před vložením nového záznamu do tabulky bude provedena kontrola jeho obsahu a doplněny hodnoty některých sloupců;

•	po smazání záznamu se provedou následné akce;

•	při změně hodnoty určitého sloupce v záznamu se porovná stará a nová hodnota a na základě jejich vztahu se provedou další akce.

Triggery zjednodušují tvorbu aplikací, protože přenášejí část práce databázové aplikace na server. Umožňují centralizované definování pravidel platných pro informační systém. Existuje-li například v podnikovém informačním systému tabulka zaměstnanců, lze pomocí triggerů popsat, jaké všechny akce musí být provedeny při přijetí nebo propuštění zaměstnance, změně platu nebo přeřazení do jiného oddělení. Tyto akce se naprogramují na jednom místě, ale budou sloužit všem aplikacím, které manipulují s tabulkou zaměstnanců. Dodržení pravidel pro údržbu evidence zaměstnanců pak bude zajišťovat server automaticky a konzistence dat bude zajištěna bez ohledu na možné chyby v měnících se aplikacích.

Trigger je pojmenovaným objektem patřícím do databázové aplikace. Má tyto vlastnosti:

•	je svázán s určitou tabulkou a reaguje na změny v této tabulce;

•	reaguje na právě jednu z SQL akcí INSERT, DELETE nebo UPDATE, triggery reagující na UPDATE mohou navíc specifikovat množinu sloupců, jejichž současná změna (všech vyjmenovaných) je spouští; trigger se spouští také prováděním obdobných akcí při práci s formuláři;

•	provádí se buď před (BEFORE) provedením výše specifikované akce, nebo po ní (AFTER); pro triggery spouštěné jinak než SQL příkazem (práce s formuláři) platí tato výjimka: trigger spuštěný při vložení záznamu (INSERT) může být pouze AFTER (může např. zapsat hodnoty do vloženého záznamu);

•	trigger nelze vyvolat editací hodnot multiatributu;

•	pokud akce ovlivňuje více než jeden záznam, pak se může spouštět buď pro každý ovlivněný (tj. vložený, zrušený nebo změněný) záznam zvlášť, nebo pro všechny záznamy najednou;

•	může obsahovat podmínku, která se vyhodnotí před provedením triggeru a pokud není splněna, trigger nebude spuštěn;

•	specifikuje akci (zapsanou v jazyce pro tvorbu rutin - PSM), která bude automaticky provedena, jakmile jsou splněny podmínky pro spuštění triggeru.

Při provedení konkrétní akce mohou být splněny podmínky pro spuštění více než jednoho triggeru. V takovém případě jsou spuštěny po řadě všechny. V současné podobně návrhu normy SQL 3 není zahrnut způsob, jak by uživatel v textu triggerů mohl definovat pořadí jejich spouštění. Je pravděpodobné, že před definitivní redakcí normy bude tento způsob specifikován a poté bude přidán i do WinBase602.

Provádění triggerů může měnit obsah databáze a tím spouštět další triggery. Spouštění triggerů se může do sebe libovolně zanořovat.

Pokud příkaz, který spustil trigger, je odvolán (kvůli chybě nebo v důsledku provedení příkazu ROLLBACK), pak také všechny akce, které v databázi trigger provedl, budou odvolány. Je-li trigger spuštěn v transakci, pak se provádí jako součást této transakce. Chyba, která nastane při provádění triggeru, má stejné důsledky, jako chyba v příkazu, který trigger spustil.

Uvnitř triggerů se nesmí provádět transakční příkazy COMMIT ani ROLLBACK, v opačném případě nastane chybový sqlstate 2D000.

Při provádění triggerů se nekontrolují práva. Aby díky tomu nemohlo dojít k neoprávněnému zápisu, může triggery vytvářet pouze správce databáze resp. správce aplikace.

INSERT a UPDATE triggery se nespouštějí při importu dat do tabulky. DELETE triggery se nespouštějí při smazání tabulky jako objektu (při mazání záznamů samozřejmě ano).

Podrobnosti o triggerech lze najít na následujících stránkách:

•	Syntaxe triggeru

•	Odlišnosti při spouštění triggerů editací formuláře

•	Příkaz CREATE TRIGGER

•	Příkaz ALTER TRIGGER

•	Příkaz DROP TRIGGER

•	Efektivita triggerů

•	Ladění triggerů


Triggery spouštěné editací dat ve formuláři

Triggery definované v aplikaci lze spouštět i při interaktivní práci s formuláři vedoucími do dat, na něž byly triggery navrženy. Při navrhování je třeba uvažovat následující odlišnosti od triggerů, spouštěných přímo SQL příkazem.

INSERT TRIGGER

Vložení nového záznamu ve formuláři se chová odlišně od vložení záznamu pomocí SQL příkazu INSERT. Nejprve se vloží "fiktivní" záznam, který má všechny hodnoty NULL, po zapsání hodnot se teprve provede kontrola integrity apod. INSERT trigger může reagovat pouze AFTER a nemůže odkazovat na žádné hodnoty, protože nejsou dosud vloženy. Může ale vložit do nového záznamu nějakou (implicitní) hodnotu.

Po zapsání hodnot do nového záznamu se uplatní UPDATE trigger.

UPDATE TRIGGER

Chováním UPDATE triggeru je obdobné jako v SQL variantě. Je nutné pamatovat, že formulář se po provedení trigeru automaticky nepřekreslí.

Příklad:

Po vložení záznamu se do sloupců, které nebyly vyplněny, dosadí implicitní hodnoty

TRIGGER jedna AFTER INSERT ON Tab2

REFERENCING NEW ROW AS novaradka

FOR EACH ROW

BEGIN

  SET novaradka.cisint=-99;

  SET novaradka.retez2="AHOJ";

END

Příklad:

po přepsání sloupce dat1 v tabulce DatTab se do sloupce kolikdni zapíše rozdíl mezi starou a novou hodnotou

TRIGGER DatTabControlUpd AFTER UPDATE OF dat1 ON DatTab

REFERENCING NEW AS novarad

            OLD AS stararad

FOR EACH ROW

BEGIN

  SET novarad.kolikdni=CAST(Abs(novarad.dat1-stararad.dat1) AS INT);

END

Příklad:

po přepsání jakéhokoliv sloupce v tabulce CasTab se do sloupce rozdil zapíše rozdíl v sekundách sloupců cas1 a cas2

TRIGGER CasTabControlUpd AFTER UPDATE ON Castab

REFERENCING NEW AS novarad

FOR EACH ROW BEGIN

   SET novarad.rozdil=CAST(Abs((novarad.cas2-novarad.cas1)/1000) AS INT);

END

Pro případ, že by se měl trigger spouštět pouze při přepsání sloupců cas1 nebo cas2, je nutné vytvořit dva triggery, lišící se (kromě názvu) pouze v části

... AFTER UPDATE OF cas1 ON Castab ...

... AFTER UPDATE OF cas2 ON Castab ...

Varianta

... AFTER UPDATE OF cas1,cas2 ON Castab ...

spustí trigger pouze v případě, že jsou změněny oba sloupce najednou!


Triggery - popis syntaxe (SQL)
Syntaxe popisu triggeru

popis_triggeru ::= TRIGGER [schéma.]jméno_triggeru [ BEFORE | AFTER ] akce ON jméno_tabulky [ reference ] [ granularita ] [ WHEN ( podmínka ) ] příkaz

akce ::= [ INSERT | DELETE | UPDATE [ OF sloupec { , sloupec }… ] ]

reference ::= REFERENCING { OLD [ ROW ] [ AS ] stará_řádka | NEW [ ROW ] [ AS ] nová_řádka }…

granularita ::= FOR EACH { ROW | STATEMENT }

Jméno triggeru musí být unikátní v rámci aplikace. Jméno tabulky musí označovat tabulku existující v rámci stejné aplikace a sloupce musí být jména vybraných sloupců této tabulky. Specifikace INSERT, DELETE nebo UPDATE říká, při jaké operaci s obsahem tabulky bude trigger spuštěn. Jsou-li za UPDATE uvedena navíc jména sloupců, bude spuštěn pouze při operacích modifikujících tyto sloupce, není-li seznam sloupců uveden, trigger se spustí při změně v každém sloupci.

Identifikátory stará řádka a nová řádka umožňují odvolávat se v podmínce a v příkazu na obsah databázového záznamu před a po provedení akce, která trigger spustila. Zápis ve tvaru stará_řádka.sloupec resp. nová_řádka.sloupec označuje starou resp. novou hodnotu sloupce. Je-li uvedeno INSERT, nesmí být uvedena stará řádka, je-li uvedeno DELETE, nesmí být uvedena nová řádka, neboť tyto pojmy nemají v těchto případech smysl. Identifikátory stará řádka a nová řádka nesmí být stejné.

Specifikace FOR EACH ROW říká, že trigger bude spuštěn pro každý změněný řádek zvlášť. Specifikace FOR EACH STATEMENT říká, že bude spuštěn pouze jednou v rámci provádění celého SQL příkazu, při němž se mění více řádků najednou. Není-li uvedeno jedno ani druhé, míní se FOR EACH STATEMENT. Specifikace nové řádky a staré řádky je povolena pouze v případě, že je uvedeno FOR EACH ROW. Transientní tabulky triggerů (dočasné tabulky obsahující smazané nebo vložené záznamy) nejsou ve WinBase602 zatím implementovány, proto varianta triggerů FOR EACH STATEMENT není příliš užitečná - nelze přečíst staré a nové hodnoty v měněných řádcích. V této verzi je proto doporučováno použít FOR EACH ROW vždy.

Při spuštění triggeru se nejprve vyhodnotí podmínka, a je-li splněná, provede se příkaz (jednoduchý nebo složený). V rámci podmínky ani příkazu nesmí být proveden příkaz otevírající nebo uzavírající transakci.

BEFORE trigger při svém provádění vidí v tabulce původní verzi dat, zatímco AFTER trigger vidí již změněnou verzi dat. Ostatní klienti vidí změny (způsobené příkazem SQL nebo triggery) až po uzavření transakce.

Příklad použití:

trigger zajistí, že při vkládání záznamu do tabulky Firmy bude sloupec nazev zapsán velkými písmeny

TRIGGER VelkaPismena AFTER INSERT ON Firmy

REFERENCING NEW ROW AS novaradka

FOR EACH ROW

BEGIN

 SET novaradka.nazev=UPPER(novaradka.nazev);

END


Příkaz CREATE TRIGGER

příkaz_CREATE_TRIGGER ::= CREATE popis_triggeru;

Příkaz CREATE TRIGGER vytváří nový trigger podle popisu. Přitom musí existovat tabulka, na níž trigger odkazuje, a nesmí existovat jiný trigger stejného jména.

Alternativně lze trigger vytvořit pomocí řídicího panelu vývojového prostředí WinBase602.


Příkaz ALTER TRIGGER (SQL)
Příkaz ALTER TRIGGER

příkaz_ALTER_TRIGGER ::= ALTER popis_triggeru;

Příkaz ALTER TRIGGER modifikuje existující trigger Stará definice bude přepsána novou podle popisu. Při modifikaci triggeru se netestuje jeho syntaxe, do databáze lze tudíž uložit ještě nehotový trigger. Za příkazem ALTER TRIGGER nesmí následovat žádný další příkaz.

Alternativně lze trigger modifikovat v editoru otevřeném z řídicího panelu vývojového prostředí WinBase602.


Příkaz DROP TRIGGER

příkaz_DROP_TRIGGER ::= DROP [schéma.]jméno_triggeru;

Příkaz DROP TRIGGER zruší existující trigger zadaného jména. Po zrušení bude trigger nadále fungovat v dříve připravených příkazech.

Alternativně lze trigger zrušit z řídicího panelu vývojového prostředí WinBase602.


Efektivita triggerů

Provedení akcí pomocí triggeru reagujícího na příkaz SQL je zpravidla efektivnější než explicitní volání stejných akcí klientem. Nicméně v efektivitě provádění triggerů existují rozdíly:

•	Nejefektivnější jsou triggery AFTER INSERT a BEFORE DELETE. Jejich provedení neznamená pro server prakticky žádnou dodatečnou zátěž.

•	Dosti efektivní jsou také triggery AFTER DELETE a AFTER UPDATE. Jejich provedení vyžaduje pouze vykopírování určitých řádků z databáze do transientních proměnných.

•	Triggery BEFORE INSERT a BEFORE UPDATE poněkud snižují rychlost provádění operací, protože nutí server, aby kvůli vytvoření správných transientních proměnných prováděl operaci INSERT resp. UPDATE méně efektivním způsobem.

V řadě situací nehraje roli, zda se použije BEFORE nebo AFTER trigger. Pak lze využít výše uvedených řádek k zefektivnění práce serveru.


Sekvence (SQL)
Sekvence

Sekvence je objektem sloužícím ke generování posloupnosti celočíselných hodnot, zejména unikátních klíčů.

Sekvence není svázána s žádnou konkrétní tabulkou, takže se dá použít k vytváření klíčů, které budou unikátní nejen v rámci tabulky, ale i v rámci skupiny tabulek.

Sekvence se dají vytvářet, modifikovat a rušit buď z vývojového prostředí WinBase602 nebo pomocí SQL příkazů CREATE SEQUENCE, ALTER SEQUENCE a DROP SEQUENCE. Sekvence jsou v rámci aplikace označeny svým jménem.

Na hodnoty generované pomocí sekvence se v SQL příkazech odkazuje pomocí zápisů:

jméno_sekvence.CURRVAL  a  jméno_sekvence.NEXTVAL

NEXTVAL označuje novou hodnotu v sekvenci, CURRVAL označuje hodnotu naposled vrácenou pomocí NEXTVAL. Volání CURRVAL se nesmí použít před NEXTVAL, jinak dojde k chybě NO_CURRENT_VAL. Pokud všechny hodnoty předepsané definicí sekvence již byly vyčerpány a není nastaven příznak CYCLE, pak při volání NEXTVAL dojde k chybě WinBase č. 219 (SEQUENCE_EXHAUSTED).

Pokud klient alokuje novou hodnotu pomocí volání NEXTVAL a poté odvolá transakci, alokovaná hodnota se do sekvence nevrací a nebude tedy využita.

Změnit příští hodnotu, kterou sekvence vrátí, lze v SQL pouze tak, že se sekvence zruší a znovu vytvoří. Na řídicím panelu vývojového prostředí lze sekvenci resetovat (nastavit na nově zadané hodnoty včetně počáteční hodnoty).

Z prostředí vnitřního programovacího jazyka lze novou hodnotu generovanou v sekvenci SEQ získat do globální celočíselné proměnné VAL příkazem:

#sql SET :>val=SEQ.NEXTVAL

Na řídicím panelu vývojového prostředí WinBase602 lze pomocí záložky Náhled zobrazit popis zvolené sekvence. V komentáři před touto definicí je příští hodnota, která bude ze sekvence získána. Pokud je pro sekvenci definována vyrovnávací paměť, pak to nemusí být hodnota, kterou vrátí příští volání NEXTVAL, protože některé dosud nepoužité hodnoty mohou být ve vyrovnávací paměti.

Podrobnosti o sekvencích lze najít na následujících stránkách:

•	popis sekvence

•	příkaz CREATE SEQUENCE

•	příkaz ALTER SEQUENCE

•	příkaz DROP SEQUENCE

Odlišnosti od normy

•	Sekvence nejsou součástí standardu SQL 92 ani SQL 3. Ve WinBase602 byly sekvence implementovány v podobě (téměř) shodné s Oracle 8.


Popis sekvence

popis_sekvence :== SEQUENCE [schéma.]jméno_sekvence [ parametr_sekvence … ]

parametr_sekvence :== START WITH celé_číslo  | INCREMENT BY celé_číslo | MAXVALUE celé_číslo | NOMAXVALUE | MINVALUE celé_číslo | NOMINVALUE | CYCLE | NOCYCLE | CACHE celé_číslo | NOCACHE | ORDER | NOORDER

Při vytváření nebo modifikování sekvence lze zadat tyto údaje:

•	počáteční hodnotu, od niž se generuje sekvence čísel (START WITH);

•	krok sekvence, tedy rozdíl mezi následující a minulou hodnotou v sekvenci (INCREMENT BY);

•	maximum, které nelze při generování sekvence překročit (MAXVALUE);

•	minimum, které nelze při generování sekvence překročit (MINVALUE, týká se klesajících sekvencí);

•	příznak, zda sekvence má po dosažení maxima resp. minima pokračovat cyklicky (CYCLE nebo NOCYCLE, CYCLE je nevhodné pro generování unikátních klíčů);

•	použití vyrovnávací paměti a počet hodnot v ní (CACHE nebo NOCACHE).

Se sekvencí je také spojen celočíselný údaj udávající její aktuální hodnotu, tedy hodnotu, která se získá při příštím generování hodnoty ze sekvence.

Implicitní hodnoty nezadaných parametrů při vytváření sekvence jsou START WITH 0 INCREMENT BY 1 NOMINVALUE NOMAXVALUE NOCYCLE CACHE 20. Při modifikování sekvence se parametry neuvedené v příkazu ALTER SEQUENCE zachovají z původní definice sekvence. Zachová se také hodnota, která se má vygenerovat jako příští (pokud patří do intervalu mezi maximální a minimální hodnotou). Změnou počáteční hodnoty sekvence nelze změnit hodnotu, která se ze sekvence vygeneruje jako příští.

Krok sekvence nesmí být nulový. Je-li krok záporný, pak hodnoty v sekvenci klesají, jinak rostou.

Maximum musí být větší než minimum a počáteční hodnota sekvence musí ležet mezi nimi. Je-li krok sekvence kladný, pak implicitní hodnota minima je 1, implicitní hodnota maxima je největší zobrazitelné kladné celé číslo a počáteční hodnota se rovná minimu. Je-li krok sekvence záporný, pak implicitní hodnoty minima je nejmenší zobrazitelné záporné celé číslo, implicitní hodnota maxima je –1 a počáteční hodnota se rovná maximu.

Je-li pomocí parametry CYCLE nastaveno cyklické generování čísel, pak sekvence po dosažení svého maxima (nebo minima v případě klesající sekvence) automaticky vygeneruje jako další hodnotu své (zadané nebo implicitní) minimum (resp.maximum).

Použití vyrovnávací paměti zrychluje generování hodnot v sekvenci. Při první potřebě alokovat hodnotu se naplní celá cache. Pokud některé hodnoty z cache nebudou využity, vrátí se do sekvence při ukončování serveru. Není-li server korektně ukončen v důsledku výpadku systému, hodnoty v cache budou ztraceny.

Parametry ORDER a NOORDER se ignorují a jsou přípustné pouze z důvodu kompatibility.

Příklad použití:

CREATE SEQUENCE SEQ10

START WITH 0

INCREMENT BY 10

NOMAXVALUE

NOMINVALUE

CACHE 2

NOCYCLE

ORDER


Příkaz CREATE SEQUENCE

příkaz_CREATE_SEQUENCE :== CREATE popis_sekvence

Příkaz CREATE SEQUENCE vytváří novou sekvenci podle popisu. Přitom nesmí v aplikaci existovat jiná sekvence stejného jména.

Alternativně lze sekvenci vytvořit pomocí řídicího panelu vývojového prostředí WinBase602.


Příkaz ALTER SEQUENCE

příkaz_ALTER_SEQUENCE :== ALTER popis_sekvence

Příkaz ALTER SEQUNCE modifikuje existující sekvenci. Stará definice bude přepsána novou podle popisu.

Alternativně lze sekvenci modifikovat z řídicího panelu vývojového prostředí WinBase602. Zde je navíc možné sekvenci resetovat - nastavit na nově zadané hodnoty včetně hodnoty počáteční.

Při modifikování sekvence se parametry neuvedené v příkazu ALTER SEQUENCE zachovají z původní definice sekvence. Zachová se také hodnota, která se má vygenerovat jako příští (pokud patří do intervalu mezi maximální a minimální hodnotou). Změnou počáteční hodnoty sekvence nelze změnit hodnotu, která se ze sekvence vygeneruje jako příští. Z SQL nelze tedy změnit příští hodnotu sekvence (kromě zrušení a vytvoření sekvence nové).


Příkaz DROP SEQUENCE

příkaz_DROP_SEQUENCE :== DROP SEQUENCE [schéma.]jméno_sekvence

Příkaz DROP SEQUENCE zruší existující sekvenci zadaného jména v zadané aplikaci.

Alternativně lze sekvenci zrušit z řídicího panelu vývojového prostředí WinBase602.


Transakce a body návratu v SQL
Transakce a body návratu

V jazyce SQL lze členění akcí do transakcí dosáhnout pomocí příkazů START TRANSACTION, COMMIT a ROLLBACK. Kromě transakcí však existuje ještě jeden mechanismus dovolující odvolat skupinu provedených příkazů a vrátit se do stavu před jejich provedením. Tímto mechanismem jsou body návratu (SAVEPOINT).

Pomocí příkazu SAVEPOINT lze uvnitř transakce vytvořit bod návratu. Po provedení dalších příkazů lze se pak příkazem ROLLBACK TO SAVEPOINT vrátit k tomu stavu databáze, který byl v okamžiku provedení příkazu SAVEPOINT. Tento mechanismus je velmi podobný tomu, co se označuje jako vnořené transakce.

Příkaz ROLLBACK odvolává změny provedené v databázi. Neumožňuje odvolat přiřazení hodnoty lokální proměnné ani efekt provedených externích rutin (například odeslání dopisu).

Odchylky od Intermediate level směrem k Full level nebo k SQL 3

•	Transakční příkazy jsou implementovány dle úrovně SQL 3.

V následujících stránkách lze získat podrobnosti o:

•	izolace transakcí

•	příkaz START TRANSACTION

•	příkaz COMMIT

•	příkaz ROLLBACK

•	příkaz SET TRANSACTION

•	příkaz SAVEPOINT

•	příkaz RELEASE SAVEPOINT


Izolace transakcí v SQL
Izolace transakcí

Klient databázového serveru může nastavit stupeň izolace vlastních transakcí od transakcí prováděných jinými klienty. Izolace transakcí určuje, v jaké míře se mohou změny v databázi souběžně prováděné různými klienty navzájem ovlivňovat.

Stupně izolace transakcí jsou definovány svojí schopností bránit vzniku tří fenoménů, k nimž by při souběžné práci klientů A a B mohlo docházet:

Fenomén DIRTY READ: Klient A provede změnu dat a prozatím neukončí transakci. Klient B přečte tato změněná data. Poté klient A odvolá svou transakci. Klient B tedy přečetl data, která nikdy nebyla potvrzena.

Fenomén NON-REPEATABLE READ: Klient A přečte data a prozatím neukončí transakci. Klient B změní nebo zruší tato data a ukončí svou transakci. Klient A ve své transakci znovu čte stejná data a nenajde je.

Fenomén PHANTOM: Klient A položí dotaz, přečte odpověď na něj a prozatím neukončí transakci. Klient B vloží do databáze další řádky vyhovující podmínkám v dotazu klienta A a ukončí svou transakci. Klient A ve své transakci znovu položí stejný dotaz a obdrží jinou odpověď.

Jednotlivé stupně izolace transakcí jsou definovány takto:

Stupeň izolace / fenomén	DIRTY READ	NON-REPEATABLE READ	PHANTOM
READ UNCOMMITTED	může nastat	může nastat	může nastat
READ COMMITTED	nemůže nastat	může nastat	může nastat
REPEATABLE READ	nemůže nastat	nemůže nastat	může nastat
SERIALIZABLE	nemůže nastat	nemůže nastat	nemůže nastat
Stupeň izolace SERIALIZABLE zaručuje, že souběžné transakce budou mít stejný efekt, jako by byly provedeny po sobě. Zároveň však snižuje schopnost serveru provádět akce souběžně, tudíž může snížit propustnost serveru, pokud více klientů pracuje se stejnými daty.

Stupeň izolace transakcí lze nastavit při zahájení transakce příkazem START TRANSACTION nebo před zahájením transakce příkazem SET TRANSACTION.

Interně SQL server WinBase602 implementuje pouze stupně izolace READ COMMITTED a SERIALIZABLE. Při nastavení READ UNCOMMITTED se vnitřně nastaví READ COMMITTED, při nastavení REPEATABLE READ se vnitřně nastaví SERIALIZABLE. Toto chování je plně v souladu s normou.


Příkaz START TRANSACTION v SQL
Příkaz START TRANSACTION

příkaz_START_TRANSACTION ::= START TRANSACTION [ popis_transakce {, popis_transakce } ]

popis_transakce ::= ISOLATION LEVEL izolace | druh_transakce

izolace ::= READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE

druh_transakce ::= READ ONLY | READ WRITE

Tento příkaz zahajuje novou transakci a určuje její druh a stupeň izolace od ostatních souběžně probíhajících transakcí. Transakce trvá až do provedení příkazu COMMIT nebo ROLLBACK.

Druh transakce a stupeň izolace smějí být uvedeny nejvýše jednou. Není-li specifikovaná izolace, uplatní se SERIALIZABLE. Není-li specifikován druh transakce, pak je-li specifikována izolace READ UNCOMMITTED, uplatní se READ ONLY, jinak se uplatní READ WRITE.

Je-li tento příkaz proveden v situaci, kdy je transakce již zahájena, nastane chybový sqlstate 25001. Je-li druh transakce READ ONLY, nelze v transakci provést příkazy UPDATE, DELETE ani INSERT, jinak nastane chybový sqlstate 25006.

Interně SQL server WinBase602 implementuje pouze stupně izolace READ COMMITTED a SERIALIZABLE. Při nastavení READ UNCOMMITTED se vnitřně nastaví READ COMMITTED, při nastavení REPEATABLE READ se vnitřně nastaví SERIALIZABLE. Toto chování je plně v souladu s normou.

Rozšíření jazyka SQL proti normě

•	Oproti SQL 3 WinBase602 navíc připouští, aby v příkazu START TRANSACTION nebyly uvedeny izolace ani druh transakce.


Příkaz COMMIT v SQL
Příkaz COMMIT

příkaz_COMMIT :: COMMIT [ WORK ] [ AND [ NO ] CHAIN ]

Příkaz COMMIT ukončuje právě probíhající transakci. Všechny změny provedené v této transakci se natrvalo zapíšou do databáze a stanou se viditelnými pro ostatní klienty. Zároveň příkaz odstraní dočasné zámky, které byly na záznamech během provádění transakce umístěny.

Pokud při provádění příkazu COMMIT dojde k chybě nebo pokud akce provedené v transakci porušily některé integritní omezení, provede se automaticky příkaz ROLLBACK a transakce je odvolána jako celek.

Příkaz COMMIT zruší všechny body návratu (savepoints) vytvořené v transakci.

Je-li uvedeno AND CHAIN, po ukončení transakce bude zahájena transakce nová se stejnými vlastnostmi jako dosavadní transakce.

Je-li příkaz COMMIT proveden uvnitř atomického složeného příkazu, nastane chybový sqlstate 2D000.


Příkaz ROLLBACK v SQL
Příkaz ROLLBACK

příkaz_ROLLBACK ::= ROLLBACK [ WORK ] [ AND [ NO ] CHAIN ] [ TO SAVEPOINT bod_návratu ] ;

Příkaz ROLLBACK má jeden ze dvou významů v závislosti na tom, zda je v něm uveden bod návratu:

•	Bez bodu návratu ukončuje právě probíhající transakci a ruší všechny změny v databázi, které byly v této transakci provedeny. Zároveň odstraní dočasné zámky, které byly na záznamech během provádění transakce umístěny.

•	S bodem návratu vrací databázi do stavu, v níž byla v okamžiku vytvoření tohoto bodu návratu příkazem SAVEPOINT. Přitom však neodstraní žádné dočasné zámky, které byly na záznamech umístěny.

Provedení příkazu ROLLBACK nemá vliv na hodnoty proměnných a na akce provedené v transakci mimo databázi.

Příkaz ROLLBACK bez bodu návratu zruší všechny body návratu vytvořené v transakci. Příkaz ROLLBACK s bodem návratu zruší všechny body návratu vytvořené po vytvoření tohoto bodu návratu (uvedený bod návratu však zůstane zachován).

Je-li uvedeno AND CHAIN, po ukončení transakce bude zahájena transakce nová se stejnými vlastnostmi jako dosavadní transakce. AND CHAIN se vylučuje s uvedením bodu návratu.

Je-li uvnitř atomického složeného příkazu proveden příkaz ROLLBACK bez bodu návratu, nastane chybový sqlstate 2D000. Je-li uvnitř atomického složeného příkazu proveden příkaz ROLLBACK s bodem návratu vytvořeným před vstupem do tohoto složeného příkazu nebo s nedefinovaným bodem návratu, nastane chybový sqlstate 3B001.


Příkaz SET TRANSACTION v SQL
Příkaz SET TRANSACTION

Příkaz_SET_TRANSACTION ::= SET TRANSACTION [ popis_transakce {, popis_transakce } ]

popis_transakce ::= ISOLATION LEVEL izolace | druh_transakce

izolace ::= READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE

druh_transakce ::= READ ONLY | READ WRITE

Tento příkaz nastavuje vlastnosti následující transakce: určuje její druh a stupeň izolace od ostatních souběžně probíhajících transakcí.

Druh transakce a stupeň izolace smějí být uvedeny nejvýše jednou. Není-li specifikovaná izolace, uplatní se SERIALIZABLE. Není-li specifikován druh transakce, pak je-li specifikována izolace READ UNCOMMITTED, uplatní se READ ONLY, jinak se uplatní READ WRITE.

Je-li tento příkaz proveden v situaci, kdy je transakce již zahájena, nastane chybový sqlstate 25001. Je-li druh transakce READ ONLY, nelze v transakci provést příkazy UPDATE, DELETE ani INSERT, jinak nastane chybový sqlstate 25006.

Interně SQL server WinBase602 implementuje pouze stupně izolace READ COMMITTED a SERIALIZABLE. Při nastavení READ UNCOMMITTED se vnitřně nastaví READ COMMITTED, při nastavení REPEATABLE READ se vnitřně nastaví SERIALIZABLE. Toto chování je plně v souladu s normou.

Odlišnosti od normy

•	Na rozdíl od norem SQL platí ve WinBase602 takto nastavené vlastností transakce nejen pro nejbližší transakci, nýbrž až do příštího nastavení vlastností transakce příkazem SET TRANSACTION nebo START TRANSACTION.


Příkaz SAVEPOINT v SQL
Příkaz SAVEPOINT

příkaz_SAVEPOINT ::= SAVEPOINT bod_návratu

bod_návratu ::= identifikátor | celočíselná_proměnná

Příkaz SAVEPOINT vytváří bod návratu, k němuž se lze později ve stejné transakci vrátit a odvolat tak všechny změny, které v databázi proběhly mezi vytvořením bodu návratu a návratem k němu.

Bod návratu je označuje jedním ze dvou způsobu:

•	identifikátorem (který se nijak nedeklaruje) nebo

•	hodnotou v (dříve deklarované) celočíselné_proměnné. Při vytváření nového bodu návratu je nutno před provedením příkazu SAVEPOINT zapsat do celočíselné_proměnné hodnotu nula. Příkaz SAVEPOINT do proměnné zapíše nenulovou hodnotou jednoznačně identifikující bod návratu.

Pokud bod návratu označený identifikátorem nebo hodnotou celočíselné_proměnné již existuje, pak jej příkaz SAVEPOINT nejprve zruší a pak znovu vytvoří.

Pokud v příkazu SAVEPOINT má celočíselná_proměnná hodnotu, které neoznačuje žádný existující bod návratu a je různá od nuly, nastane chybový sqlstate 3B001.

Počet současně existujících bodů návratu vytvořených jedním klientem je úmyslně omezen na 1000. Při pokusu vytvořit další bod návratu nastane chybový sqlstate 3B002.


Příkaz RELEASE SAVEPOINT v SQL
Příkaz RELEASE SAVEPOINT

příkaz_RELEASE_SAVEPOINT ::= RELEASE SAVEPOINT bod_návratu

Příkaz RELEASE SAVEPOINT ruší uvedený bod návratu, vytvořený příkazem SAVEPOINT. Zároveň ruší všechny body návratu, které byly v této transakci vytvořeny po něm. Body návratu nezrušené explicitně tímto příkazem zaniknou při ukončení transakce.

Pokud uvedený bod návratu neexistuje, nastane chybový sqlstate 3B001.


Kurzory v SQL

Kurzory v SQL jsou nástrojem, jak programově zpracovat odpověď na dotaz. Umožňují číst řádky této odpovědi, modifikovat je nebo rušit je. Kurzor je vždy nastaven na některé řádce odpovědi, je před některou řádkou nebo za poslední řádkou odpovědi.

Lokální kurzory lze deklarovat v každém složeném příkazu. Mimo to lze pracovat s globálními kurzory, které se dají otevřít do libovolného dotazu uloženého v databázové aplikaci.

Každý kurzor musí být nejprve otevřen příkazem OPEN. Poté lze procházet a číst jeho řádky příkazem FETCH, odvolávat se na jeho běžný záznam v příkazech UPDATE CURRENT OF a DELETE CURRENT OF a nakonec jej uzavřít příkazem CLOSE.

Neuzavřené lokální kurzory jsou automaticky uzavřeny při opuštění složeného příkazu, v němž jsou deklarovány.

Jiný způsob, jak otevřít kurzor, projít a zpracovat postupně všechny jeho záznamy a kurzor uzavřít, nabízí řídicí příkaz FOR. Při použití FOR není třeba deklarovat NOT FOUND handler.

V následujících stránkách lze získat podrobnosti o příkazech:

•	příkaz OPEN

•	příkaz FETCH

•	příkaz UPDATE CURRENT OF

•	příkaz DELETE CURRENT OF

•	příkaz CLOSE

Příklad použití:

PROCEDURE Nejlepsi (OUT MaxFirma CHAR(20), OUT MaxObjed INT);

BEGIN

  DECLARE err_notfound BIT DEFAULT FALSE;

  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' BEGIN SET err_notfound=TRUE; END;

  DECLARE cur CURSOR FOR

    SELECT Firmy.adresa, CAST (SUM(Objednavky.objed) AS INT)

    FROM Firmy, Objednavky

    WHERE Objednavky.firma=Firmy.firma

    GROUP BY Firmy.firma

  FOR READ ONLY;

  DECLARE TatoHodnota INT;

  DECLARE TatoFirma CHAR(20);

  SET MaxObjed = 0;

  OPEN cur;

  LabelLoop: LOOP

     FETCH NEXT FROM cur INTO TatoFirma, TatoHodnota;

     IF err_notfound IS TRUE THEN LEAVE LabelLoop; END IF;

     IF TatoHodnota > MaxObjed THEN

        SET MaxObjed = TatoHodnota;

        SET MaxFirma = TatoFirma;

      END IF;

  END LOOP LabelLoop;

  CLOSE cur;

END ;


Příkaz OPEN v SQL
Příkaz OPEN

příkaz_OPEN ::= OPEN jméno_kurzoru;

Příkaz OPEN otevře zadaný kurzor a nastaví se před první řádek odpovědi. Jméno_kurzoru musí být buď deklarováno v deklaraci_kurzoru nebo musí označovat dotaz patřící do aplikace a uložený v databázi.

Pokud zadaný kurzor je již otevřen, nastane chybový sqlstate 24000.


Příkaz FETCH v SQL
Příkaz FETCH

Příkaz_FETCH ::= FETCH [ [ směr ] FROM ] jméno_kurzoru [ INTO cíl [ {, cíl }…] ];

směr ::= NEXT | PRIOR | FIRST | LAST | ABSOLUTE výraz | RELATIVE výraz

Příkaz FETCH nastaví zadaný kurzor na řádek určený klauzulí směr a zapíše hodnoty jednotlivých sloupců toho řádků po řadě do uvedených cílů. Nastavení kurzoru na specifikovaný řádek ovlivní následující příkazy DELETE CURRENT OF a UPDATE CURRENT OF.

Jméno_kurzoru musí být buď deklarováno v deklaraci_kurzoru nebo musí označovat dotaz patřící do aplikace a uložený v databázi.

Není-li uveden směr, použije se směr NEXT. Směry mají tento význam:

•	NEXT - další řádek (první řádek, je-li kurzor nastaven před prvním řádkem);

•	PRIOR - předchozí řádek (poslední řádek, je-li kurzor nastaven za posledním řádkem);

•	FIRST - první řádek odpovědi;

•	LAST - poslední řádek odpovědi;

•	ABSOLUTE - řádek, jehož pořadové číslo v odpovědi udává výraz (řádky jsou očíslovány od jedné);

•	RELATIVE - řádek, který je od běžného řádku vzdálen o počet řádků udaný výrazem (záporná hodnota určuje řádek před běžným řádkem, kladná za běžným řádkem).

Výraz musí být celočíselného typu.

Cílem musí být proměnná, jejíž typ umožňuje přiřazení hodnoty odpovídajícího sloupce kurzoru. Počet cílů musí být stejný jako počet sloupců kurzoru.

Pokud zadaný kurzor není otevřen, nastane chybový sqlstate 34000. Pokud zadaný řádek neexistuje, nastane sqlstate 02000 a kurzor se nastaví před první řádek (při pohybu vpřed) nebo za poslední řádek (při pohybu vzad).


Příkaz UPDATE CURRENT OF (SQL)
Příkaz UPDATE CURRENT OF

příkaz_UPDATE_CURRENT_OF ::= UPDATE [ tabulka ] SET přiřazení {, přiřazení }…  WHERE CURRENT OF jméno_kurzoru;

Příkaz UPDATE CURRENT OF provede změny zadané přiřazeními na řádce, na níž je nastaven kurzor zadaný jménem_kurzoru. Jméno_kurzoru musí být buď deklarováno v deklaraci_kurzoru nebo musí označovat dotaz patřící do aplikace a uložený v databázi. Sloupce uvedené na levé straně všech přiřazení musí být editovatelné.

Je-li v příkazu uvedena tabulka, musí to být (jediná) tabulka zpřístupněná zadaným kurzorem.

Pokud zadaný kurzor není otevřen ), nastane chybový sqlstate 34000, pokud není nastaven na některý řádek (např. je před prvním nebo za posledním řádkem), nastane chybový sqlstate 24000. Je-li příkaz proveden v transakci READ ONLY, nastane chybový sqlstate 25006.

Příklad použití:

Změňte cenu u položek ceníku takto: položky ceníku začínající na X snižte o 10%, začínající na A zvyšte o 100%, ostatní smažte. Je to obdoba příkladu použitého pro demonstraci příkazu FOR:

PROCEDURE ZmenaCeniku();

BEGIN

  DECLARE err_notfound BIT DEFAULT FALSE;

  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' BEGIN SET err_notfound=TRUE; END;

  DECLARE curcen SENSITIVE CURSOR FOR

    SELECT cislo_pol, cena

    FROM Cenik

  FOR UPDATE;

  DECLARE Polozka CHAR(20);

  DECLARE Cena NUMERIC(14,2);

  OPEN curcen;

  LabelLoop: LOOP

     FETCH NEXT FROM curcen INTO Polozka, Cena;

     IF err_notfound IS TRUE THEN LEAVE LabelLoop; END IF;

     IF SUBSTRING(Polozka FROM 1 FOR 1) = "X" THEN

       UPDATE SET Cena = Cena*0.9 WHERE CURRENT OF curcen;

     ELSEIF SUBSTRING(Polozka FROM 1 FOR 1) = "A" THEN

       UPDATE SET Cena = Cena*2 WHERE CURRENT OF curcen;

     ELSE

       DELETE WHERE CURRENT OF curcen;

     END IF;

  END LOOP LabelLoop;

  CLOSE curcen;

END;


Příkaz DELETE CURRENT OF (SQL)
Příkaz DELETE CURRENT OF

příkaz_DELETE_CURRENT_OF ::= DELETE [ FROM tabulka ] WHERE CURRENT OF jméno_kurzoru;

Příkaz DELETE CURRENT OF zruší řádku, na níž je nastaven kurzor zadaný jménem_kurzoru. Jméno_kurzoru musí být buď deklarováno v deklaraci_kurzoru nebo musí označovat dotaz patřící do aplikace a uložený v databázi. Kurzor musí umožňovat rušení záznamů.

Je-li v příkazu uvedena tabulka, musí to být (jediná) tabulka zpřístupněná zadaným kurzorem.

Pokud zadaný kurzor není otevřen), nastane chybový sqlstate 34000, pokud není nastaven na některý řádek (např. je před prvním nebo za posledním řádkem), nastane chybový sqlstate 24000. Je-li příkaz proveden v transakci READ ONLY, nastane chybový sqlstate 25006.


Příkaz CLOSE v SQL
Příkaz CLOSE

příkaz_CLOSE ::= CLOSE jméno_kurzoru;

Příkaz CLOSE uzavře zadaný kurzor. Jméno_kurzoru musí být buď deklarováno v deklaraci_kurzoru nebo musí označovat dotaz patřící do aplikace a uložený v databázi.

Pokud zadaný kurzor není otevřen, nastane chybový sqlstate 34000.


Chyby a jejich ošetřování v SQL
Chyby a jejich ošetřování

Norma SQL předepisuje, že chybové stavy a varování mají být označovány pomocí tzv. sqlstates, což jsou řetězce pěti znaků složené z číslic a velkých písmen latinské abecedy. Norma pro řadu chyb předepisuje, který sqlstate má při jejich výskytu nastat. Mimo to ponechává prostor pro sqlstates definované implementací.

Ve WinBase602 jsou chyby označovány číslem. Některé z těchto chyb odpovídají některému sqlstate, jiné jsou specifické po WinBase602. Vzhledem k tomu, že pro většinu syntaktických chyb a všechny chyby z nedostatku práv existuje jediný sqlstate, poskytují čísla chyb WinBase602 detailnější rozlišení.

Na sqlstates se v příkazech SQL odvolávají deklarace výjimek a handlerů. Chcete-li zachytit a zpracovat určitou chybu, musíte znát její sqlstate. Níže uvedená tabulka specifikuje sqlstates odpovídající jeden k jedné chybám WinBase602. Ostatní (implementací definované) chyby se vyjadřují pomocí sqlstate ve tvaru “Wabcd”, kde abcd je čtyřmístné číslo chyby, doplněné v případě potřeby zleva nulami. Například chybě 171(deadlock) odpovídá sqlstate W0171.

Název sqlstate	číslo chyby ve WinBase602	sqlstate
Kurzor nelze nastavit na neexistující záznam	131	02000
Porušeno omezení tabulky (NOT NULL nebo UNIQUE nebo CHECK nebo referenční integrita)	160,172,174, 175	40002
Neplatný stav kurzoru	196	24000
Neplatné označení savepointu	197	3B001
Překročen limit na počet savepointů	198	3B002
Transakce je již zahájena	199	25001
Nedovolené ukončení transakce v atomickém příkazu	200	2D000
Tato transakce nesmí modifikovat data	201	25006
Číselná hodnota mimo povolený rozsah	202	22003
Nepřípustný znak znemožňuje konverzi typu	203	22018
Řetězec znaků je příliš dlouhý	204	22001
Dělení nulou	205	22012
Odpověď obsahuje jiný počet záznamů než jeden	206	21000
Chyba v určení znaku ESCAPE	207	22019
Příkaz CASE neobsahuje vhodnou větev	208	20000
Uživatelem definovaná výjimka není ošetřena	209	45000
Příkaz RESIGNAL použit mimo ošetření výjimky	210	0K000
Externí rutina nebo knihovna nebyla nalezena	211	38001
Ve funkci nebyl proveden příkaz RETURN	212	2F001
Chyba v akci spuštěné triggerem	214	09000
Kurzor tohoto jména neexistuje	217	34000

Viz také popis zpracování výjimek.


Výjimky a jejich ošetřování v SQL
Výjimky a jejich ošetření

Výjimkami nazýváme nestandardní situace, které mohou vzniknout při provádění příkazů SQL. Příkladem budiž například provádění příkazu FETCH v situaci, kdy požadovaný záznam neexistuje. Taková situace obvykle znamená vznik chyby a její oznámení klientovi. Jazyk SQL však disponuje nástroji, jak výjimky ošetřit, tedy předepsat, co se po vzniku výjimky má dít, a zabránit tak vzniku chyby.

Výjimky jsou trojího druhu:

•	Výjimky odpovídající stavům serveru sqlstate a označované značkou stavu, například "3C000”. Tyto výjimky nastávají, dostane-li se server při plnění příkazů klienta do příslušného stavu.

•	Výjimky deklarované uživatelem v deklaraci CONDITION a označené identifikátorem. Tyto výjimky nastávají, provede-li se v programu příkaz SIGNAL, jsou tedy spouštěny explicitně. Slouží k opuštění posloupnosti příkazů, které se právě provádějí, opuštění jednoho nebo více složených příkazů nebo jedné či více rozpracovaných rutin.

•	Výjimky deklarované uživatelem v deklaraci CONDITION, označené identifikátorem a přiřazené určitému stavu serveru SQLSTATE. Tyto výjimky nastávají buď dostane-li se server při plnění příkazů klienta do příslušného stavu, anebo při explicitním provedení příkazu SIGNAL. Spojují v sobě vlastnosti prvního a druhého typu.

Nastane-li výjimka, systém pro ní hledá tzv. handler. Handler se přiřazuje výjimce nebo třídě výjimek v deklaraci handleru. Při hledání handleru se postupuje od místa, v němž k výjimce došlo, směrem ven. Je-li handler nalezen, provede se a v dalším provádění příkazů se pokračuje v závislosti na druhu handleru.

Dojde-li při provádění handleru H k výjimce, která není uvnitř něj ošetřena, neuplatní se při jejím ošetření handlery deklarované na stejné úrovni jako handler H, ale pouze handlery deklarované vně.

Uvnitř handleru lze použít příkaz RESIGNAL, který předá výjimku zpracovávanou tímto handlerem k vnějšímu ošetření.

Handlery přiřazené k ošetření výjimek mohou zpracovávat také chyby definované implementací WinBase602. Na tyto chyby se deklarace handleru odkazuje pomocí sqlstate ve tvaru Wabcd, kde abcd je číslo chyby, případně doplněné zleva nulami.

Handlery nemohou ošetřovat chyby v syntaxi příkazů SQL.

Odchylky od Intermediate level směrem k Full level nebo k SQL 3

•	Výjimky a jejich ošetření jsou implementovány dle úrovně SQL 3.


Proměnné vnitřního jazyka v SQL příkazech
Proměnné vnitřního programovacího jazyka v příkazech SQL

Příkazy jazyka SQL se z vnitřního jazyka WinBase602 zadávají pomocí funkcí SQL_execute nebo SQL_prepare a SQL_exec_prepared. V těchto příkazech lze používat také globálních proměnných deklarovaných v programu ve vnitřním jazyce, tedy na straně klienta WinBase602. Díky tomu lze zapsat příkazy, jejichž obsah se bude měnit s hodnotami proměnných klienta.

Globální proměnné (při stejné syntaxi) lze použít i při navrhování pevných dotazů z řídicího panelu (nazýváme dynamické dotazy).

Před každou takovou proměnnou s identifikátorem id je nutno uvést v SQL příkazu dvojtečku. Navíc je možno přidat označení, zda jde o přenos hodnoty od klienta na server, ze serveru klientovi nebo oběma směry. Toto označení zefektivní přenosy dat mezi klientem a serverem a tím zrychlí práci. Proměnná se tedy zapíše takto:

•	Proměnná s obousměrným přenosem hodnoty: 	:id nebo :<>id nebo :><id

•	Proměnná, do níž se přenese hodnota přiřazená serverem: 	:>id

•	Proměnná, jejíž hodnotu může server přečíst: 	:<id

V příkazech SQL není možno používat proměnných deklarovaných jako lokální v procedurách a funkcích. Typ proměnných musí odpovídat kontextu, v němž je proměnná použita, proměnné strukturovaných typů (např. pole) používat nelze.

Příklady použití:

Příkaz UPDATE na vybraném záznamu

OS_CISLO := 1294;

PRIDAT := 500;

SQL_execute('UPDATE Zamestnanci SET plat=plat+:<PRIDAT WHERE os_cis:<OS_CISLO');

Čtení hodnoty sloupce PLAT z vybraného záznamu do proměnné PL:

OS_CISLO := 1294;

SQL_execute('SELECT plat INTO :>PL FROM Zamestnanci WHERE os_cis:<OS_CISLO');

Vložení nového záznamu:

OS_CISLO := 1294;

PL := 12000;

JMENO := 'NOVAK';

SQL_execute(

'INSERT INTO Zamestnanci(os_cis,plat,jmeno) VALUES(:PL,:OS_CISLO,:JMENO)');

Volání procedury:

OS_CISLO := 1294;

SQL_execute('CALL JMENO_SEFA(:<OS_CISLO,:>SEF)');

Volání funkce:

OS_CISLO := 1294;

SQL_execute('SET :>MAX_PLAT = MAXIM_PLAT(:<OS_CISLO)');

Příklad dynamického dotazu (v části WHERE se využívá hodnoty globální proměnné d_oblast1), dotaz slouží jako zdroj pro combo, jehož obsah se mění podle toho, jaké předchozí akce uživatel provede:

SELECT Oblasti2.jmeno,Oblasti2.kod

FROM Oblasti2

WHERE SUBSTRING(CAST(kod AS CHAR(2)) FROM 1 FOR 1) = CAST(:d_oblast1 AS CHAR(1))


Příprava a provádění příkazů SQL

Databázový klient WinBase může provádět příkazy jazyka SQL dvojím způsobem:

•	přímo, tedy tak, že pomocí funkce SQL_execute předává serveru příkaz, který má být proveden;

•	s přípravou, tedy tak, že nejprve pomocí funkce SQL_prepare předá serveru příkaz, pak jej pomocí funkce SQL_exec_prepared jednou nebo vícekrát provede, a nakonec přípravu zruší pomocí funkce SQL_drop.

Výhodou přímého způsobu je jednoduchost na straně klienta. Volání jediné funkce vyvolá kompletní zpracování příkazu SQL.

Výhodou provádění SQL příkazů s přípravou je zejména úspora času, pokud se stejný příkaz (případně s různými hodnotami parametrů) má provádět opakovaně. Při zavolání funkce SQL_prepare server kompletně analyzuje příkaz SQL a sestaví optimalizovaný plán pro jeho provedení. Každé zavolání funkce SQL_exec_prepared pak již jen vyvolá uskutečnění tohoto plánu. Funkce SQL_drop zruší již nepotřebný plán provádění příkazu.

Klient může mít v jednom okamžiku řadu připravených příkazů a může je provádět v libovolném pořadí.

Pokud připravený příkaz obsahuje odkazy na globální proměnné projektu klienta, pak se při provádění příkazu uplatní hodnoty proměnných platné v okamžiku volání funkce SQL_exec_prepared. Díky tomu může opakované provedení připraveného příkazu pracovat pokaždé s jinými hodnotami.

Případným voláním funkce Set_application se zruší příprava všech příkazů a zneplatní jejich handle.

Jiný způsob zápisu SQL příkazů v textu programu je možný pomocí direktiv #sql a #sqlbegin a #sqlend. Podrobnosti - viz direktivy


Vlákna a synchronizace

Od verze 6.1 mohou databázové aplikace využívat souběžný běh více vláken řízení na serveru. Mohou spustit vlákna, která se provádějí nezávisle na příchodech požadavků od klientů, mohou jim předávat práci a přebírat výsledky.

Každý požadavek přicházející od klienta na server je zpracováván v samostatném vlákně. Pokud požadavek vyvolá provádění procedury uložené na serveru nebo triggeru, pak má možnost:

•	spustit běh dalších vláken;

•	volat procedury synchronizující běh vláken.

Spuštění dalšího vlákna

Další vlákno lze spustit provedením příkazu:

CALL DETACHED jméno_procedury(parametry ... )

Tento příkaz vytvoří nové, tzv. samostatné vlákno a spustí v něm zadanou proceduru se zadanými parametry. Volající vlákno pak pokračuje nezávisle dál, aniž by čekalo na dokončení této procedury. Jakmile takto zavolaná procedura skončí, je proveden COMMIT a její vlákno je zrušeno.

Samostatné vlákno vytvořené příkazem CALL DETACHED se přihlásí k serveru pod stejným uživatelským jménem, jako spouštějící vlákno, bude mít tedy stejný rozsah práv. Je-li samostatné vlákno spuštěné systémem, má administrátorská práva. Spuštěním nového vlákna se nespotřebovává žádná dodatečná licence.

Při běhu samostatného vlákna bude otevřena ta aplikace, v níž se nachází zavolaná procedura.

Procedura zavolaná v samostatném vlákně smí mít pouze vstupní parametry. Pokud by měla výstupní nebo vstupně-výstupní parametry, mohlo by dojít k pádu systému, pokud by skutečné parametry zanikly před dokončením procedury - kopírování hodnot do výstupních parametrů se totiž provádí až při ukončení procedury, po provedení posledního příkazu. Výsledky činnosti procedury se proto typicky zapisují do databáze.

Periodické provádění práce v samostatném vlákně

Pokud samostatné vlákno má periodicky provádět určitou práci, pak může využit volání standardní funkce Sleep. Tato funkce má jeden celočíselný parametr udávající počet milisekund. Funkce pozastaví provádění procedury, dokud neuplyne zadaný časový interval nebo dokud není ukončen SQL server. Pokud funkce skončí uplynutím intervalu, vrátí TRUE, jinak vrátí FALSE. Konstrukce, která zajistí periodické opakování určité práce každých 15 sekund, může vypadat takto:

REPEAT

   práce opakovaná s 15-sekundovými přestávkami

UNTIL NOT Sleep(15000)

END REPEAT;

Procedura skončí při zastavení SQL serveru.

Synchronizování vláken pomocí semaforů

Potřeba synchronizovat běh vláken vzniká například tehdy, pokud jedno vlákno připravuje práci pro jiné vlákno a chce jej probudit k činnosti nebo pokud naopak čeká na dokončení práce jiným vláknem. Synchonizovat lze kterékoli vlákno s kterýmkoli, bez ohledu ta to, zda běží jako samostatné nebo provádí požadavek klienta a bez ohledu na to, kterým klientem (resp. systémem) bylo spuštěno.

K synchronizaci vláken slouží semafory označené jmény. Vlákno, které chce pracovat se semaforem, zadá jeho jméno a obdrží celočíselný handle semaforu. Pokud dvě vlákna použijí stejné jméno semaforu, obdrží handle ke stejnému semaforu a mohou jej použít k synchronizaci.

Semafor se vytváří pomocí funkce Create_Semaphore, vstupní parametry určují jméno semaforu a pro kolik vláken bude po vytvoření otevřen. Semafor se ruší pomocí funkce Close_Semaphore, ke skutečnému zrušení semaforu však dojde až tehdy, když jej zruší všechna vlákna, která s nim pracují. Operaci zvednutí semaforu provádí funkce Release_Semaphore, atomickou operaci čekání na zvednutý semafor a následné spuštění semaforu provádí funkce Wait_For_Semaphore.

Příklad: Nechť první vlákno připravuje práci pro druhé vlákno a čeká na její dokončení. První vlákno může vypadat takto:

DECLARE nova_prace, prace_hotova INT;

SET nova_prace = Create_Semaphore("nova prace", 0);

SET prace_hotova = Create_Semaphore("prace hotova", 0);

...  // příprava práce pro druhé vlákno

CALL Release_Semaphore(nova_prace);

CALL Wait_For_Semaphore(prace_hotova, -1);

... // práce je hotova, zpracování výsledků

CALL Close_Semaphore(nova_prace);

CALL Close_Semaphore(prace_hotova);

Druhé vlákno může vypadat takto:

DECLARE nova_prace, prace_hotova INT;

SET nova_prace = Create_Semaphore("nova prace", 0);

SET prace_hotova = Create_Semaphore("prace hotova", 0);

LOOP

  CALL Wait_For_Semaphore(nova_prace, -1);

  IF konec THEN LEAVE;

  END IF;

  ... // provedení práce

  CALL Release_Semaphore(prace_hotova);

END LOOP;

CALL Close_Semaphore(nova_prace);

CALL Close_Semaphore(prace_hotova);

Činnost druhého vlákna se ukončí tak, že se nastaví podmínka konec a provede se příkaz:

CALL Release_Semaphore(nova_prace);

Tento model spolupráce dovoluje, aby druhé vlákno mělo větši rozsah práv, než první. Pokud první vlákno chce provést akce, k niž nemá dostatečná oprávnění, musí o ně požádat druhé vlákno.

Příklad: Nechť existuje skupina příkazů, kterou smí v jednom okamžiku provádět nejvýše jedno vlákno. Tento požadavek lze zajistit uzavřením příkazů to takovéto konstrukce:

DECLARE chráněná_sekce INT;

SET chráněná_sekce = Create_Semaphore("chráněná sekce", 1);

CALL Wait_For_Semaphore(chráněná_sekce, -1);

  ... // příkazy

CALL Release_Semaphore(chráněná_sekce);

CALL Close_Semaphore(chráněná_sekce);

Pokud vlákno opomene zrušit semafor, SQL server jej zruší při ukončení vlákna.

Spolupráce vláken a transakce

Pokud jedno vlákno provede změny v databázi a chce, aby změněná data byla viditelné pro jiná vlákna, musí provést explicitní COMMIT. Jinak, v závislosti na nastaveném stupni izolace transakcí, budou ostatní vlákna buď vidět dosud nezměněná data nebo budou pozastavena do dokončení transakce prvním vláknem.

Je-li nastaven stupeň izolace REPEATABLE READ nebo SERIALIZABLE, pak pokud vlákno přečetlo jistá data a chce umožnit jiným vláknům tato data přepsat, musí provést explicitní COMMIT a bez ohledu na to, kým bylo spuštěno.


Skalární dotaz

Dotaz, jehož odpověď obsahuje jediný sloupec; např. SELECT id_firmy FROM Adresar


Rutina

Souhrnné označení pro funkce a procedury uložené na serveru (Stored Procedures)


Subdotazy v SQL
Subdotazy

SQL umožňuje, aby součást podmínky tvořil další dotazový výraz, nazývaný zde zjednodušeně subdotaz. Subdotaz musí být uzavřen v kulatých závorkách. Jako subdotaz může stát kompletní dotazový výraz včetně dalších vnořených subdotazů.

Rozlišují se tři druhy subdotazů:

•	subdotaz, jehož odpověď obsahuje právě jeden řádek a jeden sloupec - odpověď stojí ve funkci výrazu;

Příklad 1:

Vybrat firmy, které mají faktury za více než 10000 Kč

SELECT A.nazev

FROM Firmy A

WHERE 10000 < (SELECT SUM(B.castka)

              FROM FAKTURY B

              WHERE A.cislo=B.firma)

Příklad 2:

Vybrat faktury, které jsou větší než průměrné

SELECT *

FROM Faktury

WHERE castka > (SELECT AVG(castka) FROM Faktury)

•	subdotaz, jehož odpověď obsahuje nula nebo více řádků a jeden sloupec, pro porovnávání se použijí speciální predikáty IN, ALL, ANY.

Příklad 3:

Vybrat faktury firem z Prahy

SELECT Faktury.cislo,Faktury.firma

FROM Faktury

WHERE firma IN (SELECT cislo

                FROM Firmy

                WHERE mesto LIKE "Praha%")

Příklad 4:

Vybrat ty zaměstnance, kteří mají plat větší než všichni zaměstnanci z Prahy

SELECT TAB1.jmeno,TAB1.plat

FROM Lidi TAB1

WHERE plat > ALL (SELECT plat

                  FROM Lidi

                  WHERE adresa LIKE "Praha%")

•	subdotaz, jehož odpověď obsahuje nula nebo více řádků a jeden nebo více sloupců, pro porovnávání se použijí speciální predikáty EXISTS a UNIQUE.

Příklad 5:

Vyberte firmy, které nemají žádné faktury

SELECT nazev

FROM Firmy F

WHERE NOT EXISTS (SELECT * FROM Faktury A

                  WHERE A.nazev=F.nazev)


Úvodní stránka FW
Úvodní stránka - Form Wizard

Form Wizard je nástroj pro automatické vytváření rozhraní jednoduchých aplikací pro Internet, založených na spolupráci browseru, Web serveru a SQL serveru WinBase602 pomocí WinBase Internet Klientů (WBIK). Tvoří jej posloupnost stránek, na nichž se postupně vybírají a zadávají údaje potřebné pro vygenerování aplikace. FW je možné spostit při vytváření nového WWW objektu.

Seznam Internet aplikací, které lze tímto vývojovým, nástrojem vytvořit, je obsažen na následující stránce (po stisku tlačítka Další v dolní části). Aplikace složitější je nutné vytvářet "ručně" (tj. bez tohoto nástroje) standardními prostředky Vývojového prostředí WinBase602. Seznam není konečný a bude se rozšiřovat podle zájmu a potřeb uživatelů.

K dispozici jsou dva základní okruhy wizardů:

•	sběr dat - zadávání údajů do databáze pomocí HTML formuláře

•	publikování dat - vypsání obsahu databázové tabulky nebo dotazu ve formě HTML tabulky

Dále jsou připraveny wizardy složitějších aplikací, jako první je Anketa.

Form Wizard (FW) vygeneruje nutnou kostru Internetové aplikace v takové podobě, aby šlo téměř okamžitě tuto aplikaci vyzkoušet. FW ověří funkčnost CGI (ISAPI) komunikace, nastaví příslušná práva v dotčených tabulkách apod. Výsledkem generování jsou:

1.	statický HTML kód

•	v případě sběru dat se jedná o HTML formulář s tlačítkem SUBMIT;

•	v případě publikování dat či Ankety o odkaz na dynamickou stránku;

2.	potřebné WWW objekty uložené v aplikaci

•	v případě sběru dat se jedná o konektor obsahující INSERT INTO a minimální šablonu.

•	v případě publikování dat se jedná o konektor obsahující SELECT podle zadaných podmínek a šablonu s HTML tabulkou, která se naplní výsledkem SELECTu.

•	v případě Ankety se jedná o dvě šablony.

3.	potřebné další objekty aplikace

•	v případě Ankety se jedná o tabulky a sekvence.

Autorovi aplikace stačí vygenerovaný statický HTML kód vložit do své vyvíjené HTML stránky

Po jednotlivých stránkách průvodce (wizarda) lze přecházet (a libovolně upravovat parametry) pomocí tlačítek Další a Zpět až do okamžiku, kdy se zvolené objekty a HTML kód vygenerují - poté je krok zpět již zablokován.


Aplikací pro Internet se v tomto textu myslí statický HTML kód a jím volaná dynamická HTML stránka (stránky) provádějící databázový příkaz (např. vložení záznamu, vypsání hodnot tabulky apod.)


Výběr druhu
Výběr wizarda

V tomto okně je možné zvolit wizarda připraveného generovat aplikaci pro Internet. Podle zvoleného druhu se začnou nabízet další stránky průvodce, obsahující upřesňující informace potřebné k vygenerování aplikace. Nabídka wizardů není konečná - bude se postupně doplňovat podle potřeb a požadavků uživatelů.

Nabídka je uspořádána stromovým způsobem - na nejvyšší úrovni jsou znázorněny obecné skupiny aplikací, na nižší úrovni jednotlivé konkrétní aplikace. Po najetí myši na položku stromu se v dolní části zobrazí stručný popis. Po stisku pravého tlačítka myši se nabídne lokální nabídka akcí pro vybranou položku. Po poklepání na skupinu se rozbalením nabídne seznam wizardů, po poklepání na konkrétního wizarda se rovnou přejde na další stránku.

První skupinou jsou Formuláře pro sběr dat - slouží k zadávání dat pomocí HTML formulářů do databázových tabulek.

•	Formulář pro vstup dat - obecná aplikace skládající se z HTML formuláře pro zvolené sloupce tabulky, včetně všemožných kontrol a omezení v Java scriptu a WWW objektu, který zajistí INSERT do zvolené tabulky

•	Formulář pro registraci e-mailů -  konkrétnější aplikace pro vkládání e-mailových adres do tabulky (např. pro registraci uživatelů apod.)

Další skupinou je Publikace dat z databáze na Internetu - umožní zobrazit data z databáze v HTML

•	Šablona pro zobrazení dat - vygenerování HTML tabulky obsahující zvolené sloupce zvolené tabulky nebo dotazu včetně možnosti zobrazení po N záznamech a vytvoření statických dotazových polí

Další skupinou jsou Funkční části aplikací - složitější a komplexnější aplikace;

•	Anketa na Internetu - Internetová anketa umožňující na jedné stránce volit z nabídky otázek, aplikace se skládá se ze tří tabulek provázaných referenční integritou, dvoo sekvencí a dvou WWW objektů.

Jako poslední skupina se nabízí Uschované konfigurace - zde se objeví odkazy na již dříve vygenerované a uschované (v posledním kroku průvodce) aplikace, parametry tehdy použité se použijí při tomto průchodu jako defaultní. V nabídce činností (pravé tlačítko myši) lze nalézt příkazy pro odstranění nebo přejmenování vybraného odkazu.


Souhrn informací před generováním

Form Wizard získal na předchozích stránkách všechny potřebné informace k vygenerování rozhraní zvolené aplikace pro Internet. Nabízí nyní souhrn toho, co se bude vytvářet:

•	seznam WWW objektů, které vzniknou v databázové aplikaci - jméno objektu je editovatelné (kliknutí na jméno nebo klávesa F2, je-li řádek vybrán), jméno musí být unikátní v aplikaci, u automaticky nabízeného jména (složeného ze zkratky wizarda a unikátního čísla) je to zajištěno;

•	seznam statických HTML zdrojových textů (většinou jeden), které si autor umístí do své HTML stránky;

Před vlastním generováním rozhraní aplikace Form Wizard ověří funkčnost komunikace Webserver -> WBIK -> SQL server -> WBIK -> Webserver. K tomu, aby test mohl proběhnout, je nutné alespoň jednou projít tzv. Průvodcem připojení WinBase602 SQL serveru a Webserveru (Connectivity Testem) - posloupností stránek, na nichž se vybere webserver a nastaví se parametry této komunikace. Zde zadané údaje se uloží do registrační databáze a v dalších generováních se použijí automaticky. Vstup do Connectivity Testu při prvním použití nebo při změně parametrů se provede stiskem tlačítka Vybrat ve spodní části stránky. Bez průchodu tímto testem nepovolí FW další krok.

Byl-li webserver již v předchozím průchodu vybrán, vlevo od tlačítka je uvedeno jeho jméno.

Po stisku tlačítka Další se vygeneruje rozhraní aplikace podle zadání. Vygenerováním se přeruší možnost procházení průvodcem tam a zpět, tzn. že po vygenerování již není možnost změnit některé parametry aplikace (jedině začít znovu od začátku, ulehčením může být uložení použitých parametrů a použití jich při dalším zavolání Form Wizarda).


Vygenerovaný HTML kód

Průvodce úspěšně vygeneroval potřebné WWW objekty a uložil je do databázové aplikace. Další změny a úpravy jsou možné pouze ve Vývojovém prostředí WinBase602.

HTML kód, který tyto objekty volá, je prozatím v paměti a zde se rozhoduje, co se s ním stane dál.

Možnosti jsou tři (mohou být použity současně):

•	Otevřít v textovém okně - otevře se nové okno s vlastní ikonou na taskbaru, které obsahuje vygenerovaný kód. Pomocí clipboardu je možné HTML kód po částech přenášet do vlastního rozeditovaného HTML zdrojového kódu. Tlačítko Uložit jako v okně uloží vygenerovaný HTML zdrojový kód doplněný na začátku a na konci HTML značkami (viz varianta Uložit do souboru)

•	Zkopírovat do schránky - vygenerovaný HTML kód se celý umístí do clipboardu;

•	Uložit do souboru - vygenerovaný HTML kód se doplní HTML bagy <html><head>...</head><body> ... </body></html>, aby šel vytvořený soubor rovnou zobrazit v browseru a uloží se na disk (doporučuje se do adresáře přístupného Web serveru). Pomocí tlačítka Vyhledat lze zadat nebo vybrat jméno souboru a jeho umístění. Posledně zvolený adresář si FW pamatuje.
Uložený soubor je možné otevřít externím HTML editorem (zatrhněte čtverec Otevřít v externím editoru) - pokud jste již dříve zvolili externí HTML editor v parametrech Vývojového prostředí WinBase602, automaticky se nabízí tento, jinak musíte pomocí tlačítka Vybrat editor nalézt editor nově.

Po stisku tlačítka Další se podle zvolených možností otevře okno s HTML kódem, případně se otevře zvolený externí HTML editor (resp. další jeho záložka). Ještě dříve, než začnete pracovat s HTML kódem, ukončete posledním krokem průvodce (tj. případné uschování parametrů).


Uschování parametrů

Generování aplikace pro Internet úspěšně skončilo. Pokud si myslíte, že podobnou aplikaci budete v budoucnu vytvářet znova, můžete si údaje zadané pomocí tohoto průchodu wizarda uložit a při novém průchodu je použít jako přednastavené hodnoty.

Defaultní volba nabídky Chcete uschovat parametry? je Ne.

Pokud zvolíte možnost Ano,  musíte zadat jméno (editační pole Pod jménem), pod kterým se tyto parametry nabídnou v úvodním kroku wizarda (Výběr druhu aplikace  - Uschované formuláře a šablony). Současně je možné zadat popis (editační pole A s popisem), který se zobrazuje ve spodní části okna při výběru.

Tlačítkem Dokončit ukončíte program From Wizard.


Šablona pro zobrazení dat - krok 1: Výběr zdroje dat

Na této stránce průvodce vyberete zdroj dat, tj. tabulku nebo dotaz, jejichž obsah chcete v prohlížeči zobrazit.

•	Tabulka - z comba vyberte existující tabulku v aktuální databázové aplikaci, není možné použít tabulky připojené ze vzdáleného ODBC zdroje dat (SQL s nimi neumí manipulovat);

•	Dotaz - z comba vyberte existující pevný dotaz v aktuální databázové aplikaci;

•	Vytvořit nový dotaz - zdrojem dat bude pevný dotaz, který zatím není součástí databázové aplikace, ale který se vytvoří až nyní pomocí vnitřního interaktivního Návrháře dotazů. Jméno tohoto dotazu je nutné zadat předem pomocí editačního pole Jméno nového dotazu.

Po stisku tlačítka Další se pokračuje další stránkou průvodce (volba Tabulka nebo Dotaz) nebo se spustí Návrhář dotazů, pomocí něhož vytvoříte dotaz zadaného jména. Návrhář dotazů má svojí vlastní nápovědu.


Šablona pro zobrazení dat - krok 2: Výběr sloupců

V tomto kroku vyberete (ze zdroje dat vybraného v předešlém kroku) ty sloupce, které se mají ve výstupu objevit. Listbox na stránce nabízí seznam všech sloupců zvoleného zdroje dat včetně jejich typů.

Iniciálně jsou všechny sloupce nevybrané - označovací čtverce před názvem sloupce jsou nezaškrtnuté. U těch sloupců, které chcete vybrat, jednoduše označovací čtverce zaškrtněte. K usnadnění práce s mnoha sloupci slouží dvě pomocná tlačítka - Vybrat vše - označí všechny sloupce v seznamu a Nevybrat nic - odznačí všechny sloupce.

Aby bylo možné pokračovat, je nutné vybrat alespoň jeden sloupec.


Šablona pro zobrazení dat - krok 3: Parametry sloupců

Na této stránce průvodce můžete nastavit způsob zobrazení hodnot sloupců a určit jejich pořadí ve výstupu. Také můžete zvolit, má-li se pro některý sloupec na výstupu vytvořit tzv. dotazové pole, které umožní jednoduše pomocí browseru vybírat záznamy podle hodnoty.

V listboxu je seznam vybraných sloupců. Ve sloupečku formát je nastaven implicitní formát zobrazení daného databázového typu. Je-li zde slovo --nelze--, není pro daný typ možné formát měnit. U číselných typů s desetinnými místy je formát zapsán ve tvaru <název-formátu>.<počet-číslic-za-desetinnou-tečkou>. Ve sloupečku dotaz. pole je označení, má-li se pro daný databázový sloupec vytvářet dotazové pole. Parametry sloupců (formát a dotazové pole) se nastavují pomocí pro každý sloupec zvlášť pomocí dialogu, který se otevře poklepáním na řádek listboxu nebo stiskem tlačítka Vlastnosti. Pokud tlačítko není pro některý typ aktivní, znamená to, že nelze nastavit ani formát ani dotazové pole (např. Boolean).

V listboxu jsou sloupce zdroje dat vypsány v tom pořadí, jak byly přečteny z databáze. Pokud chcete jejich pořadí změnit, použijte jeden z následujících postupů: uchopte myší řádek listboxu a přesuňte ho na jiné místo nebo pomocí tlačítek Nahoru a Dolů posouvejte označeným řádkem tak dlouho, až ho umístíte na správnou pozici.


Šablona pro zobrazení dat - krok 3: dlg Vlastnosti sloupce
Šablona pro zobrazení dat - krok 3: dialog Vlastnosti sloupce

Pomocí tohoto dialogu můžete změnit formát zobrazení hodnot databázového sloupce a případně předepsat vytváření dotazového pole pro daný sloupec.

Pro sloupce, kterým lze změnit defaultní formát, lze jeho druh vybrat v combu formát, pro číselné typy Real a Money ve formátu "účetní" "desetinný" a "semilogaritmický" je zobrazeno ještě editační pole počet desetinných míst.

Popis složitějších formátů:

Řetězce a Text

formát	způsob vypsání
normální	obsah se vypíše "tak jak je", beze změny
s odřádkováním	konce řádků v textu se naradí <BR>, aby se zachovalo rozlámání - uplatní se převážně pro vypisování hodnoty sloupců typu Text
bez diakritiky	konverze do 7 bitů (ASCII)
s odřádkováním a bez diakritiky	sloučené dvě poslední vlastnosti

Real a Money

formát	způsob vypsání
123,-	bude zaokrouhleno na dvě des. místa; desetinná část bude oddělena čárkou a je-li nulová, bude nahrazena pomlčkou (např. 89,30 nebo 123,-)
123.00	bude zaokrouhleno na dvě des. místa; desetinná část bude obsahovat dvě cifry oddělené od celé části tečkou (např. 89.30 nebo 123.00)
účetní	použije se účetní zobrazení na daný počet des. míst, budou použity Windows separátory, a to jak oddělovač desetinných míst, tak oddělovač skupin číslic (např. tisíců - 1 234,50)
desetinný	desetinné zobrazení na daný počet des. míst (např. 1234,50)
semilogaritmický	semilogaritmické zobrazení na daný počet des. míst


Šablona pro zobrazení dat - krok 4: Počet záznamů ve výstupu
Šablona pro zobrazení dat - krok 4: Zobrazení záznamů ve výstupu

Na této stránce můžete určit, jak se záznamy zobrazí na výstupu. Prvním parametrem je počet záznamů na stránce:

•	Základní variantou je zobrazit všechny najednou - na výstupu budou všechny záznamy daného zdroje dat (u tabulky všechny záznamy, u dotazů ty, co vyhovují podmínce WHERE dotazu a setříděné podle ORDER BY).

•	Druhou možností je vypsat pouze prvních N záznamů - toto nelze použít, pokud je v předchozím kroku zvoleno vytváření alespoň jednoho dotazového pole (navzájem se vylučuje).

•	Poslední možností je vypisovat záznamy po částech - varianta postupně po N záznamech - v tomto případě se zobrazí na výstupu prvních N záznamů a tlačítko, které vyvolá zobrazení dalších N záznamů atd.

Druhým ovlivnitelným parametrem je barva buněk HTML tabulky, v níž se budou výsledky zobrazovat. Všechny buňky mohou mít bílé pozadí nebo je Form Wizard sám obarví bílo-šedo-modrou kombinací. K přepínání těchto možností slouží označovací čtverec v dolní části stránky.

Toto je poslední krok průvodce Šablony pro zobrazení dat.


Formulář pro vstup dat - krok 1: Výběr tabulky

Na této stránce průvodce vyberete tabulku, do níž se budou vkládat záznamy z HTML formuláře zobrazeného v browseru.

Existující tabulka - z comba vyberte existující tabulku v aktuální databázové aplikaci;

Vytvořit novou tabulku - záznamy se budou vkládat do dosud neexistující tabulky, která se vytvoří až nyní pomocí vnitřního interaktivního návrháře tabulek. Jméno tabulky zadejte v editačním poli vpravo.

Po stisku tlačítka Další se pokračuje další stránkou průvodce, pokud jste vybrali existující tabulku nebo se spustí Návrhář tabulek, pomocí něhož vytvoříte tabulku zadaného jména. Návrhář tabulek má svojí vlastní nápovědu.


Formulář pro vstup dat - krok 2: Výběr sloupců

V tomto kroku vyberete (z tabulky vybrané nebo vytvořené v předešlém kroku) ty sloupce, které se mají objevit v HTML formuláři (které bude vyplňovat internetový uživatel). Listbox na stránce nabízí seznam všech sloupců zvoleného zdroje dat včetně jejich typů.

Iniciálně jsou všechny sloupce nevybrané - označovací čtverce před názvem sloupce jsou nezaškrtnuté. U těch sloupců, které chcete vybrat, jednoduše označovací čtverce zaškrtněte. K usnadnění práce s mnoha sloupci slouží dvě pomocná tlačítka - Vybrat vše - označí všechny sloupce v seznamu a Nevybrat nic - odznačí všechny sloupce.

Aby bylo možné pokračovat, je nutné vybrat alespoň jeden sloupec.


Formulář pro vstup dat - krok 3: Vlastnosti a omezení formulářových prvků

Na této stránce průvodce můžete nastavit vlastnosti, které musí splňovat hodnoty zadané do HTML formulářových prvků svázaných se sloupci tabulky. Také můžete ovlivnit pořadí, v jakém se jednotlivé prvky ve formuláři vygenerují.

V listboxu je seznam sloupců vybrané tabulky včetně jejich typu. Ve sloupečcích vlastnosti a podmínka jsou zobrazeny již nastavené vlastnosti, další vlastnosti se nastaví v samostatném dialogu, který se otevře při poklepání na řádek listboxu nebo po stisku tlačítka Vlastnosti.

Sloupeček vlastnosti zobrazuje:

•	maxlen=N - N je max.délka sloupce typu string a pro Char je N=1;

•	+ - tento údaj bude HTML formulářem vyžadovaný - tento údaj musí internetový uživatel zadat, jinak ho kontrolní funkce v Java Scriptu nepustí dál;

•	def=CONST - CONST je konstantní údaj daného typu, který bude implicitně zobrazen ve formulářovém prvku při otevření formuláře;

•	password - pro sloupce typu string - při vstupu údaje ve formulářovém prvku budou zobrazovány hvězdičky místo vkládaných znaků (<INPUT TYPE="PASSWORD">);

Sloupeček podmínka zobrazuje:

•	pokud se bude hodnota zadávat v editačním řádku, pak zobrazuje text podmínky;

•	pokud se jedná o combo, pak obsahuje nápis combo;

•	pokud se jedná o checkbox, pak obsahuje nápis označovací čtverec;

•	pokud se jedná o radio buttons group, pak obsahuje nápis skupina přepínačů;

V listboxu jsou sloupce zdroje dat vypsány v tom pořadí, jak byly přečteny z tabulky. Pokud chcete jejich pořadí změnit, použijte jeden z následujících postupů: uchopte myší řádek listboxu a přesuňte ho na jiné místo nebo pomocí tlačítek Nahoru a Dolů posouvejte označeným řádkem tak dlouho, až ho umístíte na správnou pozici.


Formulář pro vstup dat - krok 3: dialog Vlastnosti formulářového prvku pro typ Boolean
Formulář pro vstup dat - krok 3: dialog Vlastnosti formulářových prvků pro typ Boolean

Tento dialog se zobrazí pouze pro typ Boolean. Pro ostatní typy je dialog pro zadání vlastností poněkud složitější.

Lze zadat popisku, která se objeví u HTML check-boxu - editační pole Nápis u formulářového prvku;

Lze zadat, aby implicitní hodnota byla TRUE (aby byl check-box implicitně zatržen) - zatrhněte Implicitně zatrženo.


Formulář pro vstup dat - krok 3: dialog Vlastnosti formulářových prvků

Tento dialog se zobrazí pro všechny typy s výjimkou typu Boolean. Pro typ Boolean je dialog pro zadání vlastností jednodušší.

Masky, validační podmínky, nutnost zadání údaje budou funkční pouze tehdy, pokud bude mít internetový uživatel browser s JavaScriptem 1.2 a vyšším (tj. MSIE 4.0 a výš, NSComm 4.0 a výš)

Lze zadat popisku, která se objeví u HTML prvku - editační pole Nápis u formulářového prvku;

Lze zadat nutnost zadání údaje do daného prvku (Vyžadovat zadání tohoto údaje) a chybové hlášení, které bude zobrazeno při chybě (údaj nebyl zadán, ale měl být; údaj nevyhovuje validační podmínce);

Je nutné vybrat druh formulářového prvku (combo Vzhled prvku). Možnosti jsou: editační řádek, combo, seznam (listbox), skupina přepínačů (radio buttons group) a označovací čtverec (checkbox). Podle vybraného druhu se změní dialog v části označené Hodnoty:

Vlastnosti, které lze zadat pro editační řádek:

•	bez ohledu na typ sloupce: implicitní hodnota: konstanta daného typu;
validační podmínka (pro typy String,Text a Char se to jmenuje zkontrolovat zadanou hodnotu / podle podmínky)

•	pro typy String a Text lze požadovat zobrazit hvězdičky místo vkládaných znaků, nastavit maximální délku řetězce (defaultně 12), a vybrat masku, podle které bude vložená hodnota zkontrolována - v této verzi se nabízí maska E-mail, která zkontroluje, zda vložený řetězec může být e-mailovou adresou

poznámky k validačním podmínkám:

•	lze použít operátory  + - * / div mod % and or not && || !, porovnání > < >= <= <>.= .=. ve významu shodném s WinBase;

•	this - údaj vložený do tohoto formulářového prvku v browseru;

•	<název-sloupce-tabulky> - údaj vložený do form. prvku svázaného s tímto sloupcem tabulky;

•	today - dnešní datum - konstanta typu Date;

•	now - aktuální čas - konstanta typu Time;

•	current_date, current_time, current_timestamp - jako today, now, resp. aktuální údaj typu Timestamp;

Vlastnosti, které lze zadat pro comba, listboxy a skupiny přepínačů:

•	Tyto prvky se tvoří pro výběr z několika hodnot. Tyto hodnoty je nutné zapsat do připraveného okna. Pro každou hodnotu se zadává nápis (co bude vidět v prvku) a hodnotu (konstanta daného typu, která se zapíše do tabulky). Položky se přidávají zapsáním do editačních polí Zobrazený text a Hodnota a stiskem tlačítka Přidat. Odebrání  položky ze seznamu se provede tak, že se položka označí a stiskne se tlačítko Smazat.
Je nutné zadat alespoň jednu hodnotu, alespoň jedna hodnota může být defaultně vybraná. Hodnotu lze vybrat poklepáním nebo stiskem klávesy "mezera".


Formulář pro vstup dat - krok 3: dialog Povolené hodnoty

Pomocí tohoto dialogu můžete jednoduše nastavit nejčastější typ validační podmínky - podmínku na rozsah hodnot. Týká se všech číselných typů a typů datu, čas a timestamp.

Pomocí editačních oken od a do můžete vytvořit podmínky typu

zadávaná hodnota >= konstantě (zadejte konstantu do pole od),

zadávaná hodnota <= konstantě (zadejte konstantu do pole do),

zadávaná hodnota >= konstantě a <= konstantě (zadejte konstantu do obou polí)

Zadávaná hodnota se v podmínce zadává jako this.


Formulář pro vstup dat - krok 4: Vzhled formuláře

Pomocí této stránky můžete ovlivnit vzhled generovaného HTML formuláře, pomocí něhož se budou vkládat data do tabulky.

K dispozici jsou tyto možnosti:

Způsob zobrazení - HTML formulář může být tvořen

•	běžným textem, přičemž každá dvojice popiska - prvek je oddělena tagem <BR>;

•	tabulkou o dvou sloupcích, v prvním sloupci je zadaná popiska a ve druhém formulářový prvek;

Nadpis formuláře - text, který se objeví v záhlaví formuláře.


Formulář pro vstup dat - krok 5: Další stránka po vložení

Na této stránce můžete ovlivnit parametry stránky, která bude zobrazena po úspěšném vložení záznamu do tabulky.

Pokud požadujete, aby po vložení prvního záznamu vkládání pokračovalo stejným formulářem, zatrhněte označovací čtverec Zobrazit vstupní formulář pro vložení dalšího záznamu.

Pokud chcete, aby se v browseru zobrazil vložený záznam, zatrhněte čtverec Vypsat právě vložený záznam. V tomto případě musíte pomocí comba Sloupec s primárním klíčem vybrat a označit sloupec, který je primárním klíčem a jehož hodnoty se generují pomocí sekvence. Pokud takový v tabulce není (combo je prázdné), vytvořte jej pomocí volby Vytvořit nový sloupec.

FW zmodifikuje definice tabulky a vytvoří novou sekvenci se jménem `název-tabulky_seqN`, kde N je přirozené číslo (aby byl název jedinečný). Nový sloupec tabulky dostane jméno `idN`, kde N je opět přirozené číslo. FW se také postará o přidělení práv k použití sekvence.


Formulář pro registraci e-mailů - krok 1: Výběr tabulky

volba tabulky, do které budou e-maily vkládány

Existující tabulka - z comba vyberte existující tabulku v aktuální databázové aplikaci, níže na stránce pak vyberte jeden existující sloupec typu string pro ukládání e-mailových adres (Sloupec pro e-maily), dále můžete  vybrat sloupec typu String pro automatické vložení IP adresy (Sloupec pro IP adresy) a sloupec typu Timestamp pro uložení údaje o okamžiku vložení záznamu (Sloupec pro datum a čas). FW kontroluje, zda sloupec pro e-maily má délku 254 znaků, pokud je kratší, tak jej zkusí prodloužit. Dále kontroluje, zda sloupec pro IP adresy má délku aspoň 15 znaků, případně jej zkusí prodloužit.

Vytvořit novou tabulku - záznamy se budou vkládat do dosud neexistující tabulky, která se automaticky vytvoří ve vhodném formátu (se sloupci E-MAIL typu String(254), IP ADDRESS typu String(15) a DATETIME typu Timestamp). Jméno tabulky zadejte v editačním poli vpravo.


Formulář pro registraci e-mailů - krok 2: Další stránka po vložení

Na této stránce můžete ovlivnit parametry stránky, která bude zobrazena po úspěšném vložení záznamu do tabulky.

Zadejte URL stránky, která bude zobrazena, pokud registrace e-mailu bude úspěšná. K zobrazení této stránky se použije HTML tag REFRESH.


Anketa - krok 1: Úvodní stránka

Na této stránce FW testuje existenci databázových objektů Ankety v aktuální aplikaci. Podle toho, co nalezne, se určí, jak se bude pokračovat:

•	žádný objekt neexistuje, pak se zobrazí pouze info o tom, že budou vytvořeny a že bude vytvořena první anketní otázka (při prvním použití v aplikaci).

•	všechny objekty existují, pak se nabídnou přepínače Vytvořit novou otázku a Smazat existující otázku (druhé a další spuštění FW).

•	některé objekty existují a některé ne. Pak se zobrazí seznam existujících a nabídne se jejich smazání a vytvoření všech objektů znovu a první anketní otázky. Zároveň je uživatel spraven o tom, že dokud existující objekty nesmaže a nenechá vytvořit všechny objekty znovu, nemůže s wizardem dále pracovat. Tento stav je následkem nějaké nekorektní destruktivní činnosti v aplikaci. FW stav napraví tím, že staré objekty (včetně dat!!!) smaže a vyvtoří vše znovu.


Anketa - krok 1: nová anketní otázka
Anketa - krok 2: Nová anketní otázka

Na této stránce se zadává nadpis ankety, anketní otázka a varianty odpovědí.

Varianty odpovědí se přidávají stiskem Insert. Přidá se nová varianta za právě vybranou variantu. Varianty budou v HTML stránce vypsány v tomto pořadí. Smazat vybranou variantu lze klávesou Delete. Změnit vybranou varianlu lze klávesou F2.

Ve výsledné HTML šabloně se nadpis ankety a otázka objeví v záhlaví ankety, jednotlivé odpovědi budou pod sebou vždy s přepínačem pro volbu.


Anketa - krok 1: Smazání vybrané otázky
Anketa - krok 2: Smazání vybrané otázky

Při této variantě činnosti se smaže vybraná anketní otázka, varianty odpovědí na ni a záznamy o odpovědích internetových uživatelů na tuto anketní otázku.

Otázku vyberte z nabídky v horní části.


Průvodce propojením WinBase602 SQL serverem a Webserverem - zadání parametrů
Průvodce propojením WinBase602 SQL serverem a webserverem - krok 1

Toto je úvodní stránka Průvodce propojením WinBase602 SQL serveru a webserveru (Connectivity Test).

V oblasti Údaje o webserveru zadejte následující hodnoty:

Jméno nebo IP adresa - zadejte jméno webserveru (např. www.mojefirma.cz) nebo jeho IP adresu (např. 192.168.1.1). Pokud jste již tímto průvodcem prošli, nabízejí se v combu dříve zadané webservery.

Jeho operační systém - z nabídky zvolte OS, pod nímž běží webserver, podle této volby se níže nabídnou typy Internet klientů.

Má asociované přípony - pokud vybraný webserver má ve svých parametrech asociované přípony *.WBC, *HTW a *.WBS, zatrhněte tento čtverec. V tomto případě se použije jiný syntaxe URL volající WWW objekty WinBase602. V praxi se používá hlavně u MS IIS.

Alias adresáře se skripty - zadejte adresář se skripty Internety klienta (WBCG.EXE, WBISAPI.DLL apod.). Tento adresář (jeho alias) se stane součástí URL:

http://www.mojefirma.cz/alias/wbcgi.exe/databáze/aplikace/šablona

Nejčastěji se používá vžitý název adresáře /cgi-bin (včetně lomítka na začátku). V případě asociovaných přípon je tento údaj již zadán při vytváření asociací.

Dále v combu Internet klient vyberte jeden typ WinBase602 Internet klienta z nabídky, která se mění podle druhu OS webserveru.

Connectivity Test v následujícím kroku vytvoří testovací WWW objekt a vyšle na zadaný webserver testovací požadavek na tento objekt, aby prověřil zadané hodnoty. Pokud chcete tento krok vynechat, zatrhněte čtverec Tyto údaje neověřovat.

Po stisku tlačítka Další se pomocí testovacího objektu prověří komunikace (pokud není explicitně řečeno neprověřovat) a údaje se uloží do registrační databáze pro další využívání.


Průvodce propojením WinBase602 SQL serverem a webserverem - vyhodnocení testu

Na této stránce se dozvíte, jak dopadl test komunikace mezi webserverm a WinBase SQL serverem.

Pokud při vyhodnocování došlo k chybě, FW se pokusí ji identifikovat a nabídnout řešení. Nejčastější příčiny neúspěchu:

•	V  aplikaci nelze vytvořit testovací WWW objekt - buď nemáte dostatek práv pro vytváření objektů, pak kontaktujte správce databáze; nebo na serveru probíhala časově náročná operace - zkuste to znovu.

•	Chyba při komunikaci s webserverem - adresa webserveru není dobře zadaná nebo web server neběží, zkuste Ping aj. utility.

•	Chyba při spouštění Internet klienta u webserveru -

•	v nastavení webserveru nejsou asociovány přípony a přitom toto bylo zvoleno ve FW;

•	WBIK není instalován u webserveru - stiskem tlačítka Další se otevře stránka, která umožné zkopírovat potřebné soubory;

•	zadaný alias adresáře se skripty je špatně - obraťte se na správce webserveru

•	Chyba při běhu Internet klienta - příčin může být více - zapněte logování Internet klienta v úrovni DEBUG a pokuste se z logu vyčíst příčinu.

Pokud je příčina na straně webserveru, je nutné ji odtranit, pomocí tlačítka Zpět se vrátit a zkusit vyhodnotit test znovu. V případě chybějících souborů WBIK se FW v následujícím kroku pokusí konfiguraci odpovídající soubory do zvoleného adresáře překopírovat.


Průvodce propojením WinBase602 SQL serverem a webserverem - kopírování souborů WBIK

Tato stránka se nabídne v případě, kdy jako příčina neúspěchu testu komunikace mezi webserverem a WinBase SQL serverem byla určena nepřítomnost souborů WB Internet Klienta (tj. WBCGI.EXE, WBISAPI.DLL apod.) v adresáři, který byl v konfiguraci webserveru nastaven pro tento účel.

Pomocí této stránky lze soubory WBIK na správné místo zkopírovat - tlačítkem Vybrat vyberte nebo do editačního pole zadejte adresář, kam se mají skripty umístit a stiskněte tlačítko Další. Poté automaticky proběhne nový test komunikace a výsledek bude oznámen.

Předpokládá se, že zvolený adresář je přístupný přes síť a že uživatel může v tomto adresáři vytvářet soubory.


Spolupráce s elektronickou poštou - úvod

Databázový systém WinBase602 poskytuje na serverové i klientské straně prostředky pro zpracování elektronické pošty. Databázová aplikace může vytvářet a odesílat zásilky (dopis + připojené soubory) a počínaje od verze 6.0f i přijímat poštu došlou na adresu zadané poštovní schránky. Pro využití této možnosti je nutné, aby na počítači, na němž běží WinBase602 SQL server (bude-li s poštou pracovat server) nebo WinBase602 Klient (bude-li s poštou pracovat klient), byla zajištěna alespoň jedna z následujících podmínek:

•	TCP/IP spojení se serverem, který podporuje odesílání pošty pomocí protokolu SMTP a příjem pomocí protokolu POP3

•	nainstalovaný klient pošty Mail602

•	nainstalovaný klient pošty, která podporuje rozhraní MAPI (např. MSExchange, Outlook)

Spolupráce s elektronickou poštou může být využita i pro replikování dat mezi servery. SMTP/POP3 komunikace se uplatní zvláště mezi servery běžícími na jiných OS než Windows.

Pokračování:	Inicializace pošty
	Profily poštovních parametrů
	Odesílání zásilek
	Přijímání zásilek
	Vzdálený klient pošty Mail602
	Číselník chyb při práci s poštou


Inicializace pošty

Před začátkem práce s poštou, je nutné poštu inicializovat pomocí funkce InitWBMail. Jako parametr se funkci InitWBMail předává jméno sady parametrů tzv. profil. Po ukončení všech poštovních operací, je třeba prostředky potřebné pro zpracování pošty uvolnit pomocí funkce CloseWBMail. Je-li třeba pro komunikaci s poštovním serverem navázat telefonní spojení, může aplikace použít funkce MailDial a MailHangUp.

Zastaralá funkce InitWBMail602 je nadále použitelná, doporučujeme však přejít na novější obecnější InitWBMail.

Viz také:	Spolupráce s elektronickou poštou - úvod


Profily poštovních parametrů

Profil je sada parametrů, které jsou potřeba k inicializaci použité pošty. Aplikace potřebuje pro zpřístupnění pošty znát pouze jméno profilu a prakticky vůbec nemusí brát ohled na to, která z podporovaných pošt je v cílovém prostředí nainstalovaná. Pokud se změní některý z parametrů pošty, není třeba měnit aplikaci, stačí změnit hodnotu parametru v profilu. V systému může existovat několik profilů, které se liší svým jménem, implicitní profil má jméno prázdné. V prostředí Windows jsou profily uloženy v registrační databázi pod klíčem:

HKEY_LOCAL_MACHINE\SOFTWARE\Software602\WinBase602\Mail

Implicitní profil tvoří řetězcové hodnoty tohoto klíče, pojmenované profily jsou uloženy jako podklíče daného jména. Pro vytváření a správu profilů lze použít Konfigurační panel WinBase602, záložku Pošta. Na UNIXu a Novellu jsou profily uloženy v souboru WBKERNEL.INI, implicitní profil v sekci [MAIL_], pojmenované profily v sekci [MAIL_jméno profilu]. Soubor WBKERNEL.INI se edituje ručně z prostředí OS. Je zřejmé, že pro tyto OS se uplatní pouze profily typu SMTP/POP3. Do WBKERNEL.INI nelze uložit zašifrované přístupové heslo do POP3 schránky.

Příklad implicitního profilu definovaného na Linuxu ve WBKERNEL.INI:

...

[MAIL_]

SMTPServer=winbase.soft602.cz

MyAddress=server@soft602.cz

POP3Server=winbase.soft602.cz

UserName=server

FilePath=/wbsend;/wbsend/temp

...

Zde použitý pojem profil není totožný s profily používanými při MAPI komunikaci nebo s profily programu Mail602. Je to pojem obecnější, vyjmenované profily jsou jeho podmnožinou.

Seznam profilů vytvořených na počítači, kde je spuštěn server, lze získat systémovým dotazem _IV_MAIL_PROFS.

Podrobnosti o parametrech profilů:

SMTP/POP3	Mail602	MAPI
Viz také:	Spolupráce s elektronickou poštou - úvod


Profily pošty SMTP/POP3
Profil pošty SMTP/POP3

Parametry profilu se nastavují programem Konfigurace WinBase602, na záložce Pošta.

Parametr	Popis
SMTPServer	Jméno nebo IP adresa SMTP serveru
MyAddress	Poštovní adresa, která bude v zásilkách uvedena jako adresa odesílatele
POP3Server	Jméno nebo IP adresa POP3 serveru
UserName	Jméno uživatele poštovní schránky
DialConn	Jméno telefonního připojení (ze složky Telefonické připojení sítě)
DialUserName	Jméno uživatele telefonního připojení k Internetu
FilePath	Seznam adresářů (s absolutními cestami v syntaxi daného OS) oddělených středníkem, ze kterých lze připojit soubor k zásilce (a tudíž odeslat). Pokud se aplikace pokusí odeslat soubor z jiné složky, než je v seznamu, bude požadavek odmítnut. Jestliže parametr není specifikován, nebo obsahuje-li prázdný řetězec, bude  možné odeslat libovolný soubor. Jde o to, že SQL server zpravidla běží s velkými přístupovými právy a je třeba neprivilegovaným uživatelům databáze zabránit v neoprávněnému přístupu k souborům. Příklad (Windows): D:\wbdata;D:\wbdata\temp Příklad (UNIX): /wbdata;/wbdata/temp Příklad (NetWare): SYS:wbdata; SYS:wbdata/temp

Parametry SMTPServer a MyAddress jsou povinné pro odesílání pošty. Parametry POP3Server a UserName jsou povinné pro příjem pošty. Parametry DialConn a DialUserName jsou nutné pouze pokud je počítač připojen k Internetu pomocí vytáčené linky. Konfigurační panel umožňuje navíc do profilu uložit heslo pro přístup k POP3 schránce (pro odesílání pošty není heslo potřeba) a případně heslo pro telefonní přístup k Internetu.

Viz také:	Spolupráce s elektronickou poštou - úvod
	Profily poštovních parametrů


Profily pošty Mail602
Profil pošty Mail602

Parametry profilu se nastavují programem Konfigurace WinBase602, na záložce Pošta.

Parametr	Popis
Profile602	Jméno profilu pošty Mail602
UserName	Jméno nebo ID uživatele, je nutné v případě LAN, nebo NET verze, pokud má aplikace přistupovat ke schránce jiného uživatele, než který je přihlášen k poštovnímu serveru, nebo pro přístup k POP3 schránce.
FilePath	Seznam složek (adresářů), ze kterých lze odeslat soubor, oddělených středníkem. Pokud se aplikace pokusí odeslat soubor z jiné složky, než je v seznamu, bude požadavek odmítnut. Jestliže parametr není specifikován, nebo obsahuje-li prázdný řetězec, bude  možné odeslat libovolný soubor. Jde o to, že SQL server zpravidla běží s velkými přístupovými právy a je třeba neprivilegovaným uživatelům databáze zabránit v neoprávněnému přístupu k souborům. Příklad: D:\wbdata;D:\wbdata\temp

Ve většině případů stačí pro inicializaci pošty Mail602 specifikovat jméno profilu Mail602. Tyto profily lze vytvářet a spravovat pomocí klienta Mail602. Je-li na počítači nainstalován LAN klient, nebo je-li nainstalován NET klient a aplikace potřebuje přistupovat k poštovní schránce jiného než implicitního uživatele, je nutné zadat jméno uživatele.

Viz také:	Spolupráce s elektronickou poštou - úvod
	Profily poštovních parametrů


Profily pošty MAPI
Profil pošty MAPI

Parametry profilu se nastavují programem Konfigurace WinBase602, na záložce Pošta.

Parametr	Popis
ProfileMAPI	Jméno MAPI profilu
FilePath	Seznam složek (adresářů), ze kterých lze odeslat soubor, oddělených středníkem. Pokud se aplikace pokusí odeslat soubor z jiné složky, než je v seznamu, bude požadavek odmítnut. Jestliže parametr není specifikován, nebo obsahuje-li prázdný řetězec, bude  možné odeslat libovolný soubor. Jde o to, že SQL server zpravidla běží s velkými přístupovými právy a je třeba neprivilegovaným uživatelům databáze zabránit v neoprávněnému přístupu k souborům. Příklad: D:\wbdata;D:\wbdata\temp

Pro inicializaci MAPI pošty stačí specifikovat jméno MAPI profilu a případně heslo. MAPI profily lze vytvářet a spravovat pomocí aplikace Pošta a fax ze složky Panel nástrojů.

Viz také:	Spolupráce s elektronickou poštou - úvod
	Profily poštovních parametrů


Odesílání pošty

Odeslání zásilky se provede v několika krocích (pošta již musí být inicializována):

1.	Funkce LetterCreate zásilku vytvoří, nastaví věc (subjekt), text dopisu a parametry zásilky. Text dopisu může být předán jako obsah řetězcové proměnné nebo jako jméno souboru, který text dopisu obsahuje. Soubor musí obsahovat pouze čistý neformátovaný text. Má-li být zachována diakritika, musí být všechny texty v kódu Windows CP1250. Funkce vrací v posledním (výstupním) parametru identifikátor zásilky, který se pak předává ostatním funkcím.

2. 	Seznam adresátů zásilky (včetně případných adresátů "na vědomí") se vytvoří opakovaným voláním funkce LetterAddAddr.

3. 	K zásilce lze (není nutno) připojit libovolný počet souborů - funkcí LetterAddFile.

4. 	Vlastní odeslání zásilky provede funkce LetterSend.

5. 	Pokud během vytváření zásilky pominou důvody k jejímu odeslání, lze ji zrušit a uvolnit tak alokované zdroje pomocí funkce LetterCancel.

Viz také:	Spolupráce s elektronickou poštou - úvod
	Příjem pošty
	Příklad odeslání zásilky


Přijímání pošty

Příjem došlé  pošty se provádí v následujícím postupem (pošta již musí být inicializována):

1.	Pomocí funkce MailOpenInBox se otevře schránka s došlou poštou.

2.	Funkce MailBoxLoad prohlédne obsah schránky a zapíše informace o došlých zásilkách do speciálních tabulek databáze. Seznam došlých zásilek lze pak procházet a třídit pomocí běžných databázových operací.

3.	Text vybraného dopisu (pokud nebyl již hromadně načten funkcí MailBoxLoad) lze uložit do databáze pomocí funkce MailBoxGetMsg.

4.	Informace o připojených souborech (pokud nebyly již hromadně načteny funkcí MailBoxLoad) se ukládají do databáze pomocí funkce MailBoxGetFilInfo.

5.	Funkce MailBoxSaveFileAs uloží vybraný soubor připojený k zásilce na disk.

6.	Nepotřebné zásilky lze ze schránky i z databáze vymazat pomocí funkce MailBoxDeleteMsg.

7.	Uzavření schránky provede funkce MailCloseInBox.

Viz také:	Spolupráce s elektronickou poštou - úvod
	Odesílání pošty
	Příklad příjmu zásilky


Vzdálený klient pošty Mail602

Pokud má databázová aplikace spolupracovat se vzdáleným nebo SMTP/POP3 klientem pošty Mail602, vyžaduje to od ní trochu odlišný přístup. Odeslání zásilky v tomto případě znamená pouze předání zásilky do výstupní fronty klienta. V parametrech funkce LetterCreate lze specifikovat příznak WBL_REMSENDNOW (128), který zabezpečí to, že se WinBase602 pokusí zároveň s odesláním zásilky navázat telefonické spojení s mateřským poštovním úřadem nebo serverem a zásilku mu předat. Jestliže příznak není nastaven, zůstane zásilka v poště k odeslání. Poštovnímu úřadu je možné všechny zásilky nashromážděné ve výstupní frontě předat později buď ”ručně” z prostředí klienta Mail602 nebo programově pomocí funkce TakeMailToRemOffice. Při příjmu zásilek se do tabulky ukládají informace o zásilkách jak v lokální, tak ve vzdálené schránce. Jestli je zásilka v lokální, nebo ve vzdálené schránce a je tedy nutné pro práci se zásilkou navazovat telefonické spojení, lze poznat podle příznaku ve sloupci Flags tabulky _INBOXMSGS (2048). Informaci o tom jaká varianta pošty je použita a je-li použito telefonické připojení sítě může aplikace zjistit zavoláním funkce MailGetType.

Viz také:	Spolupráce s elektronickou poštou - úvod


Struktura systémových tabulek pro došlé zásilky

Tabulky v systémové aplikaci _SYSEXT je zakázáno editovat - změna struktury způsobí nefunkčnost přijímání pošty. Potřebujete-li přidat další sloupce s dodatečnými informacemi, vytvořte si novou tabulku a relačně ji připojte přes sloupec ID.

Tabulka s informacemi o došlých zásilkách

Informace o došlých zásilkách se ukládají do tabulky _INBOXMSGS v systémové aplikaci _SYSEXT. Pokud tato tabulka neexistuje vytvoří se automaticky při otevření poštovní schránky. Aplikace může získat číslo tabulky pomocí funkce MailGetInBoxInfo. Sloupce Subject a Body se v případě použití Mail602, konvertují z kódu Latin 2 do kódu 1250, v případě POP3 pošty se konvertují pouze pokud je zásilka kódovaná v kódu ISO-8859-2. Tabulka má následující formát:

	Sloupec	Typ	Popis
1	ID	INTEGER	Serverem vytvořené unikátní číslo, slouží k identifikaci zásilky a jako reference do tabulky připojených souborů.
2	Subject	CSISTRING(80)	Věc zásilky
3	Sender	CSISTRING(64)	Adresa odesílatele
4	Recipient	CSISTRING(64)	Adresa příjemce
5	CreDate	DATE	Datum vytvoření zásilky
6	CreTime	TIME	Čas vytvoření zásilky
7	RcvDate	DATE	Datum přijetí zásilky
8	RcvTime	TIME	Čas přijetí zásilky
9	Size	INTEGER	Délka textu dopisu, je-li rovna nule, zásilka neobsahuje dopis, je-li rovna NONEINTEGER, zásilka obsahuje dopis, ale ze seznamu zásilek (bez stažení celé zásilky) nelze zjistit jeho délku.
10	FileCnt	SMALLINT	Počet připojených souborů, je-li roven nule, zásilka neobsahuje připojené soubory, je-li rovna NONESHORT, zásilka obsahuje připojené soubory, ale ze seznamu zásilek (bez stažení celé zásilky) nelze zjistit jejich počet.
11	Flags	INTEGER	Příznaky zásilky
			1	Zásilka je doporučená
			4	Zásilka má nízkou prioritu
			8	Zásilka má vysokou prioritu
			16	Zásilka má "Osobní" citlivost
			32	Zásilka má "Soukromou" citlivost
			64	Zásilka má "Důvěrnou" citlivost
			512	Zásilka už byla otevřená
			1024	Zásilka je fax
			2048	Zásilka je ve vzdálené poštovní schránce
12	Stat	CHAR	Stav zásilky
			0	Nová zásilka, zásilka přibyla ve schránce od posledního volání funkce MailBoxLoad
			1	Stará zásilka, informace o zásilce byla získána už při minulém volání funkce MailBoxLoad
			2	Zásilka je smazaná, už není v poštovní schránce
13	MsgID	BINARY(64)	Unikátní ID zásilky, slouží k vyhledávání zásilky v poštovní schránce.
14	Body	TEXT	Text dopisu ze zásilky, načítá pouze na explicitní žádost (buď funkcí MailBoxLoad s parametrem  MBL_BODY nebo funkcí MailBoxGetMsg).

Tabulka s informacemi o připojených souborech

Informace o připojených tabulkách se ukládají do tabulky _INBOXFILES v systémové aplikaci _SYSEXT. Pokud tato tabulka neexistuje vytvoří se automaticky při otevření poštovní schránky. Aplikace může získat číslo tabulky pomocí funkce MailGetInBoxInfo. Tabulka má následující formát:

	Sloupec	Typ	Popis
1	ID	INTEGER	ID záznamu o zásilce z tabulky _INBOXMSGS.
2	Name	CSISTRING(254)	Jméno souboru
3	Size	INTEGER	Velikost souboru
4	Fdate	DATE	Datum vytvoření souboru
5	FTime	TIME	Čas vytvoření souboru


Chyby při použití elektronické pošty
Čísla chyb při práci s elektronickou poštou

Čísla chyb specifická pro poštovní funkce mají čísla >= 500

MAIL_NOT_INITIALIZED	500	Pošta nebyla inicializována, aplikace se pokouší vytvořit zásilku nebo otevřít schránku bez toho, že by zinicializovala poštu.
MAIL_ERROR	501	Neznámá (nepředvídaná) chyba pošty
MAIL_NOT_REMOTE	502	Chybu vracejí funkce TakeMailToRemOffice, MailDial a MailHangUp, pokud byly použity pro nevhodný typ pošty - poštovní úřad není konfigurován jako vzdálený
MAIL_TYPE_INVALID	503	Chybný typ zásilky, zvolená pošta nepodporuje zadaný typ zásilky.
MAIL_LOGON_FAILED	504	Chyba při přihlášení, pravděpodobně chybné jméno uživatele nebo heslo.
MAIL_BAD_PROFILE	505	Chybný profil, zadaný profil v registrační databázi resp. ve WBKERNEL.INI není, nenalezen některý ze souborů MAIL602*.INI, nenalezen soubor MAIL602.EMI
MAIL_BAD_USERID	506	Chybné ID nebo jméno uživatele
MAIL_NO_ADDRESS	507	Není zadána žádná adresa příjemce
FILE_NOT_FOUND	508	Soubor, který má být připojen k vytvářené zásilce nenalezen.
MAIL_SYSTEM_ACCOUNT	509	Server běží jako NT služba na systémový účet a nemá proto přístup k nějakému zdroji
MAIL_DIAL_ERROR	510	Nepodařilo se navázat telefonní spojení s poštovním serverem nebo mateřským poštovním úřadem, obsazeno nebo špatné číslo
MAIL_ALREADY_INIT	511	Pošta už byla inicializovaná s jinými parametry
MAIL_	512	Rezervováno
MAIL_PROFSTR_NOTFND	513	V profilu chybí parametr, např. aplikace se pokusila vytvořit zásilku a v profilu není zadána adresa SMTP serveru
MAIL_INVALIDPATH	514	Soubor není povoleno odeslat, protože není v cestě specifikované parametrem profilu Path
MAIL_SOCK_IO_ERROR	515	Chyba čtení nebo zápisu do socketu, nebo poštovní server odmítl požadavek
MAIL_UNKNOWN_SERVER	516	Nepodařilo se přeložit jméno poštovního serveru na IP adresu, neběží DNS server, nebo překlad není uveden v souboru HOSTS
MAIL_CONNECT_FAILED	517	Nepodařilo se vytvořit nebo otevřít socket
MAIL_NO_MORE_FILES	518	V zásilce už není další připojený soubor, nebo v zásilce není soubor zadaného jména
MAIL_FILE_DELETED	519	Připojený soubor v zásilce není, nejspíš byl vymazán
MAIL_BOX_LOCKED	520	Poštovní schránku už má otevřenou jiný klient nebo replikátor.
MAIL_MSG_NOT_FOUND	521	Zásilka už ve schránce není, nejspíš byla vymazána
MAIL_UNK_MSG_FMT	522	Zásilka má neznámý formát nebo je poškozená
MAIL_DLL_NOT_FOUND	523	Potřebná DLL knihovna (WM602M32.DLL, M602INET.DLL, G602RM32.DLL, RASAPI32.DLL, MAPI32.DLL) nenalezena. DLL knihovny se hledají ve stejné složce jako WinBase602, v aktuální složce, ve složce WINDOWS, ve složce WINDOWS\SYSTEM a ve složkách, které jsou uvedeny v proměnné prostředí PATH.
MAIL_FUNC_NOT_FOUND	524	Potřebná funkce v DLL knihovně nenalezena, pravděpodobně nekompatibilní verze DLL knihovny.
OUT_OF_APPL_MEMORY	150	Nedostatek paměti
OS_FILE_ERROR	157	Chyba při práci se souborem, málo místa na disku, chyba na disku, nedostatek přístupových práv
ERROR_IN_FUNCTION_ARG	180	Chyba v parametrech předávaných funkci
Viz také:	Spolupráce s elektronickou poštou - úvod


Příklad odeslání zásilky
Příklad odesílání zásilky

Příklad v jazyku klienta:

var

  letter, err : integer;

  dopis : string[250];

begin

   letter := 0;

   err := InitWBMail("winbase", nil); // inicializace pošty

   if err = 0 then  begin  // vytvoření dopisu

      dopis := "Data ze dne "+Date2str(Today,1);

      err := LetterCreate("Data", dopis, 1+2+8, letter);

   end;

   if err = 0 then    // přidání adresáta

      err := LetterAddAddr(letter, "NTserver@software602.cz", "SMTP", FALSE);

   if err = 0 then    // připojení souboru

      err := LetterAddFile(letter, "c:\temp\data.tdt");

   if err = 0 then

   begin              // odeslání dopisu

      err := LetterSend(letter);

      letter := 0;

   end;

   if err <> 0 then

   begin

      Signalize;

      if letter <> 0 then // nebyl odeslán, ale existuje - zrušit

         LetterCancel(letter);

   end;

   CloseWBMail;  // ukončit komunikaci

end.

Tentýž příklad v SQL na serveru:

(funkce pro spolupráci s poštou nevyvolají výjimku - nelze zachytit handlerem)

PROCEDURE OdesliMail();

BEGIN

   DECLARE Letter, Err INT;

   DECLARE Dopis CHAR(250);

   SET Letter = 0;

   SET Err = InitWBMail("winbase", NULL);

   IF Err = 0 THEN BEGIN

      SET dopis = "Data ze dne "||Date2str(Today,1);

      SET Err = LetterCreate("Data", dopis, 1+2+8, Letter);

   END;

   END IF;

   IF Err = 0 THEN

      SET Err = LetterAddAddr(Letter,"NTserver@software602.cz","SMTP",FALSE);

   END IF;

   IF Err = 0 THEN

      SET Err = LetterAddFile(Letter, "c:\temp\data.tdt");

   END IF;

   IF Err = 0 THEN

   BEGIN

      SET Err = LetterSend(Letter);

      SET Letter = 0;

   END;

   END IF;

   IF Err <> 0 THEN

   BEGIN

      CALL Log_write("Chyba při odesílání pošty " + int2str(Err));

      IF Letter <> 0 THEN

         CALL LetterCancel(Letter);

      END IF;

   END;

   END IF;

   CALL CloseWBMail();

END

Viz také:	Spolupráce s elektronickou poštou - úvod
	Odesílání pošty


Příklad příjmu zásilky

Příklad v jazyku klienta :

var cnt1, cnt2  : trecnum;

    j,i,err     : integer;

    id_zas,lsize: integer;

    curs1,curs2 : cursor;

    box         : integer;

    query1,query2  : string[120];

    fname       : string[255];

begin

err := InitWBMail("winbase", nil); // inicializace

   if err = 0 then begin

     err := MailOpenInBox(box);     // otevření schránky

     if err = 0 then begin

       MailBoxLoad(box,0);     // načtení informací (pouze seznam)

       query1 := "SELECT * FROM _Sysext._Inboxmsgs WHERE subject=""Data""";

// vybrání těch zásilek, které mají daný subject

       if not Open_SQL_Cursor(curs1, query1) then begin

         Rec_cnt(curs1, cnt1);

         for j := 0 to cnt1 - 1 do begin

            id_zas := curs1[j].id;   // identifikátor j-té zásilky

            MailBoxGetMsg(box,id_zas); //získání textu j-tého dopisu

            lsize := curs1[j].size;

            if lsize > 0 then begin

// ... práce s textem dopisů

            end;

// získání informací o připojených souborech j-té zásilky

            MailBoxGetFilInfo(box,id_zas);

            query2 := "SELECT * FROM _Sysext._Inboxfiles WHERE id="+Int2str(id_zas);

            if not Open_SQL_cursor(curs2, query2) then begin

               Rec_cnt(curs2,cnt2);

               for i := 0 to cnt2 - 1 do begin

// získání informací o připojených souborech j-té zásilky

                 fname := curs2[i].name;

// oříznutí cesty (platí pouze pro Windows)

                 while SubStr("\",fname) do

                   StrDelete(fname,1,StrPos("\",fname));

// vytvoření jména souboru pro uložení

                 fname := "D:\tempdir\wbdata\"+fname;

// uložení souboru

                 err := MailBoxSaveFileAs(box,id_zas,i,nil,fname);

                 if err > 0 then Signalize;

               end;

               Close_cursor(curs2);

            end;

// vymazání zásilky ze schránky i z databáze

            MailBoxDeleteMsg(box,id_zas,TRUE);

         end;

         Close_cursor(curs1);

       end;

       MailCloseInBox(box); // zavřít schránku

     end else Signalize;    // chyba při otevření schránky

     CloseWBMail;       // ukončit komunikaci

  end else Signalize;   // chyba při inicializaci

end.

Tentýž příklad v SQL na serveru:

(funkce pro spolupráci s poštou nevyvolají výjimku - nelze zachytit handlerem)

PROCEDURE `PrijmiMail`();

BEGIN

   DECLARE err,i  INT;

   DECLARE box    INT;

   DECLARE id_zas,lsize INT;

   DECLARE fname  CHAR(255);

   SET err = InitWBMail("winbase","");

   IF err = 0 THEN BEGIN

     SET err = MailOpenInBox(box);

     IF err = 0 THEN BEGIN

       CALL MailBoxLoad(box,0);

       FOR Zas AS INSENSITIVE CURSOR FOR

         SELECT * FROM _Sysext._Inboxmsgs WHERE Subject="Data"

       DO

       BEGIN

          SET id_zas = Zas.id;

          CALL MailBoxGetMsg(box,id_zas);

          SET lsize = Zas.size;

          IF lsize > 0 THEN

          BEGIN

  // ... práce s textem dopisů

          END; END IF;

          CALL MailBoxGetFilInfo(box,id_zas);

          SET i = 0;

          FOR ZasFil AS INSENSITIVE CURSOR FOR

            SELECT * FROM _Sysext._Inboxfiles WHERE id=id_zas

          DO

          BEGIN

            SET fname = ZasFil.name;

            WHILE POSITION("\" IN fname)>0 DO

               CALL StrDelete(fname,1,POSITION("\" IN fname));

            END WHILE;

            SET fname = "D:\tempdir\wbdata\"||fname;

            SET Err = MailBoxSaveFileAs(box,id_zas,i,"",fname);

            IF Err > 0 THEN

              CALL Log_write("Chyba při ukládání souboru "+int2str(Err));

            END IF;

            SET i = i+1;

          END;

          END FOR;

          CALL MailBoxDeleteMsg(box,Zas.id,FALSE);

       END;

       END FOR;

       CALL MailCloseInBox(box);

     END; ELSE

       CALL Log_write("Chyba při otevírání schránky "+int2str(Err));

     END IF;

     CALL CloseWBMail();

   END; ELSE

     CALL Log_write("Chyba při inicializaci "+int2str(Err));

   END IF;

END

Viz také:	Spolupráce s elektronickou poštou - úvod
	Příjem pošty


Funkce Abs
Abs	[I..S]

function Abs(r : real) : real;

Parametry

r	reálné číslo

Popis

Funkce Abs vypočítá absolutní hodnotu reálného čísla.

Hodnota funkce

Funkce vrací absolutní hodnotu čísla zadaného jako parametr. Na rozdíl od podobné funkce v Pascalu je typ výsledku vždy Real.

Viz

Iabs


Funkce Acreate_user
Acreate_user	[ICP]

function Acreate_user(hParent : window_id) : Boolean;

BOOL Acreate_user(cdp_t cdp, window_id hParent);

function Acreate_user(cdp : cdp_t; hParent : window_id) : Boolean;

Parametry

cdp	kontextová proměnná klienta
hParent	handle okna, nad nímž se dialogové okno otevře, nebo 0;

Od verze:

5.0

Popis

Funkce Acreate_user otevře modální dialogové okno umožňující vytvoření nového uživatele.

Hodnota funkce

Funkce vrací FALSE při chybě nebo když uživatel nepotvrdí zadané údaje.

Viz

Set_password, Create_user, Amodify_user, Aset_password, GetSet_group_role


Funkce Active_view
Active_view	[ICP]

function Active_view : window_id;

window_id Active_view(void);

function Active_view : window_id;

Popis

Funkce Active_view zjišťuje, který formulář je právě aktivní.

Hodnota funkce

Funkce vrací identifikaci (handle) aktivního formuláře. Pokud není otevřen žádný formulář nebo pokud je aktivní okno, které není formulářem (např. editor textu), funkce vrací nulu.

Příklad

if Active_view <> id1 then Pick_window(id1)


Funkce Addr
Addr	[ICP]

function Addr(prom) : ukazatel;

Parametry

prom	libovolná proměnná

Od verze:

5.0

Popis

Funkce vrací ukazatel na proměnnou, která je parametrem. Při přiřazování do prom. typu ukazatel pomocí funkce Addr se neprovádí žádná typová kontrola. Takto získaný ukazatel se nesmí použít v proceduře Dispose.

Hodnota funkce

Funkce vrací ukazatel na proměnnou, která je parametrem.

Viz

New, Dispose


Funkce Add_record
Add_record	[ICP]

function Add_record(curs : tcursnum;  var recs; numoftabs : short) : Boolean;

BOOL [cd_]Add_record([cdp_t cdp], tcursnum curs, trecnum * recs, int numoftabs);

function [cd_]Add_record([cdp : cdp_t]; curs : tcursnum; var recs; numoftabs : integer) : Boolean;

Parametry

curs	otevřený pevný nebo proměnný kurzor -viz podrobnosti
recs	pole čísel záznamů (typu trecnum), které vytvoří jeden záznam v kurzoru; počet tabulek spojených v dotazu=počet prvků pole
numoftabs	počet tabulek, z nichž je vtvořen kurzor
[cdp	kontextová proměnná klienta]

Popis

Funkce Add_record přidá jeden nový záznam do otevřeného kurzoru curs. Tento záznam je popsán enticí absolutních čísel záznamů v tabulkách, jejichž spojením je kurzor vytvořen, uloženou v poli recs. Používá se, když autor aplikace chce vytvořit v programu proměnný kurzor, jenž obsahuje záznamy vybrané z tabulek explicitně, nikoli podmínkou WHERE(např. některý záznam se má opakovat).

Je-li dotaz vytvořen z jediné tabulky (nejčastější případ - numoftabs = 1 ), je možné místo pole recs předat číslo záznamu v proměnné typu Integer - viz příklad.

Funkce Add_record leží mimo relační algebru vytvářející kurzory (a zcela mimo SQL). Proto nelze spoléhat na to, že záznamy přidané do kurzoru funkcí Add_record budou použity při konstrukci subkurzoru tohoto kurzoru.

Hodnota funkce

Funkce vrací FALSE při úspěchu, jinak vrací TRUE.

Příklad

// vytvoří prázdný proměnný kurzor ADDC

Open_sql_cursor(addc,"select * from TAB1 where FALSE");

// do proměnné zadá absolutní číslo záznamu z tabulky TAB1, který má být v kurzoru

cislozaz := ...

// tento záznam přidá do kurzoru

Add_record(addc, cislozaz, 1);


Funkce Alogin
Alogin	[ICP]

function Alogin(hParent : window_id) : Boolean;

BOOL Alogin(window_id hParent);

function Alogin(hParent : window_id) : Boolean;

Parametry

hParent	okno, které bude "rodičem"' přihlašovacího okna nebo 0

Popis

Funkce Alogin je interaktivní alternativou funkce Login. Nemá žádné parametry, po svém zavolání se pomocí dialogového okna uživatele zeptá na jméno a na heslo. Poté se pokusí uživatele přihlásit stejně jako funkce Login. Při zadání nesprávného jména nebo hesla se zadání automaticky opakuje.

Parametr hParent smí mít hodnotu 0. Tuto hodnotu doporučujeme použít ve vnitřním programovacím jazyce, pokud jste nevytvořili žádné okno, které by mohlo být ”rodičem”.

Hodnota funkce

Funkce Alogin skončí teprve tehdy, až se uživatel buď úspěšně přihlásí, nebo se stiskem tlačítka Skončit v dialogovém okně vzdá dalších pokusů. V prvním případě funkce vrací hodnotu TRUE a přihlášen je nový uživatel, v druhém FALSE a přihlášen je původní uživatel.

Příklad

if Alogin(0) then ...

Viz

Login, Logout; Who_am_I


Funkce Am_I_db_admin
Am_I_db_admin	[ICP]

function Am_I_db_admin : boolean;

BOOL Am_I_db_admin(void);

function Am_I_db_admin : boolean;

Popis

Funkce slouží k určení, je li přihlášený uživatel členem skupiny DB_ADMIN (je-li správcem databáze). Lze ji použít např. v podmínkách viditelnosti složek pohledů a položek menu, které mají být běžnému uživateli zakázané či skryté.

Hodnota funkce

Funkce vrací TRUE, je-li uživatel správce databáze,  FALSE, není-li tomu tak.

Příklad

if not Am_I_db_admin then Info_box('Nelze',' Nastavení parametrů může provést pouze správce databáze!')

else Open_view('*Param2',NO_REDIR,MODAL_VIEW,0,0,NIL);


Funkce Amodify_user
Amodify_user	[ICP]

function Amodify_user(hParent : window_id; objnum : tobjnum) : Boolean;

BOOL Amodify_user(cdp_t cdp, window_id hParent, tobjnum objnum);

function Amodify_user(cdp : cdp_t;  hParent : window_id; objnum : tobjnum) : Boolean;

Parametry

cdp	kontextová proměnná klienta
hParent	handle okna, nad nímž se dialogové okno otevře, nebo 0;
objnum	číslo uživatele zjištěné funkcí Find_object

Od verze:

5.0

Popis

Funkce Amodify_user otevře modální dialogové okno umožňující modifikovat údaje o uživateli s číslem objnum.

Modifikovat uživatele může pouze správce databáze, přihlášený uživatel může modifikovat sám sebe. Anonymního uživatele nelze modifikovat. Měnit heslo může přihlášený uživatel pouze u sebe (týká se i správců!).

Hodnota funkce

Funkce vrací FALSE při chybě nebo když uživatel nepotvrdí zadané údaje.

Příklad

if not Find_object("Honza",CATEG_USER,usernum) then

  Amodify_user(0,usernum);

Viz

Set_password, Acreate_user, Create_user, Aset_password


Funkce answered
answered	[.CP]

BOOL [cd_]answered([cdp_t cdp]);

function [cd_]answered ([cdp : cdp_t]): Boolean;

Parametry

[cdp	kontextová proměnná klienta]

Popis

Funkce zjišťuje, zda již došla odpověď na poslední požadavek zaslaný serveru.

Hodnota funkce

Pokud není zapnuté souběžné zpracování, pak tato funkce vždy vrací hodnotu TRUE. Pokud je zapnuté souběžné zpracování, pak tato funkce vrací hodnotu FALSE, když na poslední odeslaný požadavek na server dosud nedošla odpověď. Pokud odpověď již došla, funkce vrací hodnotu TRUE.

viz

concurrent, Break


Funkce Append
 Append	[ICP]

function Append(curs : tcurstab) : trecnum;

trecnum [cd_]Append([cdp_t cdp], tcurstab curs);

function [cd_]Append([cdp : cdp_t]; curs : tcurstab) : trecnum;

Parametry

curs	deklarovaná tabulka  nebo otevřený kurzor -viz podrobnosti
[cdp	kontextová proměnná klienta]

Popis

Funkce Append přidává nový prázdný záznam k tabulce nebo ke kurzoru curs za všechny existující záznamy. První provedení Append na určitou tabulku resp. kurzor může chvíli trvat, protože se musí projít všechny záznamy patřící do tabulky resp. kurzoru.

Ve funkci Append nelze použít kurzory vzniklé spojením více tabulek.

V přidaném záznamu budou všechny sloupce mít hodnoty NONE dle svých typů nebo implicitní hodnoty definované v návrhu tabulky. Jsou-li v tabulce definována integritní omezení, buď musí být splněna na implicitních hodnotách, anebo ještě ve stejné transakci musí být do sloupec; zapsány vyhovující hodnoty.

Funkce Append provedená na tabulku je totožná s funkcí Insert. Při provedení na kurzor se však liší - Append vloží záznam na konec tabulky, do níž kurzor vede, Insert využije volné mezery v tabulce po smazaném a uvolněném záznamu.

Hodnota funkce

Funkce vrací absolutní číslo přidaného záznamu. Toto číslo lze  po provedení Append použít pro zápis do přidaného záznamu v tabulce resp. kurzoru curs, kam byl nový záznam přidán. Vrácená hodnota je o 1 menší než hodnota, kterou by vrátila funkce Rec_cnt zavolaná po Append.

Pokud se operace neprovede, vrací se hodnota -1. Povahu chyby lze pak zjistit voláním funkce Signalize.

Příklad

table

   TAB1;

var

   cislo : trecnum;

begin

  cislo := Append(TAB1);

  TAB1[cislo].jméno := "Josef";

  ...

Viz

Insert, Delete, Undelete, Free_deleted, Rec_cnt


Funkce Appl_inst_count
Appl_inst_count	[ICP]

function Appl_inst_count (var count : integer) : Boolean;;

BOOL [cd_]Appl_inst_count([cdp_t cdp,] uns32 * count);

function [cd_]Appl_inst_count ([cdp : cdp_t;] var count : integer) : Boolean;;

Parametry

count	počet spuštěných instancí aktuální aplikace – výstupní parametr
[cdp	kontextová proměnná klienta]
Od verze

6.0

Popis

Funkce zjišťuje, kolik klientů připojených na server má otevřenou stejnou aplikaci jako klient, který funkci zavolal.

Hodnota funkce

Funkce vrací TRUE při chybě.

Příklad:

if Appl_inst_count(pocet) then Signalize;

if pocet >= 2 then begin

  Info_box("Chyba","Nelze spustit podruhé...");

  Halt

end;


Funkce Arctan
Arctan	[I..S]

function Arctan(r : real) : real;

Parametry

r	reálné číslo

Popis

Funkce Arctan počítá arkus tangens vyjádřený v radiánech.

Hodnota funkce

Funkce vrátí hodnotu arkus tangenty.

Viz

Sin, Cos, Ln, Exp.


Funkce AReplicate
AReplicate	[ICP]

function AReplicate(hParent : window_id; pull : Boolean) : Boolean;

BOOL AReplicate(cdp_t cdp, window_id hParent, BOOL pull);

function AReplicate(cdp : cdp_t; hParent : window_id; pull : Boolean) : Boolean;

Parametry

cdp	kontextová proměnná klienta
hParent	handle okna, nad nímž se dialogové okno otevře, nebo 0;
pull	směr replikací - FALSE (replikační paket)  / TRUE (žádost o replikaci)

Od verze:

5.0

Popis

Funkce AReplicate otevře dialogové okno s nabídkou replikačních serverů, s nimiž se sdílí běžná aplikace, a umožní vybrat jeden nebo více z nich. Je-li pull rovno FALSE, vytvoří se pro tyto servery replikační paket. Je-li pull rovno TRUE, zašle se jim žádost o replikaci.

Odpovídá akcí řídicího panelu Replikovat tam a Replikovat sem.

Funkce má také neinteraktivní obdobu - funkci Replicate.

Hodnota funkce

Funkce vrací FALSE při chybě.

Viz

Repl_control, Replicate,


Funkce Aset_password
Aset_password	[ICP]

function Aset_password(hParent : window_id) : Boolean;

BOOL Aset_password(cdp_t cdp, window_id hParent);

function Aset_password(cdp : cdp_t;  hParent : window_id) : Boolean;

Parametry

cdp	kontextová proměnná klienta
hParent	handle okna, nad nímž se dialogové okno otevře, nebo 0;

Od verze:

5.0

Popis

Funkce Aset_password otevře modální dialogové okno umožňující změnit heslo přihlášeného uživatele.

Hodnota funkce

Funkce vrací FALSE při chybě nebo když uživatel nepotvrdí zadané údaje.

Viz

Set_password, Acreate_user, Amodify_user, Create_user


Funkce Atoken_control
AToken_control	[ICP]

function AToken_control(hParent : window_id; curstab : tcurstab;  recnum : trecnum) : Boolean;

BOOL AToken_control(cdp_t cdp, window_id hParent, tcurstab curstab, trecnum recnum);

function AToken_control(cdp : cdp_t;  hParent : window_id; curstab : tcurstab;  recnum : trecnum) : Boolean;

Parametry

hParent	handle okna, nad nímž se dialogové okno otevře, nebo 0;
curstab	tabulka nebo kurzor - viz podrobnosti
recnum	absolutní číslo záznamu
cdp	kontextová proměnná klienta

Od verze:

5.0

Popis

Funkce AToken_control otevře dialogové okno pro správu pešků na záznamu s absolutním číslem recnum v tabulce nebo kurzoru curstab.

Hodnota funkce

Funkce vrací FALSE při chybě.

Viz

Areplicate, Token_control


Funkce Attribute_info
Attribute_info	[.CP]

BOOL [cd_]Attribute_info([cdp_t cdp], tcurstab curs,  const char * attrname,   tattrib * attrnum, uns8 * attrtype,  uns8 * attrmult, uns16 * attrspecif);

function [cd_]Attribute_info([cdp : cdp_t]; curs : tcurstab;  attrname : PChar; var attrnum : tattrib;  var attrtype : uns8; var attrmult : uns8; var attrspecif : uns16) : Boolean;

Parametry

curs	deklarovaná tabulka nebo otevřený kurzor  -viz podrobnosti
attrname	jméno sloupce z curs;
attrnum	výstupní parametr: číslo sloupce;
attrtype	výstupní parametr: typ sloupce;
attrmult	výstupní parametr: počet hodnot a vlastnosti multiatributu;
attrspecif	výstupní parametr: délka řetězce nebo číslo cílové tabulky u ukazatele.
[cdp	kontextová proměnná klienta]

Popis

Funkce vyhledá v tabulce nebo kurzoru curs sloupec se jménem attrname a přiřadí výstupním parametrům jeho číslo a vlastnosti.

Do attrnum funkce zapíše číslo sloupce, které se dá použít při odkazech na sloupec v takových funkcích, jako jsou Read nebo Write. Do  attrtype funkce zapíše číslo typu sloupce. Do attrmult zapíše počet hodnot multiatributu v rozsahu 0 až 127; pokud tento počet smí být překročen, pak v attrmult nastaví nejvyšší bit na 1. Pokud sloupec není multiatributem, bude v attrmult mít hodnotu 1.

Význam hodnoty parametru attrspecif závisí na typu sloupce: pro řetězce je to jejich maximální délka, pro ukazatele (jedno- i obousměrné) je to číslo tabulky, do níž ukazatel směřuje.

Hodnota funkce

Funkce vrací TRUE, pokud sloupec se jménem attrname byl v tabulce nebo kurzoru curnum nalezen. Funkce vrací FALSE, pokud takový sloupec neexistuje. Hodnoty výstupních parametrů jsou pak nedefinované.

Viz Enum_attributes.


Funkce Available_memory
Available_memory	[ICP]

function Available_memory(local : Boolean) : integer;

sig32 [cd_]Available_memory([cdp_t cdp], BOOL local);

function [cd_]Available_memory([cdp : cdp_t]; local : Boolean) : longint;

Parametry

local	rozlišení paměti klienta a serveru ;
[cdp	kontextová proměnná klienta]

Popis

Funkce zjistí, kolik vyhrazené volné paměti ve WinBase602 zbývá. Přiblíží-li se volná paměť 64 KB, některé operace se již nezdaří a systém může vydat neočekávaná hlášení i v situacích, které předtím proběhly bez chyby.

Nejvíce paměti lze ušetřit zavíráním nepotřebných kurzorů.

Parametr local udává, zda-li se zkoumá volná paměť na serveru (FALSE) nebo na počítači klienta (TRUE). Při lokálním provozu hodnota parametru nemá význam.

Funkce je určena pro vývojáře složitějších aplikací jako pomůcka při ladění.

Od verze 6 se paměť serveru i klienta v případě nedostatku alokuje automaticky, proto tato funkce ztrácí smysl. Nahrazuje ji funkce Used_memory, která ukazuje, kolik paměti je využito.

Hodnota funkce

Funkce vrací počet bytů volné paměti.

Příklad

if Available_memory(false)< 70000 then

  Info_box('Varování,'Paměť poklesla pod 70000!');

Viz

Used_memory, Owned_cursors


Funkce Background_bitmap
Background_bitmap	[ICP]

function Backround_bitmap(var name : string) : Boolean;

BOOL Backround_bitmap (cdp_t cdp, const char * name);

function Backround_bitmap (cdp : cdp_t; name : PChar) : Boolean;

Parametry

cdp	kontextová proměnná klienta
name	jméno objektu typu obrázek

Od verze:

6.0c

Popis

Funkce zobrazí obrázek (uložený v aplikaci jako objekt) na pozadí hlavního okna WinBase602. Obrázek bude vycentrován podle velikosti okna.

Je li parametr name prázdný string, obrázek zmizí.

Hodnota funkce

Funkce vrací při úspěchu  TRUE


Funkce Bind_records
Bind_records	[I..]

function Bind_records(var attr : attribute;  var viewdef : string; base : tcursnum;  flags : short) : Boolean;

Parametry

attr	databázový sloupec nebo multiatribut typu ukazatel nebo obousměrný ukazatel
viewdef	specifikace vázacího formuláře, který má být otevřen
base	otevřený kurzor nebo konstanta NO_REDIR
flags	viz Parametry otevření formuláře.

Popis

Funkce Bind_records se smí volat pouze z formuláře - smí být uvedena pouze v části  Akce složky v návrhu formuláře. Tato funkce otevře formulář specifikovaný viewdef a umožní v něm vybrat jeden nebo více záznamů. Tyto záznamy přiváže k ukazateli attr.

Otevíraný formulář bude přesměrován na kurzor base.

Hodnota funkce

Funkce vrací TRUE, pokud se formulář podařilo otevřít, jinak vrací FALSE.

Příklad

Bind_records(UKAZATEL, '*FORM1', NO_REDIR, NO_INSERT+NO_DELETE)


Funkce Break
Break	[.CP]

BOOL [cd_]Break([cdp_t cdp]);

function [cd_]Break ([cdp : cdp_t]) : Boolean;

Parametry

[cdp	kontextová proměnná klienta]

Popis

Funkce Break vyšle požadavek na zrušení právě prováděného požadavku na server. Volání této funkce má smysl pouze v době, kdy hodnota funkce answered je FALSE, což může nastat buď v režimu souběžného zpracování, nebo při asynchronním volání Break např. přerušením z klávesnice, nebo z jiného počítače. Pokud tyto podmínky nejsou splněny, nemá procedura Break žádný efekt.

Není zaručeno, že funkce Break zruší provádění posledního požadavku. Je zaručeno, že za konečnou dobu po provedení Break nabude funkce answered hodnoty TRUE. Zda ke zrušení požadavku došlo, lze pak zjistit voláním funkce Sz_error.

Hodnota funkce

Funkce Break vrací TRUE právě tehdy, pokud byla zavolána v době, kdy server nezpracovává žádný požadavek od volajícího programu. Hodnota funkce neříká, zda došlo ke zrušení požadavku.Funkce vrací počet bytů volné paměti.


Funkce C_Avg
C_Avg	[ICP]

function C_Avg(curs : tcurstab; var attrname, condition : string; var res : untyped) : Boolean;

BOOL [cd_]C_Avg([cdp_t cdp],  tcurstab curs, const char * attrname, const char * condition, void * res);

function [cd_]C_Avg([cdp : cdp_t]; curs : tcurstab; attrname, condition : PChar; var res) : Boolean;

Parametry

curs	deklarovaná tabulka nebo otevřený kurzor -viz podrobnosti
attrname	jméno sloupce
condition	dodatečná podmínka na výběr
res	výstupní parametr – průměr hodnot sloupce attrname;  beztypová proměnná
[cdp	kontextová proměnná klienta]

Popis

Funkce vypočítá průměrnou hodnotu sloupce attrname v tabulce nebo dotazu curs, případně omezeného navíc podmínkou condition. Je-li parametr condition prázdný řetězec, berou se všechny záznamy z curs.

Sloupec musí být buď numerického typu nebo typu Time.

Výsledek bude zapsán do beztypové proměnné res.

Funkci nelze použít pro multiatributy, sloupce proměnné velikosti ani ukazatele.

Hodnota funkce

Funkce při chybě vrátí TRUE, při úspěchu FALSE..

Příklad

var

  prumer : untyped;

  pr : money;

table

  Faktury;

begin

  if not C_Avg(Faktury,'Castka','druh=1',prumer) then begin

    pr := prumer;

    Info_box('Průměrná částka na faktuře',Money2str(pr,1));

  end;

end.

Viz

C_Sum, C_Min, C_Max, C_Count


Funkce C_Count
C_Count	[ICP]

function C_Count(curs : tcurstab; var attrname, condition : string; var res : integer) : Boolean;

BOOL [cd_]C_Count([cdp_t cdp], tcurstab curs, const char * attrname, const char * condition, trecnum * res);

function [cd_]C_Count([cdp : cdp_t]; curs : tcurstab; attrname, condition : PChar; var res : trecnum) : Boolean;

Parametry

curs	deklarovaná tabulka nebo otevřený kurzor -viz podrobnosti
attrname	jméno sloupce
condition	dodatečná podmínka na výběr
res	výstupní parametr - počet záznamů
[cdp	kontextová proměnná klienta]

Popis

Funkce spočte záznamy z tabulky nebo kurzoru curs, které vyhovují podmínce condition a ve sloupci attrname nemají hodnotu NONE. Je-li parametr condition prázdný řetězec, berou se všechny záznamy z curs.

Funkci nelze použít pro multiatributy, sloupce proměnné velikosti ani ukazatele.

Hodnota funkce

Funkce při chybě vrátí TRUE, při úspěchu FALSE..

Příklad

var

  pocet : integer;

table

  Faktury;

begin

  if not C_Count(Faktury,'CASTKA','',pocet) then

    Info_box('Počet faktur',int2str(pocet));

end.

Viz

C_Sum, C_Min, C_Max, C_Avg


Funkce C_Max
C_Max	[ICP]

function C_Max(curs : tcurstab; var attrname, condition : string; var res : untyped) : Boolean;

BOOL [cd_]C_Max([cdp_t cdp], tcurstab curs, const char * attrname, const char * condition, void * res);

function [cd_]C_Max([cdp : cdp_t]; curs : tcurstab; attrname, condition : PChar; var res) : Boolean;

Parametry

curs	deklarovaná tabulka nebo otevřený kurzor -viz podrobnosti
attrname	jméno sloupce
condition	dodatečná podmínka na výběr
res	výstupní parametr - hodnota maxima ze sloupce attrname;  beztypová proměnná
[cdp	kontextová proměnná klienta]

Popis

Funkce zjistí maximální hodnotu sloupce attrname v tabulce nebo dotazu curs, případně omezeného navíc podmínkou condition. Je-li parametr condition prázdný řetězec, berou se všechny záznamy z curs.

Sloupec musí být buď numerického typu, řetězec, znak typ Time nebo Date.

Výsledek bude zapsán do beztypové proměnné res.

Funkci nelze použít pro multiatributy, sloupce proměnné velikosti ani ukazatele.

Hodnota funkce

Funkce při chybě vrátí TRUE, při úspěchu FALSE.

Příklad

var

  maxim : untyped;

  mx : money;

table

  Faktury;

begin

  if not C_Max(Faktury,'Castka','druh=1',maxim) then begin

    mx := maxim;

    Info_box('Maximální částka', Money2str(mx,1));

  end;

end.

Viz

C_Sum, C_Min, C_Count, C_Avg


Funkce C_Min
C_Min	[ICP]

function C_Min(curs : tcurstab; var attrname, condition : string; var res : untyped) : Boolean;

BOOL [cd_]C_Min([cdp_t cdp], tcurstab curs, const char * attrname, const char * condition, void * res);

function [cd_]C_Min([cdp : cdp_t]; curs : tcurstab; attrname, condition : PChar; var res) : Boolean;

Parametry

curs	deklarovaná tabulka nebo otevřený kurzor -viz podrobnosti
attrname	jméno sloupce
condition	dodatečná podmínka na výběr
res	výstupní parametr - maximální hodnota sloupce attrname;  beztypová proměnná
[cdp	kontextová proměnná klienta]

Popis

Funkce vypočítá minimální hodnotu sloupce attrname v tabulce nebo dotazu curs, případně omezeného navíc podmínkou condition. Je-li parametr condition prázdný řetězec, berou se všechny záznamy z curs.

Sloupce musí být buď numerického typu, řetězec, znak typ Time nebo Date.

Výsledek bude zapsán do beztypové proměnné res.

Funkci nelze použít pro multiatributy, sloupce proměnné velikosti ani ukazatele.

Hodnota funkce

Funkce při chybě vrátí TRUE, při úspěchu FALSE.

Příklad

table

  faktury;

var

  u : untyped;

  mo : money;

  c : cursor;

begin

  if not Open_sql_cursor(c,'select Sum(CASTKA), '

             'FIRMA From FAKTURY Group By FIRMA ')

  then

  if not C_Min(c,'SUM1','',u) then begin

    mo := u;

    Info_box('Nejnižší obrat',Money2str(mo,0));

  end;

  Close_cursor(c);

end.

Viz

C_Sum, C_Max, C_Count, C_Avg


Funkce C_Sum
C_Sum	[ICP]

function C_Sum(curs : tcurstab; var attrname, condition : string; var res : untyped) : Boolean;

BOOL [cd_]C_Sum([cdp_t cdp], tcurstab curs, const char * attrname, const char * condition, void * res);

function [cd_]C_Sum([cdp : cdp_t]; curs : tcurstab; attrname, condition : PChar; var res) : Boolean;

Parametry

curs	deklarovaná tabulka nebo otevřený kurzor -viz podrobnosti
attrname	jméno sloupce
condition	dodatečná podmínka na výběr
res	výstupní parametr - součet hodnot sloupce attrname;  beztypová proměnná
[cdp	kontextová proměnná klienta]

Popis

Funkce vypočítá součet hodnot sloupce attrname v tabulce nebo dotazu curs, případně omezeného navíc podmínkou condition. Je-li parametr condition prázdný řetězec, berou se všechny záznamy z curs.

Sloupec musí být numerického typu.

Výsledek bude zapsán do beztypové proměnné res.

Hodnota funkce

Funkce při chybě vrátí TRUE, při úspěchu FALSE.

Funkci nelze použít pro multiatributy, sloupce proměnné velikosti ani ukazatele.

Příklad

var

  suma : untyped;

  pr : money;

table

  Faktury;

begin

  if not [cd_]C_Sum(Faktury,'Castka','druh=1',suma) then begin

    pr := prumer;

    Info_box('Součet faktur:',Money2str(pr,1));

  end;

end.

Viz

C_Min, C_Max, C_Count, C_Avg


Funkce cdp_aloc
cdp_alloc	[.CP]

cdp_t cdp_alloc(void);

function cdp_alloc : cdp_t;

Od verze:

5.0

Popis

Funkce cdp_alloc alokuje kontextovou proměnnou klienta.

Hodnota funkce

Funkce vrací ukazatel na kontextovou proměnnou klienta

Viz

cdp_size, cdp_free, cdp_init


Funkce cdp_free
cdp_free	[.CP]

void cdp_free(cdp_t cdp);

procedure cdp_free(cdp : cdp_t);

Parametry

cdp	kontextové proměnné klienta
Od verze:

5.0

Popis

Funkce cdp_free dealokuje kontextovou proměnnou klienta. Funkci volejte pouze v případě, že proměnná cdp byla alokována pomocí funkce cdp_alloc.

Viz

cdp_size, cdp_alloc, cdp_init


Funkce cdp_init
cdp_init	[.CP]

void cdp_init(cdp_t cdp);

procedure cdp_init(cdp : cdp_t);

Parametry

cdp	kontextové proměnné klienta
Od verze:

5.0

Popis

Procedura cdp_init inicializuje sadu kontextových proměnných klienta. Tyto proměnné musí být deklarovány jako lokální v hlavním programu klienta a musí být touto procedurou inicializovány před voláním funkce interf_init.

Viz

link_kernel, cdp_size, cdp_free, cdp_alloc, cdp_init


Funkce cdp_size
cdp_size	[.CP]

sig32 cdp_size(void);

function cdp_size : sig32;

Od verze:

5.0

Popis

Funkce cdp_size vrací velikost kontextové proměnné.

Viz

cdp_free, cdp_alloc, cdp_init


Procedura Chng_component_flag
Chng_component_flag	[ICP]

function Chng_component_flag(cat : tcateg;  var name : string;  mask, setbit : integer) : Boolean;

BOOL	Chng_component_flag(cdp_t cdp, tcateg cat, const char * name, int mask, int setbit);

function Chng_component_flag(cdp : cdp_t;  cat : tcateg;  var name : PChar;   mask, setbit : integer) : Boolean;

Parametry

cat	kategorie objektu pro nějž se příznaky nastavují
name	jméno objektu pro nějž se příznaky nastavují
mask	bity, které se mají nastavovat
setbit	hodnota nastavovaných bitů
[cdp	kontextová proměnná klienta]

Od verze:

5.0

Popis

Funkce Chng_component_flag nastaví příznaky pro objekt kategorie cat jménem name.  Nastaví ty bity, které mají hodnotu 1 v parametru mask na tu hodnotu, kterou mají v parametru setbit. Lze nastavovat, zda se objekt má exportovat při exportu aplikace (bit 64), zda se mají exportovat data z tabulky (bit 16) a zda objekt je startovním objektem aplikace (bit 16).

Hodnota funkce

Funkce vrací při chybě TRUE.

Příklad - nastavení menu jako startovního objektu

Chng_component_flag(CATEG_MENU,"Hlavní",16,0)


Funkce Chr
Chr	[I..S]

function Chr(i : integer) : char;

Parametry

I	číslo, které bude převedeno na znak

Popis

Funkce Chr převádí celé číslo na znak, jehož kód má stejnou hodnotu. Při této konverzi se používá standard ASCII a východoevropská norma reprezentace národních znaků ve Windows (cp 1250). Hodnota funkce je definována pro hodnoty parametru z intervalu 0 až 255. Funkce Chr je inverzní k funkci Ord.

Hodnota funkce

Hodnotou funkce je znak, jehož kód je parametrem funkce.

Příklad

  Read(f,str);

  str := str+Chr(13)+Chr(10);

  delka := Strlength(str);

Viz

Ord.


Funkce client_number
client_number	[...S]

FUNCTION client_number RETURNS INT

Od verze:

6.0

Popis

Funkce je určena výhradně k použití v příkazech jazyka SQL.

Každý klient získá při připojení k serveru určité unikátní číslo, neměnné po dobu přihlášení. Při novém připojení může být totéž číslo přiděleno jinému klientovi.

Funkce client_number vrací toto číslo pro klienta, který ji zavolal. Funkce umožňuje rozlišovat různé klienty.

Hodnota funkce

Funkce vrací číslo připojení.

Příklad:

se všemi právě vloženými záznamy proveď proceduru...

INSERT INTO TabPom (cislo, id, datum) VALUES (client_number, idx,dtx);

...

FOR radek AS curinserted INSENSITIVE CURSOR FOR

  SELECT id

  FROM TabPom

  WHERE cislo = client_number

DO BEGIN

  CALL PomProc(radek.id);

END;

...


Procedura Close
Close	[I..]

procedure Close(var f : file);

Parametry

f	proměnná typu soubor (File)

Popis

Procedura Close uzavírá dříve otevřený soubor.

Každý soubor, který byl otevřen procedurou Reset nebo Rewrite, by měl být uzavřen procedurou Close. Pokud není explicitně uzavřen, uzavře jej WinBase602 při ukončení běhu programu (předtím oznámí Program neuzavřel všechny soubory).

Soubor musí být bezpodmínečně uzavřen dříve, než je podruhé otevřen procedurou Reset nebo Rewrite. Dojde-li před uzavřením souboru k nekorektnímu ukončení operačního systému, nebude zaznamenána změna velikosti souboru vyplývající z operací zápisu provedených nad tímto souborem.

Některé funkce pracující se soubory (např. Data_export) neproběhnou, dokud jsou tyto soubory otevřeny.

Příklad

var

  f  : file;

begin

  if Reset(f,"C:\WB602\POKUS.TXT") then begin

    ...

    Close(f);

  end;

end.

Viz

Read, Write, Writeln, Reset, Rewrite, Eof, Seek, Filelength.


Procedura Close_all_views
Close_all_views	[ICP]

procedure Close_all_views;

void Close_all _views (void);

procedure Close_all_views;

Popis

Procedura Close_all_views uzavře všechna okna s formuláři na obrazovce.

Viz

Close_view, View_close


Funkce Close_cursor
Close_cursor	[ICP]

function Close_cursor(var curs : tcursnum) : Boolean;

BOOL  [cd_]Close_cursor([cdp_t cdp], tcursnum curs);

function  [cd_]Close_cursor([cdp : cdp_t]; curs : tcursnum) : Boolean;

Parametry

curs	otevřený kurzor (pevný nebo proměnný) -viz podrobnosti
[cdp	kontextová proměnná klienta]

Popis

Funkce Close_cursor uzavře zadaný kurzor. Tento kurzor musí být otevřený. Uzavřením znemožní čtení a zápis dat prostřednictvím tohoto kurzoru. Funkce se hodí pro uzavírání kurzorů i subkurzorů, ve vnitřním jazyce pevných i proměnných kurzorů včetně ODBC kurzorů.

Doporučuje se uzavírat kurzory, které program již nepotřebuje. Tím se uvolní část operační paměti. Počet otevřených kurzorů zjistíte pomocí funkce Owned_cursors.

Volání této funkce z externího jazyka s parametrem -2 uzavře všechny kurzory, které patří volajícímu uživateli.

Pokud není kurzor explicitně uzavřen, uzavře jej WinBase602 při ukončení běhu programu (předtím oznámí Program neuzavřel všechny kurzory).

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize.

Funkce zavolaná s parametrem -2 vrátí TRUE, pokud uživatel neměl otevřený žádný kurzor.

Příklad

...

if Close_cursor(Cur1) then Signalize;

Viz

Open_cursor-interní j., Open_cursor-externí j., Open_sql_cursor, Open_sql_parts, Rec_cnt, Restrict_cursor, Restore_cursor, Owned_cursors


Procedura Close_semaphore
Close_semaphore	[...S]

PROCEDURE Close_semaphore(IN shandle INT);

Parametry

shandle	identifikace (handle) otevřeného semaforu

Od verze:

6.1

Popis

Procedura je určena výhradně k použití v příkazech jazyka SQL.

Procedura uzavře handle pro manipulaci se semaforem a tím znemožní další práci vlákna s tímto semaforem. Jakmile všechna vlákna uzavřou svoje handle k určitému semaforu, je semafor zrušen.

Provedení této funkce nemá vliv na činnost jiných vláken, která manipulují se stejným semaforem případně čekají na jeho otevření.

Více o synchronizaci vláken - podrobnosti.

Viz

Create_semaphore, Release_semaphore, Wait_for_semaphore,


Procedura Close_view
Close_view	[ICP]

procedure Close_view(hView : window_id);

void Close_view(window_id hView);

procedure Close_view(hView : window_id);

Parametry

hView	identifikace (handle) otevřeného formuláře

Popis

Procedura Close_view uzavře okno obsahující formulář s identifikací hView a to i v případě, že formulář má ve svém návrhu blokováno uzavření.

Příklad

zavření formuláře ID_FORM1:

Close_view(ID_FORM1)

zavření aktuálního formuláře:

Close_view(!!)

Zavření aktuálního formuláře je možné použít pouze z formuláře, nikoli např. z menu.

Viz

Open_view, View_open, Close_all_views,


CloseWBMail
CloseWBMail	[ICPS]

prodedure CloseWBMail;

void CloseWBMail();

prodedure CloseWBMail;

Popis

Ukončuje používání pošty a uvolňuje alokované zdroje.

Příklad

Příklad odeslání zásilky,

Příklad příjmu zásilky

Viz

InitWBMail, LetterCreate, LetterAddAddr, LetterAddFile, LetterCancel, LetterSend,

MailOpenInBox, MailBoxLoad, MailBoxGetMsg, MailBoxGetFilInfo, MailBoxSaveFileAs, MailCloseInBox, MailGetInBoxInfo, MailGetType,

MailDial, MailHangUp,


Funkce Commit
Commit	[ICP]

function Commit : Boolean;

BOOL [cd_]Commit([cdp_t cdp]);

function [cd_]Commit([cdp : cdp_t]) : Boolean;

Parametry

[cdp	kontextová proměnná klienta]

Popis

Funkce Commit potvrzuje a ukončuje transakci zahájenou funkcí Start_transaction a způsobuje trvalé zaznamenání všech její efektů do databáze. Pokud žádná transakce není zahájena, funkce neudělá nic.

Více o transakcích naleznete na stránkách popisu jazyka SQL.

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést nebo pokud žádná transakce není zahájena. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize.

Viz

Start_transaction, Roll_back, Set_transaction_isolation_level


Funkce Commit_view
Commit_view	[ICP]

function Commit_view(hView : window_id; can_ask, report_error : Boolean) : Boolean;

BOOL Commit_view(window_id hView; BOOL can_ask, BOOL report_error);

function Commit_view(hView : window_id; can_ask, report_error : Boolean) : Boolean;

Parametry

hView	identifikace (handle) otevřeného formuláře
can_ask	příznak, má-li se objevit dotaz na uložení dat
report_error	příznak, má-li se v případě chyby otevřít okno s jejím popisem

Popis

Funkce Commit_view zapíše změny v aktuálním záznamu v záznamově synchronizovaném formuláři hView do databáze, aniž by bylo třeba opouštět záznam. Je-li parametr can_ask roven TRUE a současně v návrhu formuláře je nastaveno Žádat potvrzení změn, budete před uložením změněného záznamu do databáze požádáni o potvrzení této akce. Je-li parametr report_error roven TRUE, pak se při výskytu chyby při zápisu objeví informační okno s popisem chyby. Zda-li se zápis provedl, poznáte z hodnoty funkce.

Funkce přibližně odpovídá akci Uložit změny ve formuláři.

Hodnota funkce

Funkce vrací TRUE, pokud se zápis provedl, FALSE v případě chyby.

Příklad

if Commit_view(ID_FORM1,false,true) then Close_view(ID_FORM1);

Viz

Roll_back_view,


Funkce Compact_database
Compact_database	[ICP]

function Compact_database (margin : integer) : Boolean;

BOOL [cd_]Compact_database ([cdp_t cdp,] int margin);

function [cd_]Compact_database ([cdp : cdp_t;] margin : integer) : Boolean

Parametry

margin	počet volných bloků (clusterů)
[cdp	kontextová proměnná klienta]
Od verze

5.1

Popis

Funkce provede zkompaktnění databáze. Tato akce přemístí bloky dat v souboru WB5.FIL tak, aby mezi nimi nebylo zbytečné volné místo (např. po odstraněné aplikaci apod.) a tím výrazně zmenší velikost souboru.

Funkce neprovádí zkompaktnění tabulek - k tomu slouží funkce Compact_table.

Pomocí parametru margin lze stanovit, kolik bloků (clusterů) v souboru WB5.FIL má zbýt po skončení operace prázdných - připravených pro ukládání dat bez nutnosti měnit velikost souboru. Význam tohoto parametru je stejný jako v dialogu Provozní parametry serveru (je-li počet prázdných bloků v souboru malý, objeví se při spuštění serveru varování upozorňující na to, že pokud se datový soubor zvětšuje dynamicky při běhu programu a dojde k nekorektnímu ukončení serveru, může být soubor poškozen).

Touto funkcí nemůže být databázový soubor zvětšen, pouze zmenšen. Zvětšení souboru se provádí funkcí GetSet_fil_size nebo GetSet_fil_blocks.

Funkci lze volat pouze v situaci, kdy na server není přihlášen žádný jiný uživatel. Při zavolání funkce nesmí být otevřen žádný kurzor. V opačném případě dojde k chybě NOT_LOCKED (136).

Akce může trvat delší dobu.

Funkce je obdobná akci Zkompaktnění databáze, kterou lze vyvolat z vývojového nebo provozního prostředí.

Viz

GetSet_fil_size, GetSet_fil_blocks, Compact_table


Funkce Compact_table
Compact_table	[ICP]

function Compact_table (table : ttablenum) : Boolean;

BOOL [cd_]Compact_table ([cdp_t cdp,] ttablenum table);

function [cd_]Compact_table ([cdp : cdp_t;] table : ttablenum) : Boolean;

Parametry

table	tabulka deklarovaná v programu - viz podrobnosti
[cdp	kontextová proměnná klienta]
Od verze

5.1

Popis

Funkce provede zkompaktnění tabulky. Přemístí záznamy tak, že v tabulce nebudou žádné uvolněné ani zrušené záznamy. Pořadí záznamů z doby před akcí nebude zachováno.

Zkompaktnění nelze provést na systémových tabulkách.

Pokud se funkce provede na tabulku, do níž vedou ukazatele, budou tyto ukazatele po skončení akce směřovat do jiných záznamů!!

Pokud se do tabulky průběžně přidávají a ruší záznamy, pak stačí zajistit jejich uvolňování (buď průběžně v okamžiku zrušení (funkce Set_sql_option parametrem SQL_EXPLIC_FREE) nebo jednorázově (funkce Free_deleted)) a není třeba provádět zkompaktnění. Zkompaktnění má smysl pouze tehdy, pokud tabulka obsahuje velmi mnoho uvolněných záznamů, které nebudou v dohledné době využity pro vkládání nových záznamů.

Funkce je ekvivalentní akci Zkompaktnění tabulky, kterou lze použít na jednu nebo více tabulek označených na řídicím panelu.

Viz

Free_deleted, Set_sql_option


Funkce concurrent
concurrent	[.CP]

void [cd_]concurrent([cdp_t cdp], BOOL state);

procedure [cd_]concurrent([cdp : cdp_t]; state : Boolean);

Parametry

state	TRUE zapíná a FALSE vypíná souběžnou práci klienta a serveru
[cdp	kontextová proměnná klienta]

Popis

Procedura zapíná nebo vypíná souběžnou práci klient a serveru.

Je-li parametr state roven FALSE, pak se po předání každého požadavku, který není obsažen v balíku, čeká na jeho provedení.

Je-li parametr state roven TRUE, bude komunikace probíhat v režimu souběžného zpracování. V tomto režimu zavolání funkce databázového jádra způsobí vyslání požadavku do serveru, ale (z důvodů efektivnějšího fungování) se nečeká na výsledek. Po návratu z volání nemusí být tedy ve výstupních parametrech žádná smysluplná hodnota. Ta se do nich zapíše teprve poté, až přijde od serveru odpověď.

Pozor !  Uvědomte si, že důsledkem toho mohou být zcela asynchronní změny obsahu proměnných, na něž byla spuštěna operace čtení!

Klient může zjistit, zda na jeho poslední požadavek již přišla odpověď, když zavolá funkci answered. Její hodnota FALSE signalizuje, že odpověď dosud nedošla.

Pokud klient vyšle další požadavek před obdržením odpovědi na předchozí požadavek, je tento nový požadavek pozdržen do příchodu odpovědi. Bezprostředně poté je nový požadavek komunikační knihovnou odeslán. Pro klienta pak neexistuje způsob, jak zjistit úspěch či neúspěch provedení prvního z těchto požadavků. Proto takový postup nedoporučujeme.

Funkce Break, která ruší právě prováděný požadavek, pracuje asynchronně bez ohledu na to, zda je povolena souběžná práce.

Po provedení funkce interf_init je souběžné zpracování vypnuto.

Viz

interf_init, Break, answered


Funkce Connection_speed_test
Connection_speed_test	[ICP]

function Connection_speed_test (var requests, kbytes : integer) : Boolean;

BOOL [cd_]Connection_speed_test([cdp_t cdp,] int * requests, int * kbytes);

function [cd_]Connection_speed_test ([cdp : cdp_t;] var requests, kbytes : integer) : Boolean;

Parametry

requests	počet požadavků a odpovědí za vteřinu – výstupní parametr
kbytes	počet přenesených KB za vteřinu – výstupní parametr
[cdp	kontextová proměnná klienta]
Od verze

6.0

Popis

Funkce dovoluje otestovat rychlost spojení klient – server. Ve výstupních parametrech funkce vrátí hodnoty získané zkušební intenzivní komunikací.

Funkce odpovídá akci Rychlost spojení z Řídicího panelu vývojového prostředí.

Hodnota funkce

Funkce vrací TRUE při chybě.


Funkce Cos
Cos	[I..S]

function Cos(r : real) : real;

Parametry

r	Reálné číslo

Popis

Funkce Cos počítá cosinus úhlu zadaného v radiánech.

Hodnota funkce

Funkce vrátí hodnotu cosinu zadaného úhlu.

Viz

Arctan, Sin, Ln, Exp.


Funkce Create_group
Create_group	[ICP]

function Create_group(var name : string) : Boolean;

BOOL Create_group(const char * name);

function Create_group(name : PChar) : Boolean;

Parametry

name	jméno skupiny

Popis

Funkce vytvoří novou skupinu. Uživatele je možné do skupiny přiřadit pomocí funkce GetSet_group_role nebo starší funkce User_to_group. Ekvivalentním postupem je volání funkce Insert_object s parametrem CATEG_GROUP. Vytvoření role proveďte voláním funkce Insert_object s parametrem CATEG_ROLE.

Hodnota funkce

Funkce vrátí FALSE při úspěchu, TRUE při chybě.

Viz

User_to_group, User_in_group, Insert_object, GetSet_group_role


Funkce Create_link
Create_link	[ICP]

function Create_link(var sourcename, sourceappl : string; category : tcateg; var linkname : string) : Boolean;

BOOL [cd_]Create_link([cdp_t cdp], const char * sourcename, const char * sourceappl, tcateg category, const char * linkname);

function [cd_]Create_link([cdp : cdp_t]; sourcename, sourceappl : PChar; category : tcateg; linkname : PChar) : Boolean;

Od verze:

5.0

Parametry

sourcename	jméno objektu
sourceappl	jméno aplikace
category	kategorie objektu
linkname	jméno spojovacího objektu
[cdp	kontextová proměnná klienta]

Popis

Funkce vytvoří spojovací objekt jménem linkname kategorie category, který připojuje objekt stejné kategorie se jménem sourcename z aplikace sourceappl. Běžnějším způsobem je vytváření spojovacích objektů ve vývojovém prostředí.

Lze vytvořit i spojovací objekt vedoucí k dosud neexistujícímu objektu v již existující aplikaci. Takový spojovací objekt se však na řídicím panelu nezobrazuje, a to až do doby, dokud připojený objekt nevznikne. Pokud funkce vrátí chybu "Duplicita klíčů", pak již existuje objekt, který se jmenuje stejně jako vytvářený spojovací objekt. Není-li tento objekt zobrazen na řídicím panelu i po volání funkce Relist_objects, je to z výše uvedeného důvodu.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Příklad

vytvoří v aktuální aplikaci spojovací tabulku jménem SPOJ_TAB, který připojuje tabulku TAB1 z aplikace TESTY

if Create_link("Tab1","Testy",CATEG_TABLE, "Spoj_tab") then Signalize;

Viz

Create2_link


Funkce Create2_link
Create2_link	[ICP]

function Create2_link(var sourcename : string; var sourceapplid : binary; category : tcateg; var linkname : string) : Boolean;

BOOL [cd_]Create2_link([cdp_t cdp], const char * sourcename, const uns8 * sourceapplid, tcateg category, const char * linkname);

function [cd_]Create2_link([cdp : cdp_t]; sourcename : PChar; var sourceapplid : WBUUID; category : tcateg; linkname : PChar) : Boolean;

Parametry

sourcename	jméno objektu
sourceapplid	identifikace aplikace
category	kategorie objektu
linkname	jméno spojovacího objektu
[cdp	kontextová proměnná klienta]

Od verze:

5.0

Popis

Funkce vytvoří spojovací objekt jménem linkname kategorie category, který připojuje objekt stejné kategorie se jménem sourcename z aplikace zadané pomocí její identifikace sourceapplid. Běžnějším způsobem je vytváření spojovacích objektů ve vývojovém prostředí.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Viz

Create_link


Procedura Create_semaphore
Create_semaphore	[...S]

FUNCTION Create_semaphore(IN sname CHAR(31); IN snum INT) RETURNS INT;

Parametry

sname	jméno semaforu
snum	pro kolik vláken bude po vytvoření otevřen

Od verze:

6.1

Popis

Procedura je určena výhradně k použití v příkazech jazyka SQL.

Funkce vytvoří semafor označený jménem sname (pokud takový semafor dosud neexistuje) a vrátí jeho handle, který se použije ve všech dalších operacích vlákna s tímto semaforem.

Pokud dvě vlákna volají tuto funkci se stejným jménem, pak obdrží handle ke stejnému semaforu - tyto handle však nemusí mít nutně stejnou hodnotu, proto každé vlákno musí používat vlastní handle.

Vytvořený semafor bude otevřen pro vstup snum vláken, což znamená, že snum vláken může provést funkci Wait_for_semaphore bez čekání, zatímco případná další vlákna budou v této funkci čekat na provedení funkce Release_semaphore jiným vláknem. Jako hodnota snum se nejčastěji používá 0 (semafor uzavřen) nebo 1 (semafor otevřen pro jedno vlákno). Hodnota snum se uplatní pouze u prvního vlákna volajícího funkci Create_Semaphore s určitým jménem, pokud funkce vrací handle k již existujícímu semaforu, hodnota snum se ignoruje.

Více o synchronizaci vláken - podrobnosti.

Viz

Close_semaphore, Release_semaphore, Wait_for_semaphore,


Funkce Create_user
Create_user	[ICP]

function Create_user (var logname, name1, name2, name3, identif : string; var homesrv : binary; var password string; var objnum : tobjnum) : Boolean;

BOOL [cd_]Create_user ([cdp_t cdp], const char * logname, const char * name1, const char * name2, const char * name3, const char * identif, const WBUUID homesrv, const char * password, tobjnum *objnum);

function [cd_]Create_user ([cdp : cdp_t]; logname, name1, name2, name3, identif : PChar; var homesrv : WBUUID; password string; var objnum : tobjnum) : Boolean;

Parametry

logname	logovací jméno - jméno, kterým se uživatel přihlašuje
name1	jméno
name2	iniciálka druhého jména
name3	příjmení
identif	identifikační číslo nebo kód
homesrv	domovský sever (pro příjem kolujících dokumentů)
password	heslo
objnum	výstupní parametr - číslo uživatele
[cdp	kontextová proměnná klienta]

Od verze:

5.0

Popis

Funkce Create_user vytvoří nového uživatele. Vstupní parametry jsou logovací jméno, pak jméno, iniciálka a příjmení, identifikační číslo, domovský server uživatele a jeho heslo. Výstupním parametrem je číslo uživatele.

Povinný je pouze parametr logname.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Příklad

var

  a : Boolean;

  strpom : string[200];

  bb : binary[12];

begin

  a := Input_box('jméno uživatele',uzivname,31);

  if a then begin

    if Find_object(uzivname,CATEG_USER,usernum) then begin

      strpom := 'Uživatel > '+uzivname+' < není dosud založen(a).'#10'Chcete ho  založit právě teď a pokračovat?';

      if not YesNo_box('Varování',strpom) then halt     // zastaví se vnořený běh

      else if Create_user(uzivname,'','','','',bb,'',usernum) then Signalize;

    end;

...

Viz

Set_password, Acreate_user, Amodify_user, Aset_password, GetSet_group_role


Funkce Current_application
Current_application	[I..]

function Current_application : string;

Popis

Funkce slouží k určení otevřené aplikace.

Hodnota funkce

Funkce vrací jméno aktuální otevřené aplikace.


Funkce Current_item
Current_item	[ICP]

function Current_item(hView : window_id) : short;

int Current_item(window_id hView);

function Current_item(hView : window_id) : integer;

Parametry

hView	identifikace (handle) formuláře

Popis

Funkce zjišťuje, která složka formuláře hView je právě vybraná.

Pokud tuto funkci zavoláte v reakci na zprávu o změně hodnoty složky, pak se dozvíte, která složka se stala vybranou po přepsání hodnoty. Proto pokud chcete reagovat na změnu hodnoty určité složky, pak využijte spíše možnost zadat parametr složky formuláře  Akce po změně.

Hodnota funkce

Funkce vrací identifikaci vybrané složky formuláře hView.


Funkce Database_integrity
Database_integrity	[ICP]

function Database_integrity(repair : Boolean; var lost_blocks, lost_dheap, nonex_blocks, cross_link, damaged_tabdef : integer) : Boolean;

BOOL [cd_]Database_integrity([cdp_t cdp], BOOL repair, uns32 * lost_blocks, uns32 * lost_dheap, uns32 * nonex_blocks, uns32 * cross_link, uns32 * damaged_tabdef);

function [cd_]Database_integrity([cdp : cdp_t]; repair : Boolean; var lost_blocks, lost_dheap, nonex_blocks, cross_link, damaged_tabdef : uns32) : Boolean;

Parametry

repair	způsob práce;
lost_blocks	ztracené bloky;
lost_dheap	ztracené kusy diskové paměti;
nonex_blocks	neexistující bloky;
cross_link	dvojnásobné použití diskové paměti;
damaged_tabdef	zničená definice tabulky
[cdp	kontextová proměnná klienta]

Popis

Funkce umožňuje nalézt, příp. opravit chyby konzistence databázového souboru.

Funkci lze volat pouze v situaci, kdy na server není přihlášen žádný jiný uživatel. Při zavolání funkce nesmí být otevřen žádný kurzor.

Parametr repair určuje způsob provedení: hodnota TRUE znamená nalézt, opravit a informovat, hodnota FALSE pouze nalézt a informovat. Které chyby se budou hledat ovlivňuje šestice následujících parametrů: je-li parametr proměnná, chyba se bude hledat (resp. opravovat) a do proměnné se zapíše počet výskytů chyby, má-li parametr hodnotu NIL, chyba se nebude hledat (ani opravovat).

Podrobný popis jednotlivých druhů poškození databázového souboru naleznete v manuálech.

Hodnota funkce

Funkce při chybě vrátí TRUE, při úspěchu FALSE. Častou příčinou nezdaru může být jiný uživatel přihlášený v téže době do databáze. V takovém případě nastane chyba NOT_LOCKED (136).


Funkce Data_export
Data_export	[ICP]

function Data_export (objnum : tcurstab; categ : short; var fname : string; format, recode : short) : Boolean;

BOOL Data_export(tobjnum objnum, tcateg categ, const char *fname, unsigned format, int recode);

function Data_export(objnum : tobjnum; categ : tcateg; fname : PChar; format,recode : integer) : Boolean;

Parametry

objnum	deklarovaná tabulka nebo otevřený kurzor -viz podrobnosti
categ	kategorie objektu;
fname	jméno souboru, do něhož se  exportuje;
format	formát dat;
recode	druh kódování češtiny.

Popis

Funkce Data_export může být od verze 5 nahrazena obecnější funkcí Move_data.

Funkce Data_export zajistí export dat z tabulky nebo kurzoru do souboru ve všech podporovaných formátech.

Zdrojem dat pro export může být nejen tabulka, ale i kurzor. V externích jazycích lze funkci předat číslo tabulky, číslo definice kurzoru nebo přímo číslo otevřeného kurzoru. Ve vnitřním jazyce předáte buď tabulku (není-li deklarována v programu, zjistíte její číslo funkcí Find_object) nebo otevřený kurzor, pevný nebo proměnný.

Parametr categ určuje kategorii objektu. Používají se tyto kategorie:

kategorie	Objekt
CATEG_TABLE	Tabulka
CATEG_DIRCUR	proměnný kurzor
CATEG_CURSOR	číslo definice kurzoru

V případě použití kurzoru jako zdroje dat (CATEG_DIRCUR nebo CATEG_CURSOR) je jediný přípustný formát interní formát. Export z dotazu do jiných formátů je dovoleno funkcí Move_data.

Parametrem fname specifikujete soubor, do něhož se data vyexportují. Pro zadání jména můžete s výhodou využít funkce Select_file.

Parametr format stanoví způsob exportu dat. Hodnoty parametru a jim odpovídající typy exportů jsou v následující tabulce:

hodnota	Formát
0	interní formát WinBase602
1	ASCII formát sloupcový
2	CSV formát
3	formát dBase IV
4	formát FoxPro 2

Parametrem recode stanovíte druh kódování češtiny ve výsledném souboru. Hodnoty parametru a jejich význam jsou uvedeny v následující tabulce:

hodnota	Kódování
0	Windows EECS (cp 1250)
1	kód Kamenických (KEYBCS)
2	KOI8-CS (Text602)
3	Latin 2 (Text602)
4	Latin 2 (cp 852) MS DOS 5.0
5	ANSI Windows 3.0

Funkce plně nahrazuje starší funkce Save_table a To_xbase.

Hodnota funkce

Funkce při chybě vrátí FALSE, při úspěchu TRUE.

Příklad

table

  TAB1;

var

  ss: string[100];

  pozice : tobjnum;

begin

  ss := 'C:\*.dbf';

  Select_file(0,ss);

if not Data_export(TAB1,categ_table,ss,4,4) then

     Info_box("Chyba","Export neproběhl OK");

end.

Viz

Data_import, Move_data


Funkce Data_import
Data_import	[ICP]

function Data_import (var tablename : string; index_past : Boolean; var filename : string; format,recode : short) : Boolean;

BOOL Data_import(const char * tablename, BOOL index_past, const char * fname, unsigned format, int recode);

function Data_import(tablename : PChar; index_past : Boolean; fname : PChar; format,recode : integer) : Boolean;

Parametry

tablename	jméno tabulky, do níž se importuje;
index_past	příznak, mají-li se indexy budovat hromadně po přenosu či postupně;
filename	jméno souboru, z něhož se  importuje;
format	formát dat;
recode	druh kódování češtiny.

Popis

Funkce Data_import může být od verze 5 nahrazena obecnější funkcí Move_data.

Funkce Data_import zajistí import dat ze souboru do tabulky WinBase602. Jsou-li data ve formátu DBF, parametr tablename musí být jméno tabulky, která se při importu vytvoří. Nesmí se rovnat jménu jiné existující tabulky. V ostatních případech parametr tablename musí být jméno již existující tabulky. Data ze souboru se pak připojí k datům v tabulce.

Parametr Index_past určí, mají-li se indexy v tabulce, do níž se přidávají záznamy, vytvářet postupně v průběhu importu (hodnota FALSE), nebo má-li se vytvořit najednou po skončení importu (hodnota TRUE). Při importu DBF souborů nemá parametr index_past význam.

Parametrem filename specifikujete soubor, z něhož se data importují. Pro zjištění jména můžete s výhodou využít funkce Select_file.

Parametr format stanoví způsob importu dat. Hodnoty parametru a jim odpovídající typy formátů dat jsou v následující tabulce:

hodnota	formát
0	interní formát WinBase602
1	ASCII formát sloupcový
2	CSV formát
3	formát dBase IV
4	formát FoxPro 2

Parametrem recode stanovíte druh kódování češtiny ve vstupním souboru. Hodnoty parametru a jejich význam jsou uvedeny v následující tabulce:

hodnota	kódování
0	Windows EECS (cp 1250)
1	kód Kamenických (KEYBCS)
2	KOI8-CS (Text602)
3	Latin 2 (Text602)
4	Latin 2 (cp 852) MS DOS 5.0
5	ANSI Windows 3.0

Funkce plně nahrazuje starší funkce Restore_table a From_xbase.

Hodnota funkce

Funkce při chybě vrátí FALSE, při úspěchu TRUE.

Příklad

ss := "D:\DBFS\*.DBF";

if Select_file(0,ss) then

  Data_import('FAKT',True,ss,4,4);

Viz

Data_export, Move_data


Funkce Date2str
Date2str	[I..S]

function Date2str(dt : date, prez : short) : string;

Parametry

dt	hodnota, která se má konvertovat
prez	způsob konverze

Popis

Funkce Date2str převede hodnotu zadanou prvním parametrem na řetězec znaků. Při konverzi se použije

hodnota parametru prez takto:

Hodnota	Význam
0	zápis data bude obsahovat pouze den a měsíc zapsaný číslicí, bez roku;
1	zápis data bude obsahovat den, měsíc zapsaný číslicí a rok;
2	zápis data bude obsahovat pouze den a měsíc zapsaný slovem, bez roku;
3	zápis data bude obsahovat den, měsíc zapsaný slovem a rok;
4	zápis data bude v dlouhém formátu Windows;
5	zápis data bude v krátkém formátu Windows;

Hodnota funkce

Funkce vrací textový zápis data dt.

Příklad

var

 s : string[20];

begin

  s := "Dnes je "+Date2str(Today,2);

  Info_box("",s)

end.

Viz

Int2str, Str2int, Real2str, Str2real, Money2str, Str2money, Str2date, Str2time, Time2str


Funkce datetime2timestamp
datetime2timestamp	[ICPS]

function datetime2timestamp(dt : date; tm : time) : timestamp;

uns32 datetime2timestamp(uns32 dt, uns32 tm);

function datetime2timestamp(dt, tm : uns32) : uns32;

Parametry

dt	datum
tm	čas

Od verze:

5.0

Popis

Funkce datetime2timestamp vrací údaj o datu a čase vytvořený ze zadaného data a času.

Hodnota funkce

Funkce vrací údaj o datu a čase.

Viz

timestamp2date, timestamp2time


Funkce Day
Day	[ICPS]

function Day(dt : date) : integer;

int Day(uns32 dt);

function Day(dt : uns32) : integer;

Parametry

dt	datum

Popis

Funkce Day extrahuje den z data.

Hodnota funkce

Funkce vrací číslo označující den v měsíci, toto číslo leží v intervalu 1 až 31.

Příklad

var

 dt : date;

begin

   dt := Make_date(Day(Today)+1, Month(Today), Year(Today));

   Info_box("zítra",date2str(dt,1))

end.

Viz

Make_date, Month, Year, Today, Make_time, Hours, Minutes, Seconds, Sec1000, Now,   Day_of_week.


Funkce Day_of_week
Day_of_week	[ICPS]

function Day_of_week(dt : date) : integer;

int Day_of_week(uns32 dt);

function Day_of_week(dt : uns32) : integer;

Parametry

Dt	datum

Popis

Funkce Day_of_week zjišťuje den v týdnu odpovídající zadanému datu.

Hodnota funkce

Funkce vrací číslo označující den v týdnu, toto číslo leží v intervalu 0 až 6. Hodnota 0 odpovídá neděli, hodnota 1 pondělí až hodnota 6 odpovídá sobotě. Pokud má datum nepřípustný formát, funkce vrací hodnotu 7.

Příklad

var

  ss : string[30];

  i : short;

begin

  i :=  Day_of_week(Today);

  ss := "Dnes je "+(i=0 ? "neděle" : i=1 ? "pondělí" : i=2 ? "úterý" : i=3 ? "středa" : i=4 ? "čtvrtek": i=5 ? "pátek" : "sobota");

  Info_box("",ss);

end.

Viz

Make_date, Day, Month,Year, Today


Funkce Define_table
Define_table	[ICP]

function Define_table(var name, description : string) : Boolean;

BOOL Define_table(const char * name, const char * description);

function Define_table(name, description : PChar) : Boolean;

Parametry

name	jméno pro novou tabulku
description	popis struktury a indexů tabulky

Popis

Funkce je od verze 5.0 zastaralá a nedoporučuje se jí používat. Tabulku lze nyní vytvořit  přímým zavoláním SQL příkazu CREATE TABLE. Funkce Define_table existuje z důvodů zpětné kompatibility.

Funkce Define_table vytváří novou prázdnou tabulku se jménem name. Tabulka stejného jména nesmí již v aktuální aplikaci existovat.

Popis struktury tabulky description musí přesně dodržet níže popsanou syntaxi, jinak tabulka nebude vytvořena.

Popis může začínat volitelným slovem NO_JOURNAL. Dále následuje po řadě 1 až 254 popisů sloupců, 0 až 24 popisů indexů a ukončující slovo END. Slovo NO_JOURNAL vyjadřuje požadavek, aby se změny v tabulce nezaznamenávaly do journalu (pokud se journal vede).

Popis každého sloupce vypadá takto:

ATTRIBUTE jméno typ[parametr] PREALLOC=nn EXPANDABLE

přičemž:

jméno - je jméno sloupce, tedy identifikátor o délce max. 31 znak;

typ - je typ sloupce;

parametr - a hranaté závorky okolo něj se uvádějí pouze u typu String (v závorkách je pak délka řetězce) a u typů Pointer a Biptr (v závorkách je jméno cílové tabulky);

PREALLOC=nn - se uvádí pouze u multiatributů, nn je počet hodnot multiatributu, pro něž je staticky rezervováno místo, nn musí být mezi 0 a 127;

EXPANDABLE - lze uvést pouze u multiatributů a specifikuje, že multiatribut smí mít i další hodnoty, pro něž není staticky rezervováno místo.

Popis každého indexu vypadá takto:

INDEX [!] výraz směr, ... výraz směr

přičemž:

! - je-li uveden, index se vytvoří jako jedinečný;

výraz - výraz definující obecný index, může obsahovat až 8 atributů; za jménem sloupce typu řetězec znaků smí být v hranatých závorkách uvedeno, kolik znaků ze začátku řetězce se má zahrnout do klíče;

směr - může být ASC pro vzestupně uspořádané indexy nebo DESC pro sestupně uspořádané indexy, pokud se neuvede, míní se vzestupné uspořádání.

Při vytváření tabulky lze specifikovat, že změny v této tabulce se nemají zaznamenávat do journalu. Na začátek definice takovéto tabulky umístíte slovo NO_JOURNAL. V návrháři tabulek tuto vlastnost zadat nelze.

Příklad:

Define_table("NOVÁ", "NO_JOURNAL  ATTRIBUTE a INDEX a END");

Hodnota funkce

Funkce vrací FALSE, pokud tabulku vytvoří, nebo TRUE, pokud tabulku nemůže vytvořit (obvykle kvůli chybnému popisu struktury, nebo pokud tabulka tohoto jména již existuje).

Příklad

starý a nový způsob definice tabulky:

result := Define_table('NovaTab',

 'attribute i short '

 'attribute j short '

 'attribute n csstring[30] '

 'attribute r real prealloc=5 expandable '

 'attribute t text '

 'attribute p pointer[StaraTab] '

 'index n[10], i '

 'index i+j desc end');

SQL_execute('CREATE TABLE NovaTab ('

'i INTEGER INDEX,'

'j INTEGER,'

'n CHAR(30) COLLATE CSSISTRING,'

'r REAL PREALLOC=5 EXPANDABLE,'

't TEXT LONG VARCHAR,'

'p POINTER [StaraTab],'

'INDEX (n[10]),'

'INDEX (i+j DESC))')

Viz

Free_deleted, SQL_execute


Funkce DefWinBaseFrameProc
DefWinBaseFrameProc	[.CP]

LRESULT DefWinBaseFrameProc(window_id hWnd, UINT uMsg, wParam wParam, LParam lParam);

function DefWinBaseFrameProc(hWnd : window_id;  uMsg : uns32; wParam : uns32; lParam : uns32) : uns32;

Parametry

hWnd	handle okna MDI-frame
uMsg	číslo zprávy Windows
wParam	parametr zprávy typu WORD
lParam	parametr zprávy typu LONG

Popis

Funkce DefWinBaseFrameProc provádí zpracování zpráv, které přišly hlavnímu oknu aplikace WinBase602, a nezpracované zprávy následně předává funkci DefFrameProc.

Této funkci je hlavní okno aplikace WinBase602 v externím jazyce povinno předávat všechny zprávy, které samo plně nezpracuje. Na rozdíl od standardní funkce DefFrameProc tato funkce nevyžaduje handle MDI-klienta jako parametr.

Hodnota funkce

Hodnotu, kterou vrátí tato funkce, odevzdejte jako hodnotu vrácenou funkcí zachytávající zprávy hlavního okna aplikace.

Viz

WinBaseFrameProc, Init_non_mdi_env, Init_window_env


Funkce Delete
Delete	[ICP]

function Delete(curs : tcurstab; position : trecnum) : Boolean;

BOOL [cd_]Delete([cdp_t cdp], tcurstab curs, trecnum position);

function [cd_]Delete([cdp : cdp_t]; curs : tcurstab; position : trecnum) : Boolean;

Parametry

curs	deklarovaná tabulka nebo otevřený kurzor - viz podrobnosti
position	absolutní číslo rušeného záznamu.
[cdp	kontextová proměnná klienta]

Popis

Funkce zruší záznam s číslem position v kurzoru nebo tabulce curs. Provedením Delete se nezmění absolutní čísla ostatních záznamů.

Zrušíte-li záznam v kurzoru vzniklém spojením více tabulek, pak je pouze odstraněn z kurzoru. Zrušíte-li záznam v kurzoru vzniklém z jediné tabulky, pak je odstraněn z kurzoru a zrušen v tabulce. Pokud je záznam určený parametry funkce již zrušený, server vydá varování.

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize.

Příklad 1

// zrušení všech záznamů v tabulce TAB1

if not Rec_cnt(TAB1,limit) then

  for i:=0 to limit-1 do

    if not TAB1[i].deleted then

      Delete(TAB1,i);

Příklad 2

//smazání a znovuvytvořenbí objektu

if not Find_object("MP",CATEG_PGMSRC,pomid) then

 if Delete(Objtab,pomid) then Signalize

 else

   if not Insert_object("MP",CATEG_PGMSRC,pomid) then begin

      Objtab[pomid].DEFIN:=...

Viz

Insert, Append, Undelete, Free_deleted.


Funkce Delete_all_records
Delete_all_records	[ICP]

function Delete_all_records(curs : tcurstab) : Boolean;

BOOL [cd_]Delete_all_records([cdp_t cdp], tcurstab curs);

function [cd_]Delete_all_records([cdp : cdp_t]; curs : tcurstab) : Boolean;

Parametry

curs	deklarovaná tabulka nebo otevřený kurzor - viz podrobnosti
[cdp	kontextová proměnná klienta]

Popis

Funkce Delete_all_records vymaže všechny platné záznamy tabulky nebo kurzoru curs.

Chcete-li zrušit pouze některé záznamy v tabulce, pak buď na ně postupně zavolejte funkce Delete, anebo vytvořte kurzor obsahující záznamy, které mají být zrušeny, a na něj zavolejte funkci Delete_all_records. Druhý postup je rychlejší, nelze ho však použít v rámci transakce (ukončí,  tj. zruší probíhající transakci). Efekt funkce nelze odvolat pomocí Roll_back.

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize.

Příklad

var c : cursor;

.....

  if not Open_sql_cursor(c,'SELECT * FROM Prodej WHERE datum < 1.1.1994') then

  begin

    Delete_all_records(c);

    Close_cursor(c)

  end;

Viz

Delete


Funkce Delete_file
Delete_file	[I..]

function Delete_file(filename : string) : Boolean;

Parametry

filename	plné jméno souboru podle konvencí DOSu

Popis

Funkce Delete_file zavolá obdobnou funkci DOSu na smazání souboru.

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se soubor podařilo úspěšně smazat. V opačném případě vrací TRUE.

Příklad

Delete_file("C:\WB602\OUTPUT\out.txt");

Viz

Make_directory


Funkce Dispose
Dispose	[I..]

procedure Dispose(ukazatel);

Parametry

ukazatel	proměnná typu ukazatel

Od verze:

5.0

Popis

Procedura Dispose uvolní objekt (alokovaný procedurou New) na nějž ukazuje ukazatel.

Viz

New, Addr


Procedura Draw_line
Draw_line	[ICP]

procedure Draw_line(hView : window_id; x1, y1, x2, y2 : short; color : short);

void Draw_line(window_id hView, int x1, int y1, int x2, int y2, int color);

procedure Draw_line(hView : window_id; x1, y1, x2, y2 : integer; color : integer);

Parametry

hView	identifikace (handle) formuláře
x1, y1	souřadnice začátku úsečky
x2, y2	souřadnice konce úsečky
color	označení barvy

Popis

Procedura nakreslí v okně formuláře hView úsečku v barvě  color od místa se souřadnicemi (x1, y1) do (x2, y2).

Tato procedura je do rozhraní WinBase602 zahrnuta z důvodu kompatibility se staršími verzemi. V nových aplikacích doporučujeme pro kreslení využívat funkcí z DLL knihovny Windows GDI.EXE.

Příklad

var

  id,i,j : short;

begin

  Open_view("a DBDIALOG 20 20 400 300 begin end",no_redir,0,0,0,id);

  Draw_line(id, 50,50,100,50,0);

  Draw_line(id, 100,50,100,100,0);

  Draw_line(id, 100,100,50,100,0);

  Draw_line(id, 50,100,50,50,0);

  for i := 51 to 99 do

    for j := 51 to 99 do

      Put_pixel(id,i,j,i*j mod 255);

  repeat  Peek_message until id=0;

end.

Viz

Put_pixel


Funkce Edit_impexp
Edit_impexp	[ICP]

procedure Edit_impexp(var name : string);

void Edit_impexp(cdp_t cdp, const char * name);

procedure Edit_impexp(cdp : cdp_t; name : PChar);

Parametry

cdp	kontextové proměnné klienta
name	jméno přenosu dat

Od verze

5.1

Popis

Funkce zpřístupňuje interaktivní návrhář přenosu dat z prostředí jazyka, aby jej mohli využívat uživatelé aplikace, kteří nemají vývojové prostředí.

Je-li name jméno již existujícího přenosu, provede se modifikace tohoto přenosu. Není-li dosud přenos name  v aplikaci, otevře se prázdný návrhář a umožní vytvořit nový návrh, který bude uložen pod jménem name. Bude-li parametr name prázdný, bude moci uživatel při ukládání přenosu zadat libovolné jméno.

Viz

Edit_view, Edit_query


Funkce Edit_privils
Edit_privils	[ICP]

function Edit_privils(hParent : window_id; var tbs : ttablenum; var recnum : trecnum; multioper : integer) : Boolean;

BOOL Edit_privils(cdp_t cdp, window_id hParent, ttablenum * tbs, trecnum * recnum, int multioper);

function Edit_privils(cdp : cdp_t;  hParent : window_id; var tbs : ttablenum; var recnum : trecnum;  multioper : integer) : Boolean;

Parametry

cdp	kontextová proměnná klienta
hParent	handle okna, nad nímž se dialogové okno otevře, nebo 0
tbs	číslo tabulky - viz podrobnosti
recnum	číslo záznamu nebo -1
multioper	musí mít hodnotu 0.

Od verze:

5.0

Popis

Funkce Edit_privils otevře modální dialogové okno umožňující editovat práva k záznamu recnum

v tabulce tbs. Parametr multioper musí mít v této verzi hodnotu 0.

Hodnota funkce

Funkce vrací FALSE při chybě nebo když uživatel nepotvrdí zadané údaje.

Viz

GetSet_privils


Funkce Edit_query
Edit_query	[ICP]

function Edit_query(var name : string) : Boolean;

BOOL Edit_query(cdp_t cdp, const char * name);

function Edit_query(cdp : cdp_t; name : PChar) : Boolean;

Parametry

cdp	kontextové proměnné klienta
name	jméno dotazu

Od verze

5.1

Popis

Funkce zpřístupňuje interaktivní návrhář dotazů z prostředí jazyka, aby jej mohli využívat uživatelé aplikace, kteří nemají vývojové prostředí. Není možné tímto způsobem editovat složité dotazy, které se ve vývojovém prostředí editují pomocí textového editoru.

Je-li name jméno již existujícího dotazu, provede se modifikace tohoto dotazu. Není-li dosud dotaz name  v aplikaci, otevře se prázdný návrhář a umožní vytvořit nový dotaz, který bude uložen pod jménem name. Bude-li parametr name prázdný, bude moci uživatel při ukládání dotazu zadat libovolné jméno.

Hodnota funkce

Funkce vrátí FALSE v případě, kdy se nepodaří návrhář otevřít. V ostatních případech (i při odvolání změn) vrací TRUE.

Viz

Edit_impexp, Edit_view


Funkce Edit_relation
Edit_relation	[ICP]

function Edit_relation(hParent : window_id; subject1 : tcateg; subjnum : tobjnum; subject2 : tcateg) : Boolean;

BOOL Edit_relation(cdp_t cdp, window_id hParent, tcateg subject1, tobjnum subjnum, tcateg subject2);

function Edit_relation(cdp : cdp_t;  hParent : window_id; subject1 : tcateg; subjnum : tobjnum; subject2 : tcateg) : Boolean;

Parametry

cdp	kontextová proměnná klienta
hParent	handle okna, nad nímž se dialogové okno otevře, nebo 0;
subject1	kategorie objektu subjnum
subjnum	číslo objektu (uživatel, skupina nebo role)
subject2	kategorie, vztah jejichž prvků k subjektu subjnum se bude editovat

Od verze:

5.0

Popis

Funkce  Edit_relation otevře dialogové okno umožňující editovat vzájemné vztahy mezi uživateli, skupinami a rolemi. Parametr subject1 označuje kategorii objektu subjnum, subject2 je kategorie, vztah jejichž prvků k subjektu subjnum se bude editovat. Parametry subject1 a subject2 jsou dvě různé hodnoty z CATEG_USER, CATEG_GROUP a CATEG_ROLE, v libovolné kombinaci.

Hodnota funkce

Funkce vrací FALSE při chybě nebo když uživatel nepotvrdí zadané údaje.

Viz

Create_user, GetSet_group_role


Funkce Edit_text
Edit_text	[I..]

function Edit_text(var attr : attribute; xpos, ypos, xsize, ysize : short) : Boolean;

Parametry

attr	databázový sloupec typu  Text
xpos, ypos	souřadnice levého horního rohu editačního okna
xsize, ysize	rozměry editačního okna

Popis

Funkce Edit_text se smí volat pouze z formuláře - smí být uvedena pouze v části Akce složky v návrhu formuláře. Funkce otevře editační okno na obsah sloupce attr a umožní jeho editaci. Častěji se použije předdefinovaná standardní akce téhož významu.

Hodnota funkce

Funkce vrací TRUE, pokud se editační okno podařilo otevřít, jinak vrací FALSE.

Příklad

Edit_text(TEXT,20,20,450,200)


Funkce Edit_view
Edit_view	[ICP]

function Edit_view(var name : string) : Boolean;

BOOL Edit_view(cdp_t cdp, const char * name);

function Edit_view(cdp : cdp_t; name : PChar) : Boolean;

Parametry

cdp	kontextové proměnné klienta
name	jméno formuláře nebo sestavy

Popis

Otevře návrhář pohledu ve variantě podle typu pohledu (formulář, sestava atd.) na pohled jménem name. Pokud tento pohled byl vytvořen funkci Insert_object a dosud nebyl editován, před otevřením návrháře projde volbou iniciálního stavu pohledu. Funkce skončí až poté, co uživatel uzavře návrhář. Po skončení funkce vrátí původní menu.

Hodnota funkce

Funkce vrací TRUE po úspěšném provedení akce, při chybě vrací FALSE.

Příklad

Pokud zatím neexistuje štítek se jménem labelname, je vytvořen s prázdnou definicí a posléze na něj otevřen návrhář. Pokud již existuje, je otevřen návrhář na něj.

if (editview = 1) and (labelsize = 10) then  begin

  labelname := "LABEL"+int2str(labeltype)+"X";

  if Find_object(labelname, CATEG_VIEW, pozice) then begin

    if Insert_object(labelname, CATEG_VIEW, pozice) then Signalize;

  end else

    if Edit_view(labelname) then Signalize;

end;

Viz

Edit_impexp, Edit_query


Funkce Enable_index
Enable_index	[ICP]

function Enable_index(table : ttablenum;  which : short; enable : Boolean) : Boolean;

BOOL [cd_]Enable_index([cdp_t cdp], ttablenum table, int which,  BOOL enable);

function [cd_]Enable_index([cdp : cdp_t]; table : ttablenum;  which : integer; enable : Boolean) : Boolean;

Parametry

table	tabulka deklarovaná v programu - viz podrobnosti
which	číslo indexu
enable	požadovaný stav
[cdp	kontextová proměnná klienta]

Popis

Funkce aktivuje resp. deaktivuje indexy tabulky  table. Je-li parametr enable roven TRUE, je po provedení této funkce použití indexů povoleno, je-li roven FALSE, jsou použití indexů a jejich aktualizace znemožněny.

Parametr which musí mít v této verzi hodnotu -1(= všechny indexy).

Pomocí funkce je možno programově přebudovat indexy v tabulce (viz příklad).

Funkce se nesmí použít na tabulky připojené k aplikaci.

Hodnota funkce

 Funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize.

Příklad

přebudování indexů v tabulce Tfirma:

  Enable_index(Tfirma,-1,false);

  Enable_index(Tfirma,-1,true);


Funkce Enable_task_switch
Enable_task_switch	[ICP]

procedure Enable_task_switch(enable : Boolean);

void Enable_task_switch(BOOL enable);

procedure Enable_task_switch(enable : Boolean);

Parametry

enable	povolení resp. zakázání doručování zpráv

Od verze:

5.0

Popis

Procedura Enable_task_switch povoluje resp. zakazuje doručování zpráv v době, kdy klient čeká na odpověď serveru. Doručování zpráv může interferovat s činností některých programů.

Viz

DefWinBaseFrameProc, WinBaseFrameProc


Funkce Enum_attributes
Enum_attributes	[.CP]

BOOL [cd_]Enum_attributes([cdp_t cdp], tcurstab curs;  enum_attr * callback);

function [cd_]Enum_attributes([cdp : cdp_t]; curs : tcurstab, callback : enum_attr) : Boolean;

Parametry

curs	deklarovaná tabulka  nebo otevřený kurzor - viz podrobnosti
callback	instance funkce, která bude zavolána pro každý sloupec
[cdp	kontextová proměnná klienta]

Popis

Funkce Enum_attributes projde po řadě všechny sloupce v tabulce nebo kurzoru curs a pro každý z nich zavolá funkci callback. Procházení začíná sloupcem s číslem 1 (včetně případných skrytých sloupců). Jako parametr callback je nutno zavolat instanci funkce typu enum_attr definovaného takto:

typedef BOOL (_stdcall enum_attr)(char * attrname, uns8 attrtype, uns8 attrmult, uns16 attrspecif);

type enum_attr = enum_attr(attrname : PChar;  attrtype, attrmult : uns8;  attrspecif : uns16) : Boolean;  stdcall;

Funkce callback musí mít rozhraní _stdcall.

Parametry, které jsou předány funkci callback jsou významově shodné se stejně pojmenovanými parametry funkce Attribute_info. Pokud funkce callback vrátí hodnotu FALSE, procházení sloupců se ukončí a tato funkce již nebude více volána. Nechcete-li přerušit procházení sloupců, musí funkce callback vracet TRUE.

Hodnota funkce

Funkce Enum_attributes vrátí TRUE, pokud tabulka nebo kurzor curs byl nalezen a funkce callback zavolána alespoň jednou. Funkce Enum_attributes vrátí FALSE, pokud tabulka nebo kurzor zadaná parametrem curs neexistuje.

Příklad

BOOL _stdcall fill_list_box(char * attrname, uns8 attrtype, uns8 attrmult, uns16 attrspecif)

{ if (attrmult == 1)

    if (SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)attrname) == LB_ERR)

      return FALSE;

  return TRUE;

}

....................

Enum_attributes(tablenum, fill_list_box);

Viz

Attribute_info


Funkce Eof
Eof	[I..]

function Eof(var f : file) : Boolean;

Parametry

f	proměnná typu soubor (File)

Popis

Funkce Eof zjišťuje, zda soubor f byl dočten do konce. Tento soubor musí být otevřen. Vedlejším efektem funkce Eof je přeskočení mezer a oddělovačů řádek před testováním konce souboru.

Hodnota funkce

Funkce vrátí TRUE, pokud je soubor dočten do konce nebo pokud nepřečtený zbytek souboru sestává v okamžiku volání Eof pouze z mezer a oddělovačů řádek. Jinak vrátí FALSE.

Příklad

var

  f : file;

  str : string[200];

  pom,delka : integer;

begin

  if Reset(f,"c:\test.txt') then begin   // nečte mezery

    while not Eof(f) do begin            // Eof() způsobí přeskočení mezer a oddělovačů

      Read(f,str);

      info_box('',str);

    end;

    Close(f);

  end;

if Reset(f,"c:\test.txt') then begin    // čte mezery všude

    delka := Filelength(f);

    pom := 0;

    repeat

      Read(f, str);

      info_box(int2str(StrLength(str)),str);

      pom := pom+StrLength(str)+2;        // +2 je znak konce řádku (CR LF)

    until pom>=delka  ;

    Close(f);

  end;

end.

Viz

Read, Write, Writeln, Reset, Rewrite, Close, Seek, Filelength.


Procedura Err_mask
Err_mask	[I..]

procedure Err_mask(mask : Boolean);

Parametry

mask	příznak, zda maskovat chyby

Popis

Funkce Err_mask nastavuje způsob reakce programu na výskyt databázových chyb. Pokud je hodnota parametru FALSE, pak chyby nejsou maskovány a výskyt chyby způsobí chybové hlášení a ukončení běhu programu. Pokud hodnota parametru je TRUE, pak, dojde-li k chybě, nepřeruší se běh programu ani se nevydá žádné hlášení. Program se může o chybě dozvědět voláním funkce Sz_error.

Procedura se týká pouze těch chyb, které nejsou explicitně hlášeny hodnotou funkcí obracejících se na databázi, tedy pouze chyb při čtení a zápisu hodnot do databázových sloupců a databázových záznamů. Naopak např. chyba v operaci Delete se projeví pouze hodnotou TRUE této funkce a reakci programu nelze ovlivnit procedurou Err_mask.

Na začátku běhu programu chyby nejsou maskovány.

Příklad

if not ZrusitAkci then begin

    Err_mask(true);

     Parametry[0].template := template;

    Err_mask(false);

...


Funkce Exec
Exec	[I..]

function Exec(var pathname, params : string) : short;

Parametry

pathname	cesta a jméno souboru obsahujícího program
params	parametry, které se programu předají na příkazové řádce

Popis

Funkce Exec spustí program uložený v souboru pathname a předá mu parametry params. Tento program bude prováděn souběžně s WinBase602 a není možné ho z WinBase602 ukončit.

Funkce Exec je implementována tak, že volá systémovou funkci WinExec.

Hodnota funkce

Funkce vrátí totéž, co vrátí systémová funkce WinExec. Hodnota menší než 32 znamená, že došlo k chybě. Bližší údaje viz systémové manuály Windows.

Příklad

if Exec ("CALC.EXE", "") < 32

  then Info_box ('Chyba','Kalkulačka');


Funkce Exec_statements
Exec_statements	[.CP]

int Exec_statements(cdp_t cdp, const char * statements);

function Exec_statements(cdp : cdp_t;  statements : PChar) : integer;

Parametry

cdp	kontextová proměnná klienta
statements	posloupnost příkazů vnitřního programovacího jazyka

Od verze:

5.0

Popis

Funkce Exec_statements provede posloupnost příkazů vnitřního programovacího jazyka zapsanou v parametru statements. Příkazy se kompilují v kontextu otevřeného projektu.

Hodnota funkce

Funkce vrací 1 při úspěšném provedení příkazu nebo číslo chyby při chybě v překladu nebo běhu.

Viz

Open_project, Register_ext_menu


Funkce Exp
Exp	[I..S]

function Exp(r : real) : real;

Parametry

r	reálné číslo

Popis

Funkce Exp počítá přirozenou exponenciálu, tedy hodnotu r-té mocniny základu přirozených logaritmů.

Hodnota funkce

Funkce vrátí hodnotu exponenciály v bodě r.

Viz

Arctan, Sin, Cos, Ln.


Funkce Export_appl
Export_appl	[.CP]

BOOL Export_appl(cdp_t cdp, window_id hParent, BOOL with_data, BOOL with_role_privils, BOOL with_usergrp);

function Export_appl(cdp : cdp_t; hParent : window_id; with_data : Boolean; with_role_privils : Boolean; with_usergrp : Boolean) : Boolean;

Parametry

cdp	kontextová proměnná klienta
hParent	pohled, nad nímž se má objevit postupový dialog, nebo 0
with_data	příznak, mají-li se exportovat data z tabulek
with_role_privils	příznak, mají-li se exportovat práva přidělená k rolím
with_usergrp	příznak, mají-li se exportovat práva přidělená uživatelům a skupinám

Od verze:

5.0

Popis

Od verze 6 je funkce nahrazena novější funkcí Export_appl_ex, reagující na změny v exportu aplikace.

Funkce umožní exportovat aktivní aplikaci (exportovat jednotlivé komponenty a definiční soubor APL). Příznaky, stejně jako při exportu interaktivním, umožňují zvolit různý rozsah exportu.

Aplikace musí být předtím otevřena.

Hodnota funkce

Funkce vrací při chybě FALSE.

Viz

Export_appl_ex


Funkce Export_appl_ex
Export_appl_ex	[ICP]

function Export_appl_ex(hParent : window_id; with_data, with_role_privils, with_usergrp, exp_locked, back_end : Boolean) : Boolean;

BOOL Export_appl_ex(cdp_t cdp, window_id hParent, BOOL with_data, BOOL with_role_privils, BOOL with_usergrp, BOOL exp_locked, BOOL back_end);

function Export_appl_ex(cdp : cdp_t; hParent : window_id; with_data, with_role_privils, with_usergrp, exp_locked, back_end : Boolean) : Boolean;

Parametry

cdp	kontextové proměnné klienta
hParent	formulář, nad nímž se má objevit postupový dialog, nebo 0
with_data	příznak, mají-li se exportovat data z tabulek
with_role_privils	příznak, mají-li se exportovat práva přidělená k rolím
with_usergrp	příznak, mají-li se exportovat práva přidělená uživatelům a skupinám
exp_locked	příznak, má-li se aplikace exportovat zašifrovaně
back_end	příznak, má-li se exportovat pouze back-end aplikace

Od verze:

6.0

Popis

Funkce umožní exportovat aktivní aplikaci (exportovat jednotlivé komponenty a definiční soubor APL). Příznaky, stejně jako při exportu z řídicího panelu aplikace, umožňují zvolit různý rozsah exportu - podrobnosti Export aplikace.

V externích jazycích musí být aplikace předtím otevřena.

Funkce nahrazuje zastaralou funkci Export_appl.

Hodnota funkce

Funkce vrací při chybě FALSE.

Viz

Import_appl


Funkce Filelength
Filelength	[I..]

function Filelength(var f : file) : integer;

Parametr

f	proměnná typu File deklarovaná v programu

Popis

Funkce Filelength zjišťuje délku souboru f. Tento soubor musí být v okamžiku volání funkce otevřen.

Hodnota funkce

Funkce vrátí délku souboru f v bajtech. Dojde-li k chybě (např. když soubor není otevřen), funkce vrátí hodnotu -1.

Příklad

if Reset(f,"c:\test.txt') then begin

    delka := Filelength(f);

Viz

Read, Write, Writeln, Reset, Rewrite, Close, Eof, Seek.


Funkce Find_object
Find_object	[ICP]

function Find_object(var name : string;  category : short; var position : short) : Boolean;

BOOL [cd_]Find_object([cdp_t cdp], const char * name, tcateg category, tobjnum *position);

function [cd_]Find_object([cdp : cdp_t]; name : PChar;  category : tcateg; var position : tobjnum) : Boolean;

Parametry

name	jméno objektu;
category	kategorie objektu;
position	výstupní parametr: číslo záznamu v systémové tabulce
[cdp	kontextová proměnná klienta]

Popis

Funkce zjistí, zda existuje v otevřené aplikaci objekt jména name a kategorie category. Pokud ano, vrátí v parametru position jeho číslo (tj. externí číslo záznamu v příslušné systémové tabulce - TABTAB pro tabulky, OBJTAB pro ostatní objekty, USERTAB pro uživatele  a skupiny).

Jako parametr category se používají konstanty:

CATEG_TABLE, CATEG_VIEW, CATEG_CURSOR, CATEG_MENU, CATEG_PGMSRC, CATEG_PGMEXE, CATEG_USER, CATEG_APPL, CATEG_PICT, CATEG_GROUP, CATEG_ROLE, CATEG_CONNECTION, CATEG_RELATION, CATEG_DRAWING, CATEG_GRAPH, CATEG_REPLREL, případně sjednocené s konstantou IS_LINK.

Pokud name označuje spojovací objekt, pak funkce dokáže vrátit buď číslo spojovacího objektu, nebo rovnou číslo objektu, který je tímto spojovacím objektem připojen. Je-li parametrem category sjednocení konstanty označující kategorii s konstantou IS_LINK, pak funkce vrátí ve výstupním parametru position číslo spojovacího objektu. Pokud neuvedete IS_LINK, pak funkce vrací číslo připojeného objektu.

Funkci lze použít i na vyhledání objektu typu uživatel nebo skupina (CATEG_USER, CATEG_GROUP), které nepatří do žádné aplikace.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE. Typická chyba je OBJECT_NOT_FOUND - Objekt nenalezen. Doporučujeme vždy ověřovat výsledek této funkce, a tak se vyhnout pozdější práci s nesmyslným číslem objektu.

Příklad

 if Find_object(uzivname,CATEG_USER,usernum) then begin   // uživatel se nenašel

   strpom := 'Uživatel > '+uzivname+' < není dosud založen(a).'#10'Chcete ho  založit právě teď a pokračovat?';

   if not YesNo_box('Varování',strpom) then halt      // zastaví se vnořený běh

   else if Create_user(uzivname,'','','','',bb,'',usernum) then Signalize;

 end;

if Find_object('SENIOR_USER',CATEG_ROLE,rolenum) then begin   // role neexistuje

   Info_box('Nelze','Role SENIOR_USER byla zrušena. Nelze nastavit práva.');

    halt;                // zastaví se vnořený běh, tj. právě tato procedura

 end;

strpom := 'Nastavuji práva uzivatele '+uzivname+' k aplikaci '+Current_application+'...';

Set_status_text(strpom);

stav := 1;

if GetSet_group_role(usernum,rolenum, CATEG_ROLE,OPER_SET,stav) then Signalize;

Info_box('Provedeno','OK');

Viz

Find2_object, Find_object_by_id


Funkce Find2_object
Find2_object	[.CP]

BOOL [cd_]Find2_object([cdp_t cdp], const char * name, const uns8 *appl_id, tcateg category, tobjnum *position);

function [cd_]Find2_object([cdp : cdp_t]; name : PChar; var appl_id : WBUUID;  category : tcateg; var position : tobjnum) : Boolean;

Parametry

name	jméno objektu;
appl_id	identifikace aplikace;
category	kategorie objektu;
position	výstupní parametr: číslo záznamu v systémové tabulce
[cdp	kontextová proměnná klienta]

Popis

Funkce Find2_object hledá object kategorie category jménem name v aplikaci jejíž identifikace je v appl_id. Pokud ho nalezne, vrátí v parametru position jeho číslo (tj. externí číslo záznamu v příslušné systémové tabulce - TABTAB pro tabulky, OBJTAB pro ostatní objekty, USERTAB pro uživatele  a skupiny).

Jako parametr category se používají konstanty CATEG_TABLE, CATEG_VIEW, CATEG_CURSOR, CATEG_MENU, CATEG_PGMSRC, CATEG_PGMEXE, CATEG_USER, CATEG_APPL, CATEG_PICT, CATEG_GROUP, CATEG_ROLE, CATEG_CONNECTION, CATEG_RELATION, CATEG_DRAWING, CATEG_GRAPH, CATEG_REPLREL, případně sjednocené s konstantou IS_LINK.

Pokud name označuje spojovací objekt, pak funkce dokáže vrátit buď číslo spojovacího objektu, nebo rovnou číslo objektu, který je tímto spojovacím objektem připojen. Je-li parametrem  category sjednocení konstanty označující kategorii s konstantou IS_LINK, pak funkce vrátí ve výstupním parametru  position číslo spojovacího objektu. Pokud neuvedete IS_LINK, pak funkce vrací číslo připojeného objektu.

Hodnota funkce

Funkce vrací při úspěchu FALSE a číslo objektu v position. Při chybě vrací TRUE. Typická chyba je OBJECT_NOT_FOUND - Objekt nenalezen. Doporučujeme vždy ověřovat výsledek této funkce, a tak se vyhnout pozdější práci s nesmyslným číslem objektu.

Viz

Find_object, Find_object_by_id


Funkce Find_object_by_id
Find_object_by_id	[ICP]

function Find_object_by_id(var uuid : binary, category : short; var position : short) : Boolean;

BOOL [cd_]Find_object_by_id([cdp_t cdp], const WBUUID uuid, tcateg category, tobjnum *position);

function [cd_]Find_object_by_id([cdp : cdp_t]; var uuid : WBUUID, category : tcateg; var position : tobjnum) : Boolean;

Parametry

uuid	identifikace objektu;
category	kategorie objektu;
position	výstupní parametr: číslo záznamu v systémové tabulce
[cdp	kontextová proměnná klienta]

Popis

Funkce hledá databázový objekt kategorie category na základě jeho binární identifikace uuid. Dá se použít pro kategorie CATEG_USER, CATEG_GROUP, CATEG_SERVER (replikační server) a CATEG_KEY (klíč).

Pokud objekt nalezne, vrátí v parametru position jeho číslo (tj. externí číslo záznamu v příslušné systémové tabulce.

Hodnota funkce

Funkce vrací při úspěchu FALSE a číslo objektu v position. Při chybě vrací TRUE. Typická chyba je OBJECT_NOT_FOUND - Objekt nenalezen. Doporučujeme vždy ověřovat výsledek této funkce, a tak se vyhnout pozdější práci s nesmyslným číslem objektu.

Příklad

Nalezení jména uživatele podle přečtené hodnoty sledovacího atributu Autorizace:

table

  Tab1,UserTab;

type

  rec = record          //struktura záznamu

    c : integer;        //  integer

    id : binary[12];    //  autorizace

    retez : string[12]; //  řetězec délky 12

  end;

var

  uuid : binary[12];

  pozice : short;

  buff : rec;

  c1 : cursor;

  pocet,i : integer;

begin

  if Open_sql_cursor(c1,"select * from Tab1") then Signalize

  else begin

    Rec_cnt(Tab1,pocet);

    for i := 0 to pocet -1 do begin

      buff := Tab1[i];   // přečtení jednoho záznamu do recordu

      uuid := buff.id;   // přečtení binární hodnoty do proměnné

      if Find_object_by_id(uuid,CATEG_USER,pozice) then Signalize

      else  Info_box("Uživatel",Usertab[pozice].logname);

    end;

    Close_cursor(c1);

  end;

end.

Viz

Find_object, Find_object2


Funkce Free_deleted
Free_deleted	[ICPS]

function Free_deleted(table : ttablenum) : Boolean;

BOOL [cd_]Free_deleted([cdp_t cdp], ttablenum table);

function [cd_]Free_deleted([cdp : cdp_t]; table : ttablenum) : Boolean;

PROCEDURE Free_deleted(IN tablename CHAR(31))

Parametry

table	tabulka deklarovaná v programu - viz podrobnosti
[cdp	kontextová proměnná klienta]
tablename	pouze v SQL - jméno tabulky

Popis

Funkce Free_deleted uvolní všechny zrušené záznamy v tabulce table. Místo, které tyto záznamy zabíraly, může být poté využito pro nové záznamy. Zrušené a uvolněné záznamy nelze později obnovit funkcí Undelete.

V programu ve vnitřním jazyce smí být parametrem table jak číslo tabulky získané voláním funkce Find_object, tak i tabulka deklarovaná v tomto programu.

Funkce se neprovede, je-li otevřen editovatelný kurzor z této tabulky nebo jsou-li na tabulku umístěné zámky jiného uživatele. V obou případech bude Signalize hlásit chybu ”S objektem někdo pracuje”. Zámky volajícího uživatele funkci neblokují.

Pokud v tabulce nezbude žádný platný záznam, pak čítač hodnot používaný ve sloupci s implicitní hodnotou unique se nastaví na nulu.

Jakožto procedura je implementováno Free_deleted i na straně serveru, aby bylo možno uvolňovat záznamy i z prostředí uložených procedur a triggerů. Jako parametr se používá řetězec se jménem tabulky. Příklad volání v SQL: CALL Free_deleted("MY_TABLE")

Je-li ve funkci Set_sql_option nastaven parametr SQLOPT_EXPLIC_FREE, uvolnění záznamu proběhne okamžitě po zrušení, takže Free_deleted není vůbec třeba používat. Využívá se v SQL komunikaci, kdy dvoustupňové mazání záznamů je na obtíž.

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize.

Příklad

var cislo_tab : short;

begin

  if not Find_object("MY_TABLE", CATEG_TABLE, cislo_tab)

    then Free_deleted(cislo_tab);

end;

Viz

Insert, Append,  Delete, Undelete, Set_sql_option .


Funkce From_xbase
From_xbase	[ICP]

function From_xbase(var tablename : string, var filename : string, dBase : Boolean, filecode : short) : Boolean;

BOOL From_xbase(const char * tablename, const char * filename, BOOL dBase, int filecode);

function From_xbase(tablename : PChar; filename : PChar; dBase : Boolean;  filecode : integer) : Boolean;

Parametry

tablename	jméno tabulky ve WinBase602
filename	jméno souboru ve formátu DBF (dBase IV nebo FoxPro 2.0)
dBase	TRUE pro formát dBase, FALSE pro formát FoxPro
filecode	kódování českých znaků použité v souboru filename

Popis

Od verze 3.0 se jedná o funkci zastaralou, plně nahrazenou obecnější funkcí Data_import.

Funkce From_xbase konvertuje soubor  filename ve formátu DBF (a případně i příslušející MEMO-soubor) na tabulku ve WinBase602. Tuto tabulku vytvoří pod jménem  tablename. Tabulka tohoto jména nesmí ve stejné aplikaci ve WinBase602 dosud existovat.

Soubor  filename se hledá na tom počítači, na němž běží aplikace, která zavolá tuto funkci (nikoli na počítači, na němž běží databázový server).

Podrobnější popis způsobu převodu dat naleznete v Export dat z WinBase602.

Parametr  filecode označuje způsob kódování českých znaků v souboru  filename. Na základě hodnoty tohoto parametru se provede potřebné překódování tak, aby texty přenesené do WinBase602 byly ve shodě s kódováním českých znaků pod Windows. Parametr smí mít tyto hodnoty:

0	kódová stránka 1250, vnitřní čeština Windows 3.1;
1	kód Kamenických, KEYBCS2;
2	kód KOI8-CS;
3	kód LATIN 2 použitý v Text602;
4	kódová stránka 852 z MS DOSu 5.0, LATIN 2;
5	kód Windows ANSI.

Hodnota funkce

Funkce vrací TRUE pokud se převod podařilo úspěšně provést, nebo FALSE, pokud došlo k chybě. Příčinou chyby může být např. nenalezení souboru  filename, chyba ve vnitřní struktuře tohoto souboru nebo to, že tabulka se jménem  tablename již existuje.

Viz

Data_import


Funkce GetClient
GetClient	[.CP]

window_id GetClient(window_id hFrame);

function GetClient(hFrame : window_id) : window_id;

Parametry

hFrame	handle hlavního okna aplikace.

Od verze:

5.0

Popis

Funkce GetClient vrací handle MDI klienta aplikace.

Hodnota funkce

Funkce vrací handle MDI klienta aplikace.

Viz

Open_project, Init_window_env, Register_ext_menu


Funkce Get_data_rights
Get_data_rights	[ICP]

function Get_data_rights(table : ttablenum; var username : string; var rights : short; var rd_ri : short; var wr_ri : short) : Boolean;

BOOL Get_data_rights(ttablenum table,  const char * username, tright * rights,  tdright * rd_ri,  tdright * wr_ri);

function Get_data_rights(table : ttablenum;  username : PChar; var rights : tright;  var rd_ri : tdright; var wr_ri : tdright) : Boolean;

Parametry

table	tabulka deklarovaná v programu - viz podrobnosti
username	jméno uživatele;
rights	výstupní parametr: základní práva uživatele k datům;
rd_ri	výstupní parametr: rozšiřující práva ke čtení sloupců;
wr_ri	výstupní parametr: rozšiřující práva k přepisování dat.

Popis

Od verze 5.0 se jedná o funkci zastaralou, plně nahrazenou obecnější funkcí GetSet_privils, nicméně mnohem jednodušší a v jednoduchým případech použitelnou.

Funkce přečte přístupová práva uživatele k datům obsaženým v tabulce. Je-li parametr  username prázdný řetězec, funkce pracuje s právy přihlášeného uživatele.

Parametr rights nabude hodnotu rovnou součtu těchto práv: RIGHT_READ (1), RIGHT_WRITE (2), RIGHT_INSERT (4), RIGHT_DEL (8), RIGHT_GRANT (128).

Rozšiřující práva nemají od verze 5.0 význam.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Příklad 1

var

   a,b,c, pozice : short;

begin

   Find_object("tab1",categ_table,pozice);

{ do prom. pozice se zapsalo číslo tabulky TAB1 }

   Get_data_rights(pozice,"honza",a,b,c);

{ do prom. a,b,c se zapsala práva skupiny EVERYBODY k TAB1 }

   Info_box("práva k obsahu",int2str(a));

end.

Nechť má HONZA k tabulce TAB1 právo číst všechny sloupce a vkládat záznamy;

V proměnné a bude hodnota 5 (RIGHT_READ + RIGHT_INSERT),

Příklad 2

function TestPrav : Boolean;

{**************************************}

{ověření, má-li přihlášený uživatel dostatek práv k tabulce Tab1

var

 a,b,c : short;

 jmeno : string[31];

begin

  TestPrav := true;

  jmeno := Who_am_I;

  Get_data_rights(Tab1,jmeno,a,b,c);

  if (a and Right_read = 0) or (a and Right_write = 0) or

     (a and Right_insert = 0) or (a and Right_del = 0)

  then if not YesNo_box("Upozornění",

       "Nemáte všechna potřebná práva,"#10"program nebude správně fungovat."#10#10"Pokračovat?")

       then TestPrav := False;

end;

Viz

Get_object_rights, Set_data_rights, Set_object_rights, GetSet_privils


Funkce Get_ext_message
Get_ext_message	[I..]

function Get_ext_message(var msg : integer; var handle : window_id; var info : integer) : Boolean;

Parametry

msg	výstupní parametr: číslo zprávy
handle	výstupní parametr: identifikace (handle) formuláře u notifikačních zpráv
info	výstupní parametr: rezervováno pro budoucí použití

Popis

Funkce Get_ext_message čeká na další zprávu, kterou programu předá uživatel. Takováto zpráva může vzniknout stiskem tlačítka provádějícího příkaz Return ve formuláři (nebo standardní akci Zaslat zprávu), vybráním některé položky z uživatelského menu , stiskem zaregistrované klávesy (funkce Register_key) nebo provedením akce ve formuláři, která automaticky generuje notifikační zprávu.

V parametru msg bude vráceno číslo zprávy.

V parametru handle bude handle (číslo) formuláře, je-li zpráva notifikační (automaticky generovaná ve formuláři), v jiném případě nula.

Parametr info je rezervován pro budoucí použití, v současnosti smí mít hodnotu NIL.

Pokud ve frontě nečekají žádné zprávy, funkce Get_ext_message neskončí, dokud uživatel takovou zprávu nevygeneruje. To znamená, že “uvnitř” provádění funkce Get_ext_message uživatel může např. editovat obsah databáze prostřednictvím formulářů otevřených na obrazovce nebo volat procedury projektu pomocí tlačítek.

Je-li v debuggeru funkce přerušena stiskem Ctrl+Break, v parametru msg vrátí hodnotu -2.

Funkce plně nahrazuje starší funkci Get_message.

Hodnota funkce

Funkce vrátí FALSE ve dvou případech:

- pokud se vrací zpráva s hodnotou -1

- pokud aplikace byla ukončena zvenčí.

Příklad 1

while Get_ext_message(msg, handle, NIL) do

begin

  case msg of

{ošetření definovaných zpráv}

    msg1 : ...

    msg2 : ...

    ...

{ošetření notifikačních zpráv}

    else : if (handle=id_pohl1) and (msg=4) then ...

  end;

Příklad 1

while not konec and Get_ext_message(msg,handle,NIL) do begin

   if msg = 1111 then konec := true;

   ...

end;

Viz

Get_message ,Peek_message


Funkce Get_fcursor
Get_fcursor	[ICP]

function Get_fcursor(hView : window_id; var curs : cursor; var flags : short) : Boolean;

BOOL Get_fcursor(window_id hView, tcursnum *curs, uns16 *flags);

function Get_fcursor(hView : window_id; var curs : tcursnum; var flags : uns16) : Boolean;

Parametry

hView	identifikace (handle) formuláře
curs	výstupní parametr: číslo kurzoru
flags	výstupní parametr: viz Parametry otevření formuláře

Popis

Funkce získá z otevřeného formuláře číslo jeho kurzoru a hodnoty příznaků. Tyto údaje zapíše do proměnných curs a flags.

Pokud formulář zadaný parametrem hView vede do tabulky, pak funkce v parametru curs vrátí číslo této tabulky. Čísla kurzorů začínají od 32768, čísla tabulek jsou řádově desítky, takže je lze od sebe rozeznat: číslo tabulky (kurzoru) můžete přiřadit do proměnné typu Integer a tu pak porovnat s 32768. Pro některé funkce (např. Translate) je nutné vědět, zda její parametr je kurzor nebo tabulka.

Nechť kurzor cur1 je zdrojem dat pro formulář id1, pak po provedení funkce Get_fcursor(id1,cur2,f1) mají kurzory cur1 a cur2 stejná čísla a oba jsou otevřené. Zavření jednoho z nich znemožní práci s druhým.

Parametr flags smí mít hodnotu NIL (NULL), pokud se příznaky formuláře nemají zjišťovat.

Od verze 6.0 lze k získání hodnoty čísla zdroje dat pro formulář využít také vlastnosti formuláře CursNum.

Hodnota funkce

Funkce vrací TRUE po úspěšném provedení akce, jinak vrací FALSE.

Příklad

ve formuláři id občas pokládáme QBE dotaz. S jedním z vybraných záznamů formuláře id (do tabulky nebo do kurzoru vzniklého odpovědí QBE) chceme dále pracovat:

      Get_view_pos(id, ic, ac);

/* zjištění pozice záznamu */

      Get_fcursor(id, curs1, nil);

/* zjištění kurzoru nebo tabulky, do níž vede formulář id */

      integ := curs1;

/* přiřazení čísla kurzoru nebo tabulky do prom. typu Integer */

      if integ >= 32768 then

         Translate(curs1, ac, 0, cislo)

      else cislo : = ac;

/* přepočtení pozice záznamu ac v kurzoru curs1 na pozici tabulky, do níž vedl formulář id */

Viz

Set_fcursor


Funkce Get_info
Get_info	[.CP]

BOOL [cd_]Get_info([cdp_t cdp], kernel_info * kinf);

function [cd_]Get_info([cdp : cdp_t]; var kinf : kernel_info) : Boolean;

Parametry

kinf	výstupní parametr
[cdp	kontextová proměnná klienta]

Popis

Funkce vrátí ve struktuře kinf všeobecné informace o stavu databáze a serveru. Popis struktury kernel_info naleznete v souborech WBKERNEL.H a WINBASE.PAS na disketě SDK.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.


Funkce Get_item_value
Get_item_value	[ICP]

function Get_item_value(hView : window_id; intrec : trecnum; itemid : short; var value : untyped) : Boolean;

BOOL Get_item_value(window_id hView, trecnum intrec , int itemid, char *value);

function Get_item_value(hView : window_id; intrec : trecnum; itemid : integer; value : PChar) : Boolean;

Parametry

hView	identifikace (handle) formuláře;
intrec	interní číslo záznamu;
itemid	číslo složky formuláře;
value	výstupní parametr: beztypová hodnota složky itemid

Popis

Funkce zjistí obsah složky s číslem itemid v záznamu intrec ve formuláři hView. Zjištěnou hodnotu uloží do beztypové proměnné, odkud ji můžete přiřazením do proměnné získat. Je-li získávaná hodnota typu Boolean, vrátí hodnoty + a - . V externích jazycích bude získaná hodnota zapsána jako řetězec znaků.

Funkce přibližně nahrazuje starší funkci Get_view_item. Tato funkce vracela v řetězci pouze obsah složky formuláře (to, co je napsané ve složce), zatímco funkce Get_item_value zjistí hodnotu sloupce nebo proměnné, do níž složka vede. Je-li složka formuláře změněna a změna není ještě zapsána do databáze nebo proměnných, tyto dvě funkce vracejí různé hodnoty.

Tuto funkci lze použít i ve standardním formuláři (na rozdíl od Get_view_item).

Interní číslo záznamu lze získat voláním funkce Get_view_pos.

Od verze 6.0 lze k získávání hodnot složek formulářů využívat také vlastnosti složky Value a Text.

Hodnota funkce

Funkce vrací TRUE po úspěšném provedení akce, jinak vrací FALSE.

Příklad

získání hodnoty zapsané ve 12. složce aktuálního záznamu:

if Get_view_pos(id_p,intcis,extcis)then

Get_item_value(id_p,intcis,12,res);

Viz

Set_item_value, Get_view_item, Set_view_item


Procedura Get_logged_user
Get_logged_user	[ICP]

function Get_logged_user (index : integer; var username, applname : string; var state : integer) : Boolean;

BOOL [cd_]Get_logged_user([cdp_t cdp,] int index, char * username, char * applname, int * state);

function [cd_]Get_logged_user([cdp : cdp_t;] index : integer; username, applname : PChar;  var state : integer) : Boolean;

Parametry

index	pořadí (číslováno od 0)
username	výstupní parametr - jméno přihlášeného uživatele
aplname	výstupní parametr - jméno aplikace, kterou používá
state	výstupní parametr - stav uživatele
[cdp	kontextová proměnná klienta]
Od verze

6.0

Popis

Funkce dovoluje zjistit informace o klientech připojených ke stejnému serveru jako je klient, který funkci zavolal.

Jediným vstupním parametrem je index  - funkce vrátí ve výstupních parametrech informace o index-tém uživateli (logovací jméno uživatele, jeho stav a jméno aplikace, kterou má otevřenou).

Je-li index větší nebo rovno počtu přihlášených klientů, bude v parametru username prázdný řetězec.

Stav uživatele nabývá těchto hodnot:

4 - server čeká na požadavek klienta (normální klidový stav);

99 - já sám (tj. ten uživatel, který funkci zavolal);

ostatní - server právě zpracovává požadavek klienta

Hodnota funkce

Funkce vrací TRUE při chybě.

Příklad:

v cyklu načítá přihlášené uživatele, v proměnné index je po skončení cyklu počet uživatelů

var

  username : string[30];

  aplname : string[30];

  state : integer;

  index : integer;

begin

  index := -1;

  repeat

    index := index+1;

    if Get_logged_user(index, username, aplname, state) then Signalize;

    ...

  until username = "";

...


Funkce Get_message
Get_message	[I..]

function Get_message(var msg : integer) : Boolean;

Parametry

msg	Výstupní parametr: proměnná, která přijme zprávu

Popis

Od verze 3.0 může tato funkce být nahrazena obecnější funkcí Get_ext_message.

Funkce Get_message čeká na další zprávu, kterou programu předá uživatel. Takováto zpráva může vzniknout stiskem tlačítka provádějícího příkaz Return ve formuláři, vybráním některé položky z uživatelského menu , stiskem zaregistrované klávesy nebo provedením akce ve formuláři, která automaticky generuje standardní zprávu.

Funkce Get_message neskončí, dokud uživatel takovou zprávu nevygeneruje. To znamená, že "uvnitř" provádění funkce Get_message uživatel může např. editovat obsah databáze prostřednictvím formulářů otevřených na obrazovce nebo volat procedury projektu pomocí tlačítek.

Hodnota funkce

Funkce vrátí FALSE ve dvou případech:

- pokud uživatel vytvořil zprávu s hodnotou -1;

- pokud aplikace byla ukončena zvenčí, z operačního systému.

Příklad

while Get_message(MSG) DO

begin                      { cyklus zpracování zpráv }

  if MSG = 1100 then ...

  else if MSG = ...

Viz

Peek_message, Get_ext_message


Funkce Get_object_rights
Get_object_rights	[ICP]

function Get_object_rights(var objname : string; category : short;  var username : string; var rights : short) : Boolean;

BOOL Get_object_rights(const char * objname, tcateg category,  const char * username, tright * rights);

function Get_object_rights(objname : PChar; category : tcateg; username : PChar; var rights : tright) : Boolean;

Parametry

objname	jméno objektu;
category	kategorie objektu;
username	jméno uživatele;
rights	výstupní parametr: práva uživatele k objektu.

Popis

Od verze 5.0 se jedná o funkci zastaralou, plně nahrazenou obecnější funkcí GetSet_privils, nicméně mnohem jednodušší a v jednoduchým případech použitelnou.

Funkce zjistí přístupová práva uživatele k objektu. Je-li parametr  username prázdný řetězec, funkce pracuje s právy přihlášeného uživatele.

Parametr category musí být jedna konstant CATEG_TABLE, CATEG_VIEW, CATEG_CURSOR, CATEG_MENU, CATEG_PGMSRC, CATEG_PGMEXE, CATEG_USER, CATEG_APPL, CATEG_PICT, CATEG_GROUP, CATEG_ROLE, CATEG_CONNECTION, CATEG_RELATION, CATEG_DRAWING, CATEG_GRAPH, CATEG_REPLREL, CATEG_PROC, CATEG_TRIGGER, CATEG_WWW, CATEG_SEQ, případně sjednocené s konstantou IS_LINK.

Parametr rights nabude hodnotu rovnou součtu těchto práv: použití - RIGHT_READ (1), přepsání - RIGHT_WRITE (2), RIGHT_DEL (8), poskytnutí - RIGHT_GRANT (128).

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Příklad

var

  prava : short;

begin

  Get_object_rights("POHL1", CATEG_VIEW, "HONZA", prava) ;

end.

Do proměnné PRAVA se zapsalo sjednocení práv uživatele HONZA k formul85i POHL1. Má-li všechny tři (použití, přepsání, poskytnutí), výsledek je 131 (1+2+128).

Viz

Get_data_rights, Set_data_rights, Set_object_rights, GetSet_privils


Funkce GetSet_fil_blocks
GetSet_fil_blocks	[ICP]

function GetSet_fil_blocks(operation : integer; var size : integer) : Boolean;

BOOL [cd_]GetSet_fil_blocks ([cdp_t cdp,] t_oper operation, uns32 * size);

function [cd_]GetSet_fil_blocks ([cdp : cdp_t;] operation : t_oper; var size uns32) : Boolean;

Parametry

operation	- OPER_GET pro zjištění velikosti
	- OPER_SET pro nastavení velikosti.
size	velikost databázového souboru v blocích o velikosti 4 KB ( je výstupním parametrem při zjišťování velikosti, vstupním při nastavování)
[cdp	kontextová proměnná klienta]

Od verze

6.0

Popis

Funkce  GetSet_fil_blocks slouží ke zjištění nebo zvětšení velikosti databázového souboru WB5.FIL. Touto funkci nelze zmenšit velikost souboru. Funkci s hodnotou OPER_SET smí volat pouze správce, jinak dojde k chybě NO_RIGHTS (129 - Nemáte právo provést tuto akci).

V externím jazyce se může použít poté, co funkcí Get_info zjistíte malý počet volných clusterů databázového souboru.

Ve vnitřním jazyce lze funkci využít v aplikacích poté, co se při spuštění serveru (aplikací) objeví varovná hláška o nedostatku volných clusterů.

Obdobná funkce GetSet_fil_size lze použít k témuž účelu, velikost se však zadává (a zjišťuje) nikoliv v blocích 4 KB ale přímo v bajtech.

Hodnota funkce

Vrátí TRUE při chybě, číslo chyby OS_FIL_ERROR (157 - Chyba při práci se souborem), když není dost místa na disku. Při pokusu o zmenšení souboru funkce neudělá nic a vrátí FALSE.

Viz

GetSet_fil_size, Get_info


Funkce GetSet_fil_size
GetSet_fil_size	[ICP]

function GetSet_fil_size(operation : integer; var size : integer) : Boolean;

BOOL [cd_]GetSet_fil_size([cdp_t cdp], t_oper operation, uns32 * size);

function [cd_]GetSet_fil_size([cdp : cdp_t]; operation : t_oper; var size uns32) : Boolean;

Parametry

operation	- konstanta OPER_GET pro zjištění velikosti
	- konstanta OPER_SET pro nastavení velikosti.
size	velikost databázového souboru v bajtech ( je výstupním parametrem při zjišťování velikosti, vstupním při nastavování)
[cdp	kontextová proměnná klienta]

Od verze:

5.0

Popis

Funkce  GetSet_fil_size slouží ke zjištění nebo zvětšení velikosti databázového souboru WB5.FIL. Touto funkci nelze zmenšit velikost souboru. Funkci s hodnotou OPER_SET smí volat pouze správce, jinak dojde k chybě NO_RIGHTS (Nemáte právo provést tuto akci).

V externím jazyce se může použít poté, co funkcí Get_info zjistíte malý počet volných clusterů databázového souboru.

Ve vnitřním jazyce lze funkci využít v aplikacích poté, co se při spuštění serveru (aplikací) objeví varovná hláška o nedostatku volných clusterů.

Obdobná funkce GetSet_fil_blocks lze použít k témuž účelu, velikost se však zadává (a zjišťuje) nikoliv v bajtech, ale v blocích o velikosti 4 KB (obdobně jako z vývojového prostředí WinBase602).

Hodnota funkce

Vrátí TRUE při chybě, číslo chyby OS_FIL_ERROR (157), když není dost místa na disku. Při pokusu o zmenšení souboru funkce neudělá nic a vrátí FALSE.

Příklad

if GetSet_fil_size(OPER_GET, size) then Signalize;

Info_box('',Int2str(size))

Viz

Get_info, GetSet_fil_blocks,


Funkce GetSet_group_role
GetSet_group_role	[ICP]

function GetSet_group_role(user_or_group, group_or_role : tobjnum; subject2 : integer; operation : integer, var relation : integer) : Boolean;

BOOL [cd_]GetSet_group_role([cdp_t cdp], tobjnum user_or_group, tobjnum group_or_role, tcateg subject2, t_oper operation, uns32 * relation);

function [cd_]GetSet_group_role([cdp : cdp_t]; user_or_group, group_or_role : tobjnum; subject2 : tcateg; operation : t_oper, var relation : uns32) : Boolean;

Parametry

user_or_group	číslo uživatele nebo skupiny
group_or_role	číslo skupiny nebo role
subject2	udává význam parametru group_or_role, nabývá hodnot CATEG_GROUP nebo CATEG_ROLE
operation	- konstanta OPER_SET (zařazení / vyřazení)
	- konstanta OPER_GET (zjištění stavu)
relation	- 1= zařadí / zařazeno
	- 0=vyřadí / vyřazeno
[cdp	kontextová proměnná klienta]

Od verze:

5.0

Popis

Je-li operation rovno OPER_SET, funkce GetSet_group_role zařazuje (relation =1) nebo vyřazuje (relation = 0) uživatele nebo skupinu user_or_group do/ze skupiny nebo role group_or_role.

Pro operation rovno OPER_GET funkce GetSet_group_role zjišťuje stav nalezení uživatele nebo skupiny user_or_group ve skupině nebo roli  group_or_role a vrací hodnotu ve výstupním parametru relation. (relation =1 zařazeno a relation = 0 vyřazeno).

Číslo subjektu práv vrátí funkce Find_object.

Zařazovat uživatele do skupiny smí pouze správce databáze. Obsazovat uživatele nebo skupinu do role smí správce databáze nebo správce aplikace. Jinak dojde k chybě NO_RIGHT (Nemáte právo provést tuto akci).

Funkce nahrazuje starší funkce User_in_group a User_to_group.

Hodnota funkce

Funkce vrací TRUE při chybě.

Příklad

if Create_user(uzivname,'','','','',bb,'',usernum) then Signalize;

if Find_object('Senior_user',CATEG_ROLE,rolenum) then begin

  Info_box('Nelze','Role SENIOR_USER byla zrušena. Nelze nastavit práva.');

  halt;                         // zastaví se vnořený běh

end;

stav := 1;

if GetSet_group_role(usernum,rolenum, CATEG_ROLE,OPER_SET,stav) then Signalize;

Viz

Create_user, User_in_group, User_to_group, Edit_relation, Find_object,


Funkce GetSet_next_user
GetSet_next_user	[ICP]

function GetSet_next_user(curs : tcurstab; position : trecnum; attr : integer; operation : integer; valtype : integer; var value): Boolean;

BOOL [cd_]GetSet_next_user([cdp_t cdp], tcurstab curs, trecnum position, tattrib attr, t_oper operation, t_valtype valtype, void *value);

function [cd_]GetSet_next_user([cdp : cdp_t]; curs : tcurstab; position : trecnum; attr : tattrib; operation : t_oper; valtype : t_valtype; var value): Boolean;

Parametry

curs	tabulka nebo otevřený kursor - viz podrobnosti
position	číslo záznamu
attr	číslo sloupce
operation	čtení nebo zápis uživatele
valtype	způsob identifikace uživatele, nabývá hodnot VT_OBJNUM, VT_UUID nebo VT_NAME
value	označuje uživatele
[cdp	kontextová proměnná klienta]

Od verze:

5.0

Popis

Funkce GetSet_next_user čte nebo zapisuje do kolujícího dokumentu označení uživatele, na nějž dokument čeká. Dokumentem je záznam s absolutním číslem position v kurzoru nebo tabulce curs. Parametr attr je číslo systémového sloupce _W5_DOCFLOW, pokud curs je tabulka nebo kurzor obsahující pouze jeden takový sloupec, pak se ignoruje. Parametr operation je OPER_GET pro čtení uživatele nebo OPER_SET pro zápis uživatele. Parametr value označuje uživatele a je při zápisu vstupním parametrem a při čtení výstupním. Parametr valtype má hodnotu  VT_OBJNUM, pokud value je číslo uživatele, VT_UUID pokud value je identifikace uživatele nebo VT_NAME pokud value je logovací jméno uživatele.

Je-li operation=OPER_SET, valtype=VT_OBJNUM a value ukazuje na -1, do dokumentu se zapíše, že na nikoho nečeká - koloběh je ukončen. Stejného efektu docílí prázdný řetězec ve value při valtype=VT_NAME.

Hodnota funkce

Funkce vrací TRUE při chybě a FALSE při úspěšném provedení.

Příklad

procedure Tlac_PoslatZpet(id : window_id; rec : trecnum);

{*******************************************}

// pošle dokument dalšímu uživateli

var

  c : cursor;

  usid : binary[12];

begin

  if Get_fcursor(id,c,nil) then begin

    usid := c[rec].`id žadatele`;

    if GetSet_next_user(c, rec, 0, OPER_SET, VT_UUID, usid) then Signalize;

    Close_view(id);

  end else Info_box('Get_fcursor','Chyba');

end;

procedure Tlac_Hotovo(id : window_id; rec : trecnum);

{*******************************************}

//ukončí koloběh

var

 c : cursor;

 pom : integer;

begin

  pom := -1;

  if Get_fcursor(id,c, nil) then begin

   c[rec].stav:=DOKONČENO;

   if GetSet_next_user(c, rec, 0, OPER_SET, VT_OBJNUM, pom) then Signalize;

  end else Info_box('Get_fcursor','Chyba');

  Close_view(id);

end;

Viz

Waits_for_me, Next_user_name


Funkce GetSet_privils
GetSet_privils	[ICP]

function GetSet_privils(user_group_role : tobjnum; subject_categ : integer; table : ttablenum; recnum : trecnum; operation :integer; var  privils) : Boolean;

BOOL [cd_]GetSet_privils([cdp_t cdp], tobjnum user_group_role, tcateg subject_categ, ttablenum table, trecnum recnum, t_oper operation, uns8 * privils);

function [cd_]GetSet_privils([cdp : cdp_t]; user_group_role : tobjnum; subject_categ : tcateg; table : ttablenum; recnum : trecnum; operation : t_oper; var privils) : Boolean;

Parametry

user_group_role	číslo subjektu práv vrácené funkcí Find_object
subject_categ	kategorie subjektu práv  (CATEG_USER, CATEG_GROUP nebo CATEG_ROLE)
table	tabulka deklarovaná v programu nebo její číslo - viz podrobnosti
recnum	číslo záznamu nebo -1
operation	- konstanta OPER_SET - nastavení práv
	- konstanta OPER_GET (resp.OPER_GETEFF) - zjištění nastavení práv přidělených (resp. efektivních)
privils	práva (nastavená / zjištěná)
[cdp	kontextová proměnná klienta]

Od verze:

5.0

Popis

Obecná funkce, která nastavuje nebo zjišťuje nastavení práv subjektu práva k tabulce nebo k záznamu tabulky, jsou-li v tabulce definována záznamová práva.

Je-li operation rovno OPER_SET, funkce nastavuje práva uživatele nebo skupiny nebo role (rozlišeno parametrem user_group_role) k tabulce table (parametr recnum = -1), případně k záznamu recnum (recnum >= 0).

Pro operation rovno OPER_GET (resp. OPER_GETEFF) funkce vrací nastavení práv (resp. efektivních práv) přidělených uživateli nebo skupině nebo roli (rozlišeno parametrem user_group_role) k tabulce table (parametr recnum = -1), případně k záznamu recnum (recnum >= 0).

Práva se zadávají resp. vracejí v parametru privils (struktura 65 bajtů) - podrobnosti.

Práva smí nastavit pouze uživatel, který jimi sám disponuje a má právo přidělovat práva, jinak dojde k chybě NO_RIGHT (Nemáte právo provést tuto akci).

Práva k objektům se nastavují také touto funkcí. Jako table zvolte tabulku tabulek (TABTAB) nebo tabulku objektů (OBJTAB), záznamová práva k záznamům v těchto tabulkách odpovídají právům k jednotlivým objektům. Číslo záznamu (parametr recnum) vrátí funkce Find_object pro daný objekt.

Z prvního bajtu struktury získané funkcí GetSet_privils jsou důležité tyto bity:

3.bit	4	RIGHT_INSERT	nastavuje se pro Tabtab, resp. Objtab

4.bit	8	RIGHT_DEL	nastavuje se pro tabulku (Zrušení objektu)

8.bit	128	RIGHT_GRANT     nastavuje se pro tabulku (Poskytování práv)

Dále jsou důležité bity odpovídající 6. sloupci tabulky Tabtab nebo Objtab (definice objektu). Právo číst definici objektu (Použítí objektu v dlg Práva k objektu) signalizuje 3. bit 3. bajtu struktury, právo přepisovat definici objektu (Modifikace objektu) signalizuje 4. bit 3. bajtu struktury - viz příklad 3.

POZOR! Nezaměňujte právo k tabulce jako objektu (právo číst a modifikovat definici tabulky) a práva k datům v této tabulce (číst, přepisovat hodnoty sloupců, vkládat záznamy apod.)!

Obecná funkce GetSet_privils nahrazuje čtveřici starších funkcí Get_object_rights, Get_data_rights, Set_object_rights, Set_data_rights. Alternativní cestou nastavení práv k datům je použití SQL příkazu GRANT.

Hodnota funkce

Funkce vrací při chybě TRUE.

Příklad 1

type

  privil = array[0..64] of char;

procedure PredatPrava(id: window_id; rec: trecnum);

{***********************************}

// předá práva k záznamu autora dopisu adresátovi, jinak by dopis nešel přečíst

// (záznamová práva a kolující dokumenty)

var

   privils : privil;

   trec    : trecnum;

   cx      : cursor;

   ic      : integer;

   nextusernum : tobjnum;

begin

  Get_fcursor(id,cx,nil);

  ic := cx;	// přepočtení čísla záznamu z kurzoru na tabulku

  if ic >= 32768 then Translate(cx,rec,0,trec) else trec:=rec;

// prečíst práva autora dopisu

  if not GetSet_privils(usernum, CATEG_USER, dopisy, trec, OPER_GETEFF, privils) then begin

// zjištění, komu je dopis určen

  GetSet_next_user(dopisy, trec, 0, OPER_GET, VT_OBJNUM, nextusernum);

// předat je adresátovi

  if GetSet_privils(nextusernum, CATEG_USER, dopisy, trec, OPER_SET, privils) then Signalize;

  end else Signalize;

end;

Příklad 2

( prtab je deklarován jako array[1..65] of char)

  Find_object("tab1",categ_table,tb);        // tabulka Tab1

  Find_object("tabtab",categ_table,ttab);    // systémová tabulka TABTAB

  Find_object("moje",categ_role,rolenum);    // číslo role Moje

// zjištění práv role Moje k datům tabulky Tab1 jako celku

  GetSet_privils(rolenum,CATEG_ROLE,tb,-1,OPER_GETEFF,prtab) ;

  intpr:=ord(prtab[1]);

// obsah 1. bajtu struktury obsahuje globální práva, výsledek je součtem konstant

// označujících jednotlivá práva

  Info_box("role Moje k datům v Tab1",Int2str(intpr));

Příklad 3

(zjištění práv uživatele k definici objektu)

type

  privils = record

   first : char;

   second : char;

   third : char;

   next : array[1..62] of char;

  end;

var

  prdef1,prdef2 : privils;

  usernum,obj,otab : short;

  intpr1,intpr2,intpr3 : integer;

begin

  Find_object("objtab",categ_table,otab);    // systémová tabulka OBJTAB

  Find_object("editprivils",categ_pgmsrc,obj);    // program

  Find_object("pavel",categ_user,usernum);   // číslo uživatele

  GetSet_privils(usernum,CATEG_USER,otab,obj,OPER_GETEFF,prdef2) ;

  intpr3:=ord(prdef2.third);

   if intpr3 AND 8 = 8 then

     Info_box("prava prepisovat objekt","Ano");

   if intpr3 AND 4 = 4 then

     Info_box("prava cist objekt","Ano");

...

Viz

Get_data_rights ,Get_object_rights, Set_data_rights, Set_object_rights, Edit_privils, Find_object,


Funkce Get_var_address
Get_var_address	[.CP]

void * Get_var_address(const char * name);

function Get_var_address(name : PChar) : Pointer;

Parametry

name	řetězec obsahující identifikátor proměnné otevřeného projektu

Popis

Funkce Get_var_address zpřístupňuje proměnnou deklarovanou v právě otevřeném projektu. Identifikátor této proměnné je zadán parametrem  name.

Před voláním této funkce je nutno otevřít projekt pomocí funkce Open_project.

Funkce umožňuje programům v externích jazycích pracovat s proměnnými vnitřního programovacího jazyka a tak například pohodlněji využívat formuláře do těchto proměnných.

Pokud externí program zapisuje hodnotu do proměnné vnitřního jazyka, nesmí přepsat více paměti, než kolik jich zabírá hodnota proměnné.

Hodnota funkce

Funkce vrací adresu proměnné nebo NULL (v Pascalu NIL) pokud v otevřeném projektu proměnná tohoto jména neexistuje.

Viz

Open_project


Funkce Get_view_item
Get_view_item	[I..]

function Get_view_item(id : window_id;  itemnum : short) : string;

Parametry

id	identifikace (handle) formuláře
itemnum	číslo složky formuláře

Popis

Funkce Get_view_item zjišťuje obsah složky s číslem itemnum ve formuláři id. Do doby, než se obsah složky zapíše do databáze nebo do proměnné, může být ve sloupci (proměnné) jiná hodnota, než vrací tato funkce. Je-li ve formuláři více záznamů, pracuje se s prvním z nich.

Funkci nelze použít ve standardním formuláři.

V externích jazycích tuto funkci nahrazuje funkce Windows GetDlgItemText.

Od verze 3.0 je funkce přibližně nahrazena obecnější funkcí Get_item_value.

Od verze 6.0 lze k získávání hodnot složek formulářů využívat také vlastnost složky Value a Text.

Hodnota funkce

Funkce vrací řetězec znaků, který je obsahem zadané složky formuláře. Obsah řetězce není nijak konvertován.

Příklad

/* cyklus, který čeká, až do editační složky formuláře zapíšeme třetí znak */

  repeat

    if Peek_message then

       s := Get_view_item(id_form,3)

  until Strlength(s)>=3;

Viz

Get_view_pos, Set_int_pos, Set_ext_pos, Set_view_item, Get_item_value ,Set_item_value


Funkce Get_view_pos
Get_view_pos	[ICP]

function Get_view_pos(hView : window_id; var irec, erec : trecnum) : Boolean;

BOOL Get_view_pos(window_id hView, trecnum *irec, trecnum *erec);

function Get_view_pos(hView : window_id; var irec, erec : trecnum) : Boolean;

Parametry

hView	identifikace (handle) formuláře
irec	vrácené interní číslo vybraného záznamu
erec	vrácené absolutní číslo vybraného záznamu

Popis

Funkce Get_view_pos vrátí údaj o tom, který záznam je ve formuláři hView zrovna vybrán. V parametru erec se vrátí absolutní číslo tohoto záznamu. V parametru irec se vrátí pořadové číslo tohoto záznamu ve formuláři.

Od verze 6.0 lze k získání čísla záznamu formuláře využívat také vlastnost formuláře CurPos.

Hodnota funkce

Při úspěchu funkce vrací TRUE. Hodnota FALSE se vrátí v případě, že parametr id neoznačuje okno s formulářem.

Příklad

procedure synchronizace(vzor, cíl : window_id);

var irec, erec, cíl_rec : trecnum;

    vzor_curs, cíl_curs : cursor;

    flags : short;

{ Nastaví formulář "cíl" na stejný záznam jako formulář "vzor" }

begin

  if Get_view_pos(vzor, irec, erec) then

    if Get_fcursor(vzor, vzor_curs, flags) then

      if Get_fcursor(cil, cíl_curs, flags) then

        if not Super_recnum(vzor_curs, cíl_curs, erec, cíl_rec) then

          Set_ext_pos(cil, cíl_rec, -1);

end;

Viz

Get_item_value, Set_item_value, Get_view_item, Set_int_pos, Set_ext_pos, Set_view_item


Procedura Help_file
Help_file	[ICP]

procedure Help_file(var filename : string);

void Help_file(const char *filename);

procedure Help_file (filename : PChar);

Parametry

filename	jméno souboru nápověd včetně cesty

Popis

Procedura Help_file určí ze kterého souboru nápověd se budou čerpat další nápovědy. Je-li filename prázdný řetězec, použije se standardní soubor nápověd WB602.HLP.

Je-li v programu určen vlastní soubor nápověd, není možné používat standardní nápovědu při ladění tohoto programu.

Standardní soubor nápověd se nastaví hned po doběhnutí programu.

Viz

Show_help, Show_help_popup


Funkce Hours
Hours	[ICPS]

function Hours(tm : time) : integer;

int Hours(uns32 tm);

function Hours(tm : uns32) : integer;

Parametry

tm	údaj o čase ve vnitřním tvaru WinBase602

Popis

Funkce Hours extrahuje počet hodin z časového údaje.

Hodnota funkce

Funkce vrací počet hodin z intervalu 0 až 23.

Viz

Make_date, Day, Month, Year, Today, Make_time, Minutes, Seconds, Sec1000, Now.


Fukce Iabs
Iabs	[I..S]

function Iabs(i : integer) : integer;

Parametry

i	celé číslo

Popis

Funkce Iabs spočte absolutní hodnotu celého čísla.

Hodnota funkce

Funkce vrací absolutní hodnotu čísla zadaného jako parametr.

Viz

Abs


Funkce Import_appl
Import_appl	[.CP]

BOOL Import_appl(cdp_t cdp, window_id hParent, char * aplname);

function Import_appl(cdp : cdp_t; hParent : window_id; aplname : PChar)

Parametry

cdp	kontextové proměnné klienta
hParent	formulář, nad nímž se má objevit postupový dialog, nebo 0
aplname	jméno APL souboru

Popis

Funkce umožní importovat aplikaci zadanou kompletním jménem definičního souboru aplikace (APL souboru).

Hodnota funkce

Funkce vrací při chybě FALSE.

Viz

Export_app_exl


Procedura Info_box
Info_box	[ICP]

procedure Info_box(var caption, text : string);

void Info_box(const char *caption, const char *text);

procedure Info_box(caption, text : Pchar);

Parametry

caption	nadpis informačního okna
text	text v informačním okně

Popis

Procedura otevře na obrazovce modální okno obsahující nadpis  caption, text text, informační ikonu a tlačítko OK. Procedura skončí poté, co uživatel stiskne toto tlačítko.

Stiskne-li uživatel místo toho kombinaci kláves Ctrl+Break, přeruší tím běh programu ve vnitřním jazyce. Takto lze ukončit věčný cyklus, v němž se neustále otevírá informační okno.

Příklad

Info_box('Chyba','Není vyplněno číslo dopisu.'#10'Nevíte-li ho, stiskněte F4.');


Funkce Init_non_mdi_env
Init_non_mdi_env 	[.CP]

void Init_non_mdi_env(cdp_t cdp, HWND hMainWindow);

procedure Init_non_mdi_env(cdp : cdp_t; hMainWindow : HWND);

Parametry

cdp	kontextová proměnná klienta
hMainWindow	handle okna aplikace

Od verze:

5.1

Popis

Funkce Init_non_mdi_env inicializuje hlavní okno aplikace, které není typu MDI (v opačném případě se používá funkce Init_window_env). Formuláře lze pak otevírat pouze jako modální nebo plovoucí okna.

Hlavní okno aplikace nesmí v tomto případě předat zprávu WM_CREATE do procedury WinBaseFramProc.

Viz

GetClient, Open_project, Register_ext_menu, Init_window_env, WinBaseFrameProc


Funkce Init_window_env
Init_window_env	[.CP]

BOOL Init_window_env(window_id hFrame, window_id hClient, int winsub_pos, UINT flags);

function Init_window_env(hFrame, hClient : window_id; winsub_pos, flags : integer) : Boolean;

Parametry

hFrame	handle hlavního okna aplikace
hClient	handle okna typu MDI-klient nebo nula
winsub_pos	pozice Windows-submenu v menu hlavního okna, nebo -1
flags	příznaky ovlivňující vytvoření ovládací lišty a stavového řádku WinBase602

Od verze:

5.0

Popis

Funkce Init_window_env inicializuje hlavní okna aplikace.

Ve vstupním parametru hFrame obdrží handle hlavního okna aplikace, hClient je buď handle okna typu MDI-klient (bylo-li již vytvořeno) nebo nula (má-li jej vytvořit WinBase602). winsub_pos je pozice Windows-submenu v menu hlavního okna, nebo -1, pokud takové submenu neexistuje, flags jsou příznaky ovlivňující vytvoření ovládací lišty a stavového řádku WinBase602. Lze uvést WBF_NO_TOOLBAR nebo WBF_NO_STATUSBAR příp. jejich součet, pokud nechcete vytvořit příslušný objekt. Uvedete-li nulu, bude vytvořena lišta i stavový řádek.

Hodnota funkce

Funkce vrací FALSE při chybě.

Viz

GetClient, Open_project, Register_ext_menu, WinBaseFrameProc, Init_non_mdi_env


InitWBMail
InitWBMail	[ICPS]

function InitWBMail(var profile, password : string) : integer;

int InitWBMail(char *profile, char *password);

function InitWBMail(profile, password : PChar) : integer;

Parametry

profile	jméno profilu pro zpřístupnění pošty
password	heslo pro zpřístupnění pošty

Popis

Inicializuje práci s elektronickou poštou z WinBase602. Podle zadaného profilu se zpřístupní pošta Mail602, libovolná pošta rozhraní MAPI nebo pošta využívající SMTP/POP3.

Jako jméno profilu musí být použito jméno profilu definovaného na Konfiguračním panelu WinBase602, záložce Pošta (nebo v souboru WBKERNEL.INI pro servery na UNIXu a NetWare). Je-li místo jména profilu zadán prázdný řetězec nebo NIL (NULL), použije se profil Implicitní. Je-li heslo zadané v profilu (Windows), zadejte jako password prázdný string nebo NIL (NULL).

Hodnota funkce

Funkce vrací nulu v případě úspěchu a  číslo chyby v případě neúspěchu. Číslo chyby lze zjistit pomocí Sz_error nebo Signalize.

Příklad

Příklad odeslání zásilky,

Příklad příjmu zásilky

Viz

LetterCreate, LetterAddAddr, LetterAddFile, LetterCancel, LetterSend, CloseWBMail, TakeMailToRemOffice,

MailOpenInBox, MailBoxLoad, MailBoxGetMsg, MailBoxGetFilInfo, MailBoxSaveFileAs, MailCloseInBox, MailGetInBoxInfo, MailGetType,

MailDial, MailHangUp


InitWBMail602
InitWBMail602	[ICPS]

function InitWBMail602(var EMIpath, userid, password : string) : integer;

int InitWBMail602(char * EMIpath, char * userid, char * password);

function InitWBMail602(EMIpath, userid, password : PChar) : integer;

Parametry

EMIpath	adresář s konfiguračním souborem pošty M602.EMI
userid	ID uživatele pošty
password	heslo uživatele pošty

Popis

Zastaralá funkce, od verze 6.0f plně nahrazena obecnější funkcí InitWBMail.

Inicializuje odesílání pošty z WinBase602. Zpřístupňuje pouze poštu Mail602.

Hodnota funkce

Funkce vrací nulu v případě úspěchu a  číslo chyby v případě neúspěchu. Číslo chyby lze zjistit pomocí Sz_error nebo Signalize.

Příklad

procedure InitMail;

{*****************************}

begin

  if Param[0].mailovat then begin

     usemail := true;

     pathemi := Param[0].emipath;

     iduser :=  Param[0].userid;

     paswuser := Param[0].userpasw;

     if InitWBMail602(pathemi,iduser,paswuser)>0 then Info_box("Chyba","Mail");

  end;

end;

Viz

InitWBMail,


Funkce Input_box
Input_box	[ICP]

function Input_box(var caption, text : string; maxlen : short) : Boolean;

BOOL Input_box(const char *caption, const char *text, int maxlen);

function Input_box(caption, text : PChar; maxlen : integer) : Boolean;

Parametry

caption	nadpis dialogového okna
text	řetězec editovaný v dialogovém okně
maxlen	délka, na níž se omezí výstupní řetězec  text

Popis

Funkce Input_box otevře na obrazovce dialogové okno a umožní uživateli zadat jeden údaj ve formě řetězce znaků. Tento řetězec vrátí v proměnné text.

Obsah proměnné text musí být před voláním této funkce inicializován řetězcem, které se má v dialogovém okně objevit po jeho otevření.

Uživatel může ukončit zadávání řetězce buď stiskem tlačítka OK nebo Zrušit akci. V druhém případě obsah proměnné text nebude změněn.

Uživatel nebude moci zadat více znaků, než je hodnota parametru  maxlen.

Pro zadávání většího počtu údajů použijte formuláře do proměnných projektu.

Hodnota funkce

Pokud uživatel uzavře dialogové okno stiskem tlačítka OK, pak funkce vrátí TRUE. Pokud použije tlačítko Zrušit akci, funkce vrátí FALSE.

Příklad

var

  a : boolean;

  ss : string[20];

  dat : date;

begin

  repeat

    ss := date2str(Today,1);

    a := Input_box("Zadejte datum",ss,10);

    dat := Str2date(ss);

  until (dat <> nonedate) or (a = false);

  ...

end.


Funkce Insert
Insert	[ICP]

function Insert(curs : tcurstab) : trecnum;

trecnum [cd_]Insert([cdp_t cdp], tcurstab curs);

function [cd_]Insert([cdp : cdp_t]; curs : tcurstab) : trecnum;

Parametry

curs	deklarovaná tabulka nebo otevřený kurzor - viz podrobnosti
[cdp	kontextová proměnná klienta]

Popis

Funkce Insert přidává nový prázdný záznam k tabulce nebo ke kurzoru curs. Při vkládání do tabulky se nový záznam přidá vždy na konec tabulky. Při vkládání do kurzoru se nový záznam objeví na konci kurzoru, vložen však může být na místo v tabulce volné po smazaném a uvolněném záznamu. Není proto zaručeno, že číslo vloženého záznamu bude větší než čísla ostatních (zrušených i nezrušených) neuvolněných záznamů v tabulce.

Ve funkci Insert nelze použít kurzor vzniklý spojením více tabulek nebo needitovatelný kurzor.

V přidaném záznamu budou všechny sloupce mít hodnoty NONE dle svých typů nebo implicitní hodnoty definované v návrhu tabulky.

Je-li v definici tabulky stanoveno, že některý sloupec nesmí mít hodnotu NONE, definujte též implicitní hodnotu tohoto sloupce, nebo Insert a zápis do tohoto sloupce proveďte v jedné transakci. Jsou-li v tabulce definována integritní omezení, buď musí být splněna na implicitních hodnotách, anebo ještě ve stejné transakci musí být do sloupců zapsány vyhovující hodnoty.

Je-li curs podřízená tabulka v referenční integritě, vede zavolání funkce Insert k porušení pravidel  ref. integrity. Proveďte proto Insert i zápis do hlídaného sloupce v jedné transakci.

Hodnota funkce

Funkce vrací absolutní číslo přidaného záznamu. Toto číslo lze použít pro zápis do přidaného záznamu v tabulce resp. kurzoru curs.

Kontrolujte vždy výsledek operace! Pokud se operace neprovede, vrací se hodnota -1. Povahu chyby lze pak zjistit voláním funkce Signalize.

Příklad

table

   TAB1;

var

   cislo;

begin

  cislo := Insert(TAB1);

if cislo <> -1 then

  TAB1[cislo].jméno := "Josef";

  ...

Viz

Append,  Delete, Undelete, Free_deleted.


Funkce Insert_object
Insert_object	[ICP]

function Insert_object(var name : string;  category : short; var objnum : short) : Boolean;

BOOL [cd_]Insert_object([cdp_t cdp], const char * name,  tcateg category, tobjnum * objnum);

function [cd_]Insert_object([cdp : cdp_t]; name : PChar;  category : tcateg; var objnum : tobjnum) : Boolean;

Parametry

name	jméno objektu;
category	kategorie objektu;
objnum	vrácená hodnota: číslo objektu.
[cdp	kontextová proměnná klienta]

Popis

Zřídka používaná funkce, která při běhu programu vytvoří nový objekt zadané kategorie category a zadaného jména name. V parametru objnum vrátí číslo vytvořeného objektu.

Parametr category musí být jedna z konstant  CATEG_VIEW, CATEG_CURSOR, CATEG_MENU, CATEG_PGMSRC, CATEG_APPL, CATEG_PICT, CATEG_ROLE, CATEG_CONNECTION, CATEG_RELATION, CATEG_DRAWING, CATEG_REPLREL.

Funkce vloží záznam s číslem objnum do příslušné systémové tabulky (OBJTAB). Po zavolání funkce je třeba do sloupce proměnné délky DEFIN zapsat textovou definici objektu.

Pro vytvoření tabulky se použije SQL příkaz CREATE TABLE. Pro vytvoření pevného dotazu můžete použít SQL příkaz CREATE VIEW. Pro vytvoření uložené procedury nebo triggeru můžete použít SQL příkazy CREATE PROCEDURE nebo CREATE TRIGGER. Pro vytváření uživatele se použije funkce Create_user. Pro vytvoření skupiny uživatelů se používá funkce Create_group.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Příklad Vytvoření pohledu z definice uložené v souboru:

Reset(f,"D:\aaa.vwd");

if not Insert_object("POHLED1",CATEG_VIEW,objnum) then begin

  while not Eof(f) do begin

    Read(f,str);

    str := str+Chr(13)+Chr(10);

    delka := Strlength(str);

    Objtab[objnum].DEFIN[pozice,delka]:= str;

    pozice := pozice+delka;

  end;

end else Signalize;

Viz

Create_user, Create_group, SQL_execute


Funkce Int2str
Int2str	[I..S]

function Int2str(int : integer) : string;

Parametry

int	hodnota, která se má konvertovat

Popis

Funkce Int2str převede hodnotu zadanou prvním parametrem na řetězec znaků a vrátí jej.

Hodnota funkce

Funkce vrací řetězec znaků, který je desítkovým zápisem čísla int.

Příklad

if vsechnysk then ss := 'SELECT * FROM Tfirma'

  else ss := 'SELECT * FROM Tfirma WHERE skupina='+Int2str(skup);

  if Open_sql_cursor(curmain,ss) then Signalize;

Viz

Str2int, Real2str, Str2real, Money2str, Str2money, Str2date, Str2time, Time2str,


Funkce interf_close
interf_close	[.CP]

void [cd_]interf_close([cdp_t cdp]);

procedure [cd_]interf_close ([cdp : cdp_t]);

Parametry

[cdp	kontextová proměnná klienta]

Popis

Funkce ukončí komunikaci se serverem. Tuto funkci je nutno volat před skončením aplikace, která zahájila komunikaci voláním interf_init, ale až po volání funkce Logout.

Použití - viz kostra aplikace v externím jazyce

Hodnota funkce

Funkce vrací FALSE při úspěchu, TRUE při neúspěchu.

Viz

unlink_kernel, interf_init


Funkce interf_init
interf_init	[.CP]

int interf_init(cdp_t cdp, int kernel);

function interf_init(cdp : cdp_t; kernel : integer) : integer;

Parametry

cdp	kontextová proměnná klienta
kernel	v této verzi musí mít hodnotu 0

Popis

Inicializuje spojení mezi klientem a serverem. Tato funkce se musí volat před voláním kteréhokoli jiného podprogramu kromě link_kernel a cdp_init. Zprávu o případné chybě při provádění funkce lze zobrazit v dialogovém okně pomocí procedury Kernel_error_box.

Použití - viz kostra aplikace v externím jazyce

Hodnota funkce

Funkce vrací některou z konstant KSE_.... Konstanta KSE_OK má nulovou hodnotu a znamená provedení funkce bez chyby. Ostatní konstanty označují různé druhy chyb (např. zahlcení serveru požadavky jiných klientů).

Viz

link_kernel, cdp_init., interf_close, Kernel_error_box


Funkce Isqr
Isqr	[I..S]

function Isqr(i : integer) : integer;

Parametry

i	celé číslo

Popis

Funkce Isqr spočte druhou mocninu celého čísla.

Hodnota funkce

Funkce vrací druhou mocninu čísla zadaného jako parametr. Pokud druhá mocnina argumentu překračuje rozsah hodnot typu Integer, není definováno, co funkce vrátí.

Viz

Sqr, Sqrt.


Funkce Is_repl_destin
Is_repl_destin	[...]

function Is_repl_destin(sloupec) : Boolean;

Parametry

sloupec	sloupec _W5_UNIKEY

Od verze:

5.0

Popis

Funkce se používá výhradně v podmínce pro výběr záznamů pro replikaci v replikačních vztazích. Umožňuje vybrat (a poté replikovat) ty záznamy, které vznikly právě na serveru, s nímž se komunikuje.

Použije se v případě replikování "ve hvězdici" - tj. jedna centrála a N poboček: pobočky zasílají data do cenrály, kde je někdo doplní - aby se doplněná data replikovala zpět jen na ten server, odkud přišla (pro ostatní nemá smysl), je nutné použít při návrhu replikačního vztahu tuto speciální funkci v podmínce pro výběr záznamů k replikaci.

Příklad použití naleznete ve vzorové aplikaci Objednavky na matricích - replikační vztah Centrala.

Hodnota funkce

Funkce vrací TRUE, vznikl-li záznam na serveru, kam se má replikovat


Funkce Kernel_error_box
Kernel_error_box	[.CP]

void Kernel_error_box(int errnum);

procedure Kernel_error_box(errnum : integer);

Parametry

errnum	číslo chyby

Od verze:

5.0

Popis

Funkce Kernel_error_box zobrazí dialogové okno obsahující vysvětlení chyby vrácené funkcí link_kernel nebo interf_init.

Viz

interf_init, link_kernel


LetterAddAddr
LetterAddAddr	[ICPS]

function LetterAddAddr(letter : integer; var addr, addrtype : string; cc : boolean) : integer;

int LetterAddAddr(DWORD letter, char * addr, char * type, BOOL cc);

function LetterAddAddr(letter : integer; addr, addrtype : PChar; cc : boolean) : integer;

Parametry

letter	handle dopisu
addr	adresa příjemce (665000E1@MUJURAD nebo vonasek@mujurad.cz )
addrtype	typ adresy (MAIL602 nebo Internet )
cc	příznak, je-li zásilka určena adresátu přímo (FALSE) nebo na vědomí (TRUE)

Popis

Funkce přidá jednoho adresáta do seznamu adresátů vytvářené zásilky elektronické pošty. Handle dopisu vrací (zásilku vytváří) funkce LetterCreate

Typ adresy "Internet" je ekvivalentní s typem "SMTP".

Ve (výjimečném) případě, kdy se v MAPI profilu používá jiný typ pošty, je nutné zadat adresu a typ adresy ve formátu dané pošty.

Každá zásilka musí mít alespoň jednoho adresáta, jinak při odeslání dojde k chybě č. 507.

Hodnota funkce

Funkce vrací nulu v případě úspěchu a  číslo chyby v případě neúspěchu. Číslo chyby lze zjistit pomocí Sz_error nebo Signalize.

Příklad

Příklad odeslání zásilky,

Viz

InitWBMail, InitWBMail602, LetterCreate, LetterAddFile, LetterCancel, LetterSend, CloseWBMail, TakeMailToRemOffice


LetterAddFile
LetterAddFile	[ICPS]

function  LetterAddFile(letter : integer; var fname : string) : integer;

int LetterAddFile(DWORD letter, char *fname);

function  LetterAddFile(letter : integer; fname : PChar) : integer;

Parametry

letter	handle dopisu
fname	cesta k souboru, který má být připojen

Popis

Funkce připojí k vytvářené zásilce elektronické pošty soubor. Handle dopisu vrací (zásilku vytváří) funkce LetterCreate.

Je-li v profilu specikován parametr FilePath, musí se soubor nalézat  v některém adresáři uvedeném v tomto parametru, jinak dojde k chybě č. 514.

Hodnota funkce

Funkce vrací nulu v případě úspěchu a  číslo chyby v případě neúspěchu. Číslo chyby lze zjistit pomocí Sz_error nebo Signalize.

Příklad

Příklad odeslání zásilky,

Viz

InitWBMail, LetterCreate, LetterAddAddr, LetterCancel, LetterSend, CloseWBMail, TakeMailToRemOffice


LetterCancel
LetterCancel	[ICPS]

prodedure LetterCancel(letter : integer);

void LetterCancel(DWORD letter);

prodedure LetterCancel(letter : integer);

Parametry

letter	handle dopisu

Popis

Funkce zruší doposud neodeslanou zásilku elektronické pošty a uvolní prostředky, které zásilka alokovala. Po návratu z funkce je handle zásilky neplatný.

Hodnota funkce

Funkce vrací nulu v případě úspěchu a číslo chyby v případě neúspěchu. Číslo chyby lze zjistit pomocí Sz_error nebo Signalize.

Příklad

Příklad odeslání zásilky,

Viz

InitWBMail, LetterCreate, LetterAddAddr, LetterAddFile, LetterSend, CloseWBMail, TakeMailToRemOffice


LetterCreate
LetterCreate	[ICPS]

function LetterCreate(var subj, msg : string; flags : integer; var letter : integer) : integer;

int LetterCreate(char * subj, char * msg, UINT flags, DWORD * letter);

function LetterCreate(subj, msg : PChar; flags : integer; var letter : integer) : integer;

Parametry

subj	"věc" dopisu (objeví se v seznamu došlé pošty)
msg	text dopisu nebo cesta k textovému souboru obsahujícímu text dopisu
flags	příznaky dopisu WBL_...
letter	výstupní parametr -  handle dopisu

Popis

Vytvoří novou zásilku elektronické pošty označenou parametrem letter. Tento parametr identifikuje zásilku a ostatní funkce (přidání adresáta, připojení souboru apod.) pracují s tímto identifikátorem.

.

Příznaky dopisu flags:

WBL_READRCPT   (= 1)	Zásilka bude doporučená.
WBL_DELAFTER   (= 2)	Zásilka bude po odeslání smazána. MAPI implicitně odeslané zásilky neruší a ponechává je v přihrádce pošta k odeslání.
Následující dva příznaky specifikují prioritu zásilky. Implicitně má zásilka prioritu normální.

WBL_PRILOW    ( = 4)	Odeslání zásilky bude mít nízkou prioritu
WBL_PRIHIGH    (= 8)	Odeslání zásilky bude mít vysokou prioritu
 Následující tři příznaky specifikují citlivost zásilky. Implicitně nemá zásilka žádnou citlivost. Pošta Mail602 nastavování citlivosti zásilky nepodporuje.

WBL_SENSPERS   (= 16)	Zásilka bude mít "Osobní" citlivost, tzn. že zásilka neobsahuje informace týkající se pracovních záležitostí.
WBL_SENSPRIV   (= 32)	Zásilka bude mít "Soukromou" citlivost, příjemci nebude umožněno obsah zásilky před odesláním odpovědi nebo postoupením změnit.
WBL_SENSCONF   (= 64)	Zásilka bude mít "Důvěrnou" citlivost, se zásilkou by mělo zacházeno podle příslušných zásad.
WBL_REMSENDNOW (= 128)	Zásilka bude záhy po zařazení do pošty odeslána na mateřský poštovní úřad. Příznak má význam pouze v případě vzdáleného klienta pošty Mail602.
WBL_MSGINFILE (= 256)	Je-li příznak nastaven, je parametrem Msg je jméno textového souboru, který obsahuje tělo dopisu, jinak je parametrem Msg přímo text dopisu.

Hodnota funkce

Funkce vrací nulu v případě úspěchu a  číslo chyby v případě neúspěchu. Číslo chyby lze zjistit pomocí Sz_error nebo Signalize.

Příklad

Příklad odeslání zásilky,

Viz

InitWBMail, LetterAddAddr, LetterAddFile, LetterCancel, LetterSend, CloseWBMail, TakeMailToRemOffice


LetterSend
LetterSend	[ICPS]

function LetterSend(letter : integer) : integer;

int LetterSend(DWORD letter);

function LetterSend(letter : integer) : integer;

Parametry

letter	handle dopisu

Popis

Odešle zásilku elektronické pošty poštovním systémem zvoleným v profilu při inicializaci pošty funkcí InitWBMail a uvolní prostředky alokované pro vytvoření zásilky. Handle dopisu vrací (zásilku vytváří) funkce LetterCreate.

Po úspěšném návratu funkce je handle zásilky letter neplatný - nelze odeslat podruhé.

Hodnota funkce

Funkce vrací nulu v případě úspěchu a  číslo chyby v případě neúspěchu. Číslo chyby lze zjistit pomocí Sz_error nebo Signalize.

Příklad

Příklad odeslání zásilky,

Viz

InitWBMail, LetterCreate, LetterAddAddr, LetterAddFile, LetterCancel, CloseWBMail, TakeMailToRemOffice


Funkce Like
Like	[ICP]

function Like(var s1, s2 : string) : Boolean;

BOOL Like(const char * s1,  const char * s2);

function Like(s1, s2 : PChar) : Boolean;

Parametry

s1, s2	řetězec znaků

Popis

Funkce Like zjišťuje, zda řetězce s1 a s2 jsou si podobné: zda se liší pouze mezerami, velikostí písmen a diakritikou.

Funkci lze použít na řetězce delší než 255 znaků.

Hodnota funkce

Funkce vrátí TRUE, pokud mezi s1 a s2 jsou pouze výše uvedené rozdíly (nebo ani ty). Jinak funkce vrátí FALSE.

Viz

Strcat, Strcopy, Strinsert, Strdelete, Strpos, Strlength, Pref, Strtrim, Substr, Upcase.


Funkce link_kernel
link_kernel	[.CP]

int link_kernel(const char * path; int display);

function link_kernel(path : PChar;  display : integer) : integer;

Parametry

path	jméno databáze nebo serveru, k němuž se klient připojuje
display	zobrazení okna serveru
Popis

Tato funkce naváže spojení s databázovým serverem. Volba serveru závisí na parametru path. Toto jméno databáze nebo serveru, k němuž se klient připojuje, musí být registrováno v registrační databázi.

Funkce link_kernel se musí se volat předtím, než se pokusíte poprvé obrátit na server.

Parametr display se uplatní pouze tehdy, pokud se v důsledku provedení této funkce spouští lokální server. Zajistí se, že tento parametr server předá svému hlavnímu oknu při prvním volání Win API funkce ShowWindow. Doporučujeme použít hodnotu SW_MINIMIZE definovanou v hlavičkovém souboru windows.h .

Je-li parametr display roven -1,  funkce nespustí lokální server (server buď již musí na lokálním počítači běžet nebo se hledá v síti).

Použití - viz kostra aplikace v externím jazyce

Hodnota funkce

Funkce vrací některou z konstant KSE_.... Konstanta KSE_OK má nulovou hodnotu a znamená provedení funkce bez chyby. Ostatní konstanty označují různé druhy chyb.

Viz

cdp_init, interf_init


Funkce Ln
Ln	[I..S]

function Ln(r : real) : real;

Parametry

r	reálné číslo

Popis

Funkce Ln počítá přirozený logaritmus. Parametr funkce musí být kladný, jinak dojde k chybě při výpočtu.

Hodnota funkce

Funkce vrátí hodnotu přirozeného logaritmu svého parametru.

Viz

Arctan, Sin, Cos, Exp.


Funkce Login
Login	[ICP]

function Login(var username, password : string) : Boolean;

BOOL [cd_]Login([cdp_t cdp], const char * username, const char * password);

function [cd_]Login([cdp : cdp_t]; username, password : PChar) : Boolean;

Parametry

username	jméno uživatele
password	heslo přidělené uživateli
[cdp	kontextová proměnná klienta]

Popis

Funkce Login přihlašuje uživatele username ke komunikaci s databází.

V externích jazycích musí být funkce zavolána před prvním pokusem o komunikaci s databází, ale až po volání funkcí link_kernel a interf_init. Použití - viz kostra aplikace v externím jazyce

Ve vnitřním jazyce nemá funkce velký význam, neboť uživatel je již přihlášen při spouštění programu. Lze ji použít v případě, kdy je vhodné za běhu programu změnit uživatele.

Funkci Login používejte opatrně, protože v nezašifrovaném zdrojovém textu programu odhalujete heslo uživatele username. Proto je výhodnější používat interaktivní podobu Alogin.

Hodnota funkce

Funkce vrací FALSE při úspěchu (pokud se zdaří přihlášení pod novým jménem). Vrátí-li funkce TRUE, nové přihlášení bylo odmítnuto a zůstává přihlášen původní uživatel. Může k tomu dojít z těchto důvodů:

- neproběhlo úspěšné volání link_kernel nebo interf_init

- server nezná uvedené jméno uživatele

- heslo není správné

- na server je již připojen maximální možný počet uživatelů.

Příklad

if not Login("ADMIN","KAŠPAR") then ...

Viz

Logout, Alogin, Who_am_I


Funkce Logout
Logout	[ICP]

function Logout : Boolean;

BOOL [cd_]Logout([cdp_t cdp]);

function [cd_]Logout ([cdp : cdp_t]) : Boolean;

Parametry

[cdp	kontextová proměnná klienta]

Popis

Funkce Logout ukončuje komunikaci mezi aplikací a databází - odhlašuje uživatele. Po provedení Logout zůstává klient přihlášen jako Anonymní a komunikovat s databází lze pouze v případě přidělených práv tomuto uživateli (funkce Logout má stejný význam jako anonymní login).

Použití v externím jazyce- viz kostra aplikace v externím jazyce .

Pokud je funkce Logout provedena uvnitř transakce (což nelze doporučit), pak automaticky vyvolá operaci Commit. Takový případ je ohlášen varováním. Je-li Commit neúspěšný, bude neúspěšný také Logout.

Funkci Logout není nutno v běžných aplikacích ve vnitřním jazyce volat, protože vývojové nebo provozní prostředí WinBase602 provede odhlášení ve vhodnou dobu. Pro změnu jména přihlášeného uživatele stačí volat funkci Login, není třeba se odhlašovat.

Hodnota funkce

Pokud funkce vrátí FALSE, stane se přihlášeným uživatelem uživatel ANONYMOUS. Vrátí-li funkce TRUE, pak došlo k chybě.  Povahu chyby lze zjistit voláním funkce Signalize.

Viz

Login, Alogin, Who_am_I


Procedura Log_write
Log_write	[ICPS]

procedure Log_write (var text : string);

void Log_write(const char * text);

procedure Log_write (text : PChar);

Parametry

text	text, který se má zapsat do logu serveru
Od verze

5.1

Popis

Procedura vytvoří nový řádek s obsahem text v okně serveru a současně (je-li zapnuto logování) řádek souboru WBSQLLOG.TXT ve zvoleném adresáři

Příklad

cas := Trunc((t2-t1)/60000);

pomstr :="čas testu (minut): "+ Int2str(cas);

Log_write(pomstr);

Příklad SQL

CALL Log_write("OrderHeader "||"ol_cnt="||CAST(xol_cnt AS CHAR(10)));


Funkce Look_up
Look_up	[ICP]

function Look_up(curs : tcurstab; var attrname : string; var res : untyped) : trecnum;

trecnum [cd_]Look_up([cdp_t cdp], tcurstab curs, const char * attrname, void *res);

function [cd_]Look_up([cdp : cdp_t]; curs : tcurstab; attrname : Pchar; var res) : trecnum;

Parametry

curs	deklarovaná tabulka nebo otevřený kurzor  - viz podrobnosti
attrname	jméno sloupce
res	vstupní parametr - beztypová proměnná obsahující hodnotu, které se má sloupec attrname rovnat;
[cdp	kontextová proměnná klienta]

Popis

Funkce prohledá tabulku nebo kurzor curs a nalezne záznamy, v nichž se sloupec attrname rovná hodnotě res. Funkce vrátí absolutní číslo prvního záznamu, který této rovnosti vyhovuje. Neexistuje-li takový záznam nebo dojde k chybě, vrátí hodnotu -1.

V externích jazycích parametr res ukazuje resp. odkazuje na hledanou hodnotu zapsanou ve vnitřním formátu, tedy např. dvou- nebo čtyřbajtové celé  číslo, osmibajtové číslo v pohyblivé čárce, řetězec znaků ukončený nulou apod.

Hodnota funkce

Funkce vrátí absolutní číslo záznamu vyhovující dané rovnosti nebo -1 v jiném případě.

Příklad

Zjistěte, na jakou částku zní faktura č.4:

table

  Faktury;

var

  u : untyped;

  mo : money;

  zaznam : trecnum;

begin

  u := 4;

  zaznam := Look_up(faktury,"CISLO",u);

  if zaznam <>-1 then begin

    mo := faktury[zaznam].castka;

    Info_box("",Money2str(mo,0));

  end;

end.

Viz

C_Sum, C_Max C_Min, C_Count, C_Avg


Funkce MailBoxDeleteMsg
MailBoxDeleteMsg	[ICPS]

function MailBoxDeleteMsg(mailbox : integer; id : integer; delrec : boolean) : integer;

DWORD MailBoxDeleteMsg(DWORD mailbox, DWORD id, BOOL delrec);

function MailBoxDeleteMsg(mailbox : integer; id : integer; delrec : boolean) : integer;

Parametry

mailbox	handle poštovní schránky
id	identifikátor zásilky
delrec	má-li parametr hodnotu TRUE, smažou se také záznamy o zásilce a k ní připojených souborech v databázi

Od verze

6.0f

Popis

Smaže zásilku v poštovní schránce (v profilu zvoleného) poštovního systému. Pokud je jako pošta použit vzdálený nebo POP3 klient Mail602, odešle se zároveň žádost o vymazání zásilky na mateřském úřadě.

Hodnota funkce:

Funkce vrací nulu v případě úspěchu a  číslo chyby v případě neúspěchu. Číslo chyby lze zjistit pomocí Sz_error nebo Signalize.

Příklad

Příklad příjmu zásilky

Viz

MailOpenInBox, MailBoxLoad, MailBoxGetMsg, MailBoxGetFilInfo, MailBoxSaveFileAs, MailCloseInBox, MailGetInBoxInfo, MailGetType,


Funkce MailBoxGetFilInfo
MailBoxGetFilInfo	[ICPS]

function MailBoxGetFilInfo(mailbox : integer; id : integer) : integer;

DWORD MailBoxGetFilInfo(DWORD mailbox, DWORD id);

function MailBoxGetFilInfo(mailbox : integer; id : integer) : integer;

Parametry

mailbox	handle poštovní schránky
flag	identifikátor zásilky

Od verze

6.0f

Popis

Funkce přečte ze schránky (v profilu zvoleného) poštovního systému informace o souborech připojených k vybrané zásilce a uloží je do systémové tabulky _INBOXFILES.

Hodnota funkce

Funkce vrací nulu v případě úspěchu a  číslo chyby v případě neúspěchu. Číslo chyby lze zjistit pomocí Sz_error nebo Signalize.

Příklad

Příklad příjmu zásilky

Viz

MailOpenInBox, MailBoxLoad, MailBoxGetMsg, MailBoxSaveFileAs, MailBoxDeleteMsg, MailCloseInBox, MailGetInBoxInfo, MailGetType,


Funkce MailBoxGetMsg
MailBoxGetMsg	[ICPS]

function MailBoxGetMsg(mailbox : integer; id : integer): integer;

DWORD MailBoxGetMsg(DWORD mailbox, DWORD id);

function MailBoxGetMsg(mailbox : integer; id : integer): integer;

Parametry

mailbox	handle poštovní schránky
id	identifikátor zásilky

Od verze

6.0f

Popis

Funkce přečte ze schránky (v profilu zvoleného) poštovního systému text dopisu vybrané zásilky a uloží jej do systémové tabulky _INBOXMSGS do sloupce Body.

Hodnota funkce

Funkce vrací nulu v případě úspěchu a  číslo chyby v případě neúspěchu. Číslo chyby lze zjistit pomocí Sz_error nebo Signalize.

Příklad

Příklad příjmu zásilky

Viz

MailOpenInBox, MailBoxLoad, MailBoxGetFilInfo, MailBoxSaveFileAs, MailBoxDeleteMsg, MailCloseInBox, MailGetInBoxInfo, MailGetType,


Funkce MailBoxLoad
MailBoxLoad	[ICPS]

function MailBoxLoad(mailbox : integer; flag : integer) : integer;

DWORD MailBoxLoad(DWORD mailbox, UINT flag);

function MailBoxLoad(mailbox : integer; flag : integer) : integer;

Parametry

mailbox	handle poštovní schránky
flag	rozsah zápisu

Od verze

6.0f

Popis

Funkce přečte z poštovní schránky (v profilu zvoleného) poštovního systému seznam zásilek a zapíše jej do databáze. Údaje o zásilkách se zapisují do speciálních tabulek _INBOXMSGS a _INBOXFILES v systémové aplikaci.

Rozsah zápisu lze řídit pomocí parametru flag. Hodnota parametru může být součtem hodnot:

	0	Do databáze se uloží jen seznam zásilek
MBL_BODY	1	Do databáze se uloží také texty dopisů
MBL_FILES	2	Do databáze se uloží také informace o připojených souborech

Získat text dopisu nebo seznam připojených souborů může znamenat, podle použité pošty, stažení celé zásilky z Internetu nebo vzdáleného poštovního úřadu, což operaci načtení seznamu zásilek neúměrně prodlouží. Pokud se texty dopisů nezískají přímo touto funkcí, lze to provést později pro  jednotlivé zásilky funkcí MailBoxGetMsg. Informace o připojených souborech pro jednotlivé zásilky lze později získat pomocí funkce MailBoxGetFilInfo. Uložení připojeného souboru na disk provádí funkce MailBoxSaveFileAs.

Hodnota funkce

Funkce vrací nulu v případě úspěchu a  číslo chyby v případě neúspěchu. Číslo chyby lze zjistit pomocí Sz_error nebo Signalize.

Příklad

Příklad příjmu zásilky

Viz

MailOpenInBox, MailBoxGetMsg, MailBoxGetFilInfo, MailBoxSaveFileAs, MailBoxDeleteMsg, MailCloseInBox, MailGetInBoxInfo, MailGetType,


Funkce MailBoxSaveFileAs
MailBoxSaveFileAs	[ICPS]

function MailBoxSaveFileAs(mailbox : integer; id : integer; fileidx : integer; var filename : string; var destpath : string) : integer;

DWORD MailBoxSaveFileAs(DWORD mailbox, DWORD id, DWORD fileidx, char *filename, char *destpath);

function MailBoxSaveFileAs(mailbox : integer; id : integer; fileidx : integer; var filename : string;  var destpath : string) : integer;

Parametry

mailbox	handle poštovní schránky
id	identifikátor zásilky
fileidx	pořadové číslo souboru z přílohy (počínaje od 0), má význam pouze pokud není zadáno jméno souboru z přílohy
filename	jméno souboru z přílohy, je-li zadán parametr fileidx, má hodnotu NIL (NULL) nebo prázdný řetězec
destpath	cesta (včetně jména souboru), kam se má soubor z přílohy uložit

Od verze

6.0f

Popis

Uloží připojený soubor vybrané poštovní zásilky na disk.

Načtení souborů připojených k zásilce může být provedeno dvěma způsoby. Jednak lze pomocí funkcí MailBoxLoad a MailBoxGetFilInfo získat seznam připojených souborů a informace o nich (jméno, datum apod.) a na disk uložit pouze vybrané soubory. Pokud potřebujeme získat všechny soubory a na jejich jménech nezáleží, lze v funkci MailBoxSaveFileAs volat v cyklu s parametrem fileidx rovným 0 až počet připojených souborů–1. Jestliže počet připojených souborů není předem znám, lze funkci volat dokud nevrátí chybu MAIL_NO_MORE_FILES.

Adresář obsažený v parametru destpath musí existovat.

Příklad

Příklad příjmu zásilky

Hodnota funkce

Funkce vrací nulu v případě úspěchu a  číslo chyby v případě neúspěchu. Číslo chyby lze zjistit pomocí Sz_error nebo Signalize.

Viz

MailOpenInBox, MailBoxLoad, MailBoxGetMsg, MailBoxGetFilInfo, MailBoxDeleteMsg, MailCloseInBox, MailGetInBoxInfo, MailGetType,


Funkce MailCloseInBox
MailCloseInBox	[ICPS]

procedure MailCloseInBox(mailbox : integer);

void MailCloseInBox(DWORD mailbox);

procedure MailCloseInBox(mailbox : integer);

Parametry

mailbox	handle poštovní schránky

Od verze

6.0f

Popis

Zavře poštovní schránku (v profilu zvoleného) poštovního systému a uvolní prostředky potřebné pro příjem pošty.

Příklad

Příklad příjmu zásilky

Viz

MailOpenInBox, MailBoxLoad, MailBoxGetMsg, MailBoxGetFilInfo, MailBoxSaveFileAs, MailBoxDeleteMsg, MailGetInBoxInfo, MailGetType,


Funkce MailDial
MailDial	[ICPS]

function MailDial(var passw : string) : integer;

DWORD MailDial(char * passw);

function MailDial(passw : PCHAR) : integer;

Parametry

passw	heslo pro navázání telefonního spojení, pokud je heslo uloženo v profilu, může mít hodnotu NIL (NULL) nebo prázdný řetězec

Od verze

6.0f

Popis

Naváže telefonní spojení s poštovním serverem nebo mateřským poštovním úřadem - viz spolupráce s poštou.

Hodnota funkce

Funkce vrací nulu v případě úspěchu a  číslo chyby v případě neúspěchu. Číslo chyby lze zjistit pomocí Sz_error nebo Signalize.

Příklad:

...

mailtype = MailGetType();

 { if telefonni spojeni, vytocit }

if mailtype >= 262144 then MailDial(nil);

 { if vzdaleny klient, odeslat zasilky z fronty }

if (mailtype MOD 131072) >= 65536 then TakeMailToRemOffice;

 { Nacist seznam dosle posty }

MailBoxLoad(mailbox, 0);

...

 { if telefonni spojeni, zavesit }

if mailtype >= 262144 then MailHangUp();

...

Viz

MailHangUp,


Funkce MailGetInBoxInfo
MailGetInBoxInfo	[ICPS]

function MailGetInBoxInfo(mailbox : integer; var mtblname : string; var mtblnum : ttablenum; var ftblname : string; var ftblnum : ttablenum) : integer;

DWORD MailGetInBoxInfo(DWORD mailbox, char *mtblname,  ttablenum *mtblnum, char *ftblname, ttablenum *ftblnum);

function MailGetInBoxInfo(mailbox : integer; var mtblname : string; var mtblnum : ttablenum; var ftblname : string; var ftblnum : ttablenum) : integer;

Parametry

mailbox	handle poštovní schránky
mtblname	výstupní parametr, jméno tabulky pro informace o došlých zásilkách
mtblnum	výstupní parametr, číslo tabulky pro informace o došlých zásilkách
ftblname	výstupní parametr, jméno tabulky pro informace o připojených souborech
ftblnum	výstupní parametr, číslo tabulky pro informace o připojených souborech

Od verze

6.0f

Popis

Vrací informace o tabulkách použitých pro evidenci došlé pošty. Jméno tabulky vrací ve formátu: jméno_aplikace.jméno_tabulky, délka řetězce, do něhož se předává musí mít tedy min. délku 64.

V současné verzi jsou jména obou tabulek pevně dána (_SYSEXT._INBOXMSGS a _SYSEXT._INBOXFILES)

Hodnota funkce

Funkce vrací nulu v případě úspěchu a  číslo chyby v případě neúspěchu. Číslo chyby lze zjistit pomocí Sz_error nebo Signalize.

Viz

MailOpenInBox, MailBoxLoad, MailBoxGetMsg, MailBoxGetFilInfo, MailBoxSaveFileAs, MailBoxDeleteMsg, MailCloseInBox, MailGetType,


Funkce MailGetType
MailGetType	[ICPS]

function MailGetType : integer;

DWORD MailGetType();

function MailGetType : integer;

Od verze

6.0f

Popis:

Vrací typ použité elektronické pošty, pokud pošta nebyla ještě inicializována, vrací 0. Výsledek může být logickým součtem těchto hodnot:

WBMT_602	0x00000001	1	systém Mail602
WBMT_MAPI	0x00000002	2	systém rozhraní MAPI
WBMT_SMTPOP3	0x00000004	4	WinBase602 komunikuje s poštovním serverem přímo pomocí protokolu SMTP a POP3
WBMT_602REM	0x00010000	65536	Vzdálený klient Mail602
WBMT_602SP3	0x00020000	131072	POP3 klient Mail602
WBMT_DIALUP	0x00040000	262144	Pro přístup k poště je třeba navázat telefonní spojení

Příklad

...

mailtype = MailGetType;

 { if telefonni spojeni, vytocit }

if mailtype >= 262144 then MailDial(nil);

Viz

MailDial, MailHangUp, MailGetInBoxInfo,


Funkce MailHangUp
MailHangUp	[ICPS]

function MailHangUp : integer;

DWORD MailHangUp();

function MailHangUp : integer;

Od verze

6.0f

Popis

Ukončí telefonní spojení s poštovním serverem nebo mateřským poštovním úřadem - viz spolupráce s poštou.

Hodnota funkce:

Funkce vrací nulu v případě úspěchu a  číslo chyby v případě neúspěchu. Číslo chyby lze zjistit pomocí Sz_error nebo Signalize.

Viz

MailDial,


Funkce MailOpenInBox
MailOpenInBox	[ICPS]

function MailOpenInBox(var lpmailbox : integer) : integer;

DWORD MailOpenInBox(DWORD *lpmailbox);

function MailOpenInBox(var lpmailbox : integer) : integer;

Parametry

lpmailbox	výstupní parametr, handle poštovní schránky

Od verze

6.0f

Popis:

Otevře poštovní schránku (v profilu zvoleného) poštovního systému a do výstupního parametru lpmailbox předá handle této schránky, který bude vstupním parametrem ostatních funkcí pracujících se schránkou.

V jednom okamžiku může s poštovní schránkou pracovat pouze jedno vlákno. Pokus o přístup k otevřené schránce z jiného vlákna skončí chybou č. 520 (MAIL_BOX_LOCKED).

Hodnota funkce:

Funkce vrací nulu v případě úspěchu a  číslo chyby v případě neúspěchu. Číslo chyby lze zjistit pomocí Sz_error nebo Signalize.

Příklad

Příklad příjmu zásilky

Viz

MailBoxLoad, MailBoxGetMsg, MailBoxGetFilInfo, MailBoxSaveFileAs, MailBoxDeleteMsg, MailCloseInBox, MailGetInBoxInfo, MailGetType,


Funkce Main_menu
Main_menu	[ICP]

function Main_menu(var menudef : string) : Boolean;

BOOL Main_menu(const char *menudef);

function Main_menu(menudef : PChar) : Boolean;

Parametry

menudef	specifikace menu nebo prázdný řetězec nebo NIL resp. NULL

Popis

Pokud parametr menudef specifikuje uživatelské menu, pak funkce přiřadí hlavnímu oknu WinBase602 menu zadané tímto parametrem. Pokud hlavní okno mělo předtím jiné menu, je odstraněno.

Parametr menudef může specifikovat menu trojím způsobem:

- pokud začíná hvězdičkou, pak za ní následuje jméno, pod nímž je definice menu uložena v databázi;

- pokud začíná znakem plus, pak za ním následuje označení textového souboru, který obsahuje definici menu;

- jinak přímo parametr menudef obsahuje definici menu

Pokud je parametr menudef roven prázdnému řetězci znaků, pak funkce pouze znova vykreslí existující menu hlavního okna. Přitom se některé položky mohou v souladu s podmínkami své aktivity vypsat šedě. Pokud je parametr menudef roven NULL (resp. NIL), pak funkce odstraní uživatelské menu hlavního okna WinBase602. Jste-li ve vývojovém prostředí a neběží-li aplikační program, pak se oknu vrátí jeho původní vývojové menu.

Hodnota funkce

Funkce vrací TRUE, pokud se menu podařilo vytvořit a přiřadit oknu, jinak vrací FALSE. Příčinou chyby je nejčastěji závada v definici menu.

Příklad

if not Main_menu('*Hlavni_mnu') then Halt;


Funkce Make_date
Make_date	[ICPS]

function Make_date(day, month, year : integer) : date;

uns32 Make_date(int day, int month, int year);

function Make_date(day, month, year : integer) : uns32;

Parametry

day	den v měsíci (1 až 31)
měsíc	měsíc (1 až 12)
year	rok (nula a více)

Popis

Funkce Make_date vytváří datum ze 3 složek: dne, měsíce a roku. Datum musí patřit do našeho letopočtu.

Hodnota funkce

Funkce vrací vytvořené datum. Nelze-li datum vytvořit (např. 31.2.1994), vrátí NONEDATE.

Příklad

vytvořit zítřejší datum:

dt : date;

begin

  Make_date(Day(Today)+1,Month(Today),Year(Today))

  Info_box("zítra bude ",date2str(dt,1))

end.

Viz

Day, Month, Year, Today, Make_time, Hours, Minutes, Seconds, Sec1000, Now. Day_of_week


Funkce Make_directory
Make_directory	[I..]

function Make_directory(dirname : string) : Boolean;

Parametry

dirname	jméno adresáře i s cestou podle konvencí DOSu

Popis

Funkce vytvoří adresář podle parametru dirname. Existuje-li již adresář stejného jména, nestane se nic a funkce skončí chybou.

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se adresář podařilo úspěšně vytvořit. V opačném případě vrací TRUE.

Příklad

Make_directory("C:\WB602\OUTPUT");

Viz

Delete_file


Funkce Make_time
Make_time	[ICPS]

function Make_time(hours, minutes, seconds, sec1000 : integer) : time;

uns32 Make_time(int hours, int minutes, int seconds, int sec1000);

function Make_time(hours, minutes, seconds, sec1000 : integer) uns32;

Parametry

hours	počet hodin
minutes	počet minut
seconds	počet sekund
sec1000	počet tisícin sekundy

Popis

Funkce Make_time vytváří údaj o čase ze 4 složek: hodin, minut, sekund a setin sekundy. Povolený rozsah pro hodiny je 0 až 23, pro minuty a sekundy 0 až 59, pro tisíciny 0 až 999.

Hodnota funkce

Funkce vrací vytvořený údaj o čase ve vnitřním formátu WinBase602.

Příklad

function Kontrola : Boolean;

{**************************************************}

{porovná dva časové údaje}

begin

  Kontrola := True;

  t1 := Make_time(am1=0 ? h1 : h1+12, m1, 0,0);

  t2 := Make_time(am2=0 ? h2 : h2+12, m2, 0,0);

  if t2 <= t1 then begin

    Info_box("Nelze","Čas OD je menší (roven) času DO");

    Kontrola := False;

  end

end;

Viz

Make_date, Day, Month, Year, Today, Hours, Minutes, Seconds, Sec1000, Now.


Procedura Memcpy
Memcpy	[I..]

procedure Memcpy(var destination; var source; size : short);

Parametry

destination	proměnná, do níž se kopíruje
source	proměnná, z níž se kopíruje
size	počet přenášených bajtů

Popis

Procedura Memcpy slouží pro přenos (kopírování) dat bez ohledu na jejich typy. Přenáší se počet bajtů zadaný parametrem size z proměnné source do proměnné destination. Je-li tento počet větší, než je velikost první proměnné, může snadno dojít ke zhroucení systému. Je-li tento počet větší, než je velikost druhé proměnné, není definováno, co se přenese. Obě proměnné mohou být libovolného typu, nesmí to být databázové sloupce.

Tato procedura dovoluje obcházet typové kontroly jazyka. Je to její hlavní účel.

Příklad Přečtení identifikace uživatele z tabulky USERTAB

type

  user = record

   n1 : string[16];

   n2 : string[2];

   n3 : string[20];

   id : string[80];

  end;

var

  r : trecnum;

  my_name : string[31];

  userobjnum : tobjnum;

  user1 : binary[122];

  user2 : user;

begin

  r:=Insert(`žádanky o dovolenou`);

    if r=-1 then begin Signalize;halt;end;

    with `Žádanky o dovolenou`[r] do begin

      my_name:=Who_am_I;

      if Find_object(my_name, CATEG_USER, userobjnum) then Signalize;

      user1 := USERTAB[userobjnum].identif;   // přečtení z tabulky USERTAB

      Memcpy(user2,user1,122);                // zkopírování do struktury user

      jméno        := user2.n1;               // přečtení ze struktury user

      `druhé jméno`:= user2.n2;

      příjmení     := user2.n3;


Funkce Message_to_clients
Message_to_clients	[ICP]

function Message_to_clients (var msg : string) : Boolean;

BOOL [cd_]Message_to_clients ([cdp_t cdp,] const char * msg);

function [cd_]Message_to_clients ([cdp : cdp_t;] msg : PChar) : Boolean;

Parametry

msg	text zprávy
[cdp	kontextová proměnná klienta]
Od verze

6.0

Popis

Funkce umožní rozeslat krátkou textovou zprávu všem síťovým klientům připojeným ke stejnému serveru (bez ohledu na otevřenou aplikaci) jako klient, který funkci zavolal.

Hodnota funkce

Funkce vrací TRUE při chybě.

Příklad:

  zprava := "Odhlašte se, prosím...";

  if Message_to_clients(zprava) then Info_box("Chyba","Message...");


Funkce Minutes
Minutes	[ICPS]

function Minutes(tm : time) : integer;

int Minutes(uns32 tm);

function Minutes(tm : uns32) : integer;

Parametry

tm	Údaj o čase ve vnitřním formátu WinBase602

Popis

Funkce Minutes extrahuje počet minut z časového údaje.

Hodnota funkce

Funkce vrací počet minut z intervalu 0 až 59.

Viz

Make_date, Day, Month, Year, Today, Make_time, Hours, Seconds, Sec1000, Now.


Funkce money2real
money2real	[.CP]

double money2real(monstr *m);

function money2real(var m : monstr) : double;

Parametry

m	hodnota, která se má konvertovat

Popis

Funkce money2real konvertuje hodnotu typu money ve struktuře m na reálné číslo.

Hodnota funkce

Funkce vrací reálné číslo, které je výsledkem konverze hodnotu typu money ve struktuře m.

Viz

real2money


Funkce Money2str
Money2str	[I..S]

function Money2str(m : money; prez : short) : string;

Parametry

m	hodnota, která se má konvertovat
prez	způsob konverze

Popis

Funkce Money2str převede hodnotu zadanou prvním parametrem na řetězec znaků a vrátí jej. Při konverzi se použije hodnota parametru  prez takto:

Hodnota	Význam
0	desetinná část bude oddělena čárkou a je-li nulová, bude nahrazena pomlčkou (např. 89,30 nebo 123,-)
1	desetinná část bude obsahovat dvě cifry oddělené od celé části tečkou (např. 89.30 nebo 123.00)
2	budou použity Windows separátory, a to jak oddělovač desetinných míst, tak oddělovač skupin číslic (např. tisíců)
Parametr prez má tedy stejný význam, jako parametr Zobrazení v popisu složky pohledu.

Hodnota funkce

Funkce vrací řetězec znaků, který je desítkovým zápisem čísla m.

Příklad

ss := Money2str(Plat,1);

Viz

Int2str, Str2int, Real2str, Str2real, Str2money, Str2date, Str2time, Time2str, Str2time


Funkce Month
Month	[ICPS]

function Month(dt : date) : integer;

int Month(uns32 dt);

function Month(dt : uns32) : integer;

Parametry

dt	datum ve vnitřním formátu WinBase602

Popis

Funkce Month extrahuje měsíc z data.

Hodnota funkce

Funkce vrací číslo označující měsíc, toto číslo leží v intervalu 1 až 12.

Příklad

dty := Year(dt);

if (dty < 100) and (dty > 9) then dt := Make_date(Day(dt), Month(dt), dty+1900)

Viz

Make_date, Day, Year, Today, Make_time, Hours, Minutes, Seconds, Sec1000, Now.


Funkce Move_data
Move_data	[ICP]

function Move_data(move_descr_obj : tobjnum; var inpname : string;  inpobj : tobjnum;  var outname : string; inpformat, outformat, inpcode, outcode: Integer;  silent : Boolean) : Boolean;

BOOL Move_data(cdp_t cdp, tobjnum move_descr_obj, const char * inpname, tobjnum inpobj, const char * outname, int inpformat, int outformat, int inpcode, int outcode, BOOL silent);

function Move_data(cdp : cdp_t;  move_descr_obj : tobjnum; inpname : PChar;  inpobj : tobjnum;  outname : PChar; inpformat, outformat, inpcode, outcode: Integer;  silent : Boolean) : Boolean;

Parametry

move_descr_obj	implicitní návrh přenosu
inpname	jméno vstupního souboru, tabulky nebo dotazu
inpobj	číslo otevřeného kurzoru nebo objektu ve WinBase602
outname	jméno výstupního souboru, tabulky nebo dotazu
inpformat	vstupní formát dat
outformat	výstupní formát dat
inpcode	kódování češtiny ve vstupním souboru
outcode	kódování češtiny ve výstupním souboru
silent	určení, zda se mají generovat chybová hlášení na obrazovku.
cdp	kontextová proměnná klienta

Od verze:

5.0

Popis

Funkce Move_data provádí přenos dat. Lze jí nahradit všechny předchozí funkce pro exporty a importy dat.

Pokud move_descr_obj  je -1, pak se vytvoří implicitní návrh přenosu na základě ostatních parametrů, jinak se přečte návrh přenosu z databáze a pozmění se podle hodnot ostatních parametrů. Číslo popisu lze získat funkcí Find_object.

Zdroj a cíl dat jsou popsány svým formátem (inpformat, outformat), a podle svého formátu (v parametrech inpname, outname) také jménem souboru (např. FAKTURY.DBF, PENALE.CSV apod. ) nebo jménem tabulky či dotazu, případně číslem otevřeného kurzoru nebo objektu ve WinBase602 (inpobj). Kódováním češtiny ve vstupním a výstupním souboru se zadá v parametrech inpcode a outcode. Data uložená v databázi mají vždy kód 0. Pokud některý parametr nechcete zadat, uveďte pro číselný parametr hodnotu -1, pro řetězcový parametr prázdný řetězec.

Parametr silent říká, zda se mají generovat chybová hlášení na obrazovku, včetně varování při přepsání již existujícího souboru.

Soubor, z něhož se mají číst (nebo do něhož se mají zapisovat) data nesmí být otevřen (např. funkcí Reset).

Je-li tato funkce zavolána uvnitř transakce, bude tato transakce ukončena. Efekt funkce nelze odvolat pomocí Roll_back.

Přenos dat lze nastavovat i ručně pomocí návrháře přenosů. Okno návrháře se otevře funkcí Edit_impexp.

Formát se zadává těmito konstantami:

IMPEXP_FORMAT_WINBASE	0	soubor ve vnitřním formátu WinBase602 (TDT)
IMPEXP_FORMAT_TEXT_COLUMNS	1	textový soubor ve sloupcovém formátu
IMPEXP_FORMAT_TEXT_CSV	2	textový soubor ve formátu CSV
IMPEXP_FORMAT_DBASE	3	soubor ve formátu dBase IV (DBF)
IMPEXP_FORMAT_FOXPRO	4	soubor ve formátu FoxPro 2.0 (DBF)
IMPEXP_FORMAT_ODBC	5	tabulka připojena přes ODBC
IMPEXP_FORMAT_CURSOR	6	pevný kurzor ve WinBase602 (pouze pro vstup)
IMPEXP_FORMAT_TABLE	10	tabulka ve WinBase602 (pro vstup také proměnný kurzor)
IMPEXP_FORMAT_TABLE_REIND	11	tabulka ve WinBase602, indexy se mění až po přenosu
Při exportu z proměnného kurzoru (10) lze použít pouze vnitřní formát WinBase (0). Pro export z proměnného kurzoru do jiného formátu použijte obrat uvedený v příkladech.

Při importu z vnitřního formátu (0) nelze vytvořit novou tabulku (10 nebo 11).

Kódování češtiny se zadává těmito konstantami:

0	EE Win, kódová stránka 1250 , vnitřní čeština Windows
1	kód Kamenických, KEYBCS2;
2	kód KOI8-CS;
3	kód LATIN 2 použitý v Text602;
4	kódová stránka 852 z MS DOSu 5.0, LATIN 2;
5	kód Windows ANSI.

Hodnota funkce

Funkce vrací FALSE při chybě.

Příklad 1

import z DBF souboru:

ss := "D:\DBFS\*.DBF";

if Select_file(0,ss) then

  Move_data(-1,ss,-1,'FAKT',4,10,4,0,false);

Příklad 2

export dat z proměnného dotazu do souboru ve vnitřním formátu:

Open_sql_cursor(cc, "select * from TAB1 where...");

if not Move_data(-1,"",cc,"c:\dotaz.tdt",10,0,0,0,false) then Signalize;

Příklad 3

export dat z proměnného dotazu do souboru v DBF:

str := "select * from TAB1 where...";

Open_sql_cursor(cc, str);

if Find_object("POMDOTAZ",CATEG_CURSOR,pomdotnum) then

  Insert_object("POMDOTAZ",CATEG_CURSOR,pomdotnum);

OBJTAB[pomdotnum].defin[0,StrLength(str)] := str;

OBJTAB[pomdotnum].defin# := StrLength(str);

if not Move_data(-1,"POMDOTAZ",-1,"c:\dotaz.dbf",6,4,0,0,false) then Signalize;

Příklad 4

export s připraveným přenosem:

if Find_object("EXP_DBF",CATEG_PGMSRC,prennum) then Signalize

else

  if not Move_data(prennum,"",-1,"",-1,-1,-1,-1,true) then Signalize;

Viz

Data_export, Data_import, Edit_impexp


Funkce Next_user_name
Next_user_name	[ICP]

function Next_user_name(hView : window_id; erec : trecnum) : string;

char * Next_user_name(cdp_t cdp, window_id hView, trecnum erec);

function Next_user_name(cdp : cdp_t; hView : window_id; erec : trecnum) : PChar;

Parametry

hView	formulář s kolujícími dokumenty
erec	externím číslo záznamu
cdp	kontextová proměnná klienta

Od verze:

5.0

Popis

Funkce Next_user_name slouží k zjištění údajů o uživateli, na nějž čeká dokument v pohledu hView v záznamu s externím číslem erec.

Hodnota funkce

Funkce Next_user_name vrací údaje (plná jména a identifikaci) o uživateli, na nějž čeká dokument. Pokud žádné údaje o tomto uživateli nejsou zadány, vrací se "??". Pokud dokument nečeká na žádného uživatele, vrací se "-".

Viz

GetSet_next_user, Waits_for_me


Funkce New
New	[I..]

procedure New(ukazatel);

Parametry

ukazatel	libovolná proměnná typu ukazatel

Od verze:

5.0

Popis

Procedura  New dynamicky alokuje objekt zadaného typu.

Příklad

type

  prec = ^rec;

  rec = record

    i : short;

    j : string[10];

    pr : prec;

  end;

var

 z : prec;

begin

  New(z);

Viz

Dispose, Addr


Funkce Now
Now	[ICPS]

function Now : time;

uns32 Now(void);

function Now : uns32;

Popis

Funkce Now je funkce bez parametrů, která udává okamžitý čas ve vnitřním formátu WinBase602.

Hodnota funkce

Funkce vrátí čas s přesností na sekundy, který získá dotazem u operačního systému počítače.

Viz

Make_date, Day, Month, Year, Today, Make_time, Hours, Minutes, Seconds, Sec1000.


Funkce ODBC_create_connection
ODBC_create_connection	[ICP]

function ODBC_create_connection(var dsn_name : string) : integer;

uns32 [cd_]ODBC_create_connection([cdp_t cdp], const char * dsn_name);

function [cd_]ODBC_create_connection([cdp : cdp_t]; dsn_name : PChar) : uns32;

Parametry

dsn_name	jméno zdroje dat
[cdp	kontextová proměnná klienta]

Popis

Funkcí lze získat číslo napojení na zdroj dat, které je potřebné pro otevření kurzoru pomocí funkce ODBC_open_cursor.

Funkce ODBC_create_connection vytvoří spojení na ODBC zdroj dat, který NENÍ připojen do aplikace (pomocí Řídicího panelu). Přitom případně konverzuje z uživatelem o jeho jménu, heslu a parametrech spojení.

Vstupní parametr dsn_name udává jméno zdroje dat. Musí se uvést přesně v té podobě, v níž se vyskytuje ve výčtech zdrojů dat v Ovládacích panelech Windows.

Práce s ODBC zdroji dat v programu - viz podrobnosti.

Hodnota funkce

Funkce vrací číslo spojení na zdroj dat při úspěchu a nulu při chybě.

Viz

ODBC_open_cursor, ODBC_find_connection, ODBC_direct_connection


Funkce ODBC_direct_connection
ODBC_direct_connection	[ICP]

function ODBC_direct_connection(var conn_string : string) : integer;

uns32 [cd_]ODBC_create_connection([cdp_t cdp], const char * conn_string);

function [cd_]ODBC_create_connection([cdp : cdp_t]; conn_string: PChar) : uns32;

Parametry

conn_string	parametry napojení na zdroj dat
[cdp	kontextová proměnná klienta]

Popis

Funkcí lze získat číslo napojení na zdroj dat, které je potřebné pro otevření kurzoru pomocí funkce ODBC_open_cursor.

Funkce ODBC_direct_connection vytvoří spojení na ODBC zdroj dat, který NENÍ připojen do aplikace (pomocí Řídicího panelu), a umožní zadat všechny parametry spojení v řetězci conn_string ve formátu určeném zdrojem dat (liší se zdroj od zdroje - nápovědu hledejte u dodavatele zdroje dat). Pokud tyto parametry neznáte, použijte obdobnou funkci ODBC_create_connection, která se na potřebné parametry zeptá, nebo vytvořte ODBC spojení pomocí Řídicího panelu klienta a použijte funkci ODBC_find_connection.

Práce s ODBC zdroji dat v programu - viz podrobnosti.

Hodnota funkce

Funkce vrací číslo spojení na zdroj dat při úspěchu a nulu při chybě.

Viz

ODBC_open_cursor, ODBC_create_connection, ODBC_find_connection


Funkce ODBC_find_connection
ODBC_find_connection	[ICP]

function ODBC_find_connection(var dsn_name : string) : integer;

uns32 [cd_]ODBC_find_connection([cdp_t cdp], const char *dsn_name);

function [cd_]ODBC_find_connection([cdp : cdp_t]; dsn_name : PChar) : uns32;

Parametry

dsn_name	jméno zdroje dat
[cdp	kontextová proměnná klienta]

Popis

Funkcí lze získat číslo napojení na zdroj dat, které je potřebné pro otevření kurzoru pomocí funkce ODBC_open_cursor.

Funkce se použije k získání čísla ODBC zdroje dat, který je již připojen do aplikace pomocí Řídicího panelu klienta. Vstupní parametr dsn_name udává jméno zdroje dat. Musí se uvést přesně v té podobě, v níž se vyskytuje na Řídicím panelu v seznamu ODBC spojení.

Práce s ODBC zdroji dat v programu - viz podrobnosti.

Hodnota funkce

Funkce vrací číslo spojení na zdroj dat při úspěchu a nulu při chybě.

Příklad:

Programově přenést obsah DBF tabulky připojené přes ODBC do pomocné tabulky ve WinBase:

var

  c_odbc : cursor;

  conn, rec, pocet  : integer;

  i : integer;

  odbc_jmeno : string[200];

  odbc_date : date;

  odbc_cislo : integer;

begin

  conn:= ODBC_find_connection('dBASE Files');

  if conn=0 then halt;

  if ODBC_open_cursor(conn, c_odbc, 'SELECT jmeno,datum_pr,cislo FROM ADRESY2') then halt;

  rec_cnt(c_odbc,pocet);

  //info_box('Počet záznamů', int2str(pocet));

  for i := 0 to pocet-1 do begin

    odbc_jmeno := c_odbc[i].jmeno;

    odbc_date := c_odbc[i].datum_pr;

    odbc_cislo := c_odbc[i].cislo;

    rec := Insert(PomTab);

    PomTab[rec].jmeno := odbc_jmeno;

    PomTab[rec].datum := odbc_date;

    PomTab[rec].cislo := odbc_cislo;

  end;

  close_cursor(c_odbc);

end.

Viz

ODBC_open_cursor, ODBC_create_connection, ODBC_direct_connection


Funkce ODBC_open_cursor
ODBC_open_cursor	[ICP]

function ODBC_open_cursor(connection : integer;  var curs : cursor;  var query : string) : Boolean;

BOOL [cd_]ODBC_open_cursor([cdp_t cdp], uns32 connection, tcursnum *curs, const char * query);

function [cd_]ODBC_open_cursor([cdp : cdp_t]; connection : uns32;  var curs : tcursnum;  query : PChar) : Boolean;

Parametry

connection	číslo spojení na zdroj dat
curs	výst. parametr - číslo otevřeného ODBC kurzoru - viz podrobnosti
query	zápis příkazu SELECT
[cdp	kontextová proměnná klienta]

Popis

Funkce dostane v parametru connection číslo spojení na ODBC zdroj dat a v parametru query zápis příkazu SELECT jazyka SQL. V parametru curs vrátí číslo otevřeného ODBC kurzoru.

S ODBC kurzorem se pracuje stejně jako s běžným kurzorem s některými omezeními.

ODBC kurzor se zavírá funkcí Close_cursor. Při skončení běhu programu ve vnitřním jazyce se zavřou všechny neuzavřené ODBC kurzory.

Práce s ODBC zdroji dat v programu - viz podrobnosti.

Hodnota funkce

Funkce při úspěchu vrací FALSE, při chybě TRUE.

Příklad:

Programově přenést obsah DBF tabulky připojené přes ODBC do pomocné tabulky ve WinBase:

var

  c_odbc : cursor;

  conn, rec, pocet  : integer;

  i : integer;

  odbc_jmeno : string[200];

  odbc_date : date;

  odbc_cislo : integer;

begin

  conn:= ODBC_find_connection('dBASE Files');

  if conn=0 then halt;

  if ODBC_open_cursor(conn, c_odbc, 'SELECT jmeno,datum_pr,cislo FROM ADRESY2') then halt;

  rec_cnt(c_odbc,pocet);

  //info_box('Počet záznamů', int2str(pocet));

  for i := 0 to pocet-1 do begin

    odbc_jmeno := c_odbc[i].jmeno;

    odbc_date := c_odbc[i].datum_pr;

    odbc_cislo := c_odbc[i].cislo;

    rec := Insert(PomTab);

    PomTab[rec].jmeno := odbc_jmeno;

    PomTab[rec].datum := odbc_date;

    PomTab[rec].cislo := odbc_cislo;

  end;

  close_cursor(c_odbc);

end.

Viz

ODBC_find_connection, ODBC_create_connection, ODBC_direct_connection


Funkce Odd
Odd	[I..S]

function Odd(i : integer) : Boolean;

Parametry

i	celé číslo

Popis

Funkce Odd zjišťuje, zda číslo je sudé nebo liché.

Hodnota funkce

Funkce má hodnotu TRUE, pokud je její parametr lichý, nebo FALSE, pokud je parametr sudý.


Funkce Open_cursor (ext.)
Open_cursor	[.CP]

BOOL [cd_]Open_cursor([cdp_t cdp], tobjnum cursdef, tcursnum * curs);

function [cd_]Open_cursor([cdp : cdp_t]; cursdef : tobjnum; var curs : tcursnum) : Boolean;

Parametry

cursdef	číslo definice kurzoru uložené v databázi;
curs	výstupní parametr: číslo otevřeného kurzoru - viz podrobnosti
[cdp	kontextová proměnná klienta]

Popis

Funkce otevírá kurzor definovaný v aplikaci (pevný dotaz). V parametru curs vrací číslo otevřeného kurzoru.

Umožní čtení a zápis dat prostřednictvím tohoto kurzoru

Proměnný kurzor se v externích jazycích otevírá pomocí funkce Open_cursor_direct.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE. K neúspěchu může dojít, pokud je v definici kurzoru cursdef chyba. Příčinu chyby lze zjistit např. pomocí Signalize. Doporučujeme vždy testovat výsledek této funkce.

Viz

Open_cursor_direct, Open_sql_cursor, Close_cursor, Restrict_cursor, Restore_cursor.


Funkce Open_cursor (int.)
Open_cursor	[I..]

function Open_cursor(var curs : cursor) : Boolean;

Parametry

curs	pevný kurzor uložený v databázi a deklarovaný v programu (nikoli proměnná typu kurzor) - viz podrobnosti

Popis

Funkce Open_cursor otevírá zadaný pevný kurzor, deklarovaný v programu. Umožní čtení, zápis dat prostřednictvím tohoto kurzoru.

Není-li kurzor po použití uzavřen, zabírá místo v operační paměti. Po ukončení běhu programu jsou všechny explicitně neuzavřené kurzory uzavřeny, předtím je však vydána hláška Program neuzavřel všechny kurzory.

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize. Doporučujeme vždy testovat výsledek této funkce.

Příklad

cursor

  Dop_doklad;

...

if Open_cursor(Dop_doklad) then Signalize

else begin

 if Restrict_cursor(Dop_doklad,podm) then Signalize

 else begin

   if Print_opt(0) then Print_view('*dop_typ',Dop_doklad,-1,-1);

   Restore_cursor(Dop_doklad);

 Close_cursor(Dop_doklad);

end;

Viz

Open_sql_cursor, Open_sql_parts, Close_cursor, Rec_cnt, Restrict_cursor, Restore_cursor.


Funkce Open_cursor_direct
Open_cursor_direct	[.CP]

BOOL [cd_]Open_cursor_direct([cdp_t cdp], const char * query, tcursnum * curs);

function [cd_]Open_cursor_direct([cdp : cdp_t]; query : PChar; var curs : tcursnum) : Boolean;

Parametry

query	dotazový výraz SELECT v jazyce SQL
curs	vrácená hodnota: číslo otevřeného kurzoru - viz podrobnosti
[cdp	kontextová proměnná klienta]

Popis

Funkce otevře kurzor za základě jeho definice uvedené v parametru query.

Ve vnitřním jazyce této funkci odpovídá funkce Open_sql_cursor.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE. Příčinu chyby lze zjistit pomocí Signalize. Doporučujeme vždy testovat výsledek této funkce.

Viz

Open_cursor, Close_cursor, Rec_cnt, Open_sql_cursor


Funkce Open_project
Open_project	[.CP]

BOOL Open_project(const char *projname);

function Open_project(projname : PChar) : Boolean;

Parametry

projname	jméno programu ve vnitřním jazyce

Popis

Funkce Open_project nastaví projekt zadaný parametrem projname. Tím umožní formulářům a menu využívat vše, co je deklarováno v projektu.

Program ve vnitřním jazyce tuto funkci nepotřebuje, protože sám je po dobu svého běhu projektem.

Hodnota funkce

Funkce vrací TRUE, pokud se projekt podařilo najít a nastavit, jinak vrací FALSE. Příčinou chyby může být syntaktická chyba v programu, který se má stát projektem.

Viz

Get_var_address


Funkce Open_sql_cursor
Open_sql_cursor	[I..]

function Open_sql_cursor(var curs : cursor; var query : string) : Boolean;

Parametry

curs	proměnná typu kurzor (neboli proměnný kurzor) - viz podrobnosti
query	dotazový výraz SELECT v jazyce SQL

Popis

Funkce otevře proměnný kurzor, který je odpovědí na zadaný dotaz query v jazyce SQL. Dotaz se zadá v souladu se syntaxí dotazového výrazu SELECT.

V externích jazycích slouží ke stejnému účelu funkce Open_cursor_direct.

Není-li kurzor po použití uzavřen, zabírá místo v operační paměti. Po ukončení běhu programu jsou všechny explicitně neuzavřené kurzory uzavřeny, předtím je však vydána hláška Program neuzavřel všechny kurzory.

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize. Nejběžnější příčinou chyby je nesprávná syntaxe dotazu. Doporučujeme vždy testovat výsledek této funkce.

Příklad 1

zjistit počet nesmazaných záznamů v tabulce TAB1

if not Open_sql_cursor(cur,"select * from TAB1") then

 Rec_cnt(cur, pom);

Příklad 2

kod := "00-10";

podm := "SELECT * FROM Knihy WHERE (vyrazena = false) AND (kod="""+kod+""")";

if Open_sql_cursor(cur,podm) then Exit;

Viz

Open_cursor, Open_sql_parts, Close_cursor, Rec_cnt, Restrict_cursor, Restore_cursor, Open_cursor_direct.


Funkce Open_sql_parts
Open_sql_parts	[I..]

function Open_sql_parts(var curs : cursor; var select, from, where, order : string) : Boolean;

Parametry

curs	proměnná typu kurzor (neboli proměnný kurzor) - viz podrobnosti
select	první část dotazu v jazyce SQL: obsah klauzule SELECT
from	druhá část dotazu v jazyce SQL: obsah klauzule FROM
where	třetí část dotazu v jazyce SQL: obsah klauzule WHERE
order	čtvrtá část dotazu v jazyce SQL: obsah klauzule ORDER BY

Popis

Zastaralá funkce, nahrazená obecnější funkcí Open_sql_cursor.

Funkce otevře proměnný kurzor, který je odpovědí na zadaný dotaz query v jazyce SQL. Dotaz se zadá po částech - každá ve zvláštním řetězci o délce max. 255 znaků. Funkce přidá před jednotlivé části slova "SELECT", "FROM", "WHERE" a "ORDER BY" a zřetězí je za sebou. Tím získá kompletní dotaz a pak pracuje stejně jako funkce Open_sql_cursor. Parametry where a order mohou být prázdné řetězce.

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize. Nejběžnější příčinou chyby je nesprávná syntaxe dotazu nebo to, že kurzor je již otevřen. Doporučujeme vždy testovat výsledek této funkce.

Příklad:

    ...

    else if msg=MSG_INT_JE then begin

{ do proměnných start a stop je zadán interval dat pro zobrazení záznamů }

      dolní:='(datum>='+ start + ')';

      horní:='(datum<='+ stop + ')');

      podmínka:='';

      if start<>'' then podmínka:=dolní;

      if stop <>'' then

        if podmínka='' then podmínka:=horní

        else

        begin { vytvoření podmínky pro definici kurzoru}

          podmínka:=dolni + 'AND' + horní;

        end;

      if podmínka<>"" then

      begin {otevření proměnného kurzoru sql_curs}

        if not Open_sql_parts(sql_curs, "*", "tpeníze", podmínka, "datum") then

        begin {otevření pohledu do kurzoru sql_parts}

          Open_view("*ppřehled", sql_curs, AUTO_CURSOR+NO_INSERT+NO_EDIT+NO_DELETE, 0, 0, id_přehled)

        end

        else info_box("Chyba", "Špatně zadáno datum!");

      end

    end

Viz

Open_cursor, Open_sql_cursor, Close_cursor, Rec_cnt, Restrict_cursor, Restore_cursor.


Funkce Open_subcursor
Open_subcursor	[.CP]

BOOL [cd_]Open_subcursor([cdp_t cdp], tcursnum supercurs,  const char * subcurdef, tcursnum * subcurs);

function [cd_]Open_subcursor([cdp : cdp_t]; supercurs : tcursnum;  subcurdef : PChar; var subcurs : tcursnum) : Boolean;

Parametry

supercurs	číslo otevřeného kurzoru, jehož subkurzor se otevírá - viz podrobnosti
subcurdef	specifikace subkurzoru: zápis výrazu typu Boolean
subcurs	výstupní parametr: číslo otevřeného subkurzoru  - viz podrobnosti
[cdp	kontextová proměnná klienta]

Popis

Funkce otevře subkurzor již otevřeného kurzoru supercurs (tj zúží množinu vybraných záznamů další podmínkou).

Tato funkce je ve vnitřním jazyce nahrazena funkcí Restrict_cursor.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE. K neúspěchu může dojít, pokud parametr supercurs neoznačuje otevřený kurzor nebo při chybě ve specifikaci subkurzoru. Příčinu chyby lze zjistit pomocí Signalize. Doporučujeme vždy testovat výsledek této funkce.

Viz

Open_cursor, Close_cursor, Restrict_cursor


Funkce Open_view
Open_view	[ICP]

function Open_view(var viewdef : string;  base : tcursnum; flags : integer; position : trecnum; hParent : window_id; var hView : window_id) : window_id;

window_id Open_view(const char *viewdef, tcursnum base,uns32 flags, tcursnum position, void *reserved, window_id hParent, window_id *hView);

function Open_view(viewdef : PChar; base : tcursnum; flags : uns32;  position : trecnum; var reserved; hParent : window_id;  var hView : window_id) : window_id;

Parametry

viewdef	specifikace formuláře, který má být otevřen
base	otevřený kurzor nebo konstanta NO_REDIR
flags	viz Parametry otevření formuláře.
position	číslo prvního záznamu
reserved	procedura vyhrazená pro budoucí použití, zadejte NULL resp. NIL;
hParent	identifikace (handle) formuláře, který má být vždy pod otevíraným formulářem, nebo 0
hView	výstupní parametr: identifikace (handle) otevřeného formuláře

Popis

Funkce Open_view otevře na obrazovce okno obsahující formulář specifikovaný parametrem viewdef. Začíná-li řetězec viewdef hvězdičkou (*), musí následovat jméno formuláře v databázi, začíná-li znakem plus (+), musí následovat jméno textového souboru, který obsahuje definici formuláře, začíná-li jinak, je tento řetězec přímo definicí formuláře.

Pokud parametr base má jinou hodnotu než NO_REDIR, bude formulář přesměrován na tento kurzor.

Je-li mezi příznaky parametrů flags i hodnota MODAL_VIEW (otevřít formulář jako modální), je důležité si uvědomit, že program se ve funkci Open_view zastaví po tu dobu, po kterou formulář bude otevřen. Program bude pokračovat teprve po uzavření modálního formuláře.

Parametr position udává číslo záznamu, na němž má být formulář otevřen. Je-li v okně formuláře více záznamů, bude specifikovaný záznam první v pořadí. Pokud je tento parametr kladný, považuje se za pořadové číslo záznamu ve formuláři, je-li záporný, považuje se za externí číslo záznamu v tabulce nebo kurzoru, do něhož formulář vede, a uplatní se jeho absolutní hodnota.

Parametr hParent  má hodnotu jinou než nula pouze tehdy, pokud si přejeme, aby otevíraný formulář se nemohl ocitnout nikdy pod (dříve otevřeným) formulářem hParent.

Parametrem hView může být buď konstanta NULL (NIL ve vnitřním jazyce, NULL_WINDOW_ID v Pascalu), nebo proměnná. V druhém případě funkce zapíše do této proměnné identifikaci otevřeného formuláře a tuto proměnnou si zapamatuje. Jakmile bude formulář uzavřen, WinBase602 zapíše do této proměnné nulu. Díky tomu může program snadno zjistit, že uživatel uzavřel některý formulář.

Poloha, rozměry, barva a obsah okna jsou dány jeho definicí.

Pokud se ve formuláři provede příkaz RETURN, jeho argument se předá oknu hlavnímu oknu WinBase602 ve zprávě WM_COMMAND. Tuto zprávu si pak může ve vnitřním jazyce vyzvednout funkce Get_message.

Hodnota funkce

V případě úspěchu funkce vrací identifikaci otevřeného formuláře, při neúspěchu vrátí nulu.

Příklad

otevření a zavření needitovatelného formuláře

Open_view("*FORM1", NO_REDIR, NO_INSERT+NO_DELETE,0,0,id_FORM1);

...

Close_view(id_FORM1);

otevření formuláře na záznamu s číslem rec, program ve smyčce čeká na zavření od uživatele

Open_view("*FORM1",NO_REDIR,MODAL_VIEW+NO_MOVE,-rec,0,id_FORM1);

repeat Peek_message until id_FORM1 = 0;

otevření formulářů synchronizovaných trvale na stejný záznam

Open_view("*form1",NO_REDIR,0,20,0,id1);

Open_view("*form2",NO_REDIR,PARENT_CURSOR,0,id1,id2);

Register_rec_syn(id1,id2);

...

Viz

Close_view


Funkce Ord
Ord	[I..S]

function Ord(c : char) : integer;

Parametry

c	znak, který má být konvertován na celé číslo

Popis

Funkce Ord konvertuje znaky na celá čísla dle standardu ASCII a východoevropské normy reprezentace národních znaků v Windows (cp 1250).

Hodnota funkce

Hodnotou funkce je kód znaku zadaného parametrem.

Příklad SQL:

vypsat tabulky z databáze

SELECT T2.tab_name,T1.obj_name AS aplikace

FROM OBJTAB T1, TABTAB T2

WHERE T1.APL_UUID=T2.APL_UUID AND (Ord(T1.category)=CATEG_APPL)

ORDER BY aplikace

Viz

Chr.


Funkce Owned_cursor
Owned_cursors	[ICP]

function Owned_cursors : integer;

int [cd_]Owned_cursors([cdp_t cdp]);

function [cd_]Owned_cursors ([cdp : cdp_t]): integer;

Parametry

[cdp	kontextová proměnná klienta]

Popis

Funkce zjistí, kolik kurzorů je otevřeno v běžícím programu. Otevřené kurzory mohou zabírat paměť potřebnou pro jiné účely.

Je určena na pomoc vývojářům při ladění složitých programů.

Hodnota funkce

Funkce vrací počet otevřených kurzorů.

Viz

Available_memory


Funkce Page_setup
Page_setup 	[ICP]

function Page_setup(hParent : window_id) : boolean;

BOOL Page_setup(window_id hParent);

function Page_setup(hParent : window_id) : boolean;

Parametry

hParent	identifikace (handle) formuláře, který má být vždy pod otevíraným dialogem, nebo nula

Popis

Funkce otevře standardní dialog pro nastavení formátu stránky. V případě tisku štítků volejte před funkcí Page_setup funkci View_pattern pro nastavení formátu štítků.

Častější je volat funkci Print_opt, která otevře standardní dialog pro tisk, z něhož je možné otevřít dialog pro formát stránky též.

Hodnota funkce

Je-li dialog zavřen tlačítkem OK, vrátí funkce TRUE, jinak vrátí FALSE.

Příklad

if Find_object("stitek3x7",CATEG_VIEW,objnum) then Signalize

   else begin

     View_pattern(objnum);

     Set_first_label(1,1);

     if Page_setup(0) then Print_view("stitek3x7",-1,-1,-1);

   end;

Viz

View_pattern, Set_first_label, Print_view, Print_opt,


Funkce Peek_message
Peek_message	[I..]

function Peek_message : Boolean;

Popis

Funkce Peek_message zjišťuje, zda je k dispozici nějaká zpráva pro prezentační vrstvu WinBase602.

Tato funkce se hodí v případech, kdy program čeká, dokud buď nedojde nějaká zpráva, nebo dokud nenastane určitá situace.

Pokud funkce Peek_message signalizuje, že zpráva je k dispozici, pak si ji může funkce Get_ext_message vyzvednout bez čekání.

Hodnota funkce

Funkce vrací TRUE, pokud zpráva je k dispozici, nebo FALSE, pokud žádná zpráva nedošla.

Příklad

/*program ve smyčce čeká, až uživatel zavře formulář*/

Open_view("*FORM1", NO_REDIR, NO_INSERT+NO_DELETE,0,0,id_FORM1);

repeat Peek_message until id_FORM1 = 0;

Viz

Get_ext_message, Get_message


Procedura Pick_window
Pick_window	[ICP]

procedure Pick_window(hView : window_id);

void Pick_window(window_id hView);

procedure Pick_window(hView : window_id);

Parametry

hView	identifikace (handle) formuláře

Popis

Procedura Pick_window "vytáhne" formulář zadaný parametrem hView  nad všechna ostatní nemodální okna na obrazovce a učiní jej aktivním.

Příklad

if idk=0 then Open_view('*Superknihx',no_redir,0,0,0,idk)

else Pick_window(idk);


Funkce Pref
Pref	[I..S]

function Pref(var prf, str : string) : Boolean;

Parametry

prf	řetězec znaků, který má být prefixem str
str	řetězec znaků, který má mít prefix prf

Popis

Funkce Pref zjišťuje, zda řetězec prf je prefixem řetězce str, tedy zda řetězec str začíná řetězcem prf a pak případně (jakkoli) pokračuje.

Funkci lze použít na řetězce delší než 255 znaků.

Hodnota funkce

Funkce vrátí TRUE, pokud je prf prefixem str, jinak vrátí FALSE.

Viz

Strcat, Strcopy, Strinsert, Strdelete, Strpos, Strlength, Strtrim, Like, Substr, Upcase.


Procedura Print_copies
Print_copies	[ICP]

function Print_copies(copies : short; collate : Boolean) : Boolean;

BOOL Print_copies(int copies, BOOL collate);

function Print_copies(copies : integer;  collate : Boolean) :    Boolean;

Parametry

copies	počet kopií
collate	požadavek na snášení kopií

Popis

Funkce Print_copies nastavuje požadovaný počet kopií, které vzniknou při tisku sestavy.

Některé tiskárny jsou schopny tisknout každou stránku vícekrát a tím urychlit vytištění více kopií. U nich se uplatní parametr collate. Pokud má hodnotu TRUE, pak bude každá kopie vytištěna zvlášť a schopnost opakovat tisk stránky se nebude používat. Pokud parametr má hodnotu FALSE, pak se vytisknou napřed všechny první stránky, pak všechny druhé atd. Tisk bude celkově rychlejší, ale kopie bude nutno poté snášet ručně.

Funkce Print_copies nemá vliv na tištění textů z editoru ani na výstup sestavy na obrazovku.

Počet kopií a jejich snášení lze nastavit také interaktivně pomocí funkce Print_opt.

Hodnota funkce

Funkce vrací TRUE, pokud se požadovaný počet kopií podařilo nastavit. Funkce vrací FALSE, pokud akci nelze provést, například proto, že pod Windows není vybrána žádná tiskárna. Pokud tiskárna neumí opakovat tisk stránky, hodnota funkce se tím neovlivní.

Příklad

Print_copies (2, True);

Viz

Print_view, Set_printer, Printer_dialog, Print_margins, Print_opt, Printer_select


Procedura Print_margins
Print_margins	[ICP]

procedure Print_margins(leftmargin, rightmargin, topmargin, bottommargin : integer);

void Print_margins(int leftmargin, int rightmargin, int topmargin, int bottommargin);

procedure Print_margins(leftmargin, rightmargin, topmargin, bottommargin : integer);

Parametry

leftmargin	velikost levého okraje v milimetrech
rightmargin	velikost pravého okraje v milimetrech
topmargin	velikost horního okraje v milimetrech
bottommargin	velikost spodního okraje v milimetrech

Popis

Procedura Print_margins nastaví velikost okrajů při tisku sestavy. Tím lze docílit správného umístění sestavy na stránce a také ovlivnit počet záznamů, které se vytisknou na stránku. Hodnoty zde uvedené se přičtou k hodnotám okrajů uvedených v nastavení tiskárny (z Windows).

Velikost levého okraje se z historických důvodů dá nastavit také funkcí Set_printer.

Příklad

 Print_margins(20,20,0,20);

Viz

Set_printer, Print_opt, Printer_dialog, Print_copies, Printer_select


Funkce Print_opt
Print_opt	[ICP]

function Print_opt(hParent : window_id) : Boolean;

BOOL Print_opt(window_id hParent);

function Print_opt(hParent : window_id) : Boolean;

Parametry

hParent	identifikace (handle) formuláře, který má být vždy pod otevíraným dialogem, nebo nula

Popis

Funkce Print_opt otevře na obrazovce okno, které dovolí zadat parametry generování sestavy. Nastavené hodnoty parametrů ovlivní práci funkce Print_view. Neinteraktivní nastavení stejných parametrů umožňuje procedura Set_printer, Print_margins a Print_copies.

Hodnota funkce

Funkce vrátí TRUE, pokud uživatel ukončí zadávání parametrů jejich potvrzením. Funkce vrátí FALSE, pokud uživatel požádá stiskem tlačítka v okně s parametry o zrušení akce.

Příklad

if Print_opt(0) then View_print("*SEST1")

Viz

Print_view, Set_printer, Printer_dialog, View_print, Print_margins, Print_copies, Printer_select


Funkce Print_view
Print_view	[ICP]

function Print_view(var viewdef : string;  base : tcursnum; firstrec, lastrec : trecnum) : Boolean;

BOOL Print_view(const char *viewdef, tcursnum base, trecnum firstrec, trecnum lastrec, void *reserved);

function Print_view(viewdef : PChar;  base : tcursnum; firstrec, lastrec : trecnum; var reserved) : Boolean;

Parametry

viewdef	specifikace formuláře, který má být otevřen
base	otevřený kurzor nebo konstanta NO_REDIR
firstrec	pořadové číslo (interní) prvního tištěného záznamu
lastrec	pořadové číslo (interní) posledního tištěného záznamu
reserved	procedura vyhrazená pro budoucí použití, zadejte NULL resp. NIL;

Popis

Funkce Print_view vytiskne sestavu specifikovanou parametrem viewdef. Pokud parametr base má jinou hodnotu než NO_REDIR, bude sestava přesměrována na tento kurzor.

Do sestavy budou zahrnuty pouze ty záznamy, jejichž pořadová čísla spadají do intervalu od firstrec do lastrec.

Další parametry tisku lze předem zadat buď interaktivně pomocí funkce Print_opt, nebo neinteraktivně pomocí funkcí Print_copies, Set_printer, Print_margins a Printer_dialog. Pokud chcete, aby funkce Print_view tiskla rozsah záznamů specifikovaný některou z těchto funkcí, pak hodnoty parametrů firstrec a lastrec musí být  -1.

Parametry firstrec a lastrec se interpretují jako pořadové číslo záznamu.

Hodnota funkce

V případě úspěchu funkce vrací TRUE, jinak FALSE.

Příklad

Vytisknout sestavu nad dotazem upraveným z programu.

   if Open_cursor(Adr_reg) then Signalize //otevřít pevný dotaz

   else begin

     podm := "Adresar.cislo="+spom;

     if Restrict_cursor(Adr_reg,podm) then Signalize //zúžit odpověď

     else begin                  // zadat parametry tisku a tisknout

       if Print_opt(0) then Print_view("*S_histfirmy",Adr_reg,-1,-1);

       Restore_cursor(Adr_reg); // odstranit restrict

     end;

     Close_cursor(Adr_reg);     // zavřít kurzor

   end;

Viz

Print_opt, Set_printer, Printer_dialog, Print_margins, Print_copies Printer_select


Procedura Printer_dialog
Printer_dialog	[ICP]

procedure Printer_dialog(hParent : window_id);

void Printer_dialog(window_id hParent);

procedure Printer_dialog(hParent : window_id);

Parametry

hParent	identifikace (handle) formuláře, který má být vždy pod otevíraným dialogem, nebo nula

Popis

Tato procedura otevře na obrazovce standardní dialogové okno pro volbu tiskárny. Provedená volba platí až do nové volby nebo do ukončení práce s WinBase602. Volba tiskárny neovlivní jiné aplikace běžící pod Windows.

Volbu tiskárny lze provést i z dialogového okna otevíraného procedurou Set_printer.

Příklad

Printer_dialog(0);

Viz

Print_opt, Set_printer, Print_view, Print_margins, Print_copies, Printer_select


Funkce Printer_select
Printer_select	[ICP]

function Printer_select(var printer_name, port_name : string; orientation, papersize, paperbin, quality, duplex, color , truetype : short) : Boolean;

BOOL Printer_select(const char *printer_name, const char * port_name, int orientation, int papersize, int paperbin, int quality, int duplex, int color , int truetype);

function Printer_select(printer_name, port_name : PChar; orientation, papersize, paperbin, quality, duplex, color, truetype : integer) : Boolean;

Parametry

printer_name	jméno tiskárny
port_name	jméno výstupního portu
orientation	orientace papíru
papersize	druh a velikost papíru
paperbin	způsob podávání papíru
quality	rozlišení tiskárny nebo kvalita tisku
duplex	duplexní tisk
color	barevný tisk
truetype	způsob tisku TT fontů na laserových tiskárnách

Popis

Funkce Printer_select umožní programově zvolit tiskárnu a nastavit její parametry. Zatímco prvních pět parametrů funguje spolehlivě pro všechny tiskárny, poslední čtyři parametry se uplatní pouze u některých značek. Navíc některé tiskárny mají své vlastní další parametry, které, chcete-li je použít, musíte zadat pomocí funkce Printer_dialog.

V parametru printer_name zadáte jméno tiskárny, která se má použít. Tiskárna musí být nainstalována ve Windows. Jméno tiskárny musí být zadáno přesně stejně, jako se objevuje v dialogu na výběr tiskárny, včetně mezer mezi slovy a velikostí písmen. Tento parametr nesmí zůstat prázdný.

Parametr port_name určí výstupní bránu pro tisk. Nejobvyklejší hodnoty jsou LPT1:, LPT2:, COM1:, COM2: (včetně dvojtečky) apod. Prázdný řetězec znamená použít port přednastavený pro tiskárnu zadanou parametrem printer_name.

Parametr orientation nastaví polohu papíru. Hodnota 1 znamená tisk na výšku, hodnota 2 tisk na šířku zvoleného papíru.

Pomocí parametru papersize nastavíte druh a velikost papíru v tiskárně. Nejběžnější druhy papíru jsou uvedeny v následující tabulce:

druh a rozměr papíru	hodnota
dopisní, 8 3/4 x 11 palců	1
Legal, 8 3/4 x 14 palců	5
Executive, 7 1/2 x 10 1/2 palce	7
A3, 297 x 420 mm	8
A4, 210 x 297 mm	9
A5, 148 x 210 mm	11
B5, 182 x 257 mm	13
obálka #10, 4 1/8 x 9 1/2 palce	20
obálka DL, 110 x 220 mm	27
obálka C5, 162 x 229 mm	28
obálka Monarch, 3 7/8 x 7 1/2 palce	37
skládaný papír 14 7/8 x 11 palců	39
skládaný papír 8 1/2 x 12 palců	40
skládaný papír 8 1/2 x 13 palců	41
uživatelsky definovaný rozměr	256

Vyberte si pouze z těch možností, které nabízí ovladač tiskárny (v anglických Windows místo obálka naleznete slovo Envelope, místo dopisní slovo Letter a místo skládaný papír slovo Fanfold).

Parametr paperbin nastaví způsob podávání papíru nebo typ podavače.

K dispozici jsou tyto hodnoty:

způsob podávání	hodnota
horní podavač	1
spodní podavač	2
ruční podávání	4
obálky	5
podavač obálek	6
automatický	7
traktor	8
Vyberte si pouze z těch možností, které nabízí ovladač tiskárny. Pokud nenabízí žádnou volbu, použijte hodnotu 1.

Parametr quality definuje kvalitu tisku.

kvalita tisku	hodnota
Koncept	-1
Nízká kvalita	-2
Střední kvalita	-3
Vysoká kvalita	-4
Použijete-li kladné číslo, definujete rozlišení tiskárny v počtů znaků na palec (DPI). U některých tiskáren je standardní hodnota nula.

Pomocí parametru duplex se nastavuje oboustranný tisk (u tiskáren, které to umožňují). U běžných tiskáren použijte hodnotu 1. Další hodnoty určí způsob otočení papíru v tiskárně.

Tisk	hodnota
Simplex	1
Duplex Horizontal	2
Duplex Vertical	3

Parametr color přikáže barevné tiskárně tisknout barevně či černobíle. U běžných tiskáren použijte hodnotu 1.

Tisk	hodnota
Color	1
Monochrome	2

Posledním parametrem je parametr truetype, který nastaví způsob tisku TT fontů.

způsob	hodnota
tisk jako grafika	1
download TT fontů do tiskárny HP	2
náhrada TT fontů tzv. Device fonty	3
Používáte-li počeštěné TrueType fonty, doporučujeme používat hodnotu parametru 1. U ostatních hodnot jsou špatné zkušenosti s diakritikou.

Nejste-li si u některého parametru jisti správnou hodnotou, můžete ji zjistit následujícím způsobem: v globálních parametrech WinBase602 si interaktivně nastavte danou tiskárnu a její parametry. Uvedené nastavení se zapíše do registrační databáze do klíče HKEY_LOCAL_MACHINE\SOFTWARE\Software602\WinBase602\Printers\jméno_tiskárny , kde si jej můžete zjistit.

Hodnota funkce

V případě úspěšného nastavení funkce vrací TRUE, v opačném případě FALSE.

Příklad

Nastavit tiskárnu HP IIP pro tisk na papír A4 na šířku:

Printer_select('HP LaserJet IIP','',2,9,1,-4,1,2,1);

Viz

Set_printer, Print_opt, Print_view, View_print, Print_copies, Print_margins, Printer_dialog


Procedura Put_pixel
Put_pixel	[ICP]

procedure Put_pixel(hView : window_id; x, y, color : short);

void Put_pixel(window_id hView, int x, int y, int color);

procedure Put_pixel(hView : window_id; x, y, color : integer);

Parametry

hView	identifikace (handle) formuláře
x, y	souřadnice v okně formuláře hView
color	označení barvy

Popis

Procedura Put_pixel nakreslí v okně hView  v souřadnicích x a  y bod v barvě color.

Tato procedura je do rozhraní WinBase602 zahrnuta z důvodu kompatibility se staršími verzemi. V nových aplikacích doporučujeme pro kreslení využívat funkcí z DLL knihovny Windows GDI.EXE.

Příklad

var

  id,i,j : short;

begin

  Open_view("a DBDIALOG 20 20 400 300 begin end",no_redir,0,0,0,id);

  Draw_line(id, 50,50,100,50,0);

  Draw_line(id, 100,50,100,100,0);

  Draw_line(id, 100,100,50,100,0);

  Draw_line(id, 50,100,50,50,0);

  for i := 51 to 99 do

    for j := 51 to 99 do

      Put_pixel(id,i,j,i*j mod 255);

  repeat  Peek_message until id=0;

end.

Viz

Draw_line


Funkce QBE_state
QBE_state	[ICP]

function QBE_state(hView: window_id) : integer;

int QBE_state(window_id hView);

function QBE_state(hView : window_id) : integer;

Parametry

hView	identifikace (handle) formuláře

Popis

Funkce dovoluje určit, je-li ve formuláři hView pokládán (nikoliv položen!) QBE dotaz nebo uspořádání. Funkce se využije pouze v podmínkách, které specifikují viditelnost nebo aktivitu složek ve formuláři, ve vnitřním jazyku nemá praktické využití.

Funkce, která by zjistila, že ve formuláři je položen QBE dotaz či uspořádání, není implementována. Tento stav lze zjistit např. porovnáním čísla kurzoru získaného funkcí Get_fcursor s původním kurzorem formuláře. V případě, že je pro běh programu nutné, aby ve formuláři nebyl položen QBE dotaz či uspořádání (např. při nahrazování původního kurzoru novým pomocí Set_fcursor), použijte funkci Send_message s číslem zprávy 1599, která případný dotaz (uspořádání) odstraní nebo neudělá nic.

Hodnota funkce

Funkce vrací hodnotu 0, pokud ve formuláři není kladen dotaz QBE, hodnotu 1, pokud jsou zadávána omezení na hodnoty sloupců, nebo hodnotu 2, pokud je zadáváno uspořádání záznamů.

Viz

Get_fcursor, Set_fcursor, Send_message


Funkce Quarter
Quarter	[ICPS]

function Quarter(dt : date) : integer;

int Quarter(uns32 dt);

function Quarter(dt : uns32) : integer;

Parametry

dt	datum

Popis

Funkce Quarter zjistí číslo čtvrtletí z datumu dt. Použití je v dotazech a sestavách, kdy je třeba zjišťovat čtvrtletní obraty apod.

Hodnota funkce

Funkce vrátí číslo čtvrtletí v rozmezí 1-4. Pro dt=NONEDATE vrací NONEINTEGER

Příklad SQL:

...

SELECT Quarter(dt),SUM(cena)

FROM Fakt96

GROUP BY Quarter(dt)


Funkce Read (int.)
Read	[I..]

function Read(var f : file;  var prom) : Boolean;

Parametry

f	proměnná typu soubor (File)
prom	proměnná některého z typů  Boolean, Char, Short, Integer, Real, String, CSString nebo CSIString.

Popis

Funkce Read čte z textového souboru zadaného prvním parametrem hodnotu do proměnné uvedené jako druhý parametr. Přitom převádí textový zápis hodnoty na hodnotu příslušného typu. Soubor musí být předem otevřen.

Při použití funkce Eof pro zjištění konce souboru nezapomeňte, že Eof přeskakuje mezery mezi slovy.

Použití funkce Read pro zápis do řetězcové proměnné se přečte řádek až po znak konce řádku (je-li velikost proměnné dostatečná). Z řádku delšího než 255 znaků se přečte pouze prvních 255 znaků.

Hodnota funkce

Hodnota funkce Read je TRUE, pokud se povedlo přečíst a zapsat do parametru přečtený údaj. Hodnota bude FALSE pokud v souboru není hodnota, která by se dala převést na příslušný typ.

Příklad

přečte soubor po řádkách, řádky jsou kratší než 255 znaků; při případném zápisu ve shodném rozlámání je nutno doplnit znaky pro konec řádky Chr(10)+Chr(13)

var

  f : file;

  str : string[255];

begin

  if Reset(f,'c:\test.txt') then begin

    while not Eof(f) do begin

      Read(f,str);

      Info_box('',str);

    end;

    Close(f);

  end;

end.

Viz

Write, Writeln, Reset, Rewrite, Close, Eof, Seek, Filelength.


Funkce Read (ext.)
Read	[.CP]

BOOL [cd_]Read([cdp_t cdp], tcurstab curs, trecnum position, tattrib attr, const modifrec * access, void * buffer);

function [cd_]Read([cdp : cdp_t]; curs : tcurstab; position : trecnum; attr : tattrib; var access; var buffer) : Boolean;

Parametry

curs	číslo otevřeného kurzoru nebo číslo tabulky - viz podrobnosti
position	číslo záznamu
attr	číslo sloupce, jehož hodnota (nebo délka) se čte
access	popis přístupu k údajům v uvedené pozici kurzoru
buffer	proměnná, do níž mají být údaje načteny
[cdp	kontextová proměnná klienta]

Popis

Funkce Read čte hodnoty z databáze. Objekt, z něhož se má číst, může být buď tabulka zadaná svým číslem (nalezeným funkcí Find_object) nebo otevřený kurzor (funkcí Open_cursor nebo Open_cursor_direct).

Funkce neprovádí žádné zamykání záznamů v databázi. Může číst i data právě přepisovaná jinou aplikací.

Pokud proměnná buffer není dostatečně dlouhá, může dojít k přepsání paměti a následnému zhroucení systému.

Pokud se čte hodnota sloupce proměnné velikosti, pak funkce zapíše do pole buffer do prvních dvou bajtů délku přečteného úseku a počínaje třetím bajtem přečtená data.

Obecnou funkci Read s velmi složitým parametrem access je výhodné v jednotlivých konkrétních případech nahradit funkcemi Read_ind (čtení sloupce pevné velikosti), Read_var (čtení sloupce proměnné velikosti), Read_ind_cnt (čtení počtu složek multiatributu), Read_len (čtení délky sloupce proměnné velikosti).

Funkci Read nahrazuje ve vnitřním programovacím jazyce přiřazovací příkaz mezi proměnnou a databázovým sloupcem.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Viz

Write, Read_ind, Write_ind, Read_ind_cnt, Write_ind_cnt, Read_var, Write_var, Read_len, Write_len, Read_record, Write_record, Find_object, Open_cursor, Open_cursor_direct


Funkce Read_ind
Read_ind	[.CP]

BOOL [cd_]Read_ind([cdp_t cdp], tcurstab curs, trecnum position, tattrib attr, uns16 index, void * buffer);

function [cd_]Read_ind([cdp : cdp_t]; curs : tcurstab; position : trecnum; attr : tattrib; index : uns16; var buffer) : Boolean;

Parametry

curs	číslo otevřeného kurzoru nebo tabulky - viz podrobnosti
position	číslo záznamu
attr	číslo sloupce, jehož hodnota se čte
index	pořadí v multiatributu
buffer	proměnná, do níž mají být údaje načteny
[cdp	kontextová proměnná klienta]

Popis

Funkce přečte obsah sloupce pevné velikosti z databáze. Hodnotu zapíše do proměnné buffer.

Objekt, z něhož se má číst, může být buď tabulka zadaná svým číslem (nalezeným funkcí Find_object) nebo otevřený kurzor (funkcí Open_cursor nebo Open_cursor_direct).

Při čtení multiatributu se v jednom volání funkce přečte jedna jeho hodnota. Pořadí v multiatributu určuje proměnná index (číslováno od 0). Není-li sloupec multiatribut, použijte konstantu NOINDEX. Počet složek multiatributu zjistí funkce Read_ind_cnt.

Funkce neprovádí žádné zamykání záznamů v databázi. Může číst i data právě přepisovaná jinou aplikací. Pokud proměnná buffer není dostatečně dlouhá, může dojít k přepsání paměti a následnému zhroucení systému.

Funkci Read_ind nahrazuje ve vnitřním programovacím jazyce přiřazovací příkaz mezi proměnnou a databázovým sloupcem.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Viz

Read, Write, Read_ind_cnt, Read_var, Read_len, Write_ind, Write_ind_cnt, Write_var, Write_len, Find_object, Open_cursor, Open_cursor_direct


Funkce Read_ind_cnt
Read_ind_cnt	[.CP]

BOOL [cd_]Read_ind_cnt([cdp_t cdp], tcurstab curs, trecnum position, tattrib attr, uns16 * count);

function [cd_]Read_ind_cnt([cdp : cdp_t]; curs : tcurstab; position : trecnum; attr : tattrib; var count : uns16) : Boolean;

Parametry

curs	číslo otevřeného kurzoru nebo tabulky - viz podrobnosti
position	číslo záznamu
attr	číslo sloupce - multiatributu
count	výstupní parametr: počet hodnot multiatributu
[cdp	kontextová proměnná klienta]

Popis

Funkce zjistí počet hodnot multiatributu. Hodnotu zapíše do proměnné count.

Objekt, z něhož se má číst, může být buď tabulka zadaná svým číslem (nalezeným funkcí Find_object) nebo otevřený kurzor (funkcí Open_cursor nebo Open_cursor_direct).

Funkci Read_ind_cnt nahrazuje ve vnitřním programovacím jazyce symbol # za jménem multiatributu.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Viz

Read_ind, Read_var, Read_len, Write_ind, Write_ind_cnt, Write_var, Write_len, Find_object, Open_cursor, Open_cursor_direct


Funkce Read_len
Read_len	[.CP]

BOOL [cd_]Read_len([cdp_t cdp], tcurstab curs, trecnum position, tattrib attr, uns16 index, uns32 * size);

function [cd_]Read_len([cdp : cdp_t]; curs : tcurstab; position : trecnum; attr : tattrib; index : uns16; var size : uns32) : Boolean;

Parametry

curs	číslo otevřeného kurzoru nebo tabulky - viz podrobnosti
position	číslo záznamu
attr	číslo sloupce, jehož délka se zjišťuje
index	pořadí v multiatributu
size	výstupní parametr: velikost sloupce proměnné velikosti
[cdp	kontextová proměnná klienta]

Popis

Funkce zjistí velikost sloupce proměnné velikosti. Hodnotu zapíše do proměnné size.

Objekt, z něhož se má číst, může být buď tabulka zadaná svým číslem (nalezeným funkcí Find_object) nebo otevřený kurzor (funkcí Open_cursor nebo Open_cursor_direct).

Je-li attr multiatribut, pak jedno volání funkce zjistí velikost jedné z jeho hodnot. Pořadí v multiatributu určuje proměnná index (číslováno od 0). Není-li attr multiatribut, použijte konstantu NOINDEX. Počet složek multiatributu zjistí funkce Read_int_cnt.

Funkci Read_len nahrazuje ve vnitřním programovacím jazyce symbol # za přístupem k sloupci proměnné velikosti.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Viz

Read_ind_cnt, Read_ind, Read_var, Write_ind, Write_ind_cnt, Write_var, Write_len, Find_object, Open_cursor, Open_cursor_direct


Funkce Read_lock_record
Read_lock_record	[ICP]

function Read_lock_record(curs : tcurstab; position : trecnum) : Boolean;

BOOL [cd_]Read_lock_record([cdp_t cdp], tcurstab curs, trecnum position);

function [cd_]Read_lock_record([cdp : cdp_t]; curs : tcurstab; position : trecnum) : Boolean;

Parametry

curs	otevřený kurzor nebo tabulka - viz podrobnosti
position	číslo záznamu
[cdp	kontextová proměnná klienta]

Popis

Funkce uzamkne záznam pro čtení. Zamknout záznam pro čtení smí uživatel, který má právo čtení k alespoň jednomu jeho sloupce.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE. K neúspěchu může dojít, pokud záznam je jinou aplikací uzamčen pro zápis. Pokud uvedený kurzor zahrnuje více spojených tabulek, zamknou se příslušné záznamy ve všech těchto tabulkách.

Viz

Read_lock_table, Read_unlock_record, Read_unlock_table, Write_lock_record, Write_lock_table, Write_unlock_record, Write_unlock_table


Funkce Read_lock_table
Read_lock_table	[ICP]

function Read_lock_table(curs : tcurstab) : Boolean;

BOOL [cd_]Read_lock_table([cdp_t cdp], tcurstab curs);

function [cd_]Read_lock_table([cdp : cdp_t]; curs : tcurstab) : Boolean;

Parametry

curs	otevřený kurzor nebo tabulka - viz podrobnosti
[cdp	kontextová proměnná klienta]

Popis

Funkce uzamkne všechny záznamy tabulky pro čtení. Pokud uvedený kurzor zahrnuje více spojených tabulek, zamknou se všechny.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE. K neúspěchu může dojít, pokud je některý záznam tabulky jinou aplikací uzamčen pro zápis. Zamknout tabulku pro čtení smí uživatel, který má právo čtení k alespoň jednomu jejímu sloupci.

Viz

Read_lock_record, Read_unlock_record, Read_unlock_table, Write_lock_record, Write_lock_table, Write_unlock_record, Write_unlock_table


Funkce Read_record
Read_record	[.CP]

BOOL [cd_]Read_record([cdp_t cdp], tcurstab curs,  trecnum position, void * buf,  uns16 datasize)

function [cd_]Read_record([cdp : cdp_t]; curs : tcurstab;  position : trecnum; var buffer; datasize : uns16) : Boolean;

Parametry

curs	číslo tabulky nebo číslo otevřeného kurzoru - viz podrobnosti
position	číslo záznamu
buffer	buffer pro data
datasize	velikost dat v bajtech
[cdp	kontextová proměnná klienta]

Popis

Funkce přečte celý záznam z tabulky zadané svým číslem (nalezeným funkcí Find_object) nebo kurzoru (otevřeného funkcí Open_cursor nebo Open_cursor_direct).

Funkce přečte ze záznamu s číslem position v tabulce nebo kurzoru curs všechny sloupce. Hodnoty těchto sloupců zapíše do proměnné buffer bezprostředně za sebou. Jejich celková velikost musí být datasize.

Hodnoty sloupců jsou načteny do buffer v tom pořadí, v němž jsou definovány v tabulce nebo kurzoru curs. Funkce nepracuje se sloupcem DELETED, s hodnotami multiatributů ani sloupců proměnné velikosti. Pro ně se v buffer nevynechává žádné místo.

V parametru buffer musí být pro každý čtený sloupec typu řetězec o jeden bajt více, než činí maximální délka řetězce. Pro sloupec typu Autorizace musí být rezervováno dvanáct bajtů pro ID uživatele.

Ve vnitřním programovacím jazyce nahrazuje tuto funkci přímé přiřazení mezi záznamem v databázi a proměnnou typu záznam.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Viz

Read, Write, Write_record, Find_object, Open_cursor, Open_cursor_direct


Funkce Read_unlock_record
Read_unlock_record	[ICP]

function Read_unlock_record(curs : tcurstab; position : trecnum) : Boolean;

BOOL [cd_]Read_unlock_record([cdp_t cdp], tcurstab curs, trecnum position);

function [cd_]Read_unlock_record([cdp : cdp_t]; curs : tcurstab; position : trecnum) : Boolean;

Parametry

curs	otevřený kurzor nebo tabulka - viz podrobnosti
position	číslo záznamu
[cdp	kontextová proměnná klienta]

Popis

Funkce odemkne dříve uzamčený záznam pro čtení. Pokud uvedený kurzor zahrnuje více spojených tabulek, odemknou se příslušné záznamy ve všech těchto tabulkách.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Viz

Read_lock_record, Read_lock_table, Read_unlock_table, Write_lock_record, Write_lock_table, Write_unlock_record, Write_unlock_table


Funkce Read_unlock_table
Read_unlock_table	[ICP]

function Read_unlock_table(curs : tcurstab) : Boolean;

BOOL [cd_]Read_unlock_table([cdp_t cdp], tcurstab curs);

function [cd_]Read_unlock_table([cdp : cdp_t]; curs : tcurstab) : Boolean;

Parametry

curs	otevřený kurzor nebo tabulka - viz podrobnosti
[cdp	kontextová proměnná klienta]

Popis

Funkce odemkne všechny záznamy tabulky pro čtení. Pokud uvedený kurzor zahrnuje více spojených tabulek, odemknou se všechny.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Viz

Read_lock_record, Read_lock_table, Read_unlock_record, Write_lock_record, Write_lock_table, Write_unlock_record, Write_unlock_table


Funkce Read_var
Read_var	[.CP]

BOOL [cd_]Read_var([cdp_t cdp], tcurstab curs, trecnum position, tattrib attr, uns16 index, uns32 start, uns32 size, void * buf, uns32 * psize);

function [cd_]Read_var([cdp : cdp_t]; curs : tcurstab; position : trecnum; attr : tattrib; index : uns16; start, size : uns32; var buffer; var psize : uns32) : Boolean;

Parametry

curs	číslo otevřeného kurzoru nebo tabulky - viz podrobnosti
position	číslo záznamu
attr	číslo sloupce, jehož hodnota se čte
index	pořadí v multiatributu
start	odkud se čte
size	kolik bajtů se má přečíst
buffer	proměnná, do níž se uloží přečtená hodnota
psize	výstupní parametr: počet přečtených bajtů
[cdp	kontextová proměnná klienta]

Popis

Funkce přečte obsah sloupce proměnné velikosti z databáze. Hodnotu zapíše do proměnné buffer.

Objekt, z něhož se má číst, může být buď tabulka zadaná svým číslem (nalezeným funkcí Find_object) nebo otevřený kurzor (funkcí Open_cursor nebo Open_cursor_direct).

Přečteno bude nejvýše size bajtů od pozice start hodnoty sloupce proměnné velikosti.

Je-li attr multiatribut, pak jedno volání funkce čte z jedné jeho hodnoty. Pořadí v multiatributu určuje proměnná index (číslováno od 0). Není-li sloupec multiatribut, použijte konstantu NOINDEX. Počet složek multiatributu zjistí funkce Read_int_cnt.

Do proměnné psize funkce zapíše počet skutečně přečtených bajtů.

Funkce neprovádí žádné zamykání záznamů v databázi. Může číst i data právě přepisovaná jinou aplikací. Pokud proměnná buffer není dostatečně dlouhá, může dojít k přepsání paměti a následnému zhroucení systému.

Funkci Read_var nahrazuje ve vnitřním programovacím jazyce přiřazovací příkaz mezi proměnnou a sloupcem proměnné velikosti s dvojindexem [start, size].

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Viz

Read_ind, Read_ind_cnt, Read_len, Write_ind, Write_ind_cnt, Write_var, Write_len, Find_object, Open_cursor, Open_cursor_direct


Funkce real2money
real2money	[.CP]

BOOL real2money(double d, monstr * m);

function real2money(d : double;  var m : monstr) : Boolean;

Parametry

d	reálné číslo - hodnota, která se má konvertovat
m	konvertovaná hodnota typu money

Popis

Funkce real2money konvertuje reálné číslo d  na hodnotu typu money do struktury m.

Hodnota funkce

Funkce vrací FALSE, když se reálná hodnota nedá zapsat v typu money.

Viz

money2real


Funkce Real2str
Real2str	[I..S]

function Real2str(r : real;  prez : short) : string;

Parametry

r	hodnota, která se má konvertovat
prez	způsob konverze

Popis

Funkce Real2str převede hodnotu zadanou prvním parametrem na řetězec znaků a vrátí jej. Při konverzi se použije hodnota parametru prez takto:

- absolutní hodnota prez udává počet desetinných míst;

- je-li prez kladné, výsledek bude v semilogaritmickém tvaru;

- je-li prez záporné, výsledek bude v desetinném tvaru.

Parametr prez má tedy stejný význam, jako parametr Zobrazení v popisu složky pohledu.

Od verze 4.0 přibylo speciální tzv. účetní zobrazení - desetinné zobrazení, kde jsou tisíce odděleny oddělovačem nastaveným ve Windows. Účetní zobrazení má hodnotu 100+počet desetinných míst.

Hodnota funkce

Funkce vrací řetězec znaků, který je desítkovým zápisem čísla r.

Příklady

ss := Real2str(cislo,102);

...

Info_box('výsledek',Real2str(r,-2));

Viz

Int2str, Str2int, Str2real, Money2str, Str2money, Str2date, Str2time, Time2str, Str2time


Funkce Rec_cnt
Rec_cnt	[ICP]

function Rec_cnt(curs : tcurstab; var recnum : trecnum) : Boolean;

BOOL [cd_]Rec_cnt([cdp_t cdp], tcurstab curs,  trecnum * recnum);

function [cd_]Rec_cnt([cdp : cdp_t]; curs : tcurstab; var recnum : trecnum) : Boolean;

Parametry

curs	tabulka nebo otevřený kurzor - viz podrobnosti
recnum	vrácený počet záznamů
[cdp	kontextová proměnná klienta]

Popis

Funkce vrací v parametru recnum počet záznamů v kurzoru resp. tabulce curs.

Je-li parametrem curs číslo tabulky, vrací se počet všech záznamů v tabulce, včetně zrušených a těch uvolněných, za nimiž jsou ještě nějaké neuvolněné záznamy. Je-li curs číslo otevřeného kurzoru, vrací se počet záznamů vybraných do kurzoru při jeho vytváření, včetně těch, které byly za dobu existence kurzoru zrušeny, a záznamy později přidané. První provedení Rec_cnt na určitou tabulku resp. kurzor může chvíli trvat, protože záznamy se musí spočítat.

Důrazné upozornění: Jednou z nejčastějších chyb začínajících vývojářů je opomenutí, že Rec_cnt na tabulku počítá i smazané a uvolněné záznamy. Při pokusu číst z uvolněného záznamu získávají pak (v lepším případě) nesmyslné hodnoty. Je proto nutné kontrolovat systémový sloupec DELETED (viz příklad).

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize.

Příklad 1

  if not Rec_cnt(TAB1, limit) then

  for I:=0 to limit-1  do

    if not TAB1[I].deleted then

      Delete( TAB1, i );

Příklad 2

podm := 'SELECT c_dop,datum,cislo FROM Dop WHERE datum='+poms+' ORDER BY c_dop';

if Open_sql_cursor (c_dat,podm) then Signalize

else begin

  Rec_cnt(c_dat,pocet);

  if pocet=0 then begin

    spom := 'Nenalezen ani jeden dopis s datem '+poms;

    Info_box('Nelze',spom);

    Close_cursor(c_dat);

  end

  else ...

Viz

Open_cursor-exter, Open_cursor-inter, Open_sql_cursor, Open_sql_parts, Close_cursor, Restrict_cursor, Restore_cursor.


Procedura Register_key
Register_key	[I..]

procedure Register_key(keycode : short; with_shift, with_ctrl, with_alt : Boolean; msg : integer);

Parametry

keycode	číslo kódu klávesy;
with_shift	příznak současně stisknuté klávesy Shift;
with_ctrl	příznak současně stisknuté klávesy Ctrl;
with_alt	příznak současně stisknuté klávesy Alt;
msg	číslo zprávy;

Popis

Procedura umožní měnit význam kláves. Způsobí, že při stisku klávesy se vyšle zpráva.

Každé klávese (nebo její kombinaci s klávesami Shift, Ctrl a Alt), jejíž stisk chcete zachytit, musíte pomocí Register_key, přiřadit číslo zprávy msg. Pomocí funkce Get_ext_message v hlavní smyčce programu na tuto zprávu můžete reagovat.

Čísla zpráv msg musí být z intervalu 1001 až 60 000 nebo 0. Má-li parametr msg hodnotu 0, vrátí se klávese původní význam.

Předefinováním některých kláves (hlavně funkčních) přijdete o jejich původní význam. Týká se to nejen kláves ve WinBase602, ale i kláves, které používají Windows (např. rychlý výběr z menu apod). Volte proto uvážlivě, které klávesy použijete pro své účely.

Ve vnějších jazycích použijte pro odchytávání zpráv od klávesnice akcelerátory.

V tabulce jsou uvedeny číselné kódy většiny kláves na běžné klávesnici:

klávesa	kód	klávesa	kód	klávesa	kód
Backspace	8	A	65	num 1	97
Tab	9	B	66	num 2	98
Enter	13	C	67	num 3	99
Pause	19	D	68	num 4	100
Escape	27	E	69	num 5	101
Mezerník	32	F	70	num 6	102
Page Up	33	G	71	num 7	103
Page Down	34	H	72	num 8	104
End	35	I	73	num 9	105
Home	36	J	74	num *	106
šipka vlevo	37	K	75	num +	107
šipka nahoru	38	L	76	num -	109
šipka vpravo	39	M	77	num .	110
šipka dolů	40	N	78	num /	111
Print Screen	44	O	79	F1	112
Insert	45	P	80	F2	113
Delete	46	Q	81	F3	114
0	48	R	82	F4	115
1	49	S	83	F5	116
2	50	T	84	F6	117
3	51	U	85	F7	118
4	52	V	86	F8	119
5	53	W	87	F9	120
6	54	X	88	F10	121
7	55	Y	89	F11	121
8	56	Z	90	F12	123
9	57	num 0	96	Scroll Lock	145

Příklad

reagujte na stisk klávesy Ctrl+F12:

Register_key(123,false,true,false,5000);

...

if msg=5000 then ...

Viz

Get_ext_message


Funkce Register_ext_menu
Register_ext_menu	[.CP]

void Register_ext_menu(window_id hFrame, HMENU hMenu, HMENU hWinsubMenu);

procedure Register_ext_menu(hFrame : window_id; hMenu, hWinsubMenu : cardinal );

Parametry

hMenu	handle menu
hWinsubMenu	handle jeho Windows-submenu.

Od verze:

5.0

Popis

Procedura Register_ext_menu informuje WinBase602 o změně menu hlavního okna WinBase602. Tuto funkci musí zavolat aplikace po každé změně menu, kromě změn provedených voláním funkce Main_menu.

Viz

GetClient, Open_project, Init_window_env


Funkce Register_rec_syn
Register_rec_syn	[ICP]

function Register_rec_syn(hView1, hView2 : window_id);

BOOL Register_rec_syn(window_id hView1, window_id hView2);

function Register_rec_syn(hView1, hView2 : window_id): Boolean;

Parametry

hView1, hView2	identifikace (handle) formulářů

Popis

Funkce Register_rec_syn zajistí, že formuláře hView1 a hView2 budou synchronizovány na stejný záznam, vedou-li do stejného zdroje dat. Posun v jednom formuláři zapříčiní posun ve formuláři druhém a naopak. Nejčastější použití funkce je, otevřete-li formulář hView2 s příznakem PARENT_CURSOR na stejném záznamu jako ve formuláři hView1 a chcete mít zajištěnu synchronizaci až do zavření formulářů. V tomto případě funkce odpovídá akci Otevřít formulář na stejný záznam.

V případě, že programátor nezajistí stejný zdroj dat (oba kurzory jsou stejné nebo jeden je subkurzorem druhého - např. tabulka a kurzor do ní  vedoucí) pro oba formuláře, funkce neoznámí chybu, nicméně synchronizace bude fungovat špatně.

Synchronizace se ukončí zavřením jednoho z formulářů.

Hodnota funkce

Pokud se formuláře zdaří uvést do synchronizovaného stavu (bez ohledu na kurzory formulářů), vrátí funkce TRUE, dojde-li k chybě (např. jeden formulář není otevřen), vrátí FALSE.

Příklad

synchronizovat dva formuláře

...

cislo := ...

Open_view("*Form1",NO_REDIR,0,cislo,0,id1);

Open_view("*Form2",NO_REDIR,PARENT_CURSOR,0,id1,id2);

/* druhý formulář se otevře na stejném záznamu cislo */

Register_rec_syn(id1,id2);

...


Procedura Relate_record
Relate_record	[ICP]

function Relate_record(var relation1, viewdef : string;  base : tcursnum; flags : integer; var hView : window_id; var relation2 : string) : window_id;

window_id Relate_record(const char *relation1, const char * viewdef, tcursnum base, uns32 flags, void *reserved, window_id * hView, const char *relation2);

function Relate_record(relation1, viewdef : PChar; base : tcursnum; flags : uns32; var reserved; var hView : window_id; relation2 : PChar) : window_id;

Parametry

relation1	jméno relace (první relace pro M:N)
viewdef	specifikace formuláře, který má být otevřen
base	otevřený kurzor nebo konstanta NO_REDIR
flags	příznaky
reserved	procedura vyhrazená pro budoucí použití, zadejte NULL resp. NIL;
hView	vrací identifikaci (handle) otevřeného formuláře;
relation2	jméno druhé relace nebo NULL resp. NIL pro 1:N

Popis

Funkce Relate_record slouží k editaci relace 1:N nebo M:N mezi dvěma tabulkami. Jedna z těchto tabulek musí být zpřístupněna aktivním formulářem, druhá tabulka formulářem zadaným parametry viewdef a base. Je-li parametr relation2 roven NULL (NIL), pak jde o vztah 1:N, obsahuje-li jméno relace, jde o vztah M:N zadaný dvojicí relation1 a relation2 (detaily viz kapitola Vytváření aplikací).

Funkce (zavolaná např. stiskem tlačítka) otevře na obrazovce formulář specifikovaný parametrem viewdef případně přesměrovaný na kurzor zadaný parametrem base (pokud tento není roven NO_REDIR) a umožní uživateli, aby vybral jeden záznam (není-li zadán parametr relation2) nebo množinu záznamů (je-li zadán parametr relation2). Záznam se vybere stejným způsobem jako při přivazování záznamů k ukazateli, tedy stiskem tlačítka v levé části formuláře. Při vybrání resp. zrušení vybrání záznamu funkce propojuje resp. ruší propojení: buď zapisováním hodnot do spojovacího sloupce (1:N) nebo vkládáním a rušením záznamů ve spojovací tabulce (M:N).

Parametrem hView může být buď konstanta NULL (NIL ve vnitřním jazyce, NULL_WINDOW_ID v Pascalu), nebo proměnná. V druhém případě funkce zapíše do této proměnné identifikace otevřeného formuláře a tuto proměnnou si zapamatuje. Jakmile bude formulář uzavřen, WinBase602 zapíše do této proměnné nulu. Díky tomu může program snadno zjistit, že uživatel uzavřel tento formulář.

Funkce se běžně volá stiskem tlačítka ve formuláři. Odpovídá akci Otevřít relační formulář.

Hodnota funkce

Pokud se podaří formulář otevřít, funkce vrací jeho identifikaci nebo hodnotu 1, jde-li o modální formulář.  Při chybě vrací nulu.


Procedura Release_semaphore
Release_semaphore	[...S]

PROCEDURE Release_semaphore(IN shandle INT);

Parametry

shandle	identifikace (handle) otevřeného semaforu

Od verze:

6.1

Popis

Procedura je určena výhradně k použití v příkazech jazyka SQL.

Procedura otevře semafor pro vstup dalšího vlákna.

Pokud na zvednutí tohoto semaforu čekají ve funkci Wait_for_semaphore nějaká jiná vlákna, je jedno z nich uvolněno a může pokračovat. Pokud na zvednutí semaforu nečeká žádné vlákno, zvětší se o jedničku počet vláken, které tímto semaforem mohou projít bez čekání.

Více o synchronizaci vláken - podrobnosti.

Viz

Create_semaphore, Release_semaphore, Wait_for_semaphore,


Funkce Relist_objects
Relist_objects	[ICP]

function Relist_objects : Boolean;

BOOL [cd_]Relist_objects([cdp_t cdp]);

function [cd_]Relist_objects([cdp : cdp_t]) : Boolean;

Parametry

[cdp	kontextová proměnná klienta]

Popis

Funkce zajistí, že v popisu aplikace na řídicím panelu budou aktuální objekty. K nesouladu mezi současným stavem a stavem po otevření aplikace (signalizovaném na řídicím panelu) může dojít tehdy, provedete-li z programu funkci SQL_execute s parametrem CREATE TABLE (VIEW, PROCEDURE, TRIGGER) nebo DROP TABLE (VIEW, PROCEDURE, TRIGGER). Pak vznikne nebo zanikne objekt, aniž by se o tom dověděl řídicí panel aplikace. Proto takto vytvořený objekt by po doběhnutí programu na panelu scházel a zrušený objekt by se na něm naopak nacházel.

Tomuto nekonzistentnímu stavu zabráníte tím, že zavoláte funkcí Relist_objects. Tato funkce zjistí momentální seznam objektů patřících k aplikaci a aktualizuje obsah řídicího panelu.

Při interaktivním způsobu práce ve vývojovém prostředí nemůže k tomuto stavu dojít.

Hodnota funkce

Funkce při chybě vrátí TRUE, při úspěchu FALSE.

Příklad

if not Find_object('TAB1',categ_table, pozice) then

  if SQL_execute('DROP TABLE TAB1')

    then Info_box('Chyba', int2str(Sz_error))

    else Relist_objects;

Viz

SQL_execute


Funkce Repl_control
Repl_control	[ICP]

function Repl_control(optype, opparsize : integer; var opparam): Boolean;

BOOL [cd_]Repl_control([cdp_t cdp], int optype, int opparsize, void *opparam);

function [cd_]Repl_control([cdp : cdp_t]; optype, opparsize : integer; var opparam): Boolean;

Parametry

optype -
opparsize -
opparam -
[cdp	kontextová proměnná klienta]

Od verze:

6.0

Popis

Obecná funkce pro řízení replikací.

V současné verzi je zpřístupněn jediný význam této funkce - synchronizovat sdílenou aplikaci (prohlásit její obsahy na obou stranách ze shodné ve smyslu replikací). Za normálního provozu by ke stavu vyžadujícímu synchronizaci dat nemělo docházet.

Hodnota funkce

Funkce vrací TRUE při chybě.

Příklad:

jediné povolené použití funkce - synchronizace sdílené aplikace z programu:

if Find_object("WB6_BRNO", CATEG_SERVER, servnum) then Signalize

else begin

  Repl_control(100,2,servnum);

end;

Viz

Areplicate, Replicate,


Funkce Replicate
Replicate	[ICP]

function Replicate (var servername, applname : string; pull : Boolean) : Boolean;

BOOL [cd_]Replicate([cdp_t cdp,] const char * servername, const char * applname, BOOL pull);

function [cd_]Replicate([cdp : cdp_t;] servername, applname : PChar; pull : Boolean) : Boolean;

Parametry

[cdp	kontextová proměnná klienta]
servername	jméno serveru
applname	jméno aplikace
pull	směr replikací

Od verze:

6.0

Popis

Jedná se o neinteraktivní obdobu funkce Areplicate, tedy okamžité provedení replikační akce jedním nebo druhým směrem. Je-li parametr pull roven FALSE, vytvoří se pro protější server (zadaný svým jménem servername) replikační paket. Je-li parametr pull roven TRUE, zašle se protějšímu serveru žádost o replikaci.

Aby funkce měla smysl, předpokládá se navázané sdílení aplikace aplname.

Hodnota funkce

Funkce vrací TRUE při chybě

Viz

Areplicate, Repl_control,


Funkce Reset
Reset	[I..]

function Reset(var f : file;  var filename : string) : Boolean;

Parametry

f	otevíraný soubor
filename	jméno souboru

Popis

Funkce Reset otevírá existující textový soubor f (f je proměnná typu File). Parametr filename musí označovat jméno existujícího souboru (vytvořené podle konvencí operačního systému). Obsah souboru otevřeného funkcí Reset lze číst, lze do něj však i zapisovat.

Hodnota funkce

Funkce vrací hodnotu TRUE, pokud se soubor podařilo otevřít, jinak vrací FALSE.

Příklad

var

  f  : file;

begin

  Reset(f,"C:\WB602\POKUS.TXT");

  ...

  Close(f);

end.

Viz

Read, Write, Writeln, Rewrite, Close, Eof, Seek, Filelength.


Procedura Reset_view
Reset_view	[ICP]

procedure Reset_view(hView : window_id; intrec : trecnum; extent : short);

void Reset_view(window_id hView, trecnum intrec, int extent);

procedure Reset_view(hView : window_id; intrec : trecnum; extent : integer);

Parametry

hView	identifikace (handle) formuláře
intrec	interní (pořadové) číslo záznamu ve formuláři
extent	rozsah akcí

Popis

Procedura Reset_view uvádí do souladu obsah formuláře na obrazovce s obsahem databáze: přitom data v databází určují, co bude na obrazovce, nikoli naopak. Funkce se volá poté, co program nebo činnost uživatele v jiném formuláři způsobily, že obsah formuláře již neodpovídá obsahu databáze.Proceduře odpovídá ekvivalentní metoda formuláře Reset_view (i když při důsledné objektové práci s formulářem a zápisem změn pomocí složek formuláře není aktualizace potřebná).

Aktualizuje se obsah té části formuláře hView, která obsahuje záznam číslo intrec. Je-li parametr intrec roven -1, pak se aktualizuje celý obsah okna. U formulářů, které mají v okně pouze jeden záznam, se požívá hodnota -1.

Proceduru Reset_view je účelné volat tehdy, pokud v důsledku editačních akcí programu (přepsání, smazání či vložení) nastane situace, v níž obsah formuláře otevřeného na obrazovce již není aktuální.

Parametr extent procedury Reset_view specifikuje rozsah činnosti této funkce. Jeho možné hodnoty jsou označeny konstantami použitelnými i z vnitřního jazyka:

•	RESET_VISIBILITY (0) - zajistí, že složky formuláře budou viditelné a aktivní v souladu s podmínkami viditelnosti a aktivity zadanými v návrhu formuláře.

•	RESET_CONTROLS (1) - zajistí, že obsah složek formuláře bude odpovídat obsahu vyrovnávací paměti formuláře a navíc dělá to, co RESET_VISIBILITY. Odpovídá standardní akci Překreslit formulář.

•	RESET_DELETIONS (5) - zajistí, že se ve formuláři objeví záznamy, přidané do tabulky nebo do kurzoru, do nichž formulář vede. Pokud ve formuláři nemají být zrušené záznamy, pak z formuláře odstraní ty záznamy, které byly v tabulce nebo kurzoru zrušeny. Kurzor se znovu nepřebudovává, tzn. že záznam přidaný do kurzoru se objeví až na jeho konci bez ohledu na třídění a záznam přidaný do tabulky se v otevřeném kurzoru do téže tabulky neobjeví. Navíc dělá to, co RESET_CONTROLS.

•	RESET_CACHE (256) - provede nové naplnění vyrovnávací paměti klienta (tj. obsah formuláře) daty z databáze (záznamy v kurzoru dostanou aktuální obsah, avšak nově vložené záznamy se neobjeví).

•	RESET_CURSOR (512) - způsobí zavření a opětovné otevření kurzoru. Tím se aktualizuje setřídění záznamů a jejich výběr do kurzoru (v případech, kdy tentýž nebo jiní klienti zapisují přímo do tabulek, z nichž kurzor vznikl). Navíc dělá to, co RESET_CACHE+RESET_DELETIONS. Při použití na proměnný kurzor v programech bývá často jedinou možností proměnný kurzor explicitně zavřít a otevřít a poté opět vnutit formuláři (Close_cursor a Open_sql_cursor a Set_fcursor) - je tím zaručeno, že číslo kurzoru přidělené proměnné typu cursor je stále platné (i když odlišné od prvního otevření kurzoru). V opačném případě se nutné pečlivě sledovat správu kurzorů (možná chyba Špatné číslo kurzoru nebo hláška při skončení Program neuzavřel všechny kurzory). Prakticky lze tuto konstantu použít pro formuláře vedoucí do tabulky, pevného kurzoru nebo ODBC kurzoru.

•	RESET_SYNCHRO (1024) - překreslí superformulář včetně nového naplnění relačních subformulářů.

•	RESET_COMBOS (2048) - ve formuláři se aktualizuje obsah comb plněných dotazem (nezaměňujte se stejnojmennou metodou složky formuláře typu combo, která combo naplní hodnotami zcela jiného dotazu).

Z prvních tří konstant se vybere nejvýše jedna a dle potřeby se sečte se čtvrtou nebo pátou konstantou. Poslední dvě konstanty se používají většinou samostatně.

Pokud byl obsah formuláře uživatelem změněn a nebyl zapsán do databáze, pak voláním Reset_view s konstantou RESET_DELETIONS,  RESET_CACHE nebo RESET_CURSOR jsou změny ztraceny. Pokud chcete změny zapsat do databáze, musíte předem formulář s obsahem databáze synchronizovat (např. standardní akcí Uložit změny nebo metodou Commit_view).

Příklad

procedure RestoreBook(code : string[8]);

{*************************************}

// akce 'Vrácení knihy'

var

  cis_exist : integer;

begin

  zrusitAkci := true;

  pomsinp := 'Kód knihy (pro vrácení)';

  Open_view('*Inputbox',no_redir,MODAL_VIEW,0,0,idinpb); // modální formulář

  if not zrusitAkci and

     Exists(inpcode,cis_exist) then begin    // kontrola existence knihy

       Knihy[cis_exist].kdo := noneshort;

       Knihy[cis_exist].vypujcena := false;

       Knihy[cis_exist].dat_vyp := nonedate;

       Knihy[cis_exist].dat_vra := nonedate;

       Reset_view(idsub,-1,RESET_CONTROLS+RESET_CACHE);

  end;

end;

Viz

Commit_view, Open_sql_cursor, Close_cursor, Set_fcursor,


Funkce Restore_cursor
Restore_cursor	[I..]

function Restore_cursor(var curs : tcursnum) : Boolean;

Parametry

curs	otevřený subkurzor vytvořený funkcí Restrict_cursor

Popis

Procedura Restore_cursor uzavře subkurzor curs a nahradí ho původním kurzorem. Po provedení této procedury označuje identifikátor kurzoru původní kurzor, tak jak byl definován před provedením první funkce Restrict_cursor. Procedura Restore_cursor tedy odstraní efekt všech funkcí Restrict_cursor provedených nad kurzorem curs.

Pokud po provedení funkce Restrict_cursor ukončíte program bez proběhnutí Restore_cursor, zůstane otevřen jeden proměnný kurzor a program oznámí Nejsou uzavřeny všechny kurzory.

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize.

Příklad

var

  id_p : window_id;

cursor

  SEZN_5000;

begin

   ...

   Open_cursor(SEZN_5000);

{ otevření kurzoru, který má v části WHERE podmínku PLAT>5000 }

   if not Restrict_cursor(SEZN_5000,"PLAT>7000") then

  { zúžení kurzoru podmínkou PLAT>7000 }

     Open_view("*ZAMĚST4",SEZN_5000,0,0,0,id_p);

  { otevření pohledu s přesměrováním na zúžený kurzor }

     ...

    Restore_cursor(SEZN_5000);

 { návrat k původnímu kurzoru }

    Open_view("*ZAMĚST4",sezn_5000,0,0,0,id_p);

 { otevření pohledu do původního kurzoru }

end

Viz

Open_cursor, Open_sql_cursor, Close_cursor, Restrict_cursor.


Funkce Restore_table
Restore_table	[ICP]

function Restore_table(table : ttablenum; var filename : string) : Boolean;

BOOL Restore_table(ttablenum table,  const char * filename);

function Restore_table(table : ttablenum;  filename : PChar) : Boolean;

Parametry

table	tabulka deklarovaná v programu - viz podrobnosti
filename	jméno souboru (dle konvencí operačního systému)

Popis

Od verze 3.0 se jedná o funkci zastaralou, plně později nahrazenou obecnější funkcí Move_data.

Funkce Restore_table přečte soubor filename obsahující záznamy z tabulky uložené ve vnitřním tvaru WinBase602 a přidá tyto záznamy do tabulky table. Soubor filename musel vzniknout voláním funkce Save_table (resp. exportem dat ve vnitřním tvaru) pro stejnou tabulku, jinak je chování této funkce nedefinované.

V programu ve vnitřním jazyce smí být parametrem table jak číslo tabulky získané voláním funkce Find_object, tak i tabulka deklarovaná v tomto programu.

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize.

Viz

Save_table, Move_data


Funkce Restrict_cursor
Restrict_cursor	[I..]

function Restrict_cursor(var curs : tcursnum; var condition : string) : Boolean;

Parametry

curs	otevřený kurzor (pevný nebo proměnný) - viz podrobnosti
condition	text podmínky ve tvaru výrazu typu Boolean

Popis

Funkce Restrict_cursor vytvoří subkurzor kurzoru curs tak, že z něj vybere pouze ty záznamy, které splňují zadanou podmínku. Tímto subkurzorem nahradí původní kurzor, takže všechny operace s kurzorem curs se budou provádět s vytvořeným subkurzorem. Každé další použití funkce Restrict_cursor na tentýž kurzor způsobí zesílení celkové podmínky (podmínky se spojují spojkou AND). Odstranění podmínek přidaných všemi provedeními funkce Restrict_cursor lze provést pouze najednou, a to funkcí Restore_cursor. Není-li  v programu provedeno odstranění dodatečných podmínek, bude program při skončení hlásit Program neuzavřel všechny kurzory.

Funkci Restrict_cursor má smysl používat především na pevné kurzory (dotazy uložené v databázi) otevřené funkcí Open_cursor.

Použití na proměnné kurzory je také možné, z hlediska optimalizace dotazu může však být rychlejší místo Restrict_cursor použít dvojici funkcí Close_cursor a Open_sql_cursor se zesílenou podmínkou.

V externích jazycích tuto funkci nahrazuje funkce Open_subcursor.

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize. Doporučujeme vždy testovat výsledek této funkce.

Příklad

var

  id_p : window_id;

cursor

  SEZN_5000;

begin

   ...

   Open_cursor(SEZN_5000);

// otevření kurzoru, který má v části WHERE podmínku PLAT>5000

   if not Restrict_cursor(SEZN_5000,"PLAT>7000") then

// zúžení kurzoru podmínkou PLAT>7000

   Open_view("*ZAMĚST4",SEZN_5000,0,0,0,id_p);

// otevření pohledu s přesměrováním na zúžený kurzor

  ...

    Restore_cursor(SEZN_5000);

// návrat k původnímu kurzoru

    Open_view("*ZAMĚST4",sezn_5000,0,0,0,id_p);

// otevření pohledu do původního kurzoru

    Close_cursor(SEZN_5000);

end

Viz

Open_cursor, Open_sql_cursor, Close_cursor, Restore_cursor.


Funkce Rewrite
Rewrite	[I..]

function Rewrite(var f : file;  var filename : string) : Boolean;

Parametry

f	proměnná typu soubor (File)
filename	jméno souboru

Popis

Funkce Rewrite vytváří nový textový soubor f. Parametr filename označuje jméno, které se přidělí tomuto souboru (vytvořené podle konvencí operačního systému). Pokud soubor stejného jména již existuje, je zrušen a je založen znovu. Do souboru otevřeného funkcí Rewrite lze zapisovat, zapsané údaje lze i číst.

Hodnota funkce

Funkce vrací hodnotu TRUE, pokud se soubor podařilo vytvořit, jinak vrací FALSE. Do souboru otevřeného funkcí Rewrite lze zapisovat, zapsané údaje lze však i číst.

Příklad

var

  f  : file;

begin

  Rewrite(f,"C:\WB602\POKUS.TXT");

  ...

  Close(f);

end.

Viz

Read, Write, Writeln, Reset, Close, Eof, Seek, Filelength.


Funkce Roll_back
Roll_back	[ICP]

function Roll_back : Boolean;

BOOL [cd_]Roll_back([cdp_t cdp]);

function [cd_]Roll_back([cdp : cdp_t]) : Boolean;

Parametry

[cdp	kontextová proměnná klienta]

Popis

Funkce Roll_back zruší rozpracovanou transakci zahájenou funkcí Start_transaction a zajistí, že žádné změny, které byly od zahájení transakce provedeny, se nepromítnou do databáze. Pokud žádná transakce není zahájena, funkce neudělá nic.

Více o transakcích naleznete na stránkách popisu jazyka SQL.

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést, nebo pokud žádná transakce není zahájena. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize.

Viz

Commit, Start_transaction, Set_transaction_isolation_level


Funkce Roll_back_view
Roll_back_view	[ICP]

procedure Roll_back_view(hView : window_id);

void Roll_back_view(window_id hView);

procedure Roll_back_view(hView : window_id);

Parametry

hView	identifikace (handle) otevřeného formuláře

Popis

Procedura Roll_back_view odvolá změny v aktuálním záznamu v záznamově synchronizovaném formuláři hView a překreslí formulář zpět s hodnotami z databáze. Často se používá jako součást procedury volané po stisku uživatelského tlačítka Zrušit akci.

Procedura odpovídá akci Odvolat změny ve formuláři.

Příklad

Roll_back_view(ID_FORM1)

viz

Commit_view


Funkce Round
Round	[I..S]

function Round(r : real) : integer;

Parametry

r	reálné číslo z intervalu hodnot typu Integer

Popis

Funkce Round zaokrouhlí reálné číslo na nejbližší celé číslo.

Hodnota funkce

Funkce vrací celé číslo nejbližší hodnotě parametru. Pokud je hodnota parametru funkce mimo rozsah typu Integer, není hodnota funkce definována.

Příklad

Round(-1.5) vrátí hodnotu -2

Round(1.5) vrátí hodnotu 2

Viz

Trunc.


Funkce Save_table
Save_table	[ICP]

function Save_table(table : ttablenum; var filename : string) : Boolean;

BOOL Save_table(ttablenum table,  const char * filename);

function Save_table(table : ttablenum;  filename : PChar) :
Boolean;

Parametry

table	tabulka deklarovaná v programu - viz podrobnosti
filename	jméno souboru (dle konvencí operačního systému)

Popis

Od verze 3.0 se jedná o funkci zastaralou, plně později nahrazenou obecnější funkcí Move_data.

Funkce Save_table zapíše do souboru filename celý obsah tabulky  table ve vnitřním tvaru WinBase602. Takto vzniklý soubor lze použít pro import dat do stejné tabulky (ručně z vývojového prostředí nebo voláním funkce Restore_table).

V programu ve vnitřním jazyce smí být parametrem table jak číslo tabulky získané voláním funkce Find_object, tak i tabulka deklarovaná v tomto programu.

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize.

Viz

Restore_table, Move_data


Funkce Sec1000
Sec1000	[ICPS]

function Sec1000(tm : time) : integer;

int Sec1000(uns32 tm);

function Sec1000(tm : uns32) : integer;

Parametry

tm	údaj o čase ve vnitřním formátu WinBase602

Popis

Funkce Sec1000 extrahuje počet tisícin sekundy z časového údaje.

Hodnota funkce

Funkce vrací počet tisícin sekundy z intervalu 0 až 999. Čas získaný od OS funkcí Now je bez tisícin sekundy.

Viz

Make_date, Day, Month, Year, Today, Make_time, Hours, Minutes, Seconds, Now.


Funkce Seconds
Seconds	[ICPS]

function Seconds(tm : time) : integer;

int Seconds(uns32 tm);

function Seconds(tm : uns32) : integer;

Parametry

tm	údaj o čase ve vnitřním formátu WinBase602

Popis

Funkce Seconds extrahuje počet sekund z časového údaje.

Hodnota funkce

Funkce vrací počet sekund v intervalu 0 až 59.

Viz

Make_date, Day, Month, Year, Today, Make_time, Hours, Minutes, Sec1000, Now.


Funkce Seek
Seek	[I..]

function Seek(var f : file;  position : integer) : Boolean;

Parametry

f	proměnná typu File
position	pozice v souboru (nezáporné číslo)

Popis

Funkce nastaví pozici v souboru f na hodnotu zadanou druhým parametrem. Soubor musí být otevřen.

Pozice v souboru určuje místo, kam se do souboru bude zapisovat následující procedurou Write (Writeln), resp. odkud se bude číst funkcí Read.

Při použití funkce Eof pro zjištění konce souboru f nezapomeňte, že funkce Eof přeskakuje mezery mezi slovy.

Hodnota funkce

Funkce vrátí TRUE pokud soubor f je otevřen, jinak vrátí FALSE.

Příklad:

procudera, která přidá na konec textového souboru další řádek

procedure Zapis(ss : string[50]);

begin

 Reset(f,"C:\wb602\test.txt");

 Seek(f,FileLength(f));

 WriteLn(f,ss," ",strcat("cyklus #",int2str(i))," ",Now);

 Close(f);

end;

Viz

Read, Write, Writeln, Reset, Rewrite, Close, Eof, Filelength.


Funkce Select_directory
Select_directory	[ICP]

function Select_directory(hParent : window_id; var dirname : string) : Boolean;

BOOL Select_directory(window_id hParent, char *dirname);

function Select_directory(hParent : window_id; dirname : PChar) : Boolean;

Parametry

hParent	identifikace (handle) formuláře, který má být vždy pod otevíraným dialogem, nebo nula
dirname	vstupní i výstupní parametr - cesta k adresáři

Popis

Funkce otevře na obrazovce nad formulářem specifikovaným v hParent dialog pro výběr adresáře.  Jedná se o upravený standardní dialog pro uložení souboru. V dialogu bude nastavena jednotka i adresář analyzované z parametru dirname.

Parametr dirname  musí být před voláním funkce inicializován. Po ukončení funkce stiskem tlačítka Uložit v dialogu se do parametru dirname zapíše cesta k novému adresáři.

Hodnota funkce

Pokud se podaří vybrat soubor, funkce vrací TRUE, jinak vrací FALSE.

Příklad

var

  zaldir : string[200];

begin

   zaldir := "c:\zaloha";

   if Select_directory(0,zaldir) then ZalohujData(zaldir);

   ...

end.

Viz

Select_file


Funkce Select_file
Select_file	[ICP]

function Select_file(hParent : window_id;  var filename : string) : Boolean;

BOOL Select_file(window_id hParent, char *filename);

function Select_file(hParent : window_id;  filename : Pchar) : Boolean;

Parametry

hParent	identifikace (handle) formuláře, který má být pod otevíraným dialogem, nebo nula
filename	vstupní i výstupní parametr - plné jméno souboru

Popis

Funkce otevře na obrazovce nad formulářem specifikovaným v hParent standardní dialog pro otevření souboru (selektor souborů). V dialogu bude nastaven disková jednotka, adresář i jméno souboru analyzované z plného  jména souboru filename. Ve jménu souboru mohou být použita i hvězdička jako zástupný znak pro množinu souborů.

Parametr filename musí být před voláním funkce inicializován.

Po ukončení funkce stiskem tlačítka Otevřít v dialogu se do parametru filename zapíše plné jméno (i s cestou) vybraného souboru.

Hodnota funkce

Pokud se podaří vybrat soubor, funkce vrací TRUE, jinak vrací FALSE.

Příklad

vytvoření nového souboru a jeho otevření a zavření:

var

  name : string[100];

  f : file;

begin

   name := "d:\*.txt";

   if Select_file(0,name) then

     if Rewrite(f,name) then

     ...

     Close(f);

end.

viz

Select_directory


Funkce Select_records
Select_records	[ICP]

function Select_records(var viewdef : string;  base : tcursnum; flags : short;  limit : short;  var bindl; hParent : window_id;  var hView : window_id) : window_id;

window_id Select_records(const char *viewdef, tcursnum base, uns32  flags, int limit, trecnum *bindl, void *reserved, window_id hParent, window_id *hView);

function Select_records(viewdef : PChar; base : tcursnum; flags : uns32;  limit : integer; var bindl; var reserved; hParent : window_id; var hView : window_id) : window_id;

Parametry

viewdef	specifikace formuláře, který má být otevřen
base	otevřený kurzor nebo konstanta NO_REDIR
flags	viz Parametry otevření formuláře
limit	maximální počet vybraných záznamů (číslo větší nebo rovno 1)
bindl	pole složek typu  trecnum (viz popis níže)
reserved	procedura vyhrazená pro budoucí použití, zadejte NULL resp. NIL;
hParent	identifikace (handle) formuláře, který má být vždy pod otevíraným formulářem, nebo nula
hView	vrací identifikaci (handle) otevřeného formuláře

Popis

Funkce Select_records slouží k výběru záznamu nebo množiny záznamů z tabulky nebo kurzoru. Procedura otevře na obrazovce formulář specifikovaný parametrem viewdef případně přesměrovaný na kurzor zadaný parametrem base (pokud tento není roven NO_REDIR) a umožní uživateli, aby vybral určité záznamy. Záznamy se vybírají stejným způsobem jako při přivazování záznamů k ukazateli (tj. stiskem tlačítka, které se objeví v levé části formuláře). Program se pak může dozvědět absolutní čísla těchto vybraných záznamů.

Vybrané záznamy se zaznamenají v poli bindl. Počet složek pole bindl musí být bezpodmínečně alespoň o 1 větší, než je hodnota parametru limit. První složka pole bindl obsahuje počet vybraných záznamů, další složky pak obsahují čísla vybraných záznamů. Čísla vybraných záznamů v poli bindl jsou absolutními čísly záznamů v kurzoru (tabulce), do něhož formulář vede. Případný QBE dotaz při vybírání záznamů nemá vliv na hodnotu v poli bindl. Čísla záznamů se v tomto případě automaticky přepočítají na původní kurzor.

Obsah pole bindl má význam nejen po, ale i před voláním Select_records. Program může do pole bindl zapsat čísla nějakých ”předem” vybraných záznamů, a musí do první složky pole zapsat jejich počet. Pokud žádné záznamy nemají být vybrány předem, je nutno před voláním Select_records do první složky pole bindl zapsat nulu.

Parametr hParent má hodnotu jinou než nula pouze tehdy, pokud si přejeme, aby se otevíraný formulář nemohl ocitnout nikdy pod (dříve otevřeným) formulářem hParent.

Parametrem hView může být buď konstanta NULL (NIL ve vnitřním jazyce, NULL_WINDOW_ID v Pascalu), nebo proměnná. V druhém případě funkce zapíše do této proměnné identifikaci otevřeného formuláře a tuto proměnnou si zapamatuje. Jakmile bude formulář uzavřen, WinBase602 zapíše do této proměnné nulu. Díky tomu může program snadno zjistit, že uživatel uzavřel některý formulář.

Hodnota funkce

Pokud se podaří formulář otevřít, funkce vrací jeho identifikaci nebo hodnotu 1, jde-li o modální formulář. Při chybě vrací nulu.

Příklad

var

  pole : array[0..10] of trecnum;

  id : window_id;

  i : short;

cursor

  CURS;

begin

Open_cursor(CURS);

pole[0]:=0;

if Select_records('*FORM1', CURS,

    NO_INSERT+NO_DELETE, 10, pole,

    0, id) <> 0 then

  while (id!=0) do Peek_message(MSG) ;

{ čekání, až uživatel sám zavře formulář }

  for i := 1 to pole[0] do

    CURS[pole[i]].plat := CURS[pole[i]].plat + 1000;

{ ručně vybraným zaměstnancům se zvýší plat }

Close_cursor(CURS);

end.


Funkce Send_message
Send_message	[I..]

function Send_message(hView : window_id;  msg : short;  wParam : short;  lParam : integer) : integer;

Parametry

hView	identifikace (handle) formuláře
msg	číslo zprávy
wParam	první parametr zprávy
lParam	druhý parametr zprávy

Popis

Funkce Send_message zasílá zprávu  msg oknu  hView. Zpráva má parametry  wParam a  lParam, jejichž význam závisí na druhu zprávy. Zpráva je oknu doručena ihned a okno na ní ihned reaguje.

Funkce přímo volá API funkci Windows SendMessage vrací její výsledek. V externích jazycích volejte sami funkci SendMessage.

Zprávy jsou obecně označeny konstantami začínajícími SZM_., ve vnitřním jazyce je nutno použít číselné hodnoty uvedené v závorce.

Od verze 6.0 je zasílání zpráv oknu formuláře ve většině významných případů nahrazeno voláním ekvivalentních metod formuláře.

Zprávy zasílané okenní funkci

Přechody mezi záznamy ve formuláři

SZM_NEXTREC (1584): přechod na následující záznam

SZM_PREVREC(1585): přechod na předchozí záznam

SZM_FIRSTREC(1586): přechod na první záznam

SZM_LASTREC(1587): přechod na poslední záznam

SZM_NEXTPAGE(1588): přechod o stránku dopředu

SZM_PREVPAGE(1589): přechod o stránku zpět

Přechody mezi složkami v záznamu (v obecném formuláři závisejí na zadaném pořadí složek)

SZM_FIRSTITEM(1590): přechod na první složku v záznamu

SZM_LASTITEM(1591): přechod na poslední složku v záznamu

SZM_NEXTTAB(1592): přechod na následující složku, kterou lze vybrat TABem

SZM_PREVTAB(1593): přechod na předchozí složku, kterou lze vybrat TABem

SZM_UPITEM(1595): přechod o složku výše

SZM_DOWNITEM(1594): přechod o složku níže

SZM_SETIPOS(1601): přechod na složku s identifikací určenou ve wParam

Kladení dotazů ve formuláři

SZM_QBE(1598): otevření okna pro zadaní dotazu

SZM_ORDER(1612): otevření okna pro zadání uspořádání

SZM_ACCEPT_Q(1614): konec zadávání dotazu nebo uspořádání, aplikace dotazu resp. uspořádání

SZM_UNLIMIT(1599): odstranění položeného dotazu a zadaného uspořádání, návrat k původnímu obsahu formuláře

Rušení a vkládání:

SZM_DELREC(1603): zrušení vybraného záznamu; vrací 2 při úspěchu; vrací 0, pokud ve formuláři nelze rušit záznamy; vrací 1, pokud při rušení záznamu došlo k chybě nebo pokud uživatel nepotvrdil zrušení záznamu.

SZM_DELALL(1604): zrušení všech záznamů ve formuláři bez dotazu.

SZM_DELASK(1607): zrušení všech záznamů ve formuláři po potvrzení uživatelem.

SZM_INSERT(1602): vloží záznam do formuláře. Vrací pořadové číslo vloženého záznamu ve formuláři, vrací -1 při chybě nebo pokud nelze vkládat záznamy.

Ostatní

SZM_PRINT(1613): otevře okno s parametry tisku a umožní vytisknout obsah formuláře

SZM_LOCKS(1628): otevře dialogové okno pro zamykání formuláře a jeho plnění novým obsahem

SZM_INDEX(1596): otevře systémový formulář do hodnot multiatributu, lze použít pouze na složce s multiatributem následovaným prázdným indexem [ ]

SZM_BIND(1600): přivazuje nebo odvazuje záznam, jehož pořadové číslo je v lParam. Použitelné pouze ve vázacích formulářích.

Hodnota funkce

Funkce vrací reakci formuláře hView na doručenou zprávu (pouze v několika výše uvedených případech).


Funkce send_package
send_package	[.CP]

void [cd_]send_package([cdp_t cdp]);

function [cd_]send_package ([cdp : cdp_t]) : Boolean;

Parametry

[cdp	kontextová proměnná klienta]

Popis

Funkce odešle serveru balík požadavků nashromážděných od volání funkce start_package. Pokud žádný takový balík neexistuje, funkce neprovádí nic.

Je-li některá funkce generující požadavek na jádro zavolána uvnitř balíku, pak po jejím provedení jsou hodnoty jejích výstupních parametrů nedefinovány. Parametry nabudou hodnot až po provedení procedury send_package. Je-li navíc zapnuto souběžné zpracování, je třeba dokončení požadavku send_package zjistit voláním funkce answered.

Při použití balíků se komplikuje sledování chyb a varování. Platí, že zpracování balíku se ukončuje při výskytu první chyby. Číslo této chyby pak vrací funkce Sz_error. Funkce Sz_warning vrací sjednocení všech varování, která se při zpracování balíku vyskytla.

Hodnota funkce

Funkce vrátí TRUE pokud se při plnění některého z odeslaných požadavků vyskytla chyba. O který požadavek šlo, nelze zjistit.

Viz

start_package, answered


Funkce Set_appl_starter
Set_appl_starter	[ICP]

function Set_appl_starter (categ : tcateg; var objname : string) : Boolean;

BOOL [cd_]Set_appl_starter ([cdp_t cdp,] tcateg categ, const char * objname);

function [cd_]Set_appl_starter (categ : tcateg; objname : PChar) : Boolean;

Parametry

categ	kategorie objektu - konstanty
objname	jméno objektu
[cdp	kontextová proměnná klienta]
Od verze

6.0

Popis

Funkce nastaví označený objekt jako startovní objekt. Startovním objektem může být formulář, program nebo menu. Funkce nekontroluje existenci objektu - pokud objname neexistuje v aplikaci, funkce odstraní dosavadní startovní objekt (a nenastaví žádný).

Hodnota funkce

Funkce vrací TRUE při chybě (neexistence objname není chyba).

Příklad:

Set_appl_starter(CATEG_PGMSRC,"Pokus") ;


Funkce Set_application
Set_application	[.CP]

BOOL [cd_]Set_application([cdp_t cdp], const char * applname);

function [cd_]Set_application([cdp : cdp_t]; applname : PChar) : Boolean;

Parametry

applname	jméno aplikace
[cdp	kontextová proměnná klienta]

Popis

Funkce Set_application volí, se kterou aplikací se bude v dalším pracovat. Volba aplikace provedená touto funkcí platí až do dalšího volání Set_application.

Doporučujeme volat Set_application ihned po provedení funkce Login. Použití - viz kostra aplikace v externím jazyce .

Ve vnitřním jazyce tato funkce není potřebná, protože aplikace je při běhu programu již zvolena.

Pokud je potřeba současně na číst i strukturu a obsah složek (folderů) aplikace a údaje o čase změny definice objektu (od verze 6.0), použijte funkci Set_application_ex.

Hodnota funkce

Funkce vrací FALSE, pokud se ji požadovanou aplikaci podařilo nalézt a otevřít, při chybě vrací TRUE.

Viz

Set_application_ex


Funkce Set_application_ex
Set_application_ex	[.CP]

BOOL [cd_]Set_application_ex([cdp_t cdp], const char * applname, BOOL extended);

function [cd_]Set_application_ex([cdp : cdp_t]; applname : Pchar; extended : Boolean) : Boolean;

Parametry

applname	jméno aplikace
extended	příznak načítání folderů
[cdp	kontextová proměnná klienta]

Od verze

6.0

Popis

Funkce Set_application_ex je rozšířením funkce Set_application. Volí, se kterou aplikací se bude v dalším pracovat. Lze navíc stanovit (parametr extended roven TRUE), aby se při otevírání aplikace načetl obsah a struktura složek (folderů) a datum poslední změny objektu. Otevírání aplikace bude v tomto případě pomalejší.

V současné verzi WinBase602 nejsou foldery ani data změn objektů programově zpřístupněny.

Ve vnitřním jazyce tato funkce není potřebná, protože aplikace je při běhu programu již zvolena.

Hodnota funkce

Funkce vrací FALSE, pokud se ji požadovanou aplikaci podařilo nalézt a otevřít, při chybě vrací TRUE.

Viz

Set_application


Funkce Set_cursor
Set_cursor	[I..]

function Set_cursor(tvar : short) : short;

Parametry

tvar	požadovaný tvar kurzoru myši

Popis

Funkce Set_cursor nastavuje tvar kurzoru spojeného s myší. Pokud je parametr tvar roven nule, nastaví obyčejný kurzor s šipkou, je-li roven jedné, nastaví kurzor s přesýpacími hodinami.

Toto nastavení platí pouze do té doby, dokud uživatel nepohne s myší a není doručena zpráva o této akci. Nastavení kurzoru ve tvaru hodin má smysl tehdy, pokud program provádí časově náročný výpočet, během něhož nezpracovává docházející zprávy (tedy nevolá funkci Get_message ani Peek_message).

Po ukončení programu se kurzor automaticky nastaví do tvaru šipky.

V externích jazycích lze využít stejně pojmenované funkce patřící do programového rozhraní Windows.

Hodnota funkce

Funkce vrací předchozí tvar kurzoru, tedy 1 pro hodiny a 0 pro šipku.

Příklad:

Ukázka, jak je možno v programu reagovat na déle trvající databázové akce - na počátku otevřít modální formulář, nastavit tvar kurzoru a překreslit status bar, na konci opak.

procedure WaitStart;

{*****************************}

begin

  Set_status_text("Probíhá delší akce...");

  Set_cursor(1);

  Open_view("*Wait",-1,0,0,0,idwait);

  Peek_message;

end;

procedure WaitEnd;

{*****************************}

begin

  Close_view(idwait);

  Set_cursor(0);

  Set_status_text("");

end;

procedure PodleJmenaPrekreslitIdadr;

{*****************************}

var

  ssql : string[200];

begin

  WaitStart;

  Close_cursor(cvyb);

  case volba of

    1 : ssql := "SELECT DISTINCT Adresar.* FROM Adresar,Registr WHERE (Registr.Cislo=Adresar.Cislo) AND (Registr.vyrizeno=false) AND (Registr.predano="""+mejmeno+""")";

    2 : ssql := "SELECT DISTINCT Adresar.* FROM Adresar,Registr WHERE (Registr.Cislo=Adresar.Cislo) AND (Registr.vyrizeno=false) AND (Registr.predano="""+voljmeno+""")";

  end;

  if Open_sql_cursor(cvyb,ssql) then Signalize;

  Set_fcursor(idadr,cvyb,-1);

  WaitEnd;

end;


Funkce Set_data_rights
Set_data_rights	[ICP]

function Set_data_rights(table : ttablenum; var username : string;  rights : short; var rd_ri :short; var wr_ri : short) : Boolean;

BOOL Set_data_rights(ttablenum table, const char * username,tright rights, tdright rd_ri, tdright wr_ri);

function Set_data_rights(table : ttablenum; username : PChar;rights : tright; rd_ri : tdright; wr_ri : tdright) : Boolean;

Parametry

table	tabulka deklarovaná v programu - viz podrobnosti
username	jméno uživatele
rights	základní práva uživatele k datům
rd_ri	rozšiřující práva ke čtení sloupců
wr_ri	rozšiřující práva k přepisování dat

Popis

Od verze 5.0 se jedná o funkci zastaralou a nepoužitelnou, plně nahrazenou obecnější funkcí GetSet_privils.

Funkce se používala k nastavení přístupová práva uživatele k datům v tabulce.

Viz

Get_object_rights, Get_data_rights, Set_object_rights, GetSet_privils


Funkce Set_ext_pos
Set_ext_pos	[ICP]

function Set_ext_pos(hView : window_id;  pos : trecnum; itemnum : short) : Boolean;

BOOL Set_ext_pos(window_id hView, trecnum pos, int itemnum);

function Set_ext_pos(hView : window_id;  pos : trecnum; itemnum : integer) : Boolean;

Parametry

hView	identifikace (handle) formuláře
pos	absolutní číslo záznamu
itemnum	číslo některé složky formuláře hView

Popis

Funkce Set_ext_pos způsobí, že ve formuláři hView bude vybraným záznamem záznam s absolutním číslem pos a vybranou položkou položka s číslem itemnum. Pokud parametr itemnum má hodnotu -1, pak se změní pouze vybraný záznam a vybraná položka zůstane beze změny.

Při objektovém způsobu programování formulářů se využívá obdobná metoda CurExtRec.

Hodnota funkce

Funkce vrací TRUE po úspěšném provedení akce, jinak vrací FALSE.

Příklad

Nekonečné prohlížení záznamů ve formuláři:

Procedure Dokola;

var

 i,j : integer;

 id : window_id;

begin

  Open_view('*POHL1',no_redir,0,0,0,id);

  repeat

    for i := 0 to 10 do begin

      Set_ext_pos(id, i, -1);

      Peek_message;

      for j := 1 to 1000;

    end;

  until false;

end;

Viz

Get_view_pos, Get_view_item, Set_int_pos, Set_view_item


Funkce Set_fcursor
Set_fcursor	[ICP]

function Set_fcursor(hView : window_id; curs : tcursnum; flags : short) : Boolean;

BOOL Set_fcursor(window_id hView, tcursnum curs, uns32 flags);

function Set_fcursor(hView : window_id;  curs : tcursnum; flags : uns32) : Boolean;

Parametry

hView	identifikace (handle) formuláře
curs	otevřený pevný nebo proměnný kurzor
flags	viz Parametry otevření formuláře

Popis

Funkce přesměruje již otevřený formulář hView na nový kurzor curs a předá formuláři nové parametry flags. Kurzor curs musí mít stejné složky jako kurzor, nad nimž je formulář otevřen, jinak je chování WinBase602 nedefinováno.

Je-li mezi parametry flags požadavek na uzavření kurzoru při uzavírání formuláře (AUTO_CURSOR), pak se vztahuje již k novému kurzoru curs. Je-li flags rovno -1, převezmou se původní parametry formuláře.

Před zavoláním funkce Set_fcursor je nutné pomocí Get_fcursor a Close_cursor zavřít původní kurzor formuláře. V opačném případě zůstane kurzor otevřený až do konce běhu programu a blokuje místo v paměti.

Pro provedení funkce Set_fcursor je rozumné volat proceduru Reset_view.

Od verze 6.0 lze ke změně zdroje dat pro formulář (a s velkou výhodou pro subformulář) využít také vlastnosti formuláře CursNum.

Hodnota funkce

Funkce vrací TRUE po úspěšném provedení akce, jinak vrací FALSE. Hodnota funkce neříká nic o tom, zda formulář bude schopen s dodaným kurzorem pracovat.

Příklad

sel := 'select * from Tab1 where ...' ;

if Open_sql_cursor(c2,sel) then Signalize;

Open_view('*pvybrsuper',no_redir,0,0,0,id_vyb);

{ otevření formuláře se subformulářem }

id_subvyb := GetDlgItem(id_vyb,3);

{ zjištění id subformuláře - pozor! externí funkce}

if Get_fcursor(id_subvyd,cx,fx) then

   Close_cursor(cx);

{ zavření původního kurzoru }

if Set_fcursor(id_subvyb,c2,-1) then

   Reset_view(id_subvyb,-1,1);

{ vnucení kurzoru c2 subformuláři}

Viz

Get_fcursor


Funkce set_first_label
Set_first_label 	[ICP]

procedure Set_first_label(posX, posY : integer);

void Set_first_label(unsigned posX, unsigned posY);

procedure Set_first_label(posX, posY : integer);

Parametry

posX, posY	souřadnice prvního štítku na stránce

Od verze:

5.0

Popis

Voláním procedury Set_first_label se z programu zadají souřadnice prvního štítku na stránce, kterou bude začínat tisk. Souřadnice štítku v levém horním rohu jsou 0,0.

Při tisku štítků se souřadnice automaticky posouvají, proto je někdy vhodné nechat uživatele ručně nastavit tuto pozici ještě před tiskem.

Příklad

if Get_fcursor(id_prehled,ctiskst,NIL) then begin

  if Find_object("Stitek3x7",CATEG_VIEW,objnum) then Signalize

  else begin

    View_pattern(objnum);

    Set_first_label(0,0);

    if Print_opt(0) then Print_view("*Stitek3x7",ctiskst,-1,-1);

  end;

end;

Viz

View_pattern, Page_setup, Printer_select, Print_margins


Funkce Set_int_pos
Set_int_pos	[ICP]

function Set_int_pos(hView : window_id;  pos : trecnum; itemnum : short) : Boolean;

BOOL Set_int_pos(window_id hView, trecnum pos, int itemnum);

function Set_int_pos(hView : window_id;  pos : trecnum; itemnum : integer) : Boolean;

Parametry

hView	identifikace (handle) formuláře
pos	interní číslo záznamu ve formuláři hView
itemnum	číslo některé složky formuláře hView

Popis

Funkce Set_int_pos způsobí, že ve formuláři hView bude vybraným záznamem záznam s pořadovým číslem pos a vybranou položkou položka s číslem itemnum. Pokud parametr itemnum má hodnotu -1, změní se pouze vybraný záznam a vybraná položka zůstane beze změny.

Častěji se však používá podobná funkce Set_ext_pos.

Při objektovém způsobu programování formulářů se využívá obdobná metoda CurPos.

Hodnota funkce

Funkce vrací TRUE po úspěšném provedení akce, jinak vrací FALSE.

Viz

Get_view_pos, Get_view_item, Set_ext_pos, Set_view_item


Funkce Set_item_value
Set_item_value	[ICP]

function Set_item_value(hView : window_id; intrec : trecnum; itemid : short; var value : untyped) : Boolean;

BOOL Set_item_value(window_id hView, trecnum intrec , int itemid, const char *value);

function Set_item_value(hView : window_id; intrec : trecnum; itemid : integer; value : PChar) : Boolean;

Parametry

hView	identifikace (handle) formuláře;
intrec	interní číslo záznamu;
itemid	číslo složky formuláře;
value	vstupní parametr: beztypová hodnota složky itemnum

Popis

Funkce nastaví nový obsah složky s číslem itemid v záznamu intrec ve formuláři hView. Hodnota musí být předem přiřazena do beztypové proměnné value.

Interní číslo záznamu ve formuláři lze zjistit voláním funkce Get_view_pos nebo lze předat z formuláře pomocí symbolu @@.

Funkce přibližně nahrazuje starší funkci Set_view_item, která pouze zapsala novou hodnotu do složky formuláře. Funkce Set_item_value navíc zapíše hodnotu do sloupce nebo proměnné, do níž složka vede.

Pokud formulář má nastaven příznak Ukládat po změně složky, pak zavolání této funkce zapíše nový obsah složky do databáze (resp. do proměnné projektu). V opačném případě se nová hodnota zapamatuje ve vyrovnávací paměti formuláře a do databáze se přepíše při opuštění záznamu nebo při provedení akce Uložit změny ve formuláři.

Pokud efekt této funkce má být viditelný na obrazovce, je nutno po jejím volání zavolat funkci Reset_view s parametrem RESET_CONTROLS (nikoliv RESET_CACHE nebo RESET_CURSOR) nebo provést akci Překreslit formulář.

Pokud tuto funkci voláte na formulář typu "pouze pro vstup dat", uveďte jako hodnotu parametru intrec nulu (intrec=0).

Od verze 6.0 lze k zápisu hodnot do složek formulářů využívat také vlastnosti složky Value a Text.

Hodnota funkce

Funkce vrací TRUE po úspěšném provedení akce, jinak vrací FALSE.

Příklad

spom := Parametry[0].sablonywt+'\*.WPT';

  if Select_file(idx,spom) then begin

    while SubStr("\",spom) do           // odstranění zp. lomítka

      StrDelete(spom,1,StrPos("\",spom));

    if SubStr(".",spom) then            // odstranění přípony

      StrDelete(spom,StrPos(".",spom),StrLength(spom)-StrPos(".",spom)+1);

    u := spom;

    if not Set_item_value(idx,rec,6,u) then Info_box('Chyba','Set_item_value');

    Reset_view(idx,-1, RESET_CONTROLS);

  end;

Viz

Get_item_value, Get_view_pos, Set_view_item


Funkce Set_object_rights
Set_object_rights	[ICP]

function Set_object_rights(var objname : string; category : short;  var username : string; rights : short) : Boolean;

BOOL Set_object_rights(const char * objname,  tcateg category, const char * username,  tright rights);

function Set_object_rights(objname : PChar;  category : tcateg; username : PChar;  rights : tright) : Boolean;

Parametry

objname	jméno objektu
category	kategorie objektu
username	jméno uživatele
rights	práva uživatele k objektu

Popis

Od verze 5.0 se jedná o funkci zastaralou, plně nahrazenou obecnější funkcí GetSet_privils, nicméně mnohem jednodušší a v jednoduchým případech použitelnou.

Funkce nastaví přístupová práva uživatele k objektu objname. Je-li parametr username prázdný řetězec, funkce pracuje s právy přihlášeného uživatele.

Parametr category musí být jedna z konstant CATEG_TABLE, CATEG_VIEW, CATEG_CURSOR, CATEG_MENU, CATEG_PGMSRC, CATEG_PGMEXE, CATEG_USER, CATEG_APPL, CATEG_PICT, CATEG_GROUP, CATEG_ROLE, CATEG_CONNECTION, CATEG_RELATION, CATEG_DRAWING, CATEG_GRAPH, CATEG_REPLREL, CATEG_PROC, CATEG_TRIGGER, CATEG_WWW, CATEG_SEQ, případně sjednocený s konstantou IS_LINK.

.

Parametr rights musí být jedním z RIGHT_READ (1), RIGHT_WRITE (2), RIGHT_DEL (8) ,  RIGHT_GRANT (128).

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Příklad

begin

   Set_object_rights("pohl1",CATEG_VIEW,"HONZA",RIGHT_READ);

end.

Uživateli HONZA jsme omezili práci s formulářem POHL1 pouze na čtení.

Viz

Set_data_rights, Get_data_rights,  Get_object_rights, GetSet_privils


Funkce Set_password
Set_password	[ICP]

function Set_password(var reserved, password : string);

BOOL [cd_]Set_password([cdp_t cdp], const char * reserved, const char * password);

function [cd_]Set_password([cdp : cdp_t]; reserved, password : PChar) : Boolean;

Parametry

reserved	rezervováno
password	heslo
[cdp	kontextová proměnná klienta]

Popis

Funkce nastaví nové heslo právě přihlášeného uživatele. Heslo smí mít nejvýše 100 znaků.

Heslo anonymního uživatele nelze změnit.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Viz

Insert_object, Create_user,


Procedura Set_printer
Set_printer	[ICP]

procedure Set_printer(firstrec, lastrec : trecnum; firstpage, lastpage, direction : short; var outfile : string;  leftmargin : short);

void Set_printer(trecnum firstrec, trecnum lastrec, int firstpage, int lastpage, int direction, const char *outfile, int leftmargin);

procedure Set_printer(firstrec, lastrec : trecnum; firstpage, lastpage, direction : integer; outfile : PChar; leftmargin : integer);

Parametry

firstrec	interní číslo prvního tištěného záznamu
lastrec	interní číslo posledního tištěného záznamu
firstpage	číslo první tištěné stránky
lastpage	číslo poslední tištěné stránky
direction	způsob generování sestavy:
outfile	jméno výstupního souboru; uplatní se pouze při direction = 2;
leftmargin	velikost levého okraje sestavy v milimetrech (přičte se ke standardnímu okraji generovanému tiskárnou)

Popis

Procedura Set_printer provede nastavení parametrů vytváření sestav. Nastavení platí až do nového nastavení. Procedura Print_opt umožňuje interaktivní nastavení týchž parametrů.

Parametr direction nabývá těchto hodnot:

Hodnota	Význam
0	tisk na tiskárně,
1	kontrolní výtisk na obrazovku (preview),
2	do textového souboru zadaného parametrem outfile.

Zatímco záznamy se číslují od 0, stránky se číslují od 1. Čísla stránek se vztahují ke zvolenému intervalu záznamů. Pokud jsou např. 3 záznamy na stránce, tisknete počínaje záznamem 100 a stránkou 5, pak jako první se vytiskne záznam s pořadovým číslem 112.

Nastavení všech okrajů sestavy umožňuje procedura Print_margins.

Příklad

procedure Tiskx(idx : window_id);

{**************************************}

//tisk seznamu firem tlačítkem z formuláře...

begin

  if Get_fcursor(idx,cursort,nil) then begin

     Set_printer(0,99999,1,99999,preview,"",10);

     Print_margins(10,0,10,10);

     Print_copies(kolikrat,true);

     Print_view("*Ptseznam",cursort,-1,-1);

  end;

end;

Viz

Print_view, Print_opt , Print_margins , Print_copies , Printer_dialog


Funkce Set_progress_report_modulus
Set_progress_report_modulus	[ICP]

function Set_progress_report_modulus (modulus : integer) : Boolean;

BOOL [cd_]Set_progress_report_modulus ([cdp_t cdp,] unsigned modulus);

function [cd_]Set_progress_report_modulus ([cdp : cdp_t;] modulus : integer) : Boolean;

Parametry

modulus	četnost výpisu
[cdp	kontextová proměnná klienta]
Od verze

6.0

Popis

SQL příkazy nad množinou záznamů (UPDATE, INSERT nebo DELETE.) mohou na stavový řádek vypisovat čísla ve významu počtu záznamů, které již příkaz zpracoval. Funkce řídí četnost vypisování těchto čísel. Je-li modulus rovno 0, nevypisují se čísla žádná, je-li modulus rovno N, vypíše se každé N-té číslo.

Vypisování čísel na stavovém řádku je komunikace navíc, na druhé straně klient vidí, že se něco děje. Implicitní hodnota je 32.

Hodnota funkce

Funkce vrací TRUE při chybě.


Funkce Set_sql_option
Set_sql_option	[ICPS]

function Set_sql_option(mask, value : integer) : Boolean;

BOOL [cd_]Set_sql_option([cdp_t cdp,] uns32 mask, uns32 value);

function [cd_]Set_sql_option([cdp : cdp_t;] mask, value : uns32) : Boolean;

Parametry

mask	součet hodnot voleb, které se mají ovlivnit (nastavit nebo zrušit nastavení)
value	součet hodnot voleb, které se mají nastavit
[cdp	kontextová proměnná klienta]

Od verze:

5.1, úprava v 6.0

Popis

Server WinBase602 od verze 5.1 umožňuje nastavit, do jaké míry se má zachovat kompatibilita se staršími verzemi oproti striktnímu dodržení norem SQL. Toto nastavení lze libovolně měnit i za běhu jedné aplikace a pro různé klienty mohou ve stejném okamžiku platit různá nastavení.

Do parametru mask zapište součet hodnot voleb, které chcete nastavovat (např. volba SQLOPT_NULLEQNULL má být nastavena, volba SQLOPT_NULLCOMP nemá být nastavena (byla nastavena již dříve a nyní to chcete zrušit): zadejte hodnotu 3(=1+2)).

Do parametru value zapište pro volbu, která má být nastavena její hodnotu, pro volbu, která nemá být nastavena hodnotu nula (příklad z min. odstavce: zadejte hodnotu 1(=1+0)).

K dispozici jsou tato nastavení:

jméno volby	hodn.	čeho se týká	stav je-li nastaveno (WB syntax)	stav není-li nastaveno (SQL syntax)
SQLOPT_NULLEQNULL	1	porovnání dvou hodnot NULL (*)	výsledek je TRUE	výsledek je UNKNOWN
SQLOPT_NULLCOMP	2	operace mezi NULL a jinou hodnotou (*)	NULL je menší v relacích a je inertním prvkem v ostatních operacích	výsledek relací je UNKNOWN, ostatních operací NULL
SQLOPT_RD_PRIVIL_VIOL	4	použití hodnoty, k níž není právo čtení	místo utajené hodnoty se použije NULL	dojde k chybě
SQLOPT_MASK_NUM_RANGE	8	přetečení číselného rozsahu při konverzi	výsledkem je NULL	dojde k chybě
SQLOPT_MASK_INV_CHAR	16	řetězec znaků nelze konvertovat na požadovaný typ	výsledkem je NULL	dojde k chybě
SQLOPT_MASK_RIGHT_TRUNC	32	při typové konverzi na typ řetězec dochází ke ztrátě znaků na pravém konci	znaky jsou ztraceny	dojde k chybě
SQLOPT_EXPLIC_FREE	64	zrušení a uvolnění záznamu	zrušené záznamy se uvolňují funkcí Free_deleted	zrušené záznamy se uvolňují ihned po zrušení
SQLOPT_OLD_ALTER_TABLE	128	syntaxe ALTER TABLE	použije se původní varianta ALTER TABLE (stejné jako návrhář)	používá se varianta ALTER TABLE podle normy SQL

(*) pro řetězce s hodnotou NULL (= prázdné řetězce) platí bez ohledu na nastavení údaje ze sloupce Syntax WB (porovnání dvou NULL stringů je TRUE apod.).

Obecně platí, že je-li volba nastavena, zachovává se kompatibilita se staršími verze WinBase602, není-li nastavena, server se chová dle norem SQL.

Po spuštění běhu klienta jsou všechny volby nastaveny (WB syntax).

Jakožto procedura je implementováno Set_sql_option i na straně serveru, aby bylo možno parametry nastavovat i bez použití klientského programu. V parametrech se pak musí použít číselné hodnoty konstant. Příklad volání v SQL:

CALL Set_sql_option(255,0)

Hodnota funkce

Funkce vrací při neúspěchu TRUE;

Příklad:

Nastavit všechny volby do režimu kompatibility s SQL2:

Set_sql_option(255,0);

Nastavit všechny volby do režimu kompatibility se staršími verzemi serveru:

Set_sql_option(255,255);


Procedura Set_status_nums
Set_status_nums	[ICP]

procedure Set_status_nums(num0, num1 : trecnum);

void Set_status_nums(trecnum num0, trecnum num1);

procedure Set_status_nums(num0, num1 : trecnum);

Parametry

num0, num1	nezáporné celé číslo nebo -1

Popis

Procedura vypíše v druhé části informačního řádku hodnoty num0 a num1 oddělené lomící čarou. Je-li parametr num1 roven -1, vypíše se pouze první parametr bez lomící čáry. Jsou-li oba parametry rovny -1, vymaže se předchozí obsah této části informačního řádku.

Při ukončení programu se informační řádek automaticky vymaže.

Příklad

Set_status_text("Zpracovávám záznam číslo :");

for i := 1 to PočetZáznamů do

begin

  ...

  Set_status_nums(i,-1);

end;

Viz

Set_status_text


Procedura Set_status_text
Set_status_text	[ICP]

procedure Set_status_text(var text : string);

void Set_status_text(const char *text);

procedure Set_status_text(text : Pchar);

Parametry

text	text, který se objeví na informační řádce

Popis

Procedura vypíše v první části informačního řádku řetězec zadaný parametrem text.

Při ukončení programu se informační řádek automaticky vymaže.

Příklad

Set_status_text("Čekejte, probíhá výpočet");

...

Set_status_text("Hotovo");

Viz

Set_status_nums


Funkce Set_timer
Set_timer	[I..]

procedure Set_timer(elapse, msg : integer);

Parametry

elapse	časový interval v ms
msg	číslo zprávy

Od verze:

5.0

Popis

Je-li elapse > 0, spustí časovač, který každých elapse milisekund vyšle zprávu msg . Tuto zprávu lze přečíst funkcí Get_ext_message. Je-li elapse <= 0, časovač se zastaví. V jednom okamžiku může být v činnosti pouze jeden časovač. Časovač se automaticky zastaví také při doběhnutí programu.

Příklad

var

  msg : integer;

  tt : time;

  id : window_id;

  viewdef : string[1000];

begin

  viewdef := '`a` DBDIALOG 227 7 260 171 '

             'HDFTSTYLE 135168 '

             'BACKGROUND 173 '

             'FONT 8 238 34 ""MS Sans Serif"" '

             'BEGIN '

              'CTEXT 3 62 40 108 28 8388609 0 '

              'BACKGROUND 255 '

              'PRECISION 1 '

              'VALUE TT '

              'FONT 10 238 34 ""MS Sans Serif"" BOLD '

              'PUSHBUTTON ""Konec"" 4 64 106 106 24 65536 0 '

              'ACTION RETURN -1 '

             'END ';

  Set_timer(1000,7777);

  tt := Now;

  Open_view(viewdef,NO_REDIR,0,0,0,id);

  while Get_message(msg) do

  begin

    if msg=7777 then begin

      tt := Now;

      Reset_view(id,-1,RESET_CONTROLS);

    end;

  end;

end.

Viz

Get_ext_message, Get_message


Funkce Set_transaction_isolation_level
Set_transaction_isolation_level	[ICP]

function Set_transaction_isolation_level(level : integer) : Boolean;

BOOL Set_transaction_isolation_level(t_isolation level);

function Set_transaction_isolation_level(level : integer) : Boolean;

Parametry

level	úroveň izolace transakce

Od verze:

6.0

Popis

Funkce nastaví úroveň izolace transakcí volaných funkcí Start_transaction. Implicitně je nastavena hodnota READ_COMMITTED (= 1). Více o izolaci transakcí se dozvíte ve stránkách nápovědy k jazyku SQL. Funkce odpovídá SQL příkazu SET TRANSACTION.

Parametr level může nabýt následujících hodnot (ve vnitřním jazyce pouze číselně):

READ_UNCOMMITTED	0
READ_COMMITTED	1
REPEATABLE_READ	2
SERIALIZABLE	3

Takto nastavené vlastností transakce nejen pro nejbližší transakci, nýbrž až do příštího nastavení vlastností transakce touto funkcí.

Hodnota funkce

Funkce vrací TRUE při chybě

Viz

Start_transaction, Roll_back, Commit,


Procedura Set_view_item
Set_view_item	[I..]

procedure Set_view_item(hView : window_id;  itemnum : short; var val : string);

Parametry

hView	identifikace (handle) formuláře
itemnum	číslo složky formuláře
val	nový obsah složky formuláře

Popis

Procedura Set_view_item nastavuje nový obsah složky formuláře hView s číslem itemnum bez zápisu do databáze. Chcete-li současně se změnou obsahu provést i zápis do databáze (proměnné), použijte funkci Set_item_value.

Je-li ve formuláři více záznamů, pracuje se s prvním z nich.

Proceduru nelze použít ve standardním formuláři.

V externích jazycích lze tuto proceduru nahradit funkcí Windows SetDlgItemText.

Od verze 3.0 je funkce přibližně nahrazena obecnější funkcí Set_item_value.

Od verze 6.0 lze k zápisu hodnot do složek formulářů využívat také vlastnosti složky Value a Text.

Viz

Get_view_pos, Get_view_item, Set_ext_pos, Set_int_pos, Set_Item_value


Procedura Show_help
Show_help	[ICP]

procedure Show_help(topic : short);

void Show_help(unsigned topic);

procedure Show_help(topic : integer);

Parametry

topic	číslo stránky nápovědy

Popis

Procedura Show_help otevře na obrazovce okno s nápovědou obsahující stránku s číslem topic. Procedura je určená pro vyvolávání nápovědy z aplikací ve vnitřním programovacím jazyce.

Procedura Show_help se obvykle používá jako příkaz prováděný po vybrání položky v uživatelem definovaném menu nebo po stisku tlačítka ve formuláři. V externích jazycích ji nahrazuje funkce WinHelp.

Použití procedury Show_help předpokládá, že stránka nápovědy s číslem topic byla vytvořena a začleněna do systému nápověd.

Viz

Help_file, Show_help_popup


Procedura Show_help_popup
Show_help_popup	[ICP]

procedure Show_help_popup(topic : short);

void Show_help_popup(unsigned topic);

procedure Show_help_popup(topic : integer);

Parametry

topic	číslo stránky nápovědy

Popis

Procedura Show_help_popup otevře na obrazovce popup-okno s nápovědou obsahující stránku s číslem topic. Procedura je určená pro vyvolávání nápovědy z aplikací ve vnitřním programovacím jazyce.

Procedura Show_help_popup se obvykle používá jako příkaz prováděný po vybrání položky v uživatelem definovaném menu nebo po stisku tlačítka ve formuláři. V externích jazycích ji nahrazuje funkce WinHelp.

Použití procedury Show_help_popup předpokládá, že stránka nápovědy s číslem topic byla vytvořena a začleněna do systému nápověd.

Viz

Help_file, Show_help


Funkce Signalize
Signalize	[ICP]

function Signalize : Boolean;

BOOL Signalize(void);

function Signalize : Boolean;

Popis

Funkce Signalize slouží ke srozumitelnému oznámení uživateli aplikačního programu, k jaké chybě došlo při poslední operaci nad databázovým serverem.

Funkce volá funkci Sz_error a obdrží-li od ní zprávu o chybě, promítne na obrazovce informační okno s vysvětlujícím textem k chybě. Pokud funkce Sz_error oznámí, že při poslední databázové operaci k žádné chybě nedošlo, pak funkce Signalize nedělá nic. Proto lze funkci Signalize volat po provedení každé databázové operace bez ohledu na to, zda operace byla úspěšná či nikoli.

Hodnota funkce

Funkce vrací hodnotu TRUE, pokud ohlásila chybu a uživatel ji potvrdil stiskem tlačítka. Funkce vrací FALSE, pokud neohlásila žádnou chybu.

Příklad

updatestr := 'UPDATE Tfirma SET '+poms+' = false WHERE skupina='+Int2str(skup);

if SQL_execute(updatestr) then Signalize

else Info_box('Provedeno','Operace proběhla úspěšně');

Viz

Sz_error


Funkce Signature_state
Signature_state	[ICP]

function Signature_state(hView : window_id; recnum : trecnum; var signattr : string) : integer;

int Signature_state(window_id hView, trecnum recnum, const char * signattr);

function Signature_state(hView : window_id; recnum : trecnum; signattr : PChar) : integer;

Parametry

hView	handle pohledu
recnum	absolutní číslo záznamu
signattr	jméno sloupce typu podpis

Od verze:

5.0

Popis

Funkce zjišťuje stav digitálního podpisu ve sloupci  signattr v záznamu recnum pohledu hView. Hodnota funkce větší než 0 znamená platný podpis.Použití je např. v podmínkách aktivity složek formuláře (dokud není podepsáno, nelze odeslat kolující dokument apod.).

Hodnota funkce

V případě platného podpisu funkce vrací (kladné) číslo uživatele (z tabulky USERTAB), který záznam podepsal.

Je-li podpis neplatný, vrátí funkce zápornou hodnotu nebo nulu:

Hodnota funkce	Stav podpisu
0	není podepsáno (podpis vymazán)
-1	Falešný podpis
-2	Změněno po podpisu
-3	Nelze ověřit, uživatel není známý
-4	Podpis snad platný, neověřena identita
-5	Dokument podepsán po zneplatnění certifikátu
-6	Identita ověřena nikoli certifikační autoritou
-7	Rezervováno
-8	Chyba v podpisu nebo není dosud podepsáno

Příklad

podmínka aktivity tlačítka:

(stav = KE_SCHVÁLENÍ) and (Signature_state(!!,@@,"ZAMITNUL")>0)


Funkce Sin
Sin	[I..S]

function Sin(r : real) : real;

Parametry

r	reálné číslo

Popis

Funkce Sin počítá sinus úhlu zadaného v radiánech.

Hodnota funkce

Funkce vrátí hodnotu sinu zadaného úhlu.

Viz

Arctan, Cos, Ln, Exp.


Procedura Sleep
Sleep	[...S]

FUNCTION Sleep(IN tm INT) RETURNS BIT;

Parametry

tm	počet milisekund

Od verze

6.1

Popis

Funkce lze použít pouze v jazyce SQL.

Funkce pozastaví provádění procedury, dokud neuplyne zadaný časový interval nebo dokud není ukončen SQL server.

Hodnota funkce

Pokud funkce skončí uplynutím intervalu, vrátí TRUE, jinak vrátí FALSE.

Příklad

Konstrukce, která zajistí periodické opakování určité práce každých 15 sekund

REPEAT

   práce opakovaná s 15-sekundovými přestávkami

UNTIL NOT Sleep(15000)

END REPEAT;


Funkce SQL_drop
SQL_drop	[ICP]

function SQL_drop(handle : integer) : Boolean;

BOOL [cd_]SQL_drop([cdp_t cdp], uns32 handle);

function [cd_]SQL_drop([cdp : cdp_t]; handle : uns32) : Boolean;

Parametry

handle	handle (číslo) SQL požadavku získané funkcí SQL_prepare
[cdp	kontextová proměnná klienta]

Od verze:

5.1

Popis

Funkce zruší dříve připravený příkaz, jehož handle dostane jako parametr. Připravené příkazy by měly být rušeny, jakmile nejsou potřeba, aby byly uvolněny jimi blokované zdroje.

Hodnota funkce

Funkce vrací TRUE při chybě.

Příklad

SQL_drop(handle1);

SQL_drop(handle2);

Viz

SQL_execute, SQL_prepare, SQL_exec_prepared


Funkce SQL_execute
SQL_execute	[ICP]

function SQL_execute (var statement : string) : Boolean;

BOOL [cd_]SQL_execute([cdp_t cdp], const char * statement, uns32 * results);

function [cd_]SQL_execute([cdp : cdp_t]; statement : Pchar; var results) : Boolean;

Parametry

statement	příkaz jazyka SQL
results	pole čísel, do nichž se zapíše informace o výsledku operace
[cdp	kontextová proměnná klienta]

Popis

Funkce vykoná příkaz jazyka SQL zadaný v parametru statement. Při překladu se nekontroluje smysluplnost SQL příkazu - případná syntaktická chyba příkazu se projeví až při běhu, kdy SQL server ohlásí, že nemůže splnit požadavek.

V parametru statement může být více SQL příkazů oddělených středníkem. Při volání z vnitřního jazyka smí být v parametru statement  max. 12 SQL příkazů. Na rozdíl od volání funkce z externího jazyka nesmí být ve statement použit (ve smyslu příkazu) dotazový výraz SELECT - (dotaz se ve vnitřním jazyku otevírá pomocí funkce Open_sql_cursor).

Při volání funkce z vnějšího (externího) jazyka je nutné uvést výstupní parametr results. Tímto parametrem je pole 32-bitových celých čísel bez znaménka. Pole musí obsahovat nejméně tolik složek, kolik příkazů jazyka SQL je zadáno v parametru statement, maximálně však 10. Volání procedury se nebere jako jeden příkaz, ale uvažují se jednotlivé příkazy v ní obsažené. Parametr results slouží k získání informací o výsledku provádění příkazů. Má relevantní hodnotu pouze v případě, že funkce SQL_statement skončila úspěšně. Pokud byl proveden příkaz UPDATE, DELETE nebo INSERT, hodnotou příslušného prvku pole je počet zpracovaných záznamů. Pokud byl proveden SELECT (není SQL příkaz, lze ho však zde použít pro otevření dotazu), pak ve spodních dvou bajtech prvku pole je číslo otevřeného kurzoru a s otevřeným kurzorem je možné dále pracovat (stejně jako by byl otevřen pomocí funkce Open_cursor_direct). Otevřený kurzor se zavírá pomocí funkce Close_cursor.

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize.

Příklad

if not Sql_execute("DELETE FROM Zamestnan WHERE Oddeleni=1")

   then …

Viz

SQL_prepare, SQL_exec_prepared, SQL_drop,

Open_sql_cursor, Open_cursor_direct, Close_cursor


Funkce SQL_exec_prepared
SQL_exec_prepared	[ICP]

function SQL_exec_prepared(handle : integer) : Boolean;

BOOL [cd_]SQL_exec_prepared([cdp_t cdp], uns32 handle, uns32 * results, int * count);

function [cd_]SQL_exec_prepared([cdp : cdp_t]; handle : uns32; var results : uns32; var count : integer) : Boolean;

Parametry

handle	handle (číslo) SQL požadavku získané funkcí SQL_prepare
results	pole čísel, do nichž se zapíše informace o výsledku operace
count	počet  SQL příkazů - výstupní parametr
[cdp	kontextová proměnná klienta]

Od verze:

5.1

Popis

Funkce provede dříve připravený příkaz, jehož handle dostane jako parametr.

Při volání funkce z vnějšího jazyka je nutné uvést výstupní parametr results. Tímto parametrem je pole 32-bitových celých čísel bez znaménka. Pole musí obsahovat nejméně tolik složek, kolik příkazů jazyka SQL je zadáno v parametru statement funkce SQL_prepare. Parametr results slouží k získání informací o výsledku provádění příkazu. Má relevantní hodnotu pouze v případě, že funkce skončila úspěšně. Pokud byl proveden příkaz UPDATE, DELETE nebo INSERT, hodnotou příslušného prvku pole je počet zpracovaných záznamů. Pokud byl proveden dotazový výraz SELECT (není SQL příkaz, lze ho však zde použít pro otevření dotazu), pak ve spodních dvou bajtech prvku pole je číslo otevřeného kurzoru a s otevřeným kurzorem je možné dále pracovat (stejně jako by byl otevřen pomocí funkce Open_cursor_direct). Otevřený kurzor se zavírá pomocí funkce Close_cursor.

Počet provedených SQL příkazů je zapsán do výstupní proměnné count.

Hodnota funkce

Funkce vrací TRUE při chybě.

Příklad

var

  osobni_cislo : integer;

  plat : money;

  handle2 : Integer;

SQL_prepare(’SELECT plat INTO :>plat FROM Zamestnanci’

            ’ WHERE os_cis=:<osobni_cislo’, handle2);

osobni_cislo:=4205;

SQL_exec_prepared(handle2);

Info_box(’Plat je’, Money2str(plat, 1));

Viz

SQL_execute, SQL_prepare, SQL_drop

Open_cursor_direct, Close_cursor


Funkce SQL_prepare
SQL_prepare	[ICP]

function SQL_prepare(var statement : string; var handle : Integer) : Boolean;

BOOL [cd_]SQL_prepare([cdp_t cdp], const char * statement, uns32 * handle);

function [cd_]SQL_prepare([cdp : cdp_t]; statement : PChar; var handle : uns32) : Boolean;

Parametry

statement	SQL příkaz
handle	handle (číslo) SQL požadavku
[cdp	kontextová proměnná klienta]

Od verze:

5.1

Popis

Funkce připraví k provedení příkaz zadaný parametrem statement a v případě úspěchu vrátí jeho handle. Způsob předávání proměnných jazyka viz Proměnné vnitřního programovacího jazyka v příkazech SQL.

V parametru statement může být více SQL příkazů oddělených středníkem. Při volání z vnitřního jazyka smí být v parametru statement  max. 12 SQL příkazů. Na rozdíl od volání funkce z externího jazyka nesmí být ve statement použit (ve smyslu příkazu) dotazový výraz SELECT - (dotaz se ve vnitřním jazyku otevírá pomocí funkce Open_sql_cursor).

Hodnota funkce

Funkce vrací TRUE při chybě.

Příklad

var jmeno:string[40];  osobni_cislo : Integer;  plat : Money;

    handle1, handle2 : Integer;

SQL_prepare(’INSERT INTO ZAMEST(JMENO, OS_CIS, PLAT)’

            ’VALUES (:<jmeno, :<osobni_cislo, :<plat)’, handle1);

SQL_prepare(’SELECT PLAT INTO :>plat FROM ZAMEST’

            ’ WHERE OS_CIS=:<osobni_cislo’, handle2);

Poté lze v libovolném pořadí vkládat nové záznamy a vyhledávat plat dle osobního čísla:

jmeno:=’Jan Novák’;   osobni_cislo:=4205;  plat:=13500;

SQL_exec_prepared(handle1);

jmeno:=’Karel Starý’; osobni_cislo:=4509;  plat:=14300;

SQL_exec_prepared(handle1);

osobni_cislo:=4205;

SQL_exec_prepared(handle2);

Info_box(’Plat je’, money2str(plat, 1));

Viz

SQL_execute, SQL_exec_prepared, SQL_drop

Open_sql_cursor,


Funkce Sqr
Sqr	[I..S]

function Sqr(r : real) : real;

Parametry

r	reálné číslo

Popis

Funkce Sqr spočte druhou mocninu reálného čísla.

Hodnota funkce

Funkce vrací druhou mocninu čísla zadaného jako parametr. Na rozdíl od podobné funkce v Pascalu je typ výsledku vždy Real.

Viz

Isqr, Sqrt.


Funkce Sqrt
Sqrt	[I..S]

function Sqrt(r : real) : real;

Parametry

r	reálné nezáporné číslo

Popis

Funkce Sqrt počítá druhou odmocninu. Parametrem musí být nezáporné číslo, jinak dojde k chybě při výpočtu.

Hodnota funkce

Funkce vrací druhou odmocninu svého parametru.

Viz

Sqr, Isqr.


Funkce start_package
start_package	[.CP]

void [cd_]start_package([cdp_t cdp]);

procedure [cd_]start_package ([cdp : cdp_t]);

Parametry

[cdp	kontextová proměnná klienta]

Popis

Procedura způsobí, že následující požadavky na server budou ukládány do balíku, jehož odeslání serveru se zajistí až voláním procedury send_package. Pokud v okamžiku, kdy je procedura start_package volána, je ukládání požadavků do balíku již aktivní, neprovádí se nic.

Za normálních podmínek se po zavolání příslušné funkce požadavek klienta předává serveru. Požadavek musí pak urazit cestu od klienta k serveru a odpověď cestu nazpět. Při provozu v síti vyžaduje každý takový požadavek zaslání zprávy z jednoho počítače na druhý a pak zpátky. To trvá určitou dobu a v některých případech může být žádoucí tuto dobu zkracovat. Proto byla zavedena možnost sdružovat požadavky do balíků.

Pokud je sdružování aktivní, pak každý požadavek klienta se zaznamená, ale jeho odeslání se odloží. Nastřádané požadavky se odešlou najednou, až na explicitní žádost klienta procedurou  send_package..

Viz

send_package


Funkce Start_transaction
Start_transaction	[ICP]

function Start_transaction : Boolean;

BOOL [cd_]Start_transaction([cdp_t cdp]);

function [cd_]Start_transaction  ([cdp : cdp_t]): Boolean;

Parametry

[cdp	kontextová proměnná klienta]

Popis

Funkce Start_transaction zahajuje provádění transakce. Pokud se transakce již provádí, funkce neudělá nic. Funkce odpovídá SQL příkazu START TRANSACTION.

Stupeň izolace transakce se nastavuje funkcí Set_transaction_isolation_level. Není li izolace specifikována, použije se stupeň izolace READ_COMMITED. Transakce se potvrzuje funkcí Commit a odvolává funkcí Roll_back.

Více o transakcích naleznete na stránkách popisu jazyka SQL.

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést nebo pokud se transakce již provádí. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize.

Viz

Commit, Roll_back, Set_transaction_isolation_level


Funkce Str2date
Str2date	[I..S]

function Str2date(var s : string) : date;

Parametry

s	řetězec znaků obsahující zápis data ve tvaru den.měsíc nebo den.měsíc.rok

Popis

Funkce Str2date převede zápis data v řetězci s na hodnotu typu Date a vrátí ji. Prázdný řetězec se převede na hodnotu NONEDATE.

Hodnota funkce

Funkce vrátí datum, pokud jeho zápis je (jediným) obsahem řetězce  str, jinak vrací NONEDATE.

Příklad:

procedure PocetDni(id : window_id; rec : trecnum);

{*******************************************}

// zapíše do pole Počet dní rozdíl mezi začátkem a koncem dovolené

var

  oddat,dodat : date;

  s1 : string[10];

  i,pocetd : integer;

  un : untyped;

begin

  s1 := Get_view_item(id,10); // přečtení hodnoty editu

  oddat := Str2date(s1);      // konverze na datum

  s1 := Get_view_item(id,12);

  dodat := Str2date(s1);

  pocetd := 0;

  for i := 0 to dodat-oddat do // počet dnů bez sobot a nedělí

    if ((Day_of_week(oddat+i)>0) and (Day_of_week(oddat+i)<6)) then pocetd := pocetd+1;

  un := Int2str(pocetd);       // konverze na řetězec

  Set_item_value(id,rec,14,un); Signalize; // zapsání do editu

end;

Viz

Int2str, Str2int, Real2str, Str2real, Money2str, Str2money, Date2str, Time2str, Str2time


Funkce Str2int
Str2int	[I..S]

function Str2int(var s : string) : integer;

Parametry

s	řetězec znaků obsahující zápis čísla typu Integer

Popis

Funkce Str2int převede zápis čísla v řetězci s na hodnotu typu Integer a vrátí ji. Prázdný řetězec se převede na hodnotu NONEINTEGER.

Hodnota funkce

Funkce vrací celé číslo, pokud je jeho desítkový zápis obsahem řetězce s. Jinak vrací NONEINTEGER.

Příklad:

function KontrolaRC(rcis : string[11]; nar : date) : boolean;

{**************************************}

// funkce kontroluje shodu mezi zadaným datem narození a zadaným rodným číslem

var

  strpom : string[10];

  sr : string[4];

  sm,sd,sm2 : string[2];

  src,rc1,rc2 : string[6];

begin

  if (rcis='') or (nar=nonedate) then KontrolaRC := true

  else begin

    sr := Int2str(Year(nar));

    StrDelete(sr,1,2);

    sm := Int2str(Month(nar));

    if StrLength(sm)=1 then sm :="0"+sm;

    sm2 := Int2str(Str2int(sm)+50);  // pro ženy

    sd := Int2str(Day(nar));

    if StrLength(sd)=1 then sd :="0"+sd;

    rc1 := sr+sm+sd;

    rc2 := sr+sm2+sd;

    src := StrCopy(rcis,1,6);

    if (rc1=src) or (rc2=src) then KontrolaRC := true

    else begin

      Info_box('Chyba','Nesoulad mezi rodným číslem a datem narození!!');

      KontrolaRC := false;

    end;

  end;

end;

Viz

Int2str, Real2str, Str2real, Money2str, Str2money, Str2date, Str2time, Time2str, Str2time


Funkce Str2money
Str2money	[I..S]

function Str2money(var s : string) : money;

Parametry

s	řetězec znaků obsahující zápis čísla typu Money

Popis

Funkce Str2money převede zápis čísla v řetězci s na hodnotu typu Money a vrátí ji. Prázdný řetězec se převede na hodnotu NONEMONEY.

Hodnota funkce

Funkce vrátí číslo, jehož desítkový zápis je obsahem řetězce s, nebo hodnotu NONEMONEY, pokud v s není povolený zápis čísla typu Money.

Viz

Int2str, Str2int, Real2str, Str2real, Money2str, Str2date, Str2time, Time2str, Str2time


Funkce Str2real
Str2real	[I..S]

function Str2real(var s : string) : Real;

Parametry

s	řetězec znaků obsahující zápis čísla typu Real

Popis

Funkce Str2real převede zápis čísla v řetězci s na hodnotu typu Real a vrátí ji. Prázdný řetězec se převede na hodnotu NONEREAL.

Hodnota funkce

Funkce vrátí reálnou hodnotu, pokud řetězec obsahuje konvertovatelný zápis čísla typu Real. Jinak funkce vrátí NONEREAL.

Viz

Int2str, Str2int, Real2str, Money2str, Str2money, Str2date, Str2time, Time2str, Str2time


Funkce Str2time
Str2time	[I..S]

function Str2time(var s : string) : time;

Parametry

s	řetězec znaků obsahující zápis času ve tvaru hodina:minuta nebo hodina:minuta:sekunda nebo hodina:minuta:sekunda.tisíciny

Popis

Funkce Str2time převede zápis času v řetězci  s na hodnotu typu Time a vrátí ji. Prázdný řetězec se převede na hodnotu NONETIME.

Hodnota funkce

Funkce vrátí údaj o čase, pokud jeho zápis je (jediným) obsahem řetězce s, jinak vrací NONETIME.

Viz

Int2str, Str2int, Real2str, Str2real, Money2str, Str2money, Str2date, Date2str, Time2str,


Funkce str2timestamp
str2timestamp	[I..S]

function str2timestamp (var s : string) : timestamp;

Parametry

s	řetězec znaků obsahující zápis timestampu

Od verze:

6.0

Popis

Funkce str2timestamp převede zápis času v řetězci s na hodnotu typu Timestamp a vrátí ji. Prázdný řetězec se převede na hodnotu NONETIMESTAMP.

Formát řetězce s musí být jeden z následujících:

 den.měsíc.rok hodina:minuta:sekunda

 den.měsíc.rok hodina:minuta

 den.měsíc hodina:minuta:sekunda

 den.měsíc hodina:minuta

Není-li uveden rok, dosadí se rok aktuální.

Hodnota funkce

Funkce vrátí údaj o datu a čase (timestampu), pokud jeho zápis je (jediným) obsahem řetězce s, jinak vrací NONETIMESTAMP.

Viz

timestamp2str, Date2str, Time2str,


Funkce Strcat
Strcat	[I..S]

function Strcat(var s1, s2 : string) : string;

Parametry

s1, s2	libovolné řetězce znaků

Popis

Funkce Strcat spojí řetězce s1 a s2 do jednoho řetězce (s2 připojí na konec s1) a vrátí výsledný řetězec. Přitom výsledek nesmí být delší než 255 znaků, jinak se vrátí pouze jeho prefix (v tomto případě se používá StrInsert). Funkci lze použít pouze na řetězce do délky 255 znaků.

Tato funkce je zahrnuta do WinBase602 pouze v zájmu kompatibility se staršími verzemi. Spojování řetězců lze nyní provádět operátorem +, místo Strcat(s1, s2) stačí tedy psát pouze s1+s2.

Hodnota funkce

Funkce vrátí zřetězení  s1 a s2.

Viz

Strcopy, Strinsert, Strdelete, Strpos, Strlength, Strtrim, Pref, Like, Substr, Upcase.


Funkce Strcopy
Strcopy	[I..S]

function Strcopy(var s : string;  index, count : short) : string;

Parametry

s	řetězec znaků
index	pozice v řetězci s
count	počet znaků

Popis

Funkce Strcopy vybere z řetězce s podřetězec začínající v pozici index délky count. Řetězce se indexují od 1. Funkci lze použít pouze na řetězce do délky 255 znaků.

Hodnota funkce

Funkce vrací podřetězec vybraný z řetězce s.

Příklad

ss := 'C:\*.DBF';

  if Select_file(0,ss) then

    if StrCopy(ss,StrLength(ss)-2,3)='DBF' then begin

      Reset(f,ss);                       // otevření DBF souboru

      Set_status_text("Načítám hlavičku DBF souboru");

      ...

Viz

Strcat, Strinsert, Strdelete, Strpos, Strlength, Strtrim, Pref, Like, Substr, Upcase.


Procedura Strdelete
Strdelete	[I..S]

function Strdelete(var s : string;  index, count : short) : string;

Parametry

s	řetězec znaků
index	pozice v řetězci s
count	počet znaků

Popis

Funkce Strdelete zruší v řetězci s jeho podřetězec začínající v pozici index délky count. Řetězce se indexují od 1.

Funkci lze použít na řetězce delší než 255 znaků.

Hodnota funkce

Výsledný řetězec je také funkcí vrácen, aby funkci bylo možno použít např. v SQL příkazu.

Příklad

function LastBackSlash(var str : string[2000]) : boolean;

{**************************************}

// integritní omezení v pohledech, kde se zadává adresář DOSu

// pokud končí zpětným lomítkem, lomítko se umaže

begin

  if str[StrLength(str)] = '\' then StrDelete(str,StrLength(str),1);

  LastBackSlash := true;                 // aby prošlo integritní omezení

end;

Viz

Strcat, Strcopy, Strinsert,  Strpos, Strlength, Strtrim, Pref, Like, Substr, Upcase.


Procedura Strinsert
Strinsert	[I..S]

function Strinsert(var source : string;  var s : string;  index : short) : string;

Parametry

source	vkládaný řetězec znaků
s	řetězec znaků, do něhož se vkládá
index	pozice v řetězci s

Popis

Funkce Strinsert vloží do řetězce s od pozice index řetězec source. Řetězce se indexují od 1. Výsledná délka řetězce s nesmí překročit délku zadanou v jeho deklaraci, jinak může dojít ke zhroucení systému.

Pomocí procedury Strinsert můžete vytvářet i řetězce delší než 255 znaků, což spojováním řetězců pomocí operátoru + nebo funkce Strcat nelze.

Hodnota funkce

Výsledný řetězec je také funkcí vrácen, aby funkci bylo možno použít např. v SQL příkazu.

Příklad

function NovaTabulka : string[10];

{**************************************}

// vytvoří pomocnou tabulku pro kopii dat pro tisk

// pokud se to povede, vrátí jméno tabulky, jinak prázdný string

var

  tabname : string[10];

  SQL_stat : string[1000];

  pomstr : string[30];

begin

  tabname := NoveJmenoTabulky;

  SQL_stat := ' ( CISLO INT, '

    'FIRMA CHAR(30) COLLATE CSISTRING, '

    'CLOVEK CHAR(25) COLLATE CSISTRING, '

    'ULICE CHAR(30) COLLATE CSISTRING, '

    'MESTO CHAR(30) COLLATE CSISTRING, '

    'PSC CHAR(6), '

    'TEL CHAR(25) COLLATE CSISTRING, '

    'FAX CHAR(25) COLLATE CSISTRING, '

    'DATUM DATE) '

  pomstr := 'CREATE TABLE '+ tabname;

  StrInsert(pomstr,SQL_stat,1);

  if SQL_execute(SQL_stat) then begin

    Signalize;

    NovaTabulka := "";

  end else NovaTabulka := tabname;

end;

Viz

Strcat, Strcopy, Strdelete, Strpos, Strlength, Strtrim, Pref, Like, Substr, Upcase.


Funkce Strlength
Strlength	[I..S]

function Strlength(var s : string) : short;

Parametr

s	řetězec znaků

Popis

Funkce Strlength zjišťuje skutečnou délku řetězce s. Funkci lze použít i na řetězce delší než 255 znaků.

Hodnota funkce

Funkce vrací délku řetězce s.

Příklad

ss := 'C:\*.DBF';

  if Select_file(0,ss) then begin

    s := StrCopy(ss,StrLength(ss)-2,3);

    UpCase(s);

    if s ='DBF' then begin

      Reset(f,ss);                       // otevření DBF souboru

Viz

Strcat, Strcopy, Strinsert, Strdelete, Strpos, Strtrim, Pref, Like, Substr, Upcase.


Funkce Strpos
Strpos	[I..S]

function Strpos(var substr : string;  var s : string) : short;

Parametry

substr	řetězec znaků
s	řetězec znaků

Popis

Funkce Strpos zjišťuje, zda řetězec substr je podřetězcem řetězce s. Funkci lze použít i na řetězce delší než 255 znaků.

Hodnota funkce

Funkce vrací index prvního znaku prvního výskytu podřetězce substr v řetězci s, pokud nějaký výskyt existuje (řetězce se indexují od 1). Jinak funkce vrací 0.

Příklad  extrakce jména z názvu souboru a zapsání do pohledu

  spom := Parametry[0].sablonywt+'\*.WPT';

  if Select_file(idx,spom) then begin

    while SubStr("\",spom) do

      StrDelete(spom,1,StrPos("\",spom));   // odstranění adresáře

    if SubStr(".",spom) then                // odstranění přípony

      StrDelete(spom,StrPos(".",spom),StrLength(spom)-StrPos(".",spom)+1);

    u := spom;

    if not Set_item_value(idx,rec,6,u) then Info_box('Chyba','Set_item_value');

Viz

Strcat, Strcopy, Strinsert, Strdelete, Strlength, Pref, Strtrim, Like, Substr, Upcase.


Funkce Strtrim
Strtrim	[I..S]

function Strtrim(var s : string) : string;

Parametry

s	řetězec znaků

Popis

Funkce Strtrim odstraní z řetězce s mezery na začátku a na konci. Mezery vyskytující se mezi jinými znaky v řetězci ponechá beze změny. Řetězec s, předaný odkazem, je touto funkcí změněn. Funkci lze použít i na řetězce delší než 255 znaků.

Hodnota funkce

Funkce vrací řetězec s.

Viz

Strcat, Strcopy, Strinsert, Strdelete, Strlength, Pref, Like, Substr, Upcase.


Funkce Substr
Substr	[I..S]

function Substr(var s1, s2 : string) : Boolean;

Parametry

s1	řetězec znaků, který má být obsažen v řetězci s2
s2	řetězec znaků

Popis

Funkce Substr zjišťuje, zda řetězec s1 je obsažen v řetězci s2. Místo, kde je obsažen, zde nehraje roli, může být na začátku, uvnitř nebo na konci s2. Vždy záleží na velikosti písmen.

Funkci lze použít i na řetězce delší než 255 znaků.

Hodnota funkce

Funkce vrátí TRUE, pokud je s1 obsažen v s2, jinak vrátí FALSE.

Příklad  extrakce jména z názvu souboru a zapsání do pohledu

  spom := Parametry[0].sablonywt+'\*.WPT';

  if Select_file(idx,spom) then begin

    while SubStr("\",spom) do

      StrDelete(spom,1,StrPos("\",spom));   // odstranění adresáře

    if SubStr(".",spom) then                // odstranění přípony

      StrDelete(spom,StrPos(".",spom),StrLength(spom)-StrPos(".",spom)+1);

    u := spom;

    if not Set_item_value(idx,rec,6,u) then Info_box('Chyba','Set_item_value');

Viz

Strcat, Strcopy, Strinsert, Strdelete, Strpos, Strlength, Strtrim, Pref, Like, Upcase.


Funkce Super_recnum
Super_recnum 	[ICP]

function Super_recnum(subcursor, supercursor : tcursnum; subrecnum : trecnum;  var superrecnum : trecnum) : Boolean;

BOOL [cd_]Super_recnum([cdp_t cdp], tcursnum subcursor, tcursnum supercursor, trecnum subrecnum, trecnum * superrecnum);

function [cd_]Super_recnum([cdp : cdp_t]; subcursor, supercursor : tcursnum; subrecnum : trecnum;  var superrecnum : trecnum) : Boolean;

Parametry

subcursor	subkurzor kurzoru  supercursor
supercursor	proměnný nebo otevřený pevný kurzor - viz podrobnosti
subrecnum	číslo záznamu v kurzoru  subcursor
superrecnum	výstupní parametr: číslo záznamu v kurzoru supercursor
[cdp	kontextová proměnná klienta]

Popis

Funkce Super_recnum převádí číslo záznamu v subkurzoru na číslo téhož záznamu v superkurzoru, tedy v kurzoru, z něhož je subkurzor odvozen. Může provést tutéž akci pro dva kurzory vytvořené nad stejnou tabulkou - viz příklad.

Hodnota funkce

Funkce vrací FALSE při úspěchu, TRUE při chybě.

Příklad

procedure synchronizace(vzor, cíl : window_id);

var irec, erec, cíl_rec : trecnum;

    vzor_curs, cíl_curs : cursor;

    flags : short;

{ Nastaví pohled "cíl" na stejný záznam jako pohled "vzor" }

begin

  if Get_view_pos(vzor, irec, erec) then

    if Get_fcursor(vzor, vzor_curs, flags) then

      if Get_fcursor(cíl, cíl_curs, flags) then

        if not Super_recnum(vzor_curs, cíl_curs, erec, cíl_rec) then

          Set_ext_pos(cíl, cíl_rec, -1);

end;

Viz

Get_fcursor , Set_fcursor


Funkce Sz_error
Sz_error	[ICP]

function Sz_error : short;

int [cd_]Sz_error([cdp_t cdp]);

function [cd_]Sz_error ([cdp : cdp_t]): integer;

Parametry

[cdp	kontextová proměnná klienta]

Popis

Funkce zjišťuje číslo chyby, ke které došlo při posledním volání databázové operace, tedy např. při čtení nebo zápisu do databázového sloupce, otevření kurzoru, vložení záznamu a pod.

POZOR! Funkce nepodává informace o chybách v prezentační vrstvě, tedy např. při otevírání pohledu nebo tisky sestavy.

Tuto funkci volejte bezprostředně po provedení operace, jejíž výsledek chcete zjistit.

Alternativou je funkce Signalize, která přímo otevře okno s popisem chyby.

Hodnota funkce

Funkce vrací číslo chyby, k níž došlo při provádění poslední operace. Číselník chyb - viz chybová hlášení WinBase. Speciální hodnotou je NO_ERROR signalizující, že zpracování proběhlo úspěšně. Každá jiná hodnota oznamuje, že požadavek nebyl proveden.

Příklad

  Info_box("CHYBA",int2str(Sz_error));

Viz

Signalize


Funkce Sz_warning
Sz_warning	[ICP]

function Sz_warning : short;

int [cd_]Sz_warning([cdp_t cdp]);

function [cd_]Sz_warning([cdp : cdp_t]) : integer;

Parametry

[cdp	kontextová proměnná klienta]

Popis

Funkce zjišťuje číslo varování, které bylo vydáno při posledním volání určité databázové operace

Tuto funkci volejte bezprostředně po provedení operace, jejíž výsledek chcete zjistit.

Hodnota funkce

Funkce vrací číslo varování vydaného při provádění poslední operace. Číselník varování - viz varování WinBase. Pokud funkce vrátí hodnotu NO_WARNING (0), znamená to, že poslední operace proběhla bez varování. Hodnota IS_ERROR říká, že požadavek nebyl splněn.

Příklad

  Info_box("Varování",int2str(Sz_warning));

Viz

Sz_error


Funkce Tab_page
Tab_page	[ICP]

function Tab_page(hView : window_id;  ID : short) : Integer;

int Tab_page (window_id hView, int ID);

function Tab_page(hView : window_id;  ID : integer) : Integer;

Parametry

hView	identifikace (handle) formuláře
ID	číslo složky typu záložka

Popis

Funkce Tab_page vrátí číslo aktivní záložky ve formuláři hView. ID je číslo složky typu záložky, je-li ve formuláři pouze jedna složka typu záložka, ignoruje se.

Záložky jsou očíslovány od 0.

Použití funkce je v podmínkách viditelnosti návrhu formuláře. Funkce zaručí, že při přepínání záložek se budou vykreslovat rozdílné složky. Funkce se vyhodnocuje již při návrhu, takže podmínky viditelnosti se uplatní i v návrháři.

Se stejným významem lze použít vlastnost Page složky formuláře typu Záložka.

Hodnota funkce

Funkce vrací číslo aktivní záložky. První záložka má číslo 0.


TakeMailToRemOffice
TakeMailToRemOffice	[ICPS]

function TakeMailToRemOffice : integer;

int TakeMailToRemOffice();

function TakeMailToRemOffice : integer;

Popis

Funkce spustí gateway, která naváže telefonické spojení s mateřským poštovním úřadem a předá mu zásilky k odeslání. Funkce má význam pouze v případě vzdáleného klienta pošty Mail602. Kladný výsledek funkce informuje pouze o tom, že se podařilo spustit gateway a předat ji zásilky, nic však o výsledku doručení.

Hodnota funkce

Funkce vrací nulu v případě úspěchu a  číslo chyby v případě neúspěchu. Číslo chyby nelze zjistit pomocí Sz_error nebo Signalize.

Viz

InitWBMail, InitWBMail602, LetterCreate, LetterAddAddr, LetterAddFile, LetterCancel, LetterSend, CloseWBMail


Funkce Time2str
Time2str	[I..S]

function Time2str(tm : time, prez : short) : string;

Parametry

tm	hodnota, která se má konvertovat
prez	způsob konverze

Popis

Funkce Time2str převede hodnotu zadanou prvním parametrem na řetězec znaků. Při konverzi se použije hodnota parametru prez takto:

Hodnota	Význam
0	zápis času bude obsahovat pouze hodiny a minuty;
1	zápis času bude obsahovat hodiny, minuty a sekundy;
2	zápis času bude obsahovat hodiny, minuty,  sekundy a tisíciny sekundy;
3	zápis času bude ve Windows formátu;

Hodnota funkce

Funkce vrací textový zápis času tm.

Příklad:

str := Date2str(today, 1)+Chr(10)+Time2str(Now, 1);

Info_box('Datum a čas', str);

Viz

Int2str, Str2int, Real2str, Str2real, Money2str, Str2money, Str2date, Date2str, Str2time


Funkce timestamp2date
timestamp2date	[ICPS]

function timestamp2date(dtm : timestamp) : date;

uns32 timestamp2date(uns32 dtm);

function timestamp2date(dtm : uns32) : uns32;

Parametry

dtm	datum a čas (timestamp)

Od verze:

5.0

Popis

Funkce timestamp2date extrahuje datum z údaje o datu a čase (z hodnoty typu timestamp).

Hodnota funkce

Funkce vrací datum.

Viz

timestamp2str, datetime2timestamp, timestamp2time


Funkce timestamp2str
timestamp2str	[I..S]

function timestamp2str (dtm : timestamp; prez : short) : string;

Parametry

dtm	hodnota, která se má konvertovat
prez	způsob konverze

Od verze:

6.0

Popis

Funkce timestamp2str převede hodnotu zadanou prvním parametrem na řetězec znaků. Při konverzi se použije hodnota parametru prez takto:

Hodnota	Význam
0	27.prosinec 12:45:56
1	27.prosinec 1998 12:45:56
2	dlouhý Windows formát s časem
3	krátký Windows formát s časem
4	27.12. 12:45:56
5	27.12.1998 12:45:56
6	27.prosinec
7	27.prosinec 1998
8	dlouhý Windows formát bez času
9	krátký Windows formát bez času
10	27.12.
11	27.12.1998
12	27.prosinec 12:45
13	27.prosinec 1998 12:45
14	dlouhý Windows formát s časem bez sekund
15	krátký Windows formát s časem bez sekund
16	27.12. 12:45
17	27.12.1998 12:45

Hodnota funkce

Funkce vrací textový zápis data a času dtm.

Viz

Str2timestamp, Str2date, Str2time, datetime2timestamp, timestamp2time, timestamp2date


Funkce timestamp2time
timestamp2time	[ICPS]

function timestamp2time(dtm : timestamp) : time;

uns32 timestamp2time(uns32 dtm);

function timestamp2time(dtm : uns32) : uns32;

Parametry

dtm	datum a čas (timestamp)

Od verze:

5.0

Popis

Funkce timestamp2time extrahuje čas z údaje o datu a čase (z hodnoty typu timestamp).

Hodnota funkce

Funkce vrací údaj o čase.

Viz

timestamp2str, datetime2timestamp, timestamp2date


Funkce To_xbase
To_xbase	[ICP]

function To_xbase(var tablename : string, var filename : string, dBase : Boolean, filecode : short) : Boolean;

BOOL To_xbase(const char * tablename,  const char * filename, BOOL dBase, int filecode);

function To_xbase(tablename : PChar;  filename : PChar; dBase : Boolean;  filecode : integer) : Boolean;

Parametry

tablename	jméno tabulky ve WinBase602
filename	jméno souboru ve formátu DBF (dBase IV nebo FoxPro 2.0)
dBase	TRUE pro formát dBase, FALSE pro formát FoxPro
filecode	kódování českých znaků použité v souboru filename

Popis

Od verze 3.0 se jedná o funkci zastaralou, plně nahrazenou obecnější funkcí Data_export.

Funkce To_xbase exportuje tabulku tablename z WinBase602 do souboru  filename ve formátu DBF (a případně vytvoří i příslušející MEMO-soubor ve formátu závisejícím na hodnotě parametru dBase). Z tabulky se exportují pouze ty sloupce, které připouští formát Xbase.

Soubor  filename vznikne na tom počítači, na němž běží aplikace, která zavolá tuto funkci (nikoli na počítači, na němž běží databázový server).

Parametr  filecode označuje způsob kódování českých znaků v souboru  filename. Na základě hodnoty tohoto parametru se provede potřebné překódování tak, aby texty přenesené do WinBase602 byly ve shodě s kódováním českých znaků pod Windows. Parametr smí mít tyto hodnoty:

0 - kódová stránka 1250, vnitřní čeština Windows 3.1;

1 - kód Kamenických, KEYBCS2;

2 - kód KOI8-CS;

3 - kód LATIN 2 použitý v Text602;

4 - kódová stránka 852 z MS DOSu 5.0, LATIN 2;

5 - kód Windows ANSI.

Hodnota funkce

Funkce vrací TRUE pokud se export podařilo úspěšně provést, nebo FALSE, pokud došlo k chybě. Příčinou chyby může být např. nenalezení tabulky tablename, nebo nemožnost vytvořit soubor filename.

Viz

From_xbase, Data_export


Funkce Today
Today	[ICPS]

function Today : date;

uns32 Today(void);

function Today : uns32;

Popis

Funkce Today je funkce bez parametrů, která zjišťuje dnešní datum.

Hodnota funkce

Funkce vrátí datum ve vnitřním formátu WinBase602, které získá dotazem u operačního systému počítače.

Příklad

 Info_box("Dnešní datum:",Date2str(Today,1));

Viz

Make_date, Day, Month, Year, Make_time, Hours, Minutes, Seconds, Sec1000, Now, Day_of_week


Funkce Token_control
Token_control	[ICP]

function Token_control(curstab : tcurstab;  recnum : trecnum; oper : integer) : Boolean;

BOOL Token_control(cdp_t cdp, tcurstab curstab, trecnum recnum, int oper);

function Token_control(cdp : cdp_t;  curstab : tcurstab;  recnum : trecnum; oper : integer) : Boolean;

Parametry

curstab	tabulka nebo kurzor - viz podrobnosti
recnum	absolutní číslo záznamu
oper	typ manipulace s peškem
cdp	kontextová proměnná klienta

Od verze:

5.0

Popis

Funkce Token_control provádí manipulaci s peškem k záznamu s absolutním číslem recnum v tabulce nebo kurzoru curstab.

Činnost je určena parametrem oper takto:

TOKEN_HOLD	0	podrží peška, vrací TRUE při chybě
TOKEN_FREE	1	uvolní peška, vrací TRUE při chybě (uvolní pešky ve všech záznamech, kdy je recnum = -1)
TOKEN_REQ	2	odešle žádost o peška, vrací TRUE při chybě
TOKEN_INVAL	3	odešle žádost o peška, vrací TRUE při chybě
TOKEN_HAVE_I	4	vratí TRUE, když máte peška
TOKEN_HOLD_I	5	vrací TRUE, když držíte peška, předpokládá, že peška máte

Hodnota funkce

Funkce vrací TRUE/FALSE podle typu manipulace s peškem.

Viz

Areplicate, AToken_control


Funkce Translate
Translate	[ICP]

function Translate(var curs : tcursnum;  crec : trecnum; tbord : short;  var trec : trecnum) : Boolean;

BOOL [cd_]Translate([cdp_t cdp], tcursnum curs, trecnum crec, int tbord, trecnum * trec);

function [cd_]Translate([cdp : cdp_t]; var curs : tcursnum;  crec : trecnum; tbord : integer;  var trec : trecnum) : Boolean;

Parametry

curs	otevřený pevný nebo proměnný kurzor - viz podrobnosti
crec	absolutní číslo záznamu v kurzoru curs
tbord	pořadové číslo tabulky v kurzoru curs (počítáno od 0)
trec	vrací absolutní číslo záznamu v tabulce, z něhož vznikl záznam crec
[cdp	kontextová proměnná klienta]

Popis

Funkce konvertuje číslo crec záznamu z otevřeného editovatelného kurzoru curs na číslo téhož záznamu v tabulce, z níž jsou záznamy do kurzoru vybrány; tbord je pořadové číslo tabulky v kurzoru (v klauzuli FROM). Tabulky se číslují od nuly.

Je-li curs číslo tabulky (může se stát, je-li pro získání čísla curs použita funkce Get_fcursor, která vrací číslo tabulky nebo kurzoru), funkce Translate oznámí chybu Špatné číslo kurzoru.

Funkci Translate má smysl a lze používat pouze na editovatelné kurzory.

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize.

Příklad 1:

procedure Detail(idf : window_id; rec : integer);

{*******************************************}

{tlačítko ve formuláři PrehledSch - programové otevření dalšího formuláře na stejný záznam - voláno s parametry Detail(!!,@);

1. zjištění čísla zdroje dat v 1. formuláři

2. přepočet čísla aktuálního záznamu na na číslo záznamu ve zdrojové tabulce

3. otevřít 2. formulář (který vede do tabulky) na tomto záznamu}

var

  cx : cursor;

begin

  if Get_fcursor(idf,cx,nil) then     //form. idf vede do kurzoru, lze přepočítat

    if not Translate(cx,rec,1,cislof) then begin // přepočet

      if id=0 then Open_view('*Pfirma',no_redir,0,-cislof,0,id) //otevřít form. vedoucí do tabulky na tomto záznamu

      else begin

        Set_ext_pos(id, cislof, -1); //je-li již formulář již otevřen, pouze nastavit pozici

        Pick_window(id);

      end;

    end;

end;

Příklad 2:

{zjistěte číslo záznamu v tabulce, který vyhovuje podmínce "atr=55"}

var cislo : trecnum;

    c1    : cursor;

begin

 if Open_sql_cursor(c1, 'select atr1 from tab1 where atr=55') then Signalize

else

  if Translate(c1, 0, 0, cislo) then Signalize

  else Info_box('Číslo v tab1', int2str(cislo));

end.

Viz

Get_fcursor , Open_sql_cursor


Funkce Trunc
Trunc	[I..S]

function Trunc(r : real) : integer;

Parametry

r	reálné číslo z intervalu hodnot typu  Integer

Popis

Funkce Trunc převede reálné číslo na celé číslo odříznutím desetinné části.

Hodnota funkce

Funkce vrací celé číslo vzniklé seříznutím z hodnoty parametru. Pokud je hodnota parametru funkce mimo rozsah typu Integer, není hodnota funkce definována.

Příklad

function Vek(dat : date) : integer;

{**********************************}

// funkce vrátí počet celých let

begin

  Vek := Trunc((Today-dat)/365);

end;

Viz

Round.


Funkce Undelete
Undelete	[ICP]

function Undelete(table : ttablenum; position : trecnum) : Boolean;

BOOL [cd_]Undelete([cdp_t cdp], ttablenum table, trecnum position);

function [cd_]Undelete([cdp : cdp_t]; table : ttablenum; position : trecnum) : Boolean;

Parametry

table	tabulka deklarovaná v programu - viz podrobnosti
position	číslo zrušeného záznamu
[cdp	kontextová proměnná klienta]

Popis

Funkce Undelete obnoví dříve zrušený záznam v tabulce table. Provedením Undelete se nezmění absolutní čísla ostatních záznamů v tabulce resp. kurzoru. Funkci nelze použít na uvolněný záznam.

V programu ve vnitřním programovacím jazyce smí být parametrem table jak číslo tabulky získané voláním funkce Find_object, tak i tabulka deklarovaná v tomto programu.

Pokud záznam nebo objekt určený parametry funkce není zrušený, jádro vydá varování. K chybě dojde, pokud parametr position specifikuje uvolněný záznam.

Pomocí Undelete nelze obnovit zrušenou tabulku.

Hodnota funkce

Funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize.

Příklad

Rec_cnt(MTAB, limit);

for I:=0 to limit-1 do

 if MTAB[I].deleted then

   Undelete( MTAB, I);

Viz

Insert, Append, Delete, Delete_all_records Free_deleted.


Funkce Uninst_table
Uninst_table	[ICP]

function Uninst_table(table : ttablenum) : Boolean;

BOOL Uninst_table(ttablenum table);

function Uninst_table(table : ttablenum) : Boolean;

Parametry

table	tabulka deklarovaná v programu - viz podrobnosti

Popis

Funkce sdělí serveru, že program nebude v nejbližší době pracovat s tabulkou table. Server tuto informaci využije k tomu, aby uvolnil paměť využívanou pro přístup k této tabulce.

Pokud parametr  table má hodnotu -1, pak server uvolní paměť vztahující se ke všem tabulkám.

Od verze serveru 5.1 lze sice používáním této funkce nepatrně vylepšit využití paměti serveru, nicméně i bez ní server bude pracovat správně a nebezpečí ubývání paměti nehrozí.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.


Funkce unlink_kernel
unlink_kernel	[.CP]

void unlink_kernel(void);

procedure unlink_kernel;

Popis

Funkce je od verze 5.0 zastaralá a nedělá nic.

Ve starších verzích: Funkce vyšle serveru zprávu, že klient již nepotřebuje jeho služby. Tato funkce se volá až po volání interf_close.

Viz

link_kernel


Procedura Upcase
Upcase	 [ICP]

procedure Upcase(var str : string);

void Upcase(char * str);

procedure Upcase(str : Pchar);

Parametry

str	řetězec znaků

Popis

Procedura Upcase konvertuje všechna malá písmena v řetězci str na velká. Umí konvertovat i národní znaky.

Příklad

ss := 'C:\*.DBF';

  if Select_file(0,ss) then begin

    s := StrCopy(ss,StrLength(ss)-2,3);

    UpCase(s);

    if s ='DBF' then begin

      Reset(f,ss);                       // otevření DBF souboru

Viz

Strcat, Strcopy, Strinsert, Strdelete, Strpos, Strlength, Strtrim, Pref, Like, Substr.


Funkce Used_memory
Used_memory	[ICP]

function Used_memory(local : Boolean) : integer;

sig32 [cd_]Used_memory([cdp_t cdp], BOOL local);

function [cd_]Used_memory([cdp : cdp_t]; local : Boolean) : longint;

Parametry

local	rozlišení paměti klienta a serveru ;
[cdp	kontextová proměnná klienta]

Popis

Funkce zjistí, kolik paměti WinBase602 využívá.

Parametr local udává, zda-li se zkoumá využitá paměť na serveru (FALSE) nebo na počítači klienta (TRUE). Při lokálním provozu hodnota parametru nemá význam.

Funkce je určena pro vývojáře složitějších aplikací jako pomůcka při ladění. Neustálý růst využívané paměti může signalizovat chybu v aplikaci, např. při práci s kurzory.

Hodnota funkce

Funkce vrací počet bytů využité paměti.

Viz

Available_memory, Owned_cursors


Funkce User_in_group
User_in_group	[ICP]

function User_in_group(user, group : tobjnum; var state : Boolean) : Boolean;

BOOL User_in_group(tobjnum user, tobjnum group, BOOL * state)

function User_in_group(user, group : tobjnum; var state : Boolean) : Boolean;

Parametry

user	číslo uživatele
group	číslo skupiny
state	výstupní parametr: stav náležení uživatele do skupiny

Popis

Funkce je od verze 5.0 zastaralá, je nahrazena obecnější funkcí GetSet_group_role.

Funkce User_in_group zjišťuje, zda uživatel  user je členem skupiny  group. Do parametru  state zapíše TRUE, pokud je, FALSE, pokud není.

Číslo uživatele a číslo skupiny vrátí funkce Find_object s parametrem CATEG_USER resp CATEG_GROUP.

Hodnota funkce

Funkce vrací FALSE při úspěchu, TRUE při chybě.

Viz

User_to_group, Insert_object, Find_object, GetSet_group_role


Funkce User_to_group
User_to_group	[ICP]

function User_to_group(user, group : tobjnum; state : Boolean) : Boolean;

BOOL User_to_group(tobjnum user, tobjnum group, BOOL state)

function User_to_group(user, group : tobjnum; state : Boolean) : Boolean;

Parametry

user	číslo uživatele
group	číslo skupiny
state	náležení uživatele do skupiny

Popis

Funkce je od verze 5.0 zastaralá, je nahrazena obecnější funkcí GetSet_group_role.

Funkce User_in_group zařazuje resp. vyřazuje uživatele  user do resp. ze skupiny  group. Je-li parametr  state roven TRUE, je uživatel zařazen do skupiny, je-li roven FALSE, je vyřazen ze skupiny.

Číslo uživatele a číslo skupiny vrátí funkce Find_object s parametrem CATEG_USER resp CATEG_GROUP.

.

Zařazovat uživatele do skupin a vyřazovat je z nich smí pouze správce databáze (člen skupiny DB_ADMIN).

Hodnota funkce

Funkce vrací FALSE při úspěchu, TRUE při chybě.

Viz

User_in_group, Insert_object, Find_object, GetSet_group_role


Procedura View_close
View_close	[I..]

procedure View_close(var viewdef : string);

Parametry

viewdef	řetězec znaků obsahující hvězdičku a jméno formuláře

Popis

Procedura View_close uzavře formulář zadaný parametrem.

Příklad

View_close("*FORM1")

Viz

View_open, View_print, View_state, View_toggle


Procedura View_open
View_open	[I..]

procedure View_open(var viewdef : string);

Parametry

viewdef	řetězec znaků obsahující hvězdičku a jméno formuláře

Popis

Procedura View_open otevře formulář zadaný parametrem. Pokud je formulář již otevřen, pak jej přemísti nad všechna ostatní okna.

Příklad

View_open("*FORM1")

Viz

View_close, View_print, View_state, View_toggle


Procedura View_pattern
View_pattern 	[ICP]

procedure View_pattern(viewobj : tobjnum);

void View_pattern(tobjnum viewobj);

procedure View_pattern(viewobj : tobjnum);

Parametry

viewobj	číslo (nikoliv handle) formuláře

Popis

Procedura View_pattern připraví dialog Formát stránky (volaný funkcí Page_setup nebo Print_opt a stisku tlačítka Formát) pro tisk štítků. Formulář s číslem viewobj (sestava se štítky), se použije v dialogu pro znázornění rozložení jmenovek na stránce. Funkcí Set_first_label lze ovlivnit označení pozice štítku pro tisk v dialogu.

Příklad

if Find_object("stitek3x7",CATEG_VIEW,objnum) then Signalize

   else begin

     View_pattern(objnum);

     Set_first_label(1,1);

     if Print_opt(0) then Print_view("*stitek3x7",-1,-1,-1);

   end;

Viz

Print_opt, Page_setup, Set_first_label, Find_object,


Procedura View_print
View_print	[I..]

function View_print(var viewdef : string) : Boolean;

Parametry

viewdef	řetězec znaků obsahující hvězdičku a jméno sestavy

Popis

Funkce View_print vytiskne sestavu zadanou parametrem. Vlastnosti tisku závisí také na nastavení provedeném funkcemi Print_opt, Printer_dialog, Print_margins, Print_copies nebo procedurou Set_printer.

Hodnota funkce

Funkce vrací TRUE, pokud se podařilo sestavu vytvořit, jinak vrací FALSE.

Příklad

View_print("*FORM1")

Viz

View_open, View_close, View_state, View_toggle


Funkce View_state
View_state	[I..]

function View_state(var viewdef : string) : Boolean;

Parametry

viewdef	řetězec znaků obsahující hvězdičku a jméno formuláře

Popis

Funkce View_state zjišťuje, zda zadaný formulář je otevřen na obrazovce.

Hodnota funkce

Funkce vrací TRUE, pokud formulář otevřen je, a FALSE, pokud otevřen není.

Příklad

if View_state("*FORM1") then View_close("*FORM1")

Viz

View_open, View_print, View_close, View_toggle


Procedura View_toggle
View_toggle	[I..]

procedure View_toggle(var viewdef : string);

Parametry

viewdef	řetězec znaků obsahující hvězdičku a jméno formuláře

Popis

Procedura View_toggle otevře formulář zadaný parametrem, pokud již otevřen není. Pokud tento formulář již otevřen je, zavře jej.

Příklad

View_toggle('*FORM1')

Viz

View_open, View_print, View_state, View_close


Funkce waiting
waiting	[ICP]

function waiting(timeout: integer) : Boolean;

void [cd_]waiting([cdp_t cdp], sig32 timeout);

function [cd_]waiting([cdp : cdp_t]; timeout : sig32) : Boolean;

Parametry

timeout	čas v desetinách sekundy
[cdp	kontextová proměnná klienta]

Od verze:

5.0

Popis

Funkce waiting určuje, jak dlouho mají požadavky klienta čekat na uvolnění potřebných zámků na serveru. Čas se zadává v desetinách sekundy. Hodnota 0 znamená nečekat vůbec, hodnota -1 čekat neomezeně dlouho. Pokud zadaný čas vyprší a zámek není volný, skončí požadavek chybou NOT_LOCKED (S objektem někdo pracuje).

Hodnota funkce

Funkce vrací při chybě TRUE.


Procedura Wait_for_semaphore
Wait_for_semaphore	[...S]

PROCEDURE Wait_for_semaphore(IN shandle INT, IN tm INT);

Parametry

shandle	identifikace (handle) otevřeného semaforu
tm	počet milisekund

Od verze:

6.1

Popis

Procedura je určena výhradně k použití v příkazech jazyka SQL.

Pokud semafor zadaný parametrem shandle je zvednutý, funkce ihned skončí a vrátí hodnotu 0. Pokud semafor je spuštěný, pak funkce čeká na zvednutí tohoto semaforu jiným vláknem. Toto čekání může skončit jedním ze tří způsobů:

•	pokud jiné vlákno provede funkci Release_semaphore na stejný semafor, pak funkce skončí a vrátí 0;

•	pokud vyprší časový limit čekání zadaný parametrem tm, pak funkce skončí a vrátí hodnotu -1;

•	pokud dojde k ukončení SQL serveru, pak funkce skončí a vrátí hodnotu -2.

Časový limit čekání se zadává v milisekundách. Pokud je zadána hodnota -1, pak funkce může čekat neomezeně dlouho.

Pokud funkce vrátí hodnotu -2, vlákno by mělo co nejdříve ukončit svoji činnost.

Více o synchronizaci vláken - podrobnosti.

Viz

Create_semaphore, Release_semaphore, Wait_for_semaphore,


Funkce waits_for_me
waits_for_me	[...S]

function waits_for_me(sloupec) : Boolean

Parametry

sloupec	sloupec _W5_DOCFLOW

Od verze:

5.0

Popis

Funkce waits_for_me je určena výhradně k použití v příkazech jazyka SQL.

Parametrem funkce musí být systémový sloupec _W5_DOCFLOW, případně prefixovaný aliasem tabulky (vyskytuje-li se ve více spojovaných tabulkách).

Hodnota funkce

Vrací TRUE právě když záznam, na nějž je použita, je dokumentem čekajícím na právě přihlášeného uživatele.

Příklad

ss := 'SELECT * FROM `ŽÁDANKY O DOVOLENOU` WHERE WAITS_FOR_ME(_W5_docflow)';

if Open_sql_cursor(cz,ss) then Signalize

else begin

  Rec_cnt(cz,pocet);

  if pocet > 0 then begin

    spom := 'Alespoň jedna dovolenka čeká na Vaše schválení.'#10'Otevřít nyní jejich seznam?';

    if YesNo_box('',spom) then begin

      Open_view('*SuperSeznam čekajících',cz, modal_view+auto_cursor+no_edit,

0,0,idcek);

    end else Close_cursor(cz);

  end else Close_cursor(cz);

end;

Viz

GetSet_next_user, Next_user_name


Funkce WinBase602_version
WinBase602_version	[ICP]

function WinBase602_version : integer;

sig32 [cd_]WinBase602_version([cdp_t cdp]);

function [cd_]WinBase602_version ([cdp : cdp_t]) : sig32;

Parametry

[cdp	kontextová proměnná klienta]

Popis

Funkce WinBase602_version vrací číslo verze WinBase602. V horním slově je hlavní číslo verze, ve spodním vedlejší číslo.

Hodnota funkce

Funkce vrací číslo verze WinBase602.

Příklad

var

  i : integer;

  s : string[20];

begin

  i := WinBase602_version;

  s := "Verze "+Int2str(i div 65536)+"."+Int2str(i mod 65536);

  Info_box("WinBase",s)

end.


Funkce WinBaseFrameProc
WinBaseFrameProc	[.CP]

LRESULT WinBaseFrameProc(window_id hWnd, UINT umsg, wParam wParam, LParam lParam);

function WinBaseFrameProc(hWnd : window_id;  umsg : uns32; wParam : uns32; lParam : uns32) : uns32;

Parametry

hWnd	Handle okna MDI-frame
umsg	Číslo zprávy Windows
wParam	Parametr zprávy typu WORD
lParam	Parametr zprávy typu LONG

Popis

Funkce WinBaseFrameProc provádí zpracování zpráv, které přišly hlavnímu oknu aplikace WinBase602.

Hodnota funkce

Funkce vrací nulu, pokud zprávu kompletně zpracovala, nebo nenulovou hodnotu, pokud zprávu je třeba předat dál k dalšímu zpracování.

Viz

DefWinBaseFrameProc, Init_non_mdi_env, Init_window_env


Funkce Who_am_I
Who_am_I	[ICPS]

function Who_am_I : string;

char * [cd_]Who_am_I([cdp_t cdp]);

function [cd_]Who_am_I ([cdp : cdp_t]): Pchar;

Parametry

[cdp	kontextová proměnná klienta]

Popis

Funkce Who_am_I zjišťuje uživatelské jméno, pod nimž je klient přihlášen na databázový server.

Pro anonymního uživatele (přihlášeného prázdným jménem a heslem) bude vrácen řetězec "ANONYMOUS".

Hodnota funkce

Funkce Who_am_I vrací uživatelské jméno, pod nimž je klient přihlášen na databázový server.

Viz

Login, Alogin, Am_I_db_admin

Příklad

Info_box('Moje jméno:', Who_am_I);


Procedura Write
Write	[I..]

procedure Write(var f : file; ... );

Parametry

f	proměnná typu soubor (file) označující otevřený soubor
ostatní parametry	libovolné výrazy typu  Boolean, Char, Short, Integer, Real, Date, Time, Timestamp, String, CSString nebo CSIString.

Popis

Procedura Write konvertuje hodnoty výrazů, které obdrží jako druhý a další parametry, na znakové řetězce a zapisuje je do souboru, který je jejím prvním parametrem. Soubor musí být předem otevřen.

Za druhým a každým dalším parametrem Write smí být uvedena dvojtečka a celočíselný výraz. Je-li takový údaj uveden, pak vyčíslí hodnotu tohoto výrazu a předá se konverzní proceduře. Význam této hodnoty je stejný jako význam parametru, který v definici pohledu udává přesnost zobrazení - viz kapitola o návrhu pohledů. Hodnota říká, jakým způsobem se provede konverze parametru Write na řetězec znaků.

V praxi se ukazuje lepší předem si zformátovat zapisované údaje pomocí konverzích procedur (Int2str, Real2str, Date2str apod.) do řetězce a ten pak předat funkci.

Příklad 1

Write(soubor, 'Výsledek je ', 17.5*koef : -3, ' metrů za sekundu.');

Příklad

načtení obsahu složky TEX typu Text z prvního záznamu tabulky TEXTY do souboru na disku:

const

  MAX = 2000;

table

  Texty;

var

  f : file;

  longstr : string[MAX];

  delka,i : short;

  kolikrat : short;

begin

  Rewrite(f,'c:\longtext.txt');

  delka := Texty[0].Tex#;

  kolikrat := Trunc(delka/MAX)+1;

  for i := 1 to kolikrat do begin

    if i < kolikrat then

      longstr := Texty[0].tex[(i-1)*MAX,i*MAX-1]

    else

      longstr := Texty[0].tex[(kolikrat-1)*MAX,delka];

    Write(f,longstr);

  end;

  Close(f);

end.

Viz

Read, Writeln, Reset, Rewrite, Close, Eof, Seek, Filelength.


Procedura Write (ext.)
Write	[.CP]

BOOL [cd_]Write([cdp_t cdp], tcurstab curs, trecnum position, tattrib attr, const modifrec * access, const void * buffer,  uns16 datasize);

function [cd_]Write([cdp : cdp_t]; curs : tcurstab;  position : trecnum; attr : tattrib;  var access;  var buffer; datasize : uns16) : Boolean;

Parametry

curs	číslo otevřeného kurzoru nebo číslo tabulky - viz podrobnosti
position	číslo záznamu, kam se údaje mají zapsat
attr	číslo sloupce, jehož hodnota (nebo délka) se přepisuje
access	popis přístupu k údajům v uvedené pozici kurzoru
buffer	proměnná obsahující údaje určené k zapsání do databáze
datasize	velikost zapisovaných dat v bytech
[cdp	kontextová proměnná klienta]

Popis

Funkce Write zapisuje údaje do databáze. Objekt, do něhož se má zapisovat, může být buď tabulka zadaná svým číslem (nalezeným funkcí Find_object) nebo otevřený kurzor (funkcí Open_cursor nebo Open_cursor_direct).

Před zápisem funkce ověří, zda přepisované záznamy jsou zamčeny, a pokud nejsou, pokusí se je dočasně zamknout na dobu zápisu. Pokud se zamčení nepovede, zápis se neprovede a dojde k chybě.

Obecná funkce Write s velmi složitým parametrem access je výhodné v jednotlivých konkrétních případech nahradit funkcemi Write_ind (zápis do sloupce pevné velikosti), Write_ind_cnt (zápis počtu složek multiatributu), Write_var (zápis do sloupce proměnné velikosti) a Write_len (zápis délky sloupce proměnné velikosti).

Funkci Write nahrazuje ve vnitřním programovacím jazyce přiřazovací příkaz mezi databázovým sloupcem a výrazem.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Viz

Read, Read_ind, Read_ind_cnt, Read_var, Read_len, Write_ind_cnt, Write_var, Write_len,  Write_ind, Find_object, Open_cursor, Open_cursor_direct


Funkce Write_ind
Write_ind	[.CP]

BOOL [cd_]Write_ind([cdp_t cdp], tcurstab curs, trecnum position, tattrib attr, uns16 index, void * data, uns16 datasize);

function [cd_]Write_ind([cdp : cdp_t]; curs : tcurstab; position : trecnum; attr : tattrib; index : uns16; var buffer; datasize : uns16) : Boolean;

Parametry

curs	číslo otevřeného kurzoru nebo číslo tabulky - viz podrobnosti
position	číslo záznamu, kam se údaj má zapsat
attr	číslo sloupce, jehož hodnota se přepisuje
index	pořadí v multiatributu
buffer	údaj určený k zapsání do databáze
datasize	velikost zapisovaných dat v bytech.
[cdp	kontextová proměnná klienta]

Popis

Funkce zapíše obsah proměnné buffer délky nejvýše datasize do sloupce pevné velikosti attr v tabulce, jejíž číslo curs bylo nalezeno pomocí funkce Find_object nebo v dotazu číslo curs otevřeného funkcemi Open_cursor nebo Open_cursor_direct.

Je-li attr multiatribut, proměnnou index stanovíte pořadí v multiatributu (číslováno od 0). V opačném případě použijte konstantu NOINDEX.

Před zápisem funkce ověří, zda přepisované záznamy jsou zamčeny, a pokud nejsou, pokusí se je dočasně zamknout na dobu zápisu. Pokud se zamčení nepovede, zápis se neprovede a dojde k chybě.

Funkci Write_ind nahrazuje ve vnitřním programovacím jazyce přiřazovací příkaz mezi databázovým sloupcem a výrazem.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Viz

Read, Write, Read_ind, Read_ind_cnt, Read_var, Read_len, Write_ind_cnt, Write_var, Write_len, Find_object, Open_cursor, Open_cursor_direct


Funkce Write_ind_cnt
Write_ind_cnt	[.CP]

BOOL [cd_]Write_ind_cnt([cdp_t cdp], tcurstab curs, trecnum position, tattrib attr, uns16 count);

function [cd_]Write_ind_cnt([cdp : cdp_t]; curs : tcurstab;  position : trecnum, attr : tattrib;  count : uns16) : Boolean;

Parametry

curs	číslo otevřeného kurzoru nebo číslo tabulky - viz podrobnosti
position	číslo záznamu
attr	číslo sloupce - multiatributu, u něhož se zapisuje počet hodnot
count	počet hodnot multiatributu
[cdp	kontextová proměnná klienta]

Popis

Funkce změní počet hodnot multiatributu attr na počet uvedený v proměnné count v tabulce, jejíž číslo curs bylo nalezeno pomocí funkce Find_object nebo v dotazu číslo curs otevřeného funkcemi Open_cursor nebo Open_cursor_direct.

Funkci Write_ind_cnt nahrazuje ve vnitřním programovacím jazyce přiřazovací příkaz mezi multiatributem se symbolem # na levé a výrazem na pravé straně.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Viz

Read, Write, Read_ind, Read_ind_cnt, Read_var, Read_len, Write_ind, Write_var, Write_len, Find_object, Open_cursor, Open_cursor_direct


Funkce Write_len
Write_len	[.CP]

BOOL [cd_]Write_len([cdp_t cdp], tcurstab curs, trecnum position, tattrib attr, uns16 index, uns32 size);

function [cd_]Write_len([cdp : cdp_t]; curs : tcurstab; position : trecnum; attr : tattrib; index : uns16; size : uns32) : Boolean;

Parametry

curs	číslo otevřeného kurzoru nebo číslo tabulky - viz podrobnosti
position	číslo záznamu
attr	číslo sloupce, jehož hodnota se přepisuje
index	pořadí v multiatributu
size	velikost sloupce proměnné velikosti
[cdp	kontextová proměnná klienta]

Popis

Funkce změní velikost sloupce proměnné velikosti attr na size v tabulce, jejíž číslo curs bylo nalezeno pomocí funkce Find_object nebo v dotazu číslo curs otevřeného funkcemi Open_cursor nebo Open_cursor_direct. Nelze zadat délku větší, než je skutečná délka dat uložených ve sloupci.

Je-li attr multiatribut, proměnnou index stanovíte pořadí v multiatributu (číslováno od 0). V opačném případě použijte konstantu NOINDEX.

Funkci Write_len nahrazuje ve vnitřním programovacím jazyce přiřazovací příkaz mezi atributem proměnné velikosti se symbolem # na levé a výrazem na pravé straně.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Viz

Read, Write, Read_ind, Read_ind_cnt, Read_var, Read_len, Write_ind, Write_ind_cnt, Write_len, Write_var, Find_object, Open_cursor, Open_cursor_direct


Funkce Write_lock_record
Write_lock_record	[ICP]

function Write_lock_record(curs : tcurstab; position : trecnum) : Boolean;

BOOL [cd_]Write_lock_record([cdp_t cdp], tcurstab curs, trecnum position);

function [cd_]Write_lock_record([cdp : cdp_t]; curs : tcurstab; position : trecnum) : Boolean;

Parametry

curs	otevřený kurzor nebo tabulka - viz podrobnosti
position	číslo záznamu
[cdp	kontextová proměnná klienta]

Popis

Funkce uzamkne záznam pro zápis. Zamknout záznam pro zápis smí uživatel, který má právo přepisu k alespoň jednomu jeho sloupci

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE. K neúspěchu může dojít, pokud záznam je jinou aplikací uzamčen pro zápis. Pokud uvedený kurzor zahrnuje více spojených tabulek, zamknou se příslušné záznamy ve všech těchto tabulkách.

Viz

Read_lock_record, Read_lock_table, Read_unlock_record, Read_unlock_table, Write_lock_table, Write_unlock_record, Write_unlock_table


Funkce Write_lock_table
Write_lock_table	[ICP]

function Write_lock_table(curs : tcurstab) : Boolean;

BOOL [cd_]Write_lock_table([cdp_t cdp], tcurstab curs);

function [cd_]Write_lock_table([cdp : cdp_t]; curs : tcurstab) : Boolean;

Parametry

curs	otevřený kurzor nebo tabulka - viz podrobnosti
[cdp	kontextová proměnná klienta]

Popis

Funkce uzamkne všechny záznamy tabulky pro zápis. Pokud uvedený kurzor zahrnuje více spojených tabulek, zamknou se všechny. Zamknout tabulku pro zápis smí uživatel, který má právo přepisu k alespoň jednomu jejímu sloupci.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE. K neúspěchu může dojít, pokud je některý záznam tabulky jinou aplikací uzamčen pro zápis nebo pro čtení.

Příklad

if not Write_lock_table(Tfirma) then begin

  Enable_index(Tfirma,-1,false);

  if Enable_index(Tfirma,-1,true) then err := true;        //  přebudování indexů

  Write_unlock_table(Tfirma);

if err then Info_box('Chyba','Chyba při vytváření indexů v tabulce adres!')

else Info_box('Tabulka adres','OK');

Viz

Read_lock_record, Read_lock_table, Read_unlock_record, Read_unlock_table, Write_lock_record, Write_unlock_record, Write_unlock_table


Funkce Write_record
Write_record	[.CP]

BOOL [cd_]Write_record([cdp_t cdp], tcurstab curs,  trecnum position, void * buffer,  uns16 datasize)

function [cd_]Write_record([cdp : cdp_t]; curs : tcurstab;  position : trecnum; var buffer;  datasize : uns16) : Boolean;

Parametry

curs	číslo tabulky nebo číslo otevřeného kurzoru - viz podrobnosti
position	číslo záznamu
buffer	buffer obsahující data
datasize	velikost dat v bajtech
[cdp	kontextová proměnná klienta]

Popis

Funkce zapíše celý záznam do tabulky zadané svým číslem (nalezeným funkcí Find_object) nebo kurzoru (otevřeného funkcí Open_cursor nebo Open_cursor_direct).

Funkce zapíše do záznamu s číslem position v tabulce nebo kurzoru curs všechny sloupce. Hodnoty těchto sloupců musí být v proměnné buffer bezprostředně za sebou a jejich celková velikost musí být datasize.

Hodnoty sloupců musí být v buffer v tom pořadí, v němž jsou definovány v tabulce nebo kurzoru curs. Funkce nepracuje se sloupcem DELETED, s hodnotami multiatributů ani sloupců proměnné velikosti. Pro ně se v buffer nevynechává žádné místo. Sledovací atributy typu Autorizace a Datumovka musí být v buffer uvedeny, ale do databáze se nezapíší. Pro sloupec typu Autorizace se musí rezervovat dvanáct bajtů pro ID uživatele. Pro každý zapisovaný sloupec typu řetězec musí být v parametru buffer o jeden bajt více, než činí maximální délka řetězce.

Ve vnitřním programovacím jazyce nahrazuje tuto funkci přímé přiřazení mezi záznamem v databázi a proměnnou typu záznam.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Viz

Read, Write, Read_record, Find_object, Open_cursor, Open_cursor_direct


Funkce Write_unlock_record
Write_unlock_record	[ICP]

function Write_unlock_record(curs : tcurstab; position : trecnum) : Boolean;

BOOL [cd_]Write_unlock_record([cdp_t cdp], tcurstab curs, trecnum position);

function [cd_]Write_unlock_record([cdp : cdp_t]; curs : tcurstab; position : trecnum) : Boolean;

Parametry

curs	otevřený kurzor nebo tabulka - viz podrobnosti
position	číslo záznamu.
[cdp	kontextová proměnná klienta]

Popis

Funkce odemkne dříve uzamčený záznam pro zápis. Pokud uvedený kurzor zahrnuje více spojených tabulek, odemknou se příslušné záznamy ve všech těchto tabulkách.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Viz

Read_lock_record, Read_lock_table, Read_unlock_record, Read_unlock_table, Write_lock_record, Write_lock_table, Write_unlock_table


Funkce Write_unlock_table
Write_unlock_table	[ICP]

function Write_unlock_table(curs : tcurstab) : Boolean;

BOOL [cd_]Write_unlock_table([cdp_t cdp], tcurstab curs);

function [cd_]Write_unlock_table([cdp : cdp_t]; curs : tcurstab) : Boolean;

Parametry

curs	otevřený kurzor nebo tabulka - viz podrobnosti
[cdp	kontextová proměnná klienta]

Popis

Funkce odemkne všechny záznamy tabulky pro zápis. Pokud uvedený kurzor zahrnuje více spojených tabulek, odemknou se všechny.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Příklad

if not Write_lock_table(Tfirma) then begin

  Enable_index(Tfirma,-1,false);

  if Enable_index(Tfirma,-1,true) then err := true;        //  přebudování indexů

  Write_unlock_table(Tfirma);

if err then Info_box('Chyba','Chyba při vytváření indexů v tabulce adres!')

else Info_box('Tabulka adres','OK');

Viz

Read_lock_record, Read_lock_table, Read_unlock_record, Read_unlock_table, Write_lock_record, Write_lock_table, Write_unlock_record


Funkce Write_var
Write_var	[.CP]

BOOL [cd_]Write_var([cdp_t cdp], tcurstab curs, trecnum position, tattrib attr, uns16 index, uns32 start, uns32 size, void * buffer);

function [cd_]Write_var([cdp : cdp_t]; curs : tcurstab; position : trecnum; attr : tattrib; index : uns16; start,size : uns32; var buffer) : Boolean;

Parametry

curs	číslo otevřeného kurzoru nebo tabulky - viz podrobnosti
position	číslo záznamu, kam se údaje mají zapsat
attr	číslo sloupce, jehož hodnota se přepisuje
index	pořadí v multiatributu
start	kam se zapisuje
size	kolik bajtů se zapisuje
buffer	zapisovaná hodnota
[cdp	kontextová proměnná klienta]

Popis

Funkce zapíše v tabulce, jejíž číslo curs bylo nalezeno pomocí funkce Find_object nebo v dotazu číslo curs otevřeného funkcemi Open_cursor nebo Open_cursor_direct do sloupce proměnné velikosti attr od pozice start size bajtů z proměnné buffer

Je-li attr multiatribut, proměnnou index stanovíte pořadí v multiatributu (číslováno od 0). V opačném případě použijte konstantu NOINDEX.

Funkci Write_var nahrazuje ve vnitřním programovacím jazyce přiřazovací příkaz mezi sloupcem proměnné velikosti s dvojindexem [start, size] na levé a řetězcem nebo strukturou na pravé straně.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Viz

Read, Write, Read_ind, Read_ind_cnt, Read_var, Read_len, Write_ind, Write_ind_cnt, Write_len, Find_object, Open_cursor, Open_cursor_direct


Procedura Writeln
Writeln	[I..]

procedure Writeln(var f : file; ... );

Parametry

f	textový soubor
ostatní parametry	libovolné výrazy typu  Boolean, Char, Short, Integer, Real, Date, Time, Timestamp, String, CSString nebo CSIString.

Popis

Procedura Writeln konvertuje hodnoty výrazů, které obdrží jako druhý a další parametry, na znakové řetězce a zapisuje je do souboru, který je jejím prvním parametrem. Za hodnotou posledního parametru procedura zapíše do souboru přechod na nový řádek (znaky CR a LF a kódy 13 a 10). Soubor musí být předem otevřen.

Za druhým a každým dalším parametrem Writeln smí být uvedena dvojtečka a celočíselný výraz. Je-li takový údaj uveden, pak vyčíslí hodnotu tohoto výrazu a předá se konverzní proceduře. Význam této hodnoty je stejný jako význam parametru, který v definici pohledu udává přesnost zobrazení (není to tedy počet vypsaných znaků jako ve standardním Pascalu) - viz kapitola o návrhu pohledů. Hodnota říká, jakým způsobem se provede konverze parametru Writeln na řetězec znaků.

V praxi se ukazuje lepší předem si zformátovat zapisované údaje pomocí konverzích procedur (Int2str, Real2str, Date2str apod.) do řetězce a ten pak předat funkci.

Příklad

name := GetTempDir+'FAX602.TEL';

if Reset(g,name) then begin

  WriteLn(g,'[PHONELIST]');

  obsah :=jmenofirmy+'='+cislofax;

  WriteLn(g,obsah);

  Close(g);

end;

Viz

Read, Write, Reset, Rewrite, Close, Eof, Seek, Filelength.


Funkce Year
Year	[ICPS]

function Year(dt : date) : integer;

int Year(uns32 dt);

function Year(dt : uns32) : integer;

Parametry

dt	datum ve vnitřním formátu WinBase602

Popis

Funkce Year extrahuje rok z data.

Hodnota funkce

Funkce vrací nezáporné číslo označující rok (v našem letopočtu).

Příklad

dty := Year(dt);

if (dty < 100) and (dty > 9) then dt := Make_date(Day(dt), Month(dt), dty+1900)

Viz

Make_date, Day, Month, Today, Make_time, Hours, Minutes, Seconds, Sec1000, Day_of_week, Now.


Funkce Yesno_box
YesNo_box	[ICP]

function YesNo_box(var caption, text : string) : Boolean;

BOOL YesNo_box(const char *caption, const char * text);

function YesNo_box(caption, text : PChar) : Boolean;

Parametry

caption	nadpis dotazovacího okna
text	text v dotazovacím okně

Popis

Funkce otevře na obrazovce modální okno obsahující nadpis  caption, text text, ikonu s otazníkem a tlačítka Ano a Ne. Funkce skončí poté, co uživatel stiskne některé z těchto tlačítek.

Stiskne-li uživatel místo toho kombinaci kláves Ctrl+Break,  přeruší tím běh programu ve vnitřním jazyce. Takto lze ukončit věčný cyklus, v němž se neustále otevírá dotazové okno.

Hodnota funkce

Funkce vrátí TRUE, pokud uživatel stiskl tlačítko Ano, jinak vrátí FALSE.

Příklad

while not konec and Get_message(MSG) do

begin

  ...

  konec := YesNo_box("Upozornění","Ukončit práci?")

end;


Sbírka dotazů
Sbírka příkladů dotazů

Používat se budou tabulky FAKTURY a FIRMY z aplikace PŘÍKLADY. Použité dotazy naleznete v téže aplikaci nazvané DOTAZ_01 až _N.

Tabulka FIRMY je jednoduchý adresář našich obchodních partnerů. Má tuto strukturu:

Sloupec	Typ	Popis
CISLO	INTEGER	číslo firmy; primární klíč
NAZEV	CSISTRING[40]	název firmy
MĚSTO	CSISTRING[20]	sídelní město
ULICE	CSISTRING[20]	ulice a číslo
STAT	CSISTRING[4]	zkratka státu (CR nebo SR)
PSC	CSISTRING[6]	směrovací číslo
STATUS	CHAR	O = odběratelé; D = dodavatelé
DAT_ZAPISU	DATE	datum zavedení do tabulky
PRACOVNÍK	CSISTRING[20]	odpovědný pracovník
Tabulka FAKTURY je seznam všech faktur přišlých i odešlých. Má tuto strukturu:

Sloupec	Typ	Popis
CISLO	SHORT	číslo faktury; primární klíč
DAT1	DATE	datum vystavení nebo příchodu
DRUH	SHORT	1 = došlé; 2 = odeslané
FIRMA	INTEGER	číslo firmy z tabulky firem (cizí klíč)
CASTKA	MONEY	kolik peněz
ZAPLACENO	DATE	datum zaplacení


Sbírka dotazů str. 2
Sbírka dotazů – str. 2

Příklad 1

Zadání: Vyberte všechny platné záznamy z tabulky FIRMY.

SQL: 	SELECT *

FROM Firmy

Příklad 2

Zadání: Vypište názvy firem (z tabulky FIRMY) a setřiďte je podle názvu.

SQL: 	SELECT Firmy.nazev

FROM Firmy

ORDER BY Firmy.nazev

Poznámka:

Povšimněte si, že návrhář zapisuje názvy sloupců ve tvaru Jméno_tabulky.Jméno_sloupce. Je to z toho důvodu, že při použití více tabulek se mohou vyskytnout dva sloupce stejného jména. V tomto případě je možné příkaz (např. v programu) zadat i jako:

SELECT nazev

FROM Firmy

ORDER BY nazev

Příklad 3

Zadání: Vypište názvy firem z ČR a jméno jejich odpovědného pracovníka.

SQL: 	SELECT Firmy.nazev, Firmy.pracovnik

FROM Firmy

WHERE (Firmy.stat="CR")

Poznámky:

a) Výčet sloupců za slovem SELECT se odděluje čárkami.

b) Podmínka v části WHERE se v textové podobě dává do kulatých závorek. V takto jednoduchém výrazu to není nutné, ve složitějších případech mohou chybějící závorky způsobit potíže.

c) V podmínce WHERE se mohou vyskytovat i sloupce nepoužité v části SELECT.


Sbírka dotazů str. 3
Sbírka dotazů – str. 3

Příklad 4

Zadání: Připojte fakturám vždy název a adresu firmy.

SQL: 	SELECT Faktury.cislo,Firmy.nazev,Faktury.castka

FROM Faktury,Firmy

WHERE Faktury.firma=Firmy.cislo

Příklad 5

Zadání: Zjistěte, kolik faktur je došlých.

SQL: 	SELECT COUNT(Faktury.cislo)

FROM Faktury

WHERE (Faktury.druh=1)

Poznámky:

a) Agregační funkce se počítá přes jedinou skupinu, a tou jsou všechny platné záznamy. Z toho plyne, že výsledkem musí být jediný řádek s tolika hodnotami, kolik je v části SELECT položek. Dotaz s agregačními funkcemi není editovatelný.

b) Parametry funkce COUNT: Počítáte-li záznamy v dotazu, velice záleží na sloupci, který použijete jako parametr funkce COUNT. Výsledky se totiž mohou od sebe lišit. Funkce COUNT počítá pouze ty záznamy, které ve sloupci, jež je jejím parametrem, nemá hodnotu NULL. Chcete-li spočítat všechny záznamy, pak jako parametr funkce COUNT použijte hvězdičku nebo takový sloupec, u něhož máte zajištěno, že nenabývá hodnot NULL.

Příklad 6

Zadání: Zjistěte obraty jednotlivých firem a kolika fakturami toho dosáhli.

SQL: 	SELECT Faktury.firma,SUM(Faktury.castka),COUNT(*)

FROM Faktury

GROUP BY Faktury.firma

ORDER BY Faktury.firma

Poznámky:

a) Odpověď bude obsahovat tolik záznamů, kolik je v tabulce rozdílných firem. Hodnoty odpovědi nebudou editovatelné.

b) Kombinací tohoto příkladu s příkladem 4 (relační propojení) můžete do odpovědi dostat též název firmy místo jejího čísla.


Sbírka dotazů str. 4
Sbírka dotazů – str. 4

Příklad 7

Zadání: Vypište seznam odběratelů, průměrnou hodnotu jejich obratu, s vyloučením těch, kteří odebrali zboží pouze jednou.

SQL: 	SELECT Firmy.nazev, AVG(Faktury.castka),COUNT(*)

FROM Faktury, Firmy

WHERE (Faktury.firma = Firmy.cislo) AND (Firmy.status='O')

GROUP BY Firmy.nazev

HAVING COUNT(*)>1

Poznámky:

a) Sloupec STATUS je typu Znak (Char) a proto se musí zapisovat v apostrofech (') a nikoli v uvozovkách (") jako typ řetězec.

b) Všimněte si, čím se od sebe liší podmínky WHERE a HAVING. Podmínka WHERE se dá uplatnit ještě před sestavením skupin, zatímco podmínka HAVING se může vyhodnotit až po sestavení skupin.

Příklad 8

Zadání: Zjistěte průměrnou dobu zaplacení faktur odběrateli.

SQL: 	SELECT nazev, AVG(zaplaceno-dat1)

FROM Faktury, Firmy

WHERE Faktury.firma= Firmy.cislo

   AND (druh=2 AND zaplaceno IS NOT NULL)

GROUP BY Firmy.nazev

Poznámky:

a) Všimněte si, že agregační funkce může mít za parametr i výraz.

b) Výsledek agregační funkce bude vždy tentýž jako typ argumentu, proto je průměrný počet dnů uveden jako celé číslo.


Sbírka dotazů str. 5
Sbírka dotazů – str. 5

Příklad 9

Zadání: Vypište ty firmy, které byly do databáze zavedeny až po firmě Nerez a.s.

SQL: 	SELECT *

FROM Firmy A, Firmy B

WHERE (A.dat_zapisu>B.dat_zapisu

 AND B.nazev="Nerez a.s.")

Poznámky:

a) Jak je vidět, vnitřní relační propojení (dokonce na nerovnost) můžete provádět i v rámci jedné tabulky. Tento způsob, anglicky nazývaný Self-Join je méně častý než propojení různých tabulek.

Příklad 10

Zadání: Zjistěte, z jakých států jsou vaši obchodní partneři. (Předpokládejme, že máme bohatší styky se světem než fiktivní firma v našem příkladu).

SQL: 	SELECT DISTINCT Firmy.stat

FROM Firmy

Poznámka:

Klauzuli DISTINCT lze použít i na vybrané skupiny záznamů. Klauzule DISTINCT rozlišuje pouze mezi prvními osmi sloupci.


Sbírka dotazů str. 6
Sbírka dotazů – str. 6

Příklad 11

Zadání: Vyberte ty faktury, které nejsou zaplacené

SQL: 	SELECT *

FROM Faktury

WHERE (Faktury.zaplaceno IS NULL)

Poznámka:

a) Operátor IS NULL se používá právě v takovýchto příkladech: vybrat ty záznamy, v nichž některý sloupec je nebo není vyplněn.

b) Pokud bychom chtěli tuto podmínku obrátit (negovat), lze použít dva ekvivalentní zápisy: WHERE (Faktury.zaplaceno IS NOT NULL) nebo WHERE NOT (Faktury.zaplaceno IS NULL).

Příklad 12

Zadání: Vytvořte dotaz, který zjistí nezaplacené faktury odběratelů a vypočítá penále k dnešnímu dni. Lhůta na zaplacení nechť je 14 dní, penále je 1% z ceny za každý den po lhůtě.

SQL: 	SELECT Faktury.castka AS ČÁSTKA,

(Today-dat1-14) AS POČET_DNÍ,

(Today-dat1-14)*0.01*castka AS PENÁLE,

castka+(Today-dat1-14)*0.01*castka AS CELKEM,

Firmy.nazev AS NÁZEV,

Faktury.cislo AS FA_ČÍSLO

FROM Faktury, Firmy

WHERE Faktury.firma=Firmy.cislo

 AND (Faktury.zaplaceno IS NULL AND

Faktury.dat1<=Today-14 AND

Faktury.druh=2)

Poznámky:

a) Všimněte si, že odpověď na tento dotaz se liší den ode dne - jak narůstá penále.

b) Ve výrazu v části SELECT i v podmínce WHERE lze používat některé funkce programovacího jazyka. Místo funkce jazyka Today by šlo se stejným výsledkem použít i funkci SQL CURRENT_DATE.


Sbírka dotazů str. 7
Sbírka dotazů – str. 7

Příklad 13

Zadání: Zjistěte obraty a počty faktur firem po měsících.

SQL: 	SELECT Firmy.nazev, Month(dat1) AS Měsíc,

COUNT(Faktury.cislo) AS Počet,

SUM(Faktury.castka) AS Suma_Kč

FROM Faktury, Firmy

WHERE Faktury.firma= Firmy.cislo

GROUP BY Firmy.nazev,Month(dat1)

Poznámka:

Pro skupinu je použita hodnota výrazu, místo funkce jazyka Month by šlo použít i SQL funkci EXTRACT ve tvaru

EXTRACT (MONTH FROM dat1).

Příklad 14

Zadání: Vypište seznam všech firem a počet jejich faktur, včetně těch firem, které nemají ještě ani jednu fakturu.

SQL: 	SELECT Firmy.nazev, COUNT(Faktury.cislo)

FROM Firmy LEFT OUTER JOIN Faktury

ON (Firmy.cislo=Faktury.firma)

GROUP BY Firmy.nazev

Poznámky:

a) Zajimavější by to bylo v případě, kdyby nás zajímaly pouze faktury jednoho druhu. Kam umístit podmínku Faktury.druh=2?

Správná odpověď je do podmínky JOINu za ON:

SELECT Firmy.nazev, COUNT(Faktury.cislo)

FROM Firmy LEFT OUTER JOIN Faktury

ON (Firmy.cislo=Faktury.firma AND Faktury.druh=2)

GROUP BY Firmy.nazev

Kdyby se podmínka umístila do části WHERE

SELECT Firmy.nazev, COUNT(Faktury.cislo)

FROM Firmy LEFT OUTER JOIN Faktury

ON (Firmy.cislo=Faktury.firma)

WHERE Faktury.druh=2

GROUP BY Firmy.nazev

zcela by se eliminoval účinek vnějšího propojení, neboť ty faktury, které jsou v dotazu mají díky OUTER JOINu hodnotu druh rovno NULL.

b) Je použito jedno vnější propojení. Pokud by existovala další tabulka relačně svázaná s tabulkou Faktury (nazvaná Polozky) pres dvojici sloupců id_fakt, je možné vytvořit dotaz se dvěma vnějšími propojeními:

SELECT *

FROM Firmy LEFT OUTER JOIN Faktury

             LEFT OUTER JOIN Polozky ON (Faktury.id_fakt=Polozky.id_fakt)

     ON (Firmy.cislo=Faktury.firma)

nebo je možné uzávorkovat

SELECT *

FROM (Firmy LEFT OUTER JOIN Faktury ON (Firmy.cislo=Faktury.firma))

     	      LEFT OUTER JOIN Polozky ON (Faktury.id_fakt=Polozky.id_fakt)


Sbírka dotazů str. 8
Sbírka dotazů – str. 8

Příklad 15

Zadání: Vyberte firmy, které byly do databáze zapsány v měsících leden až březen včetně.

SQL: 	SELECT Firmy.cislo,Firmy.nazev,Firmy.pracovnik,

Firmy.dat_zapisu

FROM Firmy

WHERE (Month(dat_zapisu) IN (1,2,3))

Poznámky:

a) stejného cíle by šlo dosáhnout i pomocí jiných zápisů podmínky, např.

WHERE (Month(dat_zapisu) BETWEEN 1 AND 3)

nebo

WHERE (Month(dat_zapisu) >=1 AND Month(dat_zapisu) <=3)

b) operátor IN má i druhé použití – hodnota se pomocí něho porovnává s výsledkem subdotazu.

Příklad 16

Zadání: Vyberte faktury jednoho typu za více než je průměrná hodnota faktury tohoto typu.

Popis řešení: Rozdělíme si úlohu na dva kroky. Nejprve spočteme průměrnou hodnotu faktury:

SELECT AVG(castka)

FROM Faktury

WHERE druh=2

Tento dotaz by bylo výhodné umístit jako součást podmínky v sekci WHERE. WinBase602 takovéto použití dotazu (neboli subdotazu) v dotazu umožňuje.

SQL: 	SELECT *

FROM Faktury

WHERE (Faktury.druh=2 AND

Faktury.castka  >	(SELECT AVG(castka)

FROM Faktury

WHERE druh=2))

Poznámky:

a) Subdotaz se vždy ohraničen kulatými závorkami.

b) Dotaz je editovatelný, protože agregační funkce je pouze v subdotazu.

c) V podobném dotazu není možné použít klauzuli HAVING (jak to umožňoval WinBase602 do verze 5).


Sbírka dotazů str. 9
Sbírka dotazů – str. 9

Příklad 17

Zadání: Vyberte faktury firem z Prahy

Popis řešení: Zvolíme řešení se subdotazem. Subdotaz vybere firmy z Prahy:

SELECT cislo

FROM Firmy

WHERE mesto LIKE "Praha%"

Dotaz na tabulku Faktury použije subdotaz k vybrání těch faktur, jejichž číslo firmy se nachází v subdotazu. Doslovný přepis pak vypadá takto:

SQL: 	SELECT cislo, firma

FROM Faktury

WHERE firma IN (SELECT cislo

FROM Firmy

WHERE mesto LIKE "Praha%")

Poznámky:

a) Predikát IN je zde (na rozdíl od příkladu 15) použit ve významu zjištění výskytu v odpovědi na subdotaz. Subdotaz musí obsahovat pouze jeden sloupec.

b) Stejného efektu by se dosáhlo zápisem firma=ANY (subdotaz)místo firma IN (subdotaz) .

c) Predikát LIKE slouží k porovnávání hodnoty sloupce MESTO se vzorem zadaným výrazem "Praha%", což je SQL zápis ve WinBase602 používaného operátoru .= (řetězec začíná ...). Predikát LIKE je mnohem obecnější – viz nápověda k SQL.

d) Již z dřívějších příkladů byste měli umět vytvořit tento dotaz i bez subdotazu:

SELECT  Faktury.cislo, Faktury.firma

FROM Faktury, Firmy

WHERE Firmy.cislo=Faktury.firma

 AND (Firmy.mesto.="Praha")


Sbírka dotazů str. 10
Sbírka dotazů – str. 10

Příklad 18

Zadání: Vyberte firmy, které mají faktury za více než 10000,- Kč.

Popis řešení: Zvolíme opět řešení se subdotazem. Subdotaz pro každou firmu spočte její faktury. Pak už stačí subdotaz porovnat s konstantou 10000.

SQL: 	SELECT A.nazev

FROM Firmy A

WHERE 10000 < (SELECT SUM(castka)

FROM Faktury B

WHERE A.cislo=B.firma)

Poznámky:

a) Zde použitý subdotaz se odlišuje od subdotazů v předešlých příkladech – pro každý záznam tabulky Firmy má subdotaz jinou hodnotu.

b) Pokud bychom chtěli vypsat tytéž firmy a jejich obraty, musíme použít variantu dotazu bez subdotazu:

SELECT A.nazev, SUM(B.castka)

FROM Firmy A, Faktury B

WHERE A.cislo=B.firma

GROUP BY B.firma

HAVING 10000 < SUM(B.castka)

c) všimněte si, že dotaz se subdotazem je editovatelný, zatímco dotaz s propojením nikoliv.


Sbírka dotazů str. 11
Sbírka dotazů – str. 11

Příklad 19

Zadání: Vypište názvy firem, které mají faktury za více než 5000,- Kč.

Popis řešení:  V tomto příkladu ukážeme použití subdotazu v části SELECT. Subdotaz pro každé číslo faktury vrátí jméno firmy. Toto jméno lze použít ve výčtu sloupců dotazu.

SQL: 	SELECT DISTINCT (SELECT nazev

FROM Firmy

 	WHERE Firmy.cislo=Faktury.firma) AS Nazev

FROM Faktury

WHERE castka > 5000

Poznámky:

a) Sloupec Nazev odpovědi není samozřejmě editovatelný.

b) Stejného výsledku (ale s možností editace odpovědi) lze dosáhnout takto:

SELECT Firmy.nazev

FROM Firmy

WHERE Firmy.cislo =ANY (SELECT Faktury.firma

FROM Faktury

WHERE castka > 5000

  AND Faktury.firma=Firmy.cislo)

c) Stejného výsledku lze dosáhnout i bez subdotazů, pomocí JOINu, např. takto:

SELECT DISTINCT Firmy.nazev

FROM Faktury,Firmy

WHERE (castka > 5000)

  AND (Firmy.cislo=Faktury.firma)

d) Pokud by nám stačil jen počet firem, je třeba použít funkce COUNT. Otázkou zůstává umístění klauzule DISTINCT:

SELECT DISTINCT COUNT(Firmy.nazev)

nedá správný výsledek, je třeba DISTINCT předřadit COUNT:

SELECT COUNT (DISTINCT Firmy.nazev)

FROM Faktury,Firmy

WHERE (castka > 5000)

  AND (Firmy.cislo=Faktury.firma)


Sbírka dotazů str. 12
Sbírka dotazů – str. 12

Příklad 20

Zadání: Mějme tabulky FAKTURY a FAKT_2 a v nich data z let 1998 a 1997. Vypište faktury odběratelů z dvou měsíců na přelomu roku 1997.

Popis řešení: Úloha vyžaduje spojení dat ze dvou tabulek, nikoli však na základě relačního vztahu, nýbrž pouhým přidáním záznamů za sebe. Sjednocení více tabulek sice WinBase602 pomocí SQL umí vytvořit, nicméně tato operace není ani obvyklá ani častá. Není proto ani implementována do interaktivního návrháře. Pokud chcete tabulky sjednotit, musíte zapsat příkaz SQL přímo v jeho textové podobě. Obě části dotazu spojte klíčovým slovem UNION a výsledek můžete setřídit sestupně podle data.

SQL: 	SELECT *

FROM Fakt_2

WHERE dat1 > 30.11.1997

         UNION

SELECT *

FROM Faktury

WHERE dat1 < 1.2.1998

ORDER BY dat1 DESC

Poznámky:

a) Obě části sjednocení musí mít v části SELECT položky stejných typů.

b) Setřídění se týká obou částí dotazu, třídit jednotlivé části před sjednocením nelze.


Sbírka dotazů str. 13
Sbírka dotazů – str. 13

Příklad 21

Zadání: Vyberte nejvyšší fakturu každého typu.

Popis řešení: Vytvoříme dva dotazy pro nejvyšší fakturu obou typů (s využitím subdotazů). Pak výsledky sjednotíme pomocí klauzule UNION.

SQL: 	SELECT "došlé   ",castka

FROM Faktury

WHERE castka = (SELECT MAX(castka)

FROM Faktury

WHERE druh=1)

  	UNION

SELECT "odeslané",castka

FROM Faktury

WHERE castka = (SELECT MAX(castka)

FROM Faktury

WHERE druh=2)

Poznámky:

a) Abychom ve výsledku odlišili oba dotazy, je první sloupec konstantní. Sloupce v obou dotazech musí mít stejnou strukturu, proto je nutné, aby řetězcové konstanty měly stejný počet znaků.


Sbírka dotazů str. 14
Sbírka dotazů – str. 14

Příklad 22

Zadání: Vyberte ty firmy, které měly faktury za více než 10000,-Kč letos (tabulka FAKTURY) i vloni (tabulka FAKT_2).

Popis řešení: Vytvoříme dva dotazy podle příkladu 18. Pak provedeme množinový průnik odpovědí - pomocí klauzule INTERSECT.

SQL:	SELECT A.nazev

FROM Firmy A, Faktury B

WHERE A.cislo=B.firma

GROUP BY B.firma

HAVING 10000 < SUM(B.castka)

INTERSECT CORRESPONDING BY (nazev)

SELECT A.nazev

FROM Firmy A, Fakt_2 B

WHERE A.cislo=B.firma

GROUP BY B.firma

HAVING 10000 < SUM(B.castka)

Poznámky:

a)  Malou změnou lze vytvořit dotaz na firmy, které tohoto obratu dosáhly letos ale ne vloni. Stačí použít množinový rozdíl EXCEPT.

SQL:	SELECT A.nazev

FROM Firmy A, Faktury B

WHERE A.cislo=B.firma

GROUP BY B.firma

HAVING 10000 < SUM(B.castka)

EXCEPT CORRESPONDING BY (nazev)

SELECT A.nazev

FROM Firmy A, Fakt_2 B

WHERE A.cislo=B.firma

GROUP BY B.firma

HAVING 10000 < SUM(B.castka)


Sbírka dotazů str. 15
Sbírka dotazů – str. 15

Příklad 23

Zadání: Zjistěte, kolik faktur bylo došlých a kolik odeslaných.

Popis řešení: Takto jednoduchý dotaz se zdá nebýti hoden umístění na konci sbírky příkladů. Opravdu, dotaz

SELECT Count (druh)

FROM Faktury

GROUP BY druh

zvládne každý. Výsledkem je jeden sloupec nadepsaný Druh se dvěma řádky pro dva typu faktur. My ale chceme, aby výsledek tvořil jeden řádek se dvěma sloupci, nadepsanými Došlé a Odeslané!!

Podívejte se na následující dotaz:

SQL:	SELECT SUM(CASE WHEN druh=1 THEN 1 ELSE 0 END) AS Došlé,

       SUM(CASE WHEN druh=2 THEN 1 ELSE 0 END) AS Odeslané

FROM Faktury

V dotazu je použito agregační funkce bez GROUP BY - odpověď tedy bude mít jeden záznam. V části SELECT jsou dva výrazy, odpověď tedy bude mít dva sloupce. Ve výrazu je použito podmíněného výrazu CASE, který fakturu jednoho typu nahrazuje jedničkou a druhého typu nulou. Pak stačí tyto jedničky sečíst agregační funkcí.


Návrh pohledů - úvod
Vytváření pohledů - úvod

Ve WinBase602 lze navrhovat čtyři základní typy pohledů: formuláře, sestavy, štítky a grafy. Prostředí pro návrh (návrháře) se v jednotlivých případech poněkud odlišují, proto budou popsány odděleně.

Nový pohled se vytváří z řídicího panelu - tlačítkem Vytvořit. Počátek návrhu děláte společně s průvodcem, který Vás provází krok za krokem výběrem možností. Každá stránka průvodce má svou vlastní nápovědu. Průvodce končí v okamžiku otevření návrháře pohledů.

Pohled lze kdykoliv upravovat - tlačítkem Modifikovat z řídicího panelu. Přenesete se přímo do prostředí návrháře pohledů. Definici pohledu lze upravovat také v textové podobě - tlačítko Editovat text.

Navrhování pohledu probíhá tak, že do různých oblastí pohledu vkládáte složky pohledu, rozmisťujete je a nastavujete vlastnosti těchto složek. Můžete také nastavovat řadu globálních vlastností pohledu a průběžně testovat, jak vypadá výsledek návrhu.

Pokračování:	Návrh formulářů
	Návrh sestav
	Návrh štítků
	Návrh grafu
Viz také:	Pohledy ve WinBase
	Řídicí panel - pohledy


Návrh formuláře

Formulář může mít dvě základní podoby - obecný tvar (různé složky libovolně rozmístěné) a standardní (tabulkový) (standardní) tvar (pevná řádková struktura). Pro obě podoby existuje různý návrhář - obě varianty budou popisovány samostatně.

Práce při návrhu formuláře spočívá ve vkládání složek různých typů na určitá místa formuláře a jejich úprava měněním vlastností. Dále lze měnit vlastnosti globální pro formulář jako celek.

Návrhář formulářů obsahuje dvě pomocná okna

•	Seznam vlastností - pomocí něhož se nastavují a mění vlastnosti složek, vlastnosti celého pohledu nebo vybírá složka;

•	Nabídkový panel -  pomocí něhož se vkládají složky.

Pokračování:	Ovládání návrháře obecných formulářů (menu, lišta)
	Manipulace se složkami v obecných formulářích (poloha, velikost)
	Oblasti pohledu v obecných formulářích (hlavička, datová oblast atd.)
	Ovládání návrháře standardních formulářů (menu, lišta)
	Manipulace se složkami v standardních formulářích (poloha, velikost)
	Oblasti pohledu v standardních formulářích (hlavička, datová oblast atd.)
	Okno Nabídkový panel
	Okno Seznam vlastností
Viz také:	Návrh a vytváření pohledů - úvod
	Složky pohledu
	Návrh vlastní lišty formuláře


standardní (tabulkový) tvar formuláře


obecný tvar formuláře


Ovládání návrháře obecných formulářů

Prostředí pro návrh obecných formulářů umožňuje pomocí menu provádět tyto akce:

Návrh

Uložit - uloží návrh do databáze. Pokud formulář není dosud pojmenován, požádá Vás o zadání jména objektu.

Uložit jako - uloží návrh pod jiným jménem.

Přechod do návrhu ...- umožní přechod do návrháře buď použitého subpohledu nebo do návrháře zdroje dat (tabulky nebo dotazu). Po skončení práce v novém návrháři přejdete zpět do stavu, ve kterém jste návrh opouštěli.

Návrat do návrhu - pokud jste v prostředí návrháře pohledů díky přechodu z jiného návrhu, můžete se tímto příkazem vrátit zpět. Pokud návrh ukončíte, dostanete se zpět také.

Uložit jako sestavu - formulář získá příznak sestavy, platí pro něj od této chvíle omezení pro sestavy.

Test návrhu - otevře na obrazovce formulář popsaný právě editovaným návrhem. Tím získáte možnost ověřit si, jaký je výsledek návrhu, aniž byste opustili prostředí pro návrh formulářů. Pokud je v návrhu chyba, budete o ní informováni a otevře se okno, které obsahuje chybný parametr. Chyba může být způsobena také tím, že není otevřen správný projekt.

Testovací tisk - vytiskne právě vytvářený objekt, v případě formuláře jen malý význam.

Pořadí složek - Umožní definovat pořadí složek ve formuláři. Pořadí složek určuje, která složka bude ve formuláři vybraná po jeho otevření a z které složky na kterou budete při práci s formulářem přecházet stiskem klávesy TAB. Pořadí zadáte takto:

•	vyberete položku Návrh / Pořadí složek, tím se na obrazovce objeví očíslované složky;

•	stiskněte levé tlačítko myši na každé složce v tom pořadí, v jakém mají být složky uspořádány. Čísla složek se tím průběžně mění, na žádné složce nelze stisknout tlačítko dvakrát;

•	poté, co takto vyznačíte pořadí všech složek, obnoví se normální vzhled obrazovky;

•	zadávání pořadí můžete předčasně ukončit tím, že opětovně vyberete položku Návrh / Pořadí složek.

Návrh lišty - otevírá zvláštní návrhář pro tvorbu uživatelské lišty (toolbaru), která se objeví na místě standardní lišty formuláře vždy při otevření tohoto formuláře - viz Návrh lišty

Konec návrhu - ukončí návrh formuláře a opustíte prostředí pro navrhování formulářů. Pokud návrh nebyl dosud uložen nebo byl od posledního uložení změněn, budete na to upozorněni a dostanete možnost návrh uložit.

Editace - manipulace se složkami formuláře

Vystřihnout, Zkopírovat, Vlepit - operace se schránkou; do schránky lze přenést jednu nebo více (označených) složek; provedením příkazu Vlepit se změní kurzor myši na tvar nové složky a kliknutím na volné místo se vloží složka (složky).

Odstranit složku - odebrání označené složky z návrhu.

Nevkládat - po vybrání nové složky z Nabídkového panelu nebo provedení příkazu Vlepit můžete odvolat stav, že kliknutí myši vloží složku.

Zarovnávat na rastr - složky se budou automaticky při změně velikosti nebo polohy zarovnávat na pozice dané násobkem stanoveného rastru.

Zobrazení - vypínání a zapínání okna Nabídkového panelu a okna Seznamu vlastností, zapínání a vypínání centimetrové pomocné sítě na pozadí návrhu a zobrazení zvoleného rastru;

Složka - vložení nové složky - viz Složky v obecném pohledu, vkládat složky je možné i z Nabídkového panelu

Popup menu vyvolané pravým tlačítkem myši na označeném objektu (objektech)

Je-li označena skupina složek a menu vyvoláte na některé z nich, pak z něm naleznete položky, které manipulují s celou skupinou:

•	Zarovnat složky / Zarovnat vlevo, vpravo, nahoru, dolů - provede se zarovnání všech složek ve skupině určeným směrem. Všechny složky se vyrovnají podle té z nich, která je ve zvoleném směru nejdále.

•	Umístit obsah složek / Vlevo, Vpravo, Uprostřed - nastaví zarovnání obsahů složek.

•	Rám složek / Zarámovat, Odstranit rám - u vybraných složek nastaví jednoduchý rám pro tisk, případně tento rám odstraní.

•	Font, Barva textu, Barva pozadí - nastaví se stejný font resp. stejná barva pro všechny označené složky ve skupině.

•	Pokud kliknete na složce, která není označena nebo která je označena jako jediná, pak se objeví menu obsahující tyto složky:

•	Font, Barva textu, Barva pozadí - otevřou se dialogová okna umožňující nastavení zvolených vlastností složky.

Ovládací lišta návrháře obecných formulářů obsahuje tato tlačítka:

Význam tlačítek:

- vystřihnout složku do schránky

- zkopírovat složku do schránky

- vlepit složku ze schránky

- uložit definici formuláře

- ukončit návrh

- otevřít reálný formulář podle návrhu

- vytisknout navrhovaný formulář

- zapnout / vypnout zobrazení mřížky na pozadí

- zapnout / vypnout zobrazení rastru

Viz také:	Vytváření pohledů
	Návrh formulářů


Oblasti obecného pohledu v návrháři
Oblasti obecného pohledu (formuláře, sestavy štítků i grafu) v návrháři

Při návrhu pohledu se definuje obsah jedné nebo více jeho oblastí. Každá oblast se v pohledu objevuje na předepsaném místě nebo v určité situaci.

Formuláře používají pouze tyto tři z možných oblasti:

•	Hlava okna (S) - objeví se v horní části okna

•	Datová oblast (>>) - obsahuje data příslušející jednomu záznamu a objeví se ve formuláři pro každý záznam jednou. Jednotlivé výskyty datové oblasti budou pod hlavou stránky seřazené pod sebou.

•	Pata okna (s) - objevuje se ve spodní části okna

Pokud není některá část přímo vidět, můžete odtažením linky oblast zvětšit a tím zviditelnit.

Sestavy mohou mít i další oblasti:

•	Hlava sestavy (R) - objeví se pouze jednou na začátku sestavy

•	Pata sestavy (r) - objeví se pouze jednou na konci sestavy

•	Hlava skupiny A až E(A,B,C,D,E) - objeví se vždy na začátku příslušné skupiny záznamů

•	Pata skupiny e až a (a,b,c,d,e)- objeví se vždy na konci příslušné skupiny záznamů

•	Hlava stránky/okna (S) - objevuje se v horní části každé vytištěné stránky

•	Pata stránky (s) - objevuje se ve spodní části každé vytištěné stránky.

Štítky a Grafy mají pouze datovou oblast.

V průběhu návrhu pohledu každá oblast tvoří samostatnou část okna návrhu. Oblasti jsou od sebe odděleny pohyblivou hranicí. Pro sestavy lze pomocí menu Oblasti stanovit, která z těchto oblastí mají být viditelná. Na obrazovce jsou zapnuty ty oblasti, které mají u své položky menu značku. Tím, že vyberete z menu položku odpovídající některé oblasti, přidáte nebo odstraníte ji z okna návrháře.

Pro formuláře jsou stále otevřeny jejich tři oblasti. Nelze je otevírat a zavírat, je možné jim však změnit velikost na nulu.

Pokud je pro pohled nastavena vlastnost Rozměry oblastí dle návrhu, budou rozměry oblastí při otevření nebo vytištění přesně podle navržené velikosti (výšky). V opačném případě se výška zmenší na spodní okraj nejnižší složky.

Viz také:	Vytváření pohledů
	Návrh formulářů


Změny polohy a rozměrů složky při návrhu obecného pohledu

Manipulovat můžete s jednou nebo více vybraných složek pohledu. Složka se stane vybranou tak, že na ní stisknete tlačítko myši. Vybraná složka má kolem sebe tlustý rám. Další složky můžete vybrat tím, že na nich stisknete levé tlačítko myši a zároveň držíte klávesu Shift. Jiný způsob označení více složek je označení oblasti v okně návrháře myší - všechny složky, které se nacházejí uvnitř oblasti, budou vybrané.

Přemístění

Chcete-li skupinu složek přemístit v rámci té oblasti, v níž se nachází, pak zajeďte myší dovnitř jedné složky, stiskněte a podržte levé tlačítko, a táhněte myší složky na to místo, kde je chcete mít. Složky lze také přemisťovat pomocí kláves s šipkami.

Změna velikosti

Chcete-li změnit velikost složky, pak stiskněte a podržte levé tlačítko myši na rámu složky a táhněte rám tak, aby složka získala správnou velikost. Rozměry složky (označených složek) lze také změnit stiskem kláves Shift a šipky.

Je-li v menu Editace zvolena možnost Zarovnávat na rastr, pak veškeré změny velikosti a umístění probíhají v násobcích zvoleného rastru.Není-li volba zapnuta, pak změny pomocí myši lze provádět libovolně.

Kopírování složek

Pro přemístění jedné nebo více složek mezi oblastmi nebo pro vytvoření kopie složek použijte přenos přes schránku pomocí menu Editace. Provedete-li příkaz Vlepit, změní se kurzor myši na tvar nové složky a kliknutím na volné místo vložíte složku (složky).

Zarovnávání složek

Zarovnání skupiny označených složek můžete provést příkazy z popup menu, které se otevře po stisku pravého tlačítka myši na některé z vybraných složek. K dispozici jsou následující příkazy: Zarovnat složky / Zarovnat vlevo, vpravo, nahoru, dolů - provede se zarovnání všech složek ve skupině určeným směrem. Všechny složky se vyrovnají podle té z nich, která je ve zvoleném směru nejdále.

Viz také:	Návrh formulářů


Rastr pro umístění složek pohledu

Při navrhování pohledů obecného typu můžete nastavit rastr, v němž se budou umísťovat složky pohledu. Tento parametr se do návrhu pohledu neukládá, je to pouze pomůcka pro navrhování. Globálně lze rastr nastavit také v okně s parametry WinBase602. Nastavení je společné pro všechny návrhy.

Umístění složek na obrazovce je dáno jejich souřadnicemi a může být v podstatě libovolné - poloha dvou složek se může lišit pouze o jediný pixel. Pak je ale velmi obtížné srovnat složky do řady nebo do sloupce. Proto je výhodnější povolit umísťování složek pouze v určitých souřadnicích. Změnou vlastnosti Rastr pro složky můžete zadat velikost rastru v souřadnici X a Y. Standardní rastr je 4 pixely v obou souřadnicích. To znamená, že souřadnice všech složek musí být dělitelné čtyřmi. Zadáte-li větší číslo, pak se složky budou pohybovat v hrubším rastru a snadněji se budou zarovnávat. Naopak zadáte-li menší číslo, pak můžete jemněji nastavit polohu složky.

Tlačítkem u vlastnosti Rastr pro výstup do souboru nastavíte takový rastr, který Vám zaručí správné rozložení složek do řádek při výstupu sestavy do textového souboru.

V návrháři je možné si zobrazit rastr na pozadí - přepínač v menu Zobrazení Rastr pro zarovnání složek. Použití rastru se zapíná příkazem Zarovnávat na rastr v menu Editace.

Viz také:	Návrh sestav
	Vytváření pohledů
	Okno Seznam vlastností


Návrh sestavy

Sestava (stejně jako formulář) může mít dvě základní podoby - obecný tvar (různé složky libovolně rozmístěné) a tabulkový (standardní) tvar (pevná řádková struktura). Pro obě podoby existuje různý návrhář - obě varianty budou popisovány samostatně.

Hlavní rozdíl od formulářů a základní význam sestav spočívá v tom, že v sestavách se vypočtou a zobrazí i hodnoty agregačních (souhrnných) funkcí, použitých na všechny záznamy nebo na skupiny záznamů. Mezi agregační funkce patří:

•	SUM(sloupec) - součet hodnot jednoho sloupce zdroje dat

•	AVG(sloupec) - průměrná hodnota sloupce

•	MAX(sloupec) - maximální hodnota sloupce

•	MIN(sloupec) - minimální hodnota sloupce

•	COUNT - počet záznamů,

které se ve formulářích nedají použít.

Množina záznamů, z nichž se agregační funkce počítá, je dána místem jejího výskytu v sestavě. Použije-li se v hlavě nebo patě skupiny, vztahuje se k záznamům patřícím do skupiny. V hlavě a patě sestavy nebo stránky se agregační funkce vztahují se na celou sestavu. Potřebujete-li počítat agregované hodnoty pro stránky, vytvořte skupiny obsahující vždy tolik záznamů, kolik jich je na jedné stránce, a zadejte, že na hranici této skupiny se má přecházet na novou stránku. Agregační funkci pak umístěte do patičky (hlavičky) této skupiny.

Práce při návrhu sestav spočívá ve vkládání složek různých typů na určitá místa formuláře a jejich úprava měněním vlastností. Dále lze měnit vlastnosti globální pro sestavu jako celek.

Návrhář sestav obsahuje dvě pomocná okna

•	Seznam vlastností - pomocí něhož se nastavují a mění vlastnosti složek, vlastnosti celého pohledu nebo vybírá složka;

•	Nabídkový panel -  pomocí něhož se vkládají složky.

Pokračování:	Ovládání návrháře obecných sestav (menu, lišta)
	Manipulace se složkami v obecných sestavách (poloha, velikost)
	Oblasti pohledu v obecných sestavách (hlavička, datová oblast atd.)
	Ovládání návrháře standardních sestav (menu, lišta)
	Manipulace se složkami v standardních sestavách (poloha, velikost)
	Oblasti pohledu v standardních sestavách (hlavička, datová oblast atd.)
	Skupiny záznamů ve skupinách
	Okno Nabídkový panel
	Okno Seznam vlastností
Viz také:	Vytváření pohledů
	Složky pohledu


Ovládání návrháře obecných sestav
Ovládání návrháře obecných sestav (a štítků)

Prostředí pro návrh obecných sestav umožňuje pomocí menu provádět tyto akce:

Návrh

Uložit - uloží návrh do databáze. Pokud pohled není dosud pojmenován, požádá Vás o zadání jména objektu.

Uložit jako - uloží návrh pod jiným jménem.

Přechod do návrhu ...- umožní přechod do návrháře buď použitého subpohledu nebo do návrháře zdroje dat (tabulky nebo dotazu). Po skončení práce v novém návrháři přejdete zpět do stavu, ve kterém jste návrh opouštěli.

Návrat do návrhu - pokud jste v prostředí návrháře pohledů díky přechodu z jiného návrhu, můžete se tímto příkazem vrátit zpět. Pokud návrh ukončíte, dostanete se zpět také.

Testovací tisk - vytiskne právě vytvářený objekt, v případě formuláře jen malý význam.

Přidat agregáty - automatické přidání jedné agregační (souhrnné) funkce do některé oblasti; týká se všech sloupců v sestavě - viz Agregáty - pro návrh štítků zakázáno

Konec návrhu - ukončí návrh pohledu a opustíte prostředí pro navrhování pohledů. Pokud návrh nebyl dosud uložen nebo byl od posledního uložení změněn, budete na to upozorněni a dostanete možnost návrh uložit.

Editace - manipulace se složkami pohledu

Vystřihnout, Zkopírovat, Vlepit - operace se schránkou; do schránky lze přenést jednu nebo více (označených) složek; provedením příkazu Vlepit se změní kurzor myši na tvar nové složky a kliknutím na volné místo se vloží složka (složky).

Odstranit složku - odebrání označené složky z návrhu.

Nevkládat - po vybrání nové složky z Nabídkového panelu nebo provedení příkazu Vlepit můžete odvolat stav, že kliknutí myši vloží složku.

Zarovnávat na rastr - složky se budou automaticky při změně velikosti nebo polohy zarovnávat na pozice dané násobkem stanoveného rastru.

Zobrazení - vypínání a zapínání okna Nabídkového panelu  a okna Seznamu vlastností, zapínání a vypínání centimetrové pomocné sítě na pozadí návrhu a zobrazení zvoleného rastru;

Oblasti - umožňuje otevírat a zavírat jednotlivé oblasti sestavy - viz Oblasti - pro štítky zakázáno

Složka - vložení nové složky - viz Složky v obecném pohledu

Popup menu vyvolané pravým tlačítkem myši na označeném objektu (objektech)

Je-li označena skupina složek a menu vyvoláte na některé z nich, pak z něm naleznete položky, které manipulují s celou skupinou:

•	Zarovnat složky / Zarovnat vlevo, vpravo, nahoru, dolů - provede se zarovnání všech složek ve skupině určeným směrem. Všechny složky se vyrovnají podle té z nich, která je ve zvoleném směru nejdále.

•	Umístit obsah složek / Vlevo, Vpravo, Uprostřed - nastaví zarovnání obsahů složek.

•	Rám složek / Zarámovat, Odstranit rám - u vybraných složek nastaví jednoduchý rám pro tisk, případně tento rám odstraní.

•	Font, Barva textu, Barva pozadí - nastaví se stejný font resp. stejná barva pro všechny označené složky ve skupině.

•	Pokud kliknete na složce, která není označena nebo která je označena jako jediná, pak se objeví menu obsahující tyto složky:

•	Font, Barva textu, Barva pozadí - otevřou se dialogová okna umožňující nastavení zvolených vlastností složky.

Ovládací lišta návrháře obecných formulářů obsahuje tato tlačítka:

Význam tlačítek:

- vystřihnout složku do schránky

- zkopírovat složku do schránky

- vlepit složku ze schránky

- uložit definici sestavy

- ukončit návrh

-  vytisknout navrhovanou sestavu

- zapnout / vypnout zobrazení mřížky na pozadí

- zapnout / vypnout zobrazení rastru

Viz také:	Vytváření pohledů
	Návrh sestav


Skupiny záznamů v sestavách

Při vytváření sestavy je možno rozčlenit záznamy v sestavě do skupin a pro každou skupinu vytvořit její hlavu a patu. Skupiny se dají definovat na max. 5 úrovních označených a až E, přičemž hlavy a paty skupiny a jsou zcela vně a hlavy a paty skupiny E zcela u datové oblasti záznamu. Úroveň a tedy vyjadřuje nejhrubší členění záznamů do skupin, úroveň E nejjemnější.

Každá skupina je zadána svým definujícím výrazem: dva záznamy patří do stejné skupiny, pokud hodnota definujícího výrazu je v nich stejná. Definující výrazy se zadávají v okně vlastností pro skupiny.

Příklad: nechť v evidenci bankovních operací se sleduje datum operace ve sloupci DATUM a čas operace ve sluopci ČAS. Pokud jsou tyto záznamy uspořádány (zdrojem dat pro sestavu je dotaz uspořádaný podle těchto dvou sloupců), pak můžete vytvořit tyto skupiny:

A: Year(DATUM)

B: Month(DATUM)

C: Day(DATUM)

D: Hours(ČAS)

E: Minutes(ČAS)

kde Year, Month, Day, Hours a Minutes jsou standardní funkce programovacího jazyka WinBase602.

Pokračování:	Definování skupin v sestavě
Viz také:	Návrh sestav
	Vytváření pohledů
	Okno Seznam vlastností


Definování a členění skupin v sestavě

Vlastnosti pod souhrnným označením Členění umožňuje nadefinovat skupiny záznamů a rozlámání do stránek na hranicích těchto skupin.

Úroveň A až E - definující výrazy skupin dovoluji rozčlenit záznamy v sestavě do a pro každou skupinu pak vytvořit její hlavu a patu. Každá skupina je zadána svým definujícím výrazem: dva záznamy patří do stejné skupiny, pokud hodnota definujícího výrazu je v nich stejná.

Nová stránka na úrovni A až E - dovoluje zajistit, že kdykoli se při generování záznamů přijde na hranici skupin určité (nebo vyšší) úrovně, přejde se na novou stránku. Paty končících skupin budou ještě na původní stránce, hlavy nových skupin už na nové stránce. Zvolíte-li variantu Nikde, pak se přechody na novou stránku řídí pouze množstvím místa na zbytku stránky.

Další vlastnosti se týkají rozložení a vzájemné polohy oblastí sestavy.

V praxi se vyskytují různé požadavky na pořadí oblastí na začátku a konci sestavy. Je-li v záhlaví stránky její číslo, je vhodné, aby případné záhlaví sestavy bylo pod záhlavím stránky, je-li však v hlavě stránky např. záhlaví k datové oblasti, je potřeba ji umístit pod hlavu sestavy apod. K tomu, aby si uživatel mohl zvolit optimální variantu, slouží vlastnosti Hlava sestavy a Pata sestavy.

Navrhuje se zvlášť záhlaví a zvlášť paty; tato dvě nastavení se vzájemně neovlivňují. K dispozici je šest základních vztahů pro oba případy, které lze ještě modifikovat vlastností Plovoucí pata stránky.

Jedná se o vzájemnou kombinaci tří položek comba s vlastností Umístit na zvláštní stránku.

Pokračování:	Vztah hlavy sestavy a stránky
	Vztah paty sestavy a stránky
Viz také:	Skupiny záznamů v sestavách
	Vytváření pohledů
	Návrh sestav
	Okno Seznam vlastností


Vztah záhlaví sestavy a stránky

Vzájemný vztah oblastí na počátku sestavy ukážeme na obrázcích. Použité zkratky znamenají:

HL SES - hlava sestavy

HL STR - hlava stránky

PT STR - pata stránky

První skupina obrázků ukazuje první dvě stránky sestavy bez zatrženého označovacího čtverce Umístit na zvláštní stránku. Čísla znamenají možnosti nabízené combo boxem:

1. Hlava sestavy před hlavou stránky;

2. Hlava sestavy za hlavou stránky;

3. Hlava sestavy bez hlavy stránky.

Druhá skupina obrázků ukazuje první dvě stránky sestavy se zatrženým označovacím čtvercem Umístit na zvláštní stránku. Čísla znamenají možnosti nabízené combo boxem:

4. Hlava sestavy před hlavou stránky;

5. Hlava sestavy za hlavou stránky;

6. Hlava sestavy bez záhlaví a paty stránky.

Zatrhnete-li označovací čtverec Plovoucí pata stránky, nebude pata stránky na konci stránky, ale těsně za poslední oblastí. Týká se to všech stránek sestavy, nikoli jen stránky poslední. Dva příklady za všechny na následujícím obrázku.

Viz také:	Skupiny záznamů v sestavách
	Vytváření pohledů
	Návrh sestav


Vztah paty sestavy a stránky

Vzájemný vztah oblastí na počátku sestavy ukážeme na obrázcích. Použité zkratky znamenají:

PT SES - pata sestavy

PT STR - pata stránky

HL STR - hlava stránky

První skupina obrázků ukazuje poslední dvě stránky sestavy bez zatrženého označovacího čtverce Umístit na zvláštní stránku. Čísla znamenají možnosti nabízené combo boxem:

1. Pata sestavy před patou stránky;

2. Pata sestavy za patou stránky;

3. Pata sestavy bez paty stránky.

Druhá skupina obrázků ukazuje poslední dvě stránky sestavy se zatrženým označovacím čtvercem Umístit na zvláštní stránku. Čísla znamenají možnosti nabízené combo boxem:

4. Pata sestavy před patou stránky;

5. Pata sestavy za patou stránky;

6. Pata sestavy bez záhlaví a paty stránky.

Zatrhnete-li označovací čtverec Plovoucí pata stránky, nebude pata stránky na konci stránky, ale těsně za poslední oblastí. Týká se to všech stránek sestavy, nikoli jen stránky poslední. Dva příklady za všechny na následujícím obrázku.

Viz také:	Skupiny záznamů v sestavách
	Vytváření pohledů
	Návrh sestav


Automaticky generované agregační funkce
Automaticky generované složky s agregačními (souhrnnými) funkcemi

Položka menu Návrh \ Přidat agregáty slouží k rychlému vložení skupiny hodnotových složek do vhodné oblasti sestavy. Oblasti, kam nelze vložit agregační funkce jsou datová oblast a hlava a pata stránky.

Po vybrání položky menu se objeví dialogové okno s nabídkou agregačních funkcí a seznamem oblastí. Vyberete oblast a funkci a tlačítkem Vložit vytvoříte v oblasti skupinu hodnotových složek s agregačními funkcemi. Nové složky se rozmístí stejně jako editační, hodnotové složky nebo editovatelná comba v datové oblasti.

Při přidávání agregačních funkcí do oblasti standardní sestavy se agregáty vloží pouze do prázdných buněk.

Viz také:	Skupiny záznamů v sestavách
	Vytváření pohledů
	Návrh sestav


Návrh štítků

Zvláštní druh obecných sestav tvoří štítky. WinBase602 umožňuje vytvářet štítky libovolných rozměrů a parametrů, nejběžněji používané typy má však již předdefinovány. Je povolen (narozdíl od běžných sestav) tisk několika štítků (tj. záznamů) vedle sebe.

Návrh štítku probíhá v mírně zjednodušeném návrháři obecných sestav, v němž je zablokováno použití jiných oblastí než datové, není tedy povoleno používat agregační funkce.

Výraznou změnou oproti návrháři sestav je možnost definovat rozměry a rozložení štítků. Provádí se to buď již při zahájení návrhu s pomocí průvodce nebo později pomocí dialogového okna, které se otevře při stisku tlačítka u vlastnosti Formát štítků.

Pokračování:	Návrh sestav (a štítků)
	Návrh štítků - popis dialogu


Návrh štítků - popis dialogu

V horní části okna je seznam předdefinovaných druhů štítků, které se u nás používají. Označení začínající A4 označují ty štítky, které se dodávají na jednotlivých arších formátu A4 a jsou určené pro stránkové tiskárny. U ostatních se předpokládá tisk na nekonečný perforovaný papír rozměru Fanfold (Skládaný papír) 210 mm x 12 palců.

Uživatel má navíc možnost nadefinovat si vlastní rozměry - po vybrání ze seznamu položku Níže definovaný formát je možno do příslušných políček zadávat nové hodnoty.

Zadává se:

•	šířka jedné jmenovky v mm;

•	výška jedné jmenovky v mm;

•	šířka mezery mezi jmenovkami, je-li na stránce více než jedna (horizontální směr);

•	výška mezery mezi jmenovkami (vertikální směr);

•	počet jmenovek vedle sebe (horizontální směr);

•	počet jmenovek na jedné stránce (vertikální směr), i když se tiskne na nekonečný pás ;

•	levý horizontální okraj - vzdálenost od kraje podkladu k prvnímu štítku shora;.

•	horní vertikální okraj - vzdálenost od kraje podkladu k prvnímu štítku zleva;

Minimální změna každého rozměru je 0,3 mm - přesněji než tento rozměr nelze údaje zadat. Případná odchylka se však nekumuluje, na nové stránce budou rozměry opět v pořádku.

Viz také:	Návrh štítků


Návrh grafu

Zvláštní druh obecných formulářů tvoří grafy. Grafy pro WinBase602 vytváří univerzální grafový server MagicGraf602. Návrh grafu probíhá v zjednodušeném návrháři obecných formulářů, v němž je zablokováno použití většiny funkcí, navíc je však přidáno ovládání návrhu grafu.

Poté, co pomocí průvodce vyberete typ pohledu graf a zvolíte zdroj dat (většinou dotaz), otevře se okno návrháře grafů a v něm se po chvíli, až se spustí program MagicGraf602, objeví v levém horním rohu sloupcový graf tvořený simulovanými daty grafového serveru.

Menu návrháře formulářů je značně redukováno - zbyly zde pouze ty položky, které mají pro tento typ pohledu smysluplný význam. Naopak přibyla položka Reálná data, která umožňuje přepínat mezi simulovanými daty grafového serveru a reálnými daty z  WinBase602. Zvláště při komplikovaném dotazu může výpočet dat určitou dobu trvat, proto je možné graf navrhovat s daty simulovanými, která se zobrazují daleko rychleji. V menu jsou navíc položky grafového serveru (typy grafů apod.). Podle nastavení parametrů grafového serveru se na ploše mohou objevit jeho lišty s tlačítky.

V popředí návrháře je otevřený jednoduchý standardní formulář označený Výběr sloupců do grafu. Vyplněním tohoto formuláře stanovíte obsah grafu.

Vlastní návrh grafu se provádí v prostředí programu MagicGraf602. MagicGraf602 jako in-place OLE server poskytne své menu a ovládání návrháři pohledů, takže i když pracujete na návrhu grafu nemusíte opouštět prostředí návrháře pohledů. K programu MagicGraf602 existuje samostatná nápověda.

Pokračování:	Výběr sloupců zdroje dat pro graf
Viz také:	Vytváření pohledů
	Návrh obecných formulářů


Výběr sloupců zdroje dat pro graf

Nejvýznamnější je první sloupeček v okně nazvaný Sloupec. V combu jsou sloupcezdroje dat z tabulky nebo dotazu, který jste zvolili na počátku návrhu.

Z hodnot vybraných sloupců numerických typů (Short, Integer, Money, Real) se vytváří průběh grafu.

Hodnoty jednoho vybraného nenumerického sloupce (Date, Time, Char, String, CSString, CSIString) se použijí jako popis osy X.

Do sloupce Legenda zapište řetězec, který se má objevit v legendě grafu náležící sloupci v tomtéž řádku okna.. Automaticky se zde objeví jméno sloupce, můžete je však přepsat vlastním popisem, který smí obsahovat jakékoli znaky včetně mezer.

Sloupec Osa X se používá k označení sloupce, jehož hodnoty budou na ose X (v grafech XY) resp. budou tvořit popis osy X. Označit je možné pouze jeden sloupec - označení druhého způsobí odznačení prvního.

Věnujte pozornost počtu řádků zdroje dat pro graf. Čím více dat bude MagicGraf602 načítat, tím pomaleji se bude graf zobrazovat. Doporučený počet řádků (tj. hodnot na ose x) je asi do 100. Maximální teoretický počet je počet pixelů okna s grafem (to bývá při rozlišení 800x600 kolem 500). Větší hodnoty MagicGraf602 odmítne zobrazovat.

Viz také:	Vytváření pohledů
	Návrh grafu


Nabídkový panel

Nabídkový panel je pomocné okno návrháře pohledů, které umožňuje vytvářet a vkládat nové složky do návrhu pohledu.

Po vstupu do návrháře pohledu je nabídkový panel v pravém spodním rohu obrazovky. Lze ho přemístit kamkoli jinam. Lze ho také kdykoli uzavřít a později znovu otevřít pomocí položky Nabídkový panel v submenu Zobrazení.

Přepínač v horní části panelu umožňuje volit, zda obsahem nabídky mají být Sloupce zdroje dat zvoleného pro pohled nebo Proměnné definované v projektu.

V levé části panelu je seznam jmen. V tomto seznamu jsou obsažena buď jména sloupců (atributů) z určité tabulky nebo dotazu, anebo identifikátory proměnných deklarovaných v projektu. Ze seznamu lze poklepáním vybírat jména (vybírat obsah budoucí složky) - jméno se přenese do pole nahoře.

U pravého okraje panelu je sloupec tlačítek, které symbolizují jednotlivé druhy složek. Tutéž nabídku složek můžete nalézt i v menu Složky. Nabídka se liší podle toho, navrhujete-li formulář či sestavu a také tabulkový pohled má omezenou množinu použitelných složek.

Adekvátně tomu, jak měníte obsah editačního pole, se mění nabídka druhů složek. Dokud je editační pole prázdné, jsou k dispozici všechny druhy složek. Poté, co vyberete některý sloupec, zůstanou na panelu pouze ty druhy, které jsou pro něj použitelné.

Rozhodnete-li se vytvořit některou složku, pak nejprve její jméno přeneste do editačního pole, a pak stiskněte tlačítko symbolizující vybraný druh složky. Tím vznikne nová složka a umístí se do schránky. Ukazovatel myši (kurzor) se změní na symbol složky. POZOR! Tato změna se projeví pouze nad tou částí obrazovky, kam je možno složku umístit, tj. nad dosud nezaplněnou oblastí pohledu. Složku pak přesunete na vhodné místo obvyklým způsobem.

Složku, vytvořenou takto ve schránce, můžete před jejím přenesením do některé oblasti zrušit tak, že opakovaným stiskem uvolníte tlačítko, které ji vytvořilo nebo použijete příkaz Nevkládat menu Editace.

Při sestavování přístupu ke sloupci lze na nabídkovém panelu použít dalších operací. Kromě výběru a připojení jména tabulky, sloupce nebo proměnné můžete:

+ # - připojit znak # za sloupec proměnné velikosti nebo multiatribut. Tím získáte údaj označující délku sloupce nebo počet složek multiatributu.

+ [] - Připojit index za multiatribut. Před připojením indexu buď vyplníte jeho hodnotu do pole vlevo od tlačítka, nebo toto pole ponecháte prázdné a tak připojíte prázdný index. Tím získáte přístup buď k jedné složce multiatributu nebo ke všem složkám prostřednictvím zvláštního okna nebo seznamu.

Pokud vyberete sloupec typu ukazatel, nabídnou se Vám sloupce z té tabulky, kam ukazatel směřuje. Díky tomu můžete vytvářet poměrně dlouhé přístupové cesty ke sloupcům.

Viz také:	Vytváření pohledů
	Složky pohledu
	Nabídka složek pro obecný pohled
	Nabídka složek pro standardní pohled
	Okno Seznam vlastností


Výběr složek z nabídkového panelu (obecné zobrazení)

U pravého okraje Nabídkového panelu je sloupec tlačítek, které symbolizují jednotlivé druhy složek. V následující tabulce jsou ukázány všechny složky, které je možné používat v obecných formulářích a poznámka, je-li možné je použít i v sestavách. Podrobnosti o složkách získáte, pokud kliknete na obrázek  v prvním sloupci.

		Sestava
	Hodnotová složka	ANO
	Nápis	ANO
	Editační pole jednořádkové	ANO (x)
	Tlačítko	NE
	Combo překládané	ANO
	Combo editační	ANO (x)
	Označovací čtverec	ANO
	Přepínač	ANO
	Seznam	ANO
	Obrázek	ANO
	Text	ANO
	Formátovaný text	ANO
	Editační pole víceřádkové	ANO
	Kalendář	NE
	Datum a čas (DTP)	NE
	Podpis	ANO
	OLE	ANO
	Subpohled	ANO
	Rám a čára	ANO
	Posuvník	NE
	Krokovač	NE
	Indikátor postupu	NE
	Záložky	NE
	Active X	ANO
	Čárový kód	ANO

Složky označené Ano (x) sice lze do sestavy vložit, ale není k tomu rozumný důvod.

Viz také:	Okno Nabídkový panel
	Okno Seznam vlastností


Návrh uživatelské lišty
Návrh uživatelské lišty s tlačítky

Vybráním položky Návrh / Návrh lišty se dostanete do odlišného samostatného prostředí pro návrh pracovní lišty s tlačítky (toolbaru).

Menu obsahuje jedinou položku Konec - vybráním se ukončí režim návrháře lišty.

Pod ním je zobrazen návrh nové lišty. Zpočátku je zde kromě standardních tlačítek fiktivní tlačítko [image], postupně se zobrazují přidávaná tlačítka návrhu. Fiktivní tlačítko je vždy poslední vpravo. Chcete-li přidat nové tlačítko na poslední pozici, vyberete fiktivní tlačítko a stisknete akční tlačítko Editovat. Po vyplnění parametrů se vloží nové tlačítko a fiktivní se posune doprava.

Vždy jedno tlačítko je vybrané - nachází se v horní části okna Editace ovládací lišty. K tomuto tlačítku se vztahují všechny činnosti volitelné pomocí akčních tlačítek okna. Chcete-li vybrat jiné tlačítko z lišty, je nutno ho stisknout myší - z klávesnice to není možné (předpokládá se, že kdo vytváří prostředek určený výhradně pro myš, bude mít myš k dispozici).

K úpravě návrhu slouží tři editační tlačítka :

Vložit - vloží nové tlačítko před vybrané a otevře okno s parametry tlačítka

Editovat - otevře okno s parametry vybraného tlačítka

Zrušit - zruší vybrané tlačítko z návrhu

Dále jsou k dispozici tato akční tlačítka:

Uložit - uloží návrh celého formuláře;

Konec - konec práce, skok zpět do návrháře pohledu;

Nápověda - tento text.

Pokračování:	Parametry tlačítka na liště
Viz také:	Návrh formulářů


Parametry tlačítka na liště

Každému tlačítku na liště je třeba definovat a určit několik parametrů.

Druh tlačítka

•	standardní - tlačítko použité ve WinBase602 se standardním významem - např. tisk  [image], které je možno použít ve shodném významu i ve Vaší aplikaci.

•	soukromé - tlačítko s vlastním obrázkem zasílající zprávu uživatelskému programu. Nutnou podmínkou je vytvoření vlastních návrhů obrázků o rozměrech 19 x 19 pixelů a jejich načtení do aplikace - viz Obrázky v aplikaci.

Obrázek - výběr obrázku, který se objeví na tlačítku lišty. Vybíráte ze speciálního combo boxu, jehož položky tvoří v případě volby standardního tlačítka obrázky vhodných tlačítek z WinBase602, v případě volby soukromého tlačítka obrázky, které jste importovali do aplikace. Mají-li tyto obrázky větší rozměry než 19 x 19 bodů, zobrazí se v combu pouze jejich levý horní roh.

Akce - programová nebo standardní akce, které se má zaslat po stisku tohoto tlačítka. Editace je povolena pouze pro soukromá tlačítka (seznam akcí se otevře po stisku tlačítka Nabídka akcí), standardní tlačítka vykonají svou standardní činnost.

Vysvětlující text - text, který se objeví na informační lince (status baru), pokud myš najede na příslušné tlačítko lišty. U standardních tlačítek není nutné vyplňovat, tlačítka si pak ponechají své vlastní informační texty.

Odsazení - výběrem jednoho přepínače určíte, jak má být vybrané tlačítko vzdálené od svého levého souseda.

•	Žádné - tlačítka se dotýkají;

•	Malé - mezi tlačítky je mezera v šíři asi jedné čtvrtiny tlačítka;

•	Velké - mezi tlačítky je mezera v šíři asi jednoho tlačítka.

Umístit vpravo - tlačítko bude umístěno na pravém okraji lišty (jako je standardně tlačítko Nápověda). Se zmenšováním okna formuláře se pravá tlačítka posouvají tak, aby byla stále stejně vzdálena od pravého okraje okna. Pokud by při zmenšení okna došlo k překrytí tlačítek zleva a zprava, viditelná budou tlačítka na pravé straně. Určení vzdálenosti mezi tlačítky na pravé straně pomocí skupiny přepínačů Odsazení se vztahuje k pravému sousedu.

Stlačením tlačítka Hotovo se nové tlačítko vloží do návrhu lišty.

Viz také:	Návrh formulářů


Formulář pro vstup dat

Takto se označuje formulář, který má sloužit výhradně k zadávání údajů do tabulky nebo dotazu (tzn. nelze jím prohlížet záznamy). Při návrhu tohoto záznamu je nutno zatrhnout označovací čtverec Pouze pro vstup dat v seznamu vlastností.

Formulář se otevře prázdný nebo s hodnotami nastavenými jako implicitní. Po vyplnění všech složek se data vloží do tabulky (dotazu) jedním z těchto způsobů:

•	stiskem klávesy Insert;

•	standardní akcí Uložit změny ve formuláři;

•	funkcí nebo metodou Commit_view.

Před uložením se provede znova kontrola integrity dat, a pokud některý údaj nevyhovuje nastavenému omezení, budete o tom informováni a záznam se neuloží. Při uzavření okna formuláře se změny neuloží (odvolají se).

Doporučení: pro formuláře pro vstup dat si nechte vygenerovat řídící tlačítka již při iniciálním návrhu formuláře.

Viz také:	Návrh formulářů


Dvoustavová tlačítka

Na složky typu Označovací čtverec nebo Přepínač lze v návrháři formulářů pomocí okna Seznamu vlastností umístit obrázek. Složka se pak chová jako dvoustavové tlačítko. Pokud se svázaná se sloupcem (nebo proměnnou) typu boolean, je dole právě když má hodnotu TRUE. Pokud má zadanou referenční hodnotu, je dole právě když se hodnota sloupce (resp. proměnné) rovná referenční hodnotě.

Viz také:	Složky pohledu
	Vytváření pohledů
	Okno Seznam vlastností


Vstupní maska
Maska

Maska pro složku pohledu slouží k vytvoření uživatelského formátu zobrazení pro zadávání a editaci nebo zobrazení hodnot.

Pokud masku připojíte k editační složce formuláře, pak se zadávání obsahu této složky bude podobat vyplňování znaků do pevně daných políček v předtištěném formuláři. Maska specifikuje, kolik těchto políček pro jednotlivé znaky v editační složce bude a co do nich bude možno zapsat.

Maska pro složku hodnotovou slouží pro uživatelské zobrazení hodnoty složky.

Při návrhu masky se můžete rozhodnout buď pro některou z předem připravených tzv. standardních masek, nebo si můžete vytvořit masku vlastní. Standardní masku zvolíte z nabídky v combu v horní části. Seznam standardní masky není možno uživatelsky doplňovat.

Standardní masky pro datum a čas mají několik podob, do nichž se automaticky upraví podle způsobu zobrazení nastaveného pro tuto složku.

Definujete-li vlastní masku, pak její jednotlivá políčka budou popsána v seznamu v levé části okna návrháře. Nová políčka do seznamu přidáte tak, že označíte některé již existující políčko a stisknete tlačítko Duplikovat položku. Tlačítkem Zrušit položku vybrané políčko naopak z masky odstraníte.

Vlastnosti políčka, které je označené v seznamu, se nastavují v pravé části okna návrháře. Políčka jsou dvojího druhu:

•	políčka, do nichž uživatel může napsat znak z klávesnice - přepínač Místo pro;

•	políčka, která obsahují pevně daný znak, jež nemůže být přepsán (obvykle závorky, pomlčky apod.) - přepínač Pevný znak.

Pro políčka, která vyplňuje uživatel, lze předepsat, co lze do nich zapsat. Dále lze nastavit, zda se zapsaná písmena mají konvertovat na velká resp. malá písmena. Lze také stanovit, zda políčko musí být uživatelem vyplněno, nebo smí zůstat prázdné.

Pro políčka s pevně daným znakem je nutno zadat tento znak buď přímo, nebo odkazem na oddělovač specifikovaný na řídicím panelu Windows. Lze dále stanovit, zda se tento znak bude ukládat spolu s vyplňovanými políčky do databáze, nebo zda se má objevovat pouze na obrazovce a do databáze se nezapíše (druhá varianta je nutná, pokud vytváříte masku pro čísla).

Při práci s editační složkou obsahující masku jsou dosud nevyplněná místa znázorněna výplňovým znakem. Návrhář umožňuje stanovit, který znak to má být, standardně se používá podtržítko ( _ ).

Viz také:	Pohledy ve WinBase602
	Vytváření pohledů
	Složky pohledu
	Okno Seznam vlastností


Šablony pohledů

Při vývoji aplikace se tráví velká část času navrhováním a úpravou formulářů a sestav. Většinou si vývojáři přejí, aby pohledy měli jednotný vzhled (stejný font pro všechny formuláře, tlačítka stejně velká, stejně vysoké editační složky apod.). Ke snadnějšímu navrhování takto sjednocených pohledů slouží myšlenka šablon.

Šablona je běžný pohled v aplikaci. Jako šablonu lze použít libovolný existující pohled, i když je rozumnější vytvořit si předem alespoň šablonu pro formuláře a šablonu pro sestavy. Při návrhu nového pohledu je možné v prvním kroku zvolit určitý pohled jako formulář pro tento pohled - od této chvíle bude vzhled složek vkládaných do pohledu odpovídat svým vzorům podle šablony. Týká se to složek vkládaných automaticky při počátečním návrhu i složek vkládaných později pomocí prostředků návrháře pohledů. Všechny nastavené vlastnosti lze kdykoliv později změnit. Změny provedené v šabloně po vytvoření pohledu se nijak neprojeví v pohledu.

Ze šablony se použije pro každý typ složky pouze její první výskyt, je tedy zbytečné mít v šabloně více variant téže složky.

Šablony lze také s výhodou využít při navrhování soustavy formulářů, které mají mít jednotný toolbar (a spravovaný z jednoho místa). Pro svoji šablonu se vytvořte lištu (toolbar) a u ostatních formulářů jako Akci při otevření volejte metodu formuláře Attach_toolbar s parametrem rovným jménu této šablony.

Globální vlastnosti, které se přebírají do vytvářeného pohledu:

•	globální font

•	globální barva pozadí a textu

Vlastnosti složek, které se přebírají:

•	výška

•	font

•	umístění

•	barva textu a pozadí

•	rámování

Viz také:	Pohledy ve WinBase602
	Řídicí panel - pohledy
	Vytváření pohledů
	Složky pohledu
	Okno Seznam vlastností


Dotazová pole

Do obecného formuláře lze vložit speciální složky, které budou sloužit k zadávání omezení na záznamy, které se ve formuláři objevují. Tím se zjednodušuje proces kladení dotazu a vyhledávání záznamů, které obsahují určité hodnoty. Místo otevření dotazového okna (standardního QBE nebo uživatelem navrženého), vyplnění omezení a jeho potvrzení stačí pouze vyplnit omezení.

Dotazové pole se do formuláře vloží jako každá jiná složka, ale v okně Seznam vlastností je třeba specifikovat další parametry. V combu Dotazové pole vyberete buď Statické nebo Dynamické dotazové pole a případně vyplníte také Dotazovou podmínku.

Pokud Dotazová podmínka vyplněna není, pak o funkcí dotazového pole rozhoduje hodnota a operátor zapsané do dotazového pole. Přepokládejme, že dotazové pole vede do sloupce os_číslo. Pak pokud při práci s formulářem uživatel napíše do dotazového pole hodnotu 200, pak se vyberou záznamy, v nichž je ve sloupci os_číslo hodnota 200. Pokud uživatel napíše >200, pak se vyberou záznamy, v nichž je hodnota sloupce os_číslo větší než 200.

Vyplněním Dotazové podmínky lze uživateli ulehčit zadávání složitějších podmínek. Uvedete v ní booleovský výraz, v němž jsou místa, do nichž se má vložit hodnota zadaná uživatelem, označena znakem %. Jakmile uživatel zadá omezující hodnotu, zapíše se na místa znaků % a do formuláře se vyberou záznamy splňující takto vzniklou podmínku. Pokud Dotazová podmínka bude příjmení.=%, pak se ve formuláři objeví záznamy, v nichž sloupec příjmení začíná zadaným řetězcem.

Dynamické dotazové pole ovlivní obsah formuláře, jakmile je v něm změněn jakýkoli znak. Hodí se zejména pro vyhledávání pomocí prefixu řetězce.

Statické dotazové pole ovlivní obsah formuláře, jakmile je v něm změněna hodnota a stisknuta klávesa Enter nebo je složka opuštěna. Hodí se zejména pro vyhledávání pomocí kompletně zadané hodnoty.

Omezení zadaná tímto způsobem se skládají s omezeními zadanými všemi ostatními způsoby. Lze je odstranit smazáním obsahu dotazového pole nebo stejně, jak se odstraňuje položený dotaz (např. tlačítkem na ovládací liště).

Viz také:	Vytváření pohledů
	Složky pohledu
	Okno Seznam vlastností


Dotaz v combu
Dotaz ve složce Combo

Složka Combo může obsahovat nabídku, která buď vznikne vyhodnocením určitého dotazu (vlastnost Dotaz plnící combo) nebo která je pevně zapsaná v definici pohledu (vlastnost Obsah comba). Zde je popsána první možnost.

Obsahem této vlastnosti je dotaz v jazyce SQL, který z databáze vybere data do nabídky patřící ke složce Combo.

Vede-li složka Combo do sloupce typu Znak, Integer nebo Short, používá se Combo překládané. Pak dotaz plnící toto combo musí obsahovat v prvním sloupci řetězec (nabízená hodnota) a ve druhém odpovídající typ (Znak, Integer nebo Short). Hodnota ve druhém sloupci se použije jako překlad obsahu prvního sloupce: pokud tedy uživatel vybere z nabídky některou hodnotu, do databáze se ve skutečnosti zapíše hodnota druhého sloupce ze stejného záznamu v odpovědi na dotaz.

Vede-li složka Combo do sloupce typu Řetězec, Datum, Čas, Timestamp, Reálné číslo, Peníze nebo Boolean, používá se Combo editační. Dotaz plnící toto combo musí obsahovat v prvním sloupci odpovídající typ.

Pokud odpověď dotazu má více než 4000 záznamů, použije je pouze prvních 4000. Pokud byste potřebovali přesto nějakým způsobem vybírat hodnotu z číselníku o více prvcích, použijte relační formulář do číselníku.

Dotaz se vyhodnocuje pouze při otevírání formuláře nebo při volání akce Aktualizovat nabídku v combech (funkce Reset_view s parametrem RESET_COMBOS) nebo při volání metody složky  ResetCombo.

Viz také:	Vytváření pohledů
	Složky pohledu
	Okno Seznam vlastností


Definice obsahu comba
Definice obsahu comba - popis dialogu

Složka Combo může obsahovat nabídku, která buď vznikne vyhodnocením určitého dotazu (vlastnost Dotaz plnící combo) nebo která je pevně zapsaná v definici pohledu (vlastnost Obsah comba). Tento dialog umožňuje zadat druhou možnost.

Okno obsahuje tři sloupce. První sloupec není editovatelný a pouze informuje o pořadí řetězců v nabídce. Do sloupce označeného Nabízený řetězec zapíšete postupně pod sebe všechny řetězce, které se v nabídce hodnot comba mají objevit. Pro editovatelné combo musí obsah každého řetězce vyhovovat typu sloupce, do něhož se hodnota bude zapisovat.

Třetí sloupec je aktivní pouze pro překládané combo. Obsahuje překlady, tj. hodnoty, které se do databáze budou zapisovat místo odpovídajících hodnot ve sloupci druhém. Pro sloupec typu Znak (Char) nezapisujte do sloupce Překlad znak, ale kód znaku, tedy celé číslo v rozsahu 0 až 255. Do databáze se uloží znak se zadaným kódem.

Viz také:	Složky pohledu
	Dotaz ve složce Combo
	Vytváření pohledů
	Okno Seznam vlastností


Speciální údaje v pohledu

Mimo toho, co dovoluje interní programovací jazyk, se v parametrech popisujících složky pohledu smějí používat symboly @, @@ a ##. Všechny tři označují hodnotu typu Integer a můžete je libovolně začleňovat do výrazů nebo předávat podprogramům.

Symbol @ označuje absolutní (externí) číslo záznamu v tabulce resp. v kurzoru (podle toho, nad čím je pohled vytvořen). Číslo záznamu je po dobu otevření pohledu neměnné, nicméně v dotazech se číslo téhož záznamu lišit může - i setřídění formuláře změní číslování, protože změní zdroj dat na jiný dotaz. V objektovém programování nahrazuje symbol vlastnost CurExtRec.

Symbol @@ označuje pořadové (interní) číslo záznamu v pohledu. Záznamy se číslují od nuly, proto @@ má v prvním záznamu hodnotu 0, v druhém 1 atd. Fiktivní záznam má konkrétní kladnou hodnotu. V objektovém programování nahrazuje symbol vlastnost CurPos.

Hodnota symbolu @@ se liší od @ tehdy, pokud jsou z pohledu automaticky vypouštěny zrušené záznamy. Tak je tomu ve všech pohledech, které nejsou otevřeny se speciálním parametrem DEL_RECS (méně častý případ).

Symbol @ má na fiktivním záznamu hodnotu -1 (lze s výhodou využít v podmínkách viditelnosti a aktivity).

Číslo stránky se v sestavě označuje symbolem ##. Stránky se číslují od jedné. Hodnota symbolu ## ve formuláři není definována. Typickým místem, kde se používají složky s číslem stránky, je oblast Hlava stránky nebo Pata stránky.

Příklad:

hodnotová složka v patě stránky:	"strana "+Int2str(##)


Nastavení fontů ve formulářích;formulář:nastavení fontů
Nastavení fontů ve formuláři

Ve standardním formuláři se používá pouze jeden font, zatímco v obecném formulář lze zvolit pro každou složku jiný font. Font se zadává při návrhu formuláře tak, že ve skupině vlastností Vzhled obsahu stisknete tlačítko u vlastnosti Font. Tím otevřete standardní dialog pro volbu fontu. Nastavený font můžete později zrušit tak, že na vybrané vlastnosti Font stisknete klávesu Delete.

V dialogu nelze zvolit atributy fontu (například podtržený text), pokud není vybráno jméno fontu. Pokud chcete zobrazovat všechna písmena české abecedy, musíte pro font nastavit středoevropský skript.

Není-li pro některou složku obecného formuláře zvolen žádný font, použije se v ní font zvolený pro celý formulář. Není-li pro formulář zvolen žádný font, uplatní se globální font zvolený pro celou WinBase602. Ten se nastavuje pomocí příkazu Parametry ze submenu Nástroje.

Fonty lze nastavovat a měnit také dynamicky během používání hotového formuláře. K tomu slouží metoda Set_font. Pro obecné formuláře lze tuto metodu volat pro jednotlivé složky připouštějící nastavení fontu, kromě čárového kódu. Pro standardní formuláře lze metodu volat pro formulář jako celek. Metodu lze použít pouze na otevřený formulář.


Barvy textu a pozadí ve formulářích
Barvy textu a pozadí ve formuláři

Pro jednotlivé složky ve formuláři lze předepsat barvu textu, který se v nich objeví. Lze také určit barvu pozadí - ve standardním formuláři je pozadí společné pro celý formulář, zatímco v obecném formuláři může mít každá složka vlastní barvu pozadí. Existují celkem čtyři cesty, jak definovat barvu:

•	Při návrhu formuláře lze vybrat některou konkrétní barvu, při použití formuláře se pak objeví stejná nebo nejbližší dostupná barva (nejbližší barva se hledá tehdy, pokud se aplikace provozuje na počítači s menší paletou barven, než na jakém byla vytvořena).

•	Při návrhu formuláře lze vybrat některou z tzv. systémových barev. Systémové barvy jsou určeny barevným schématem nastaveným na ovládacím panelu Windows. Změna barevného schématu pak změní i systémové barvy použité ve formuláři. Použití systémových barev je výhodné zejména u aplikací, které mohou být provozovány také na monochromatických nebo méně kvalitních barevných LCD displejích, protože respektuje volbu barev, kterou uživatel provedl na svém počítači v zájmu dobré čitelnosti.

•	Při použití formuláře lze upravovat barvy složek pomocí vlastností TextColor a BackColor.

•	Při návrhu formuláře lze definovat tzv. dynamické barvy, které se vyhodnotí až při použití formuláře. Tím lze dosáhnout toho, že barva složky bude záviset na jejím obsahu, například záporné hodnotě odpovídá červená barva, zatímco kladné černá a nulové modrá  - tomuto příkladu odpovídá výraz:

hodnota<0 ? 255 : hodnota>0 ? 0 : 16711680

Při návrhu formuláře se barva volí na panelu vlastností, ve skupině Vzhled obsahu, pomocí tlačítek u vlastností Barva textu, Barva pozadí případně Barva textového zápisu (pro čárový kód). V dialogu zvolíte pomocí přepínačů způsob specifikace barvy a definujete barvu. Zvolíte-li barvu textu pro formulář jako celek, uplatní se pouze jako implicitní barva pro nově vkládané složky.

Pro vyjádření dynamické barvy a pro práci s barvami pomocí vlastností se používá zápis RGB - barva je zakódována pomocí intenzity červené, zelené a modré složky. Jednotlivé intenzity se vyjadřují čísly od 0 do 255. Intenzita červené se zapíše do nejnižšího bajtu barvy, intenzita zelené do druhého bajtu a intenzita modré do třetího. Tabulka uvádí čísla reprezentující nejběžnější barvy:

černá	0
červerná	255
modrá	16711680	(=256^2*255)
zelená	65280	(=255*256)
fialová	16711935	(=256^2*255+255)
tyrkysová	16776960	(=256^2*255+255*256)
žlutá	65535	(=255*256+255)
bílá	16777215	(=256^2*255+255*256+255)

Dynamickou barvu nelze specifikovat pro pozadí formuláře ani pro složky kalendář, rám (čára), formátovaný text a čárový kód. Barvu nelze měnit u tlačítek bez obrázku, protože podle konvencí Windows jsou jejich barvy určeny zvoleným systémovým barevným schématem. Barvu čáry a rámu lze určovat pouze ve formulářích, které nemají trojrozměrný vzhled.


ODBC ve WinBase602

Co vlastně je ODBC? Je to standard pro komunikaci mezi databázovým serverem a aplikačním programem. Skládá se z programového rozhraní (API), tedy množiny funkcí, které může aplikační program volat, a ze specifikace jazyka SQL, který se při komunikaci používá. ODBC drivery v dnešní době dodávají všichni významní výrobci databázových SQL systémů.

Co vlastně přináší ODBC nového? Pokud aplikační program chtěl vstupovat do databáze (například program vytvářející účetní uzávěrku chtěl číst záznamy z účetních knih), pak musel respektovat to rozhraní, které mu databáze poskytovala, a formát dat, specifický pro databázi. Velká část programu tedy závisela na tom, se kterou databází spolupracuje. Pokud bylo třeba přejít na jiný databázový systém (např. z čistě lokální databáze na databázový server od jiné firmy), bylo nutno přepracovat podstatné části programu.

ODBC si klade za cíl specifikovat univerzální rozhraní, které by umožnilo:

•	psát aplikační programy nezávislé na databázi, s jejímiž daty budou pracovat;

•	otevřít databáze všem programům jednotným způsobem.

0	ODBC lze ve WinBase602 využít dvěma způsoby:

•	WinBase602 slouží jako ODBC server - poskytuje svá data jiným aplikacím

•	WinBase602 slouží jako ODBC klient - pracuje s daty jiných zdrojů (DBF, Btrive, Oracle aj).


WinBase602 jako ODBC klient

Uvažujme nyní případ, kdy WinBase602 vstupuje do cizích databází a tvoří k nim rozhraní nebo umožňuje programovat nad nimi aplikace. K dispozici jsou dva mechanismy:

•	k aplikaci ve WinBase602 lze připojit libovolné množství cizích databázových tabulek a pracovat s nimi. WinBase602 může například číst data z DBF souboru z dBase, umožnit uživateli je editovat, vypočítat programem nová data a zapisovat výsledky do databáze v Ingresu.

•	aplikaci lze nejprve vyvinout plně ve WinBase602, a pak realizovat její tabulky v jedné vybrané cizí databázi. Taková databázová aplikace poběží v prostředí WinBase602, ale bude manipulovat s daty uloženými např. pod Oraclem na střediskovém počítači.

V obou případech WinBase602 poskytuje svoje uživatelské rozhraní, tedy možnost používat pohledy, klást v nich QBE dotazy, editovat texty, relačně synchronizovat subpohledy, tisknout sestavy atd. Umožňuje taky psát programy, které s obsahem databází pracují - viz Práce s cizími tabulkami.

Napojení na cizí zdroj dat je jedna z komponent aplikace - viz Řídicí panel - ODBC SPOJENÍ.


WinBase602 jako ODBC server

Databáze, která chce být otevřena pro ostatní ODBC klienty, musí poskytovat tzv. ODBC driver, který do ní přenáší požadavky přicházející od aplikací. Aplikační program, který chce využít ODBC, musí své požadavky na práci s daty formulovat dle této normy. Aplikačním programem může být i univerzální databázový "front-end", tedy program, který umožňuje pracovat s obsahem databáze na obrazovce, tvořit sestavy, grafy atd.

Spolu s WinBase602 verze 6 jste obdrželi její ODBC driver odpovídající verzi 3 tohoto standardu. Tím obsah databáze zpřístupníte řadě programů, které využívají ODBC rozhraní.

Při korektní instalaci se informace o ODBC driveru WinBase zapíší do registrační databáze Windows, takže je okamžitě k dispozici. Přístup z jednotlivých prostředí k datům (způsob napojení) se však může lišit případ od případu.

Produkty firmy Microsoft začaly v novějších verzích využívat a vyžadovat tzv. File DSN oproti dřívějším System (nebo User) DSN. File DSN je textový soubor, který obsahuje obdobné informace, jako dřívější zápisy do registrační databáze, případně pouze odkaz na tuto registrační databázi. Zavedení File DSN má usnadnit správu zdrojů dat v sítích, neboť tyto souboru mohou být v rámci sítě sdílené. Vytvoření File DSN při instalaci serveru a umístění na sdíleném disku umožní přístup k datům pro všechny ODBC klienty.

Pozor: Zdrojem dat ve WinBase602 je aplikace. Pokud chcete zvenčí vstupovat do více aplikací, vytvoříte více zdrojů dat nebo ponechte parametr Jméno aplikace (popis dále) prázdný. Při každém přihlášení budete dotázáni na jméno aplikace.

Více informací a návody:

System DSN

•	Jak upravit automaticky vytvořený zdroj dat

•	Jak vytvořit nový zdroj dat

File DSN

•	Jak vytvořit nový zdroj dat

•	Jak upravit zdroj dat


Úprava zdroje dat (System DSN)
Úprava zdroje dat WinBase602 (System DSN)

Při vytvoření nové databáze ve WinBase602 a také při registraci vzdáleného serveru je vždy automaticky registrován nový systémový zdroj dat se jménem odvozeným od jména databáze/serveru. Tento zdroj dat nemá určenou žádnou aplikaci. Jméno té aplikace, která má být přístupná přes ODBC, doplníte do údajů o zdroji dat takto:

1. Na Ovládacím panelu Windows spusťte zástupce ODBC (na Windows NT) resp. 32bit ODBC (na Windows 95). Na záložce System DSN se nabídne seznam systémových zdrojů dat registrovaných na tomto počítači. Stejný program lze spustit i z Konfiguračního panelu WinBase 6.

2. V seznamu vyberte zdroj dat WinBase602 vytvořený při instalaci (ve tvaru WInBase602_jméno_serveru) a stiskněte tlačítko Configure. Musí se objevit dialogové okno Nastavení přístupu k datům ve WinBase signalizující, že byly nalezeny instalační rutiny WinBase ODBC driveru. V opačném případě instalujte znovu WinBase a zkontrolujte přítomnost souborů WB6STP.DLL a WB6DRV.DLL v adresáři Windows\System.

3. Doplňte potřebné údaje o zdroji dat do dialogového okna, zejména doplňte jméno aplikace a stiskněte OK.


Vytvoření zdroje dat (System DSN)
Vytvoření zdroje dat WinBase602 (System DSN)

Nový zdroj dat vedoucí do WinBase602 je třeba vytvořit například v situaci, když potřebujete z externích programů pracovat s další aplikací, nebo stojíte o zdroj dat, který není systémový. Postupujte takto:

1. Na Ovládacím panelu Windows spusťte zástupce ODBC resp. 32bit ODBC. Stejný program lze spustit i z Konfiguračního panelu WinBase602.

2. Chcete-li vytvořit systémový zdroj dat (sdílený všemi uživateli), zvolte záložku System DSN.

3. V dialogovém okně stiskněte tlačítko Add.

4. Z nabídky ODBC driverů vyberte WinBase602 Driver a stiskněte OK.

5. Vyplňte údaje o zdroji dat do dialogového okna Nastavení přístupu k datům ve WinBase. Jméno zdroje dat můžete zvolit libovolně, jméno serveru a aplikace musí odpovídat Vašim záměrům. Povinná pole jsou jméno zdroje dat a jméno serveru/databáze. Při volbě jména vyzkoušejte, co který ODBC klient toleruje (diakritiku, interpunkční znaménka apod.).


Vytvoření zdroje dat (File DSN)
Vytvoření zdroje dat WinBase602 (File DSN)

Nový File DSN vedoucí do WinBase602 serveru je třeba vytvořit v případě, že používáte k přístupu MS Query z Office97.

Postupujte takto:

1. Na Ovládacím panelu Windows spusťte zástupce ODBC resp. 32bit ODBC. Stejný program lze spustit i z Konfiguračního panelu WinBase602.

2. Zvolte záložku File DSN a stiskněte tlačítko Add. Spustí se průvodce, který v několika krocích pomůže s vytvořením souboru.

3. 	krok 1: zvolte driver "WinBase602 6 driver";

krok 2: zadejte jméno souboru, pod nímž se bude nabízet klientům (libovolné, opatrně s diakritikou a interpunkcí), nejlépe kombinace jména serveru a jména aplikace;

krok 3: před vytvořením zadaného zdroje dat se WinBase driver ještě zeptá na jméno serveru / databáze, které je nezbytně nutné ke spuštění a na jméno aplikace, která má být zvoleným faktickým zdrojem dat, funkčnost zdroje dat se ověřuje spuštěním serveru

4. Soubor *.DSN lze případně zkopírováním umístit na požadované místo.

Nový File DSN lze vytvořit i z prostředí MS Query. Průvodce se pak poněkud liší, význam je však stejný.


Úprava zdroje dat (File DSN)
Úprava zdroje dat WinBase602 (File DSN)

K modifikaci zdroje dat slouží tlačítko Configure na záložce File DSN.

Pro zběhlejší uživatele bude příjemnější editovat přímo textový soubor *.DSN. Soubor může mít dvě podoby.

•	odkazující na existující systémový DSN

[ODBC]

0	DSN=WinBase602_ServerVyroba

•	popisující vše potřebné

[ODBC]

DRIVER=WinBase602 6 driver

UID=	;prázdné uživatelské jméno

SERVER_ACCESS=wb6	;jméno serveru

SCHEMA=AplMoje	;jméno aplikace


Řídicí panel - ODBC SPOJENÍ

Je-li pro aplikaci nutný vstup do cizího zdroje dat, je třeba vytvořit ODBC spojení na tento zdroj. Základní akce, které je možno s touto komponentou provádět, lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se otevře po stisku pravého tlačítka myši na objektu typu ODBC spojení.

Vytvořit	Umožní vytvořit nové napojení na cizí zdroj dat - otevře dialog pro výběr registrovaných zdrojů dat
Modifikovat	Otevře dialog pro úpravu funkce zdroje dat
Zrušit	Odstranění označeného objektu z aplikace; nepovede se, pokud jsou dosud v aplikaci připojené tabulky z tohoto zdroje dat.
Popis	Otevře okno se seznamem vlastností označeného ovladače - např. lze-li tabulky v cizím zdroji modifikovat, editovat apod. Pro vývojáře je podstatná informace o ODBC kurzorech a funkci SQLSetPos - nejsou-li podporovány, není možno pracovat s daty tohoto zdroje programově.
SQL příkaz	umožní odeslat zdroji dat přímo SQL příkaz.
Práva k objektu	nastavení objektových práv

Vlastní připojení cizí tabulky se provede z řídicího panelu pro tabulky volbou akce Připojit s variantou Tabulky zpřístupněné přes ODBC.

Viz také:	ODBC
	WinBase602 jako ODBC klient
	Připojení objektu do aplikace
	Práce s tabulkami cizího zdroje dat


Připojení nového zdroje dat
Připojení nového ODBC zdroje dat

V dialogovém okně jsou tyto složky.

Seznam Dostupné zdroje dat: obsahuje ODBC zdroje dat registrované ve Vašich Windows. Pouze na tyto zdroje se můžete napojit. Drivery zpřístupňující cizí zdroje dat nejsou součástí dodávky WinBase602. Na označený zdroj se napojíte tlačítkem Připojit. U většiny zdrojů budete muset projít přes jeden či více dotazovacích dialogů, v nichž vyplníte některé specifické údaje pro daný zdroj. U většiny zdrojů také zadáte vstupní uživatelské jméno a heslo. Některé zdroje však vyžadují nastavení přímo z Windows.

Ponechat otevřený přístup do zdroje dat: volba, má-li se otevřít přísup k cizímu zdroji dat při prvním požadavku a uzavřít při zavření aplikace nebo bude-li se přístup uzavírat po skončení každého požadavku. První varianta je mnohem rychlejší, nebudete také muset při každém napojení zadávat znovu jméno a heslo.

Viz také:	ODBC
	WinBase602 jako ODBC klient
	Řídicí panel - ODBC spojení


Funkce zdroje dat
Funkce ODBC zdroje dat

V dialogovém okně volíte mezi těmito variantami:

Pasivní - máte možnost se napojit na cizí tabulky, číst z nich a zapisovat do nich.

Aktivní - máte navíc možnost vytvářet a modifikovat tabulky, pokud to driver dovoluje.

Mapovaný - použije se v případě, když odladíte aplikaci s tabulkami WinBase602 a chcete tuto aplikaci převézt kompletně do cizího zdroje dat.

Viz také:	ODBC
	WinBase602 jako ODBC klient
	Řídicí panel - ODBC spojení


Zaslání SQL příkazu ODBC zdroji dat

V dialogovém okně je jediná editovatelná víceřádková složka, do níž zapište příkaz v jazyce SQL, který chcete zaslat zdroji dat. Bude-li příkaz proveden, na stavovém řádku se objeví nápis Provedeno, vyskytne-li se chyba, objeví se hláška s popisem chyby vrácená ODBC driverem.

Při psaní SQL příkazu používejte dialekt SQL příslušného ODBC zdroje dat, nikoliv SQL WinBase602.

Viz také:	ODBC
	WinBase602 jako ODBC klient
	Řídicí panel - ODBC spojení


Práce s ODBC tabulkami z programovacího jazyka

S cizími tabulkami (tabulkami připojenými do WinBase602 z cizího ODBC zdroje dat) lze z prostředí WinBase602 pracovat prostřednictvím tzv. ODBC kurzorů stejným způsobem, jako při použití běžných kurzorů, až na několik (níže popsaných) výjimek.

Práce s daty se liší podle toho, zda je zapnuto Použití tabulek z aktivního zdroje dat či nikoli.

•	Pokud ano, pak funkce Open_cursor, Open_sql_cursor, Open_sql_parts,  Open_cursor_direct a SQL_execute jsou automaticky přesměrovány na aktivní zdroj dat. To znamená, že vytvoříte-li programem tabulku, vznikne v aktivním zdroji dat, a otevřete-li kurzor, bude to automaticky ODBC kurzor, pracující s cizími tabulkami. Mají-li být změny provedené SQL příkazem viditelné na řídicím panelu aplikace, je nutné po volání funkce SQL_execute volat funkci Relist_objects.

•	Poněkud složitější postup musíte zvolit, pokud pracujete s tabulkami WinBase602 (není zapnuto použití tabulek z aktivního zdroje dat) a chcete vedle toho zasáhnout také do cizích tabulek. Pak musíte otevřít ODBC kurzor níže popsaným způsobem:

ODBC kurzor se deklaruje jako proměnný kurzor a otevírá se funkcí Odbc_open_cursor. Číslo spojení na zdroj dat potřebné pro otevření ODBC kurzoru lze získat jednou ze tří funkcí: Odbc_find_connection, Odbc_create_connection, Odbc_direct_connection. Aplikační program by měl volat nejprve funkci Odbc_find_connection a vrátí-li nulu, pak teprve funkce Odbc_create_connection nebo Odbc_direct_connection. Spojení vytvořená funkcemi Odbc_create_connection a Odbc_direct_connection zaniknou při skončení běhu programu.

Ve vnitřním programovacím jazyce lze ODBC kurzor použít pro čtení a zápis hodnot sloupců a pro čtení a zápis celých záznamů. Ke sloupcům lze přistupovat pomocí typu záznam uvedeného v deklaraci kurzoru nebo beztypovým způsobem.

ODBC kurzor se dá použít ve funkcích:

•	Read, Write, Read_record, Write_record (pouze externí jazyky);

•	Delete, Insert, Append;

•	Rec_cnt, Delete_all_records;

•	Restore_cursor, Close_cursor;

•	Read_lock_record, Read_unlock_record, Write_lock_record, Write_unlock_record;

•	při otevírání formuláře a tisku sestav (pro přesměrování).

Funkce Delete a Insert mohou nefungovat ve spolupráci s některými staršími ODBC drivery. Drivery, které plně podporují API funkci SQLSetPos by neměly činit obtíže. Funkce pro zamykání záznamů pracují s jediným druhem zámků, který nabízí ODBC, proto funkce Read_lock_record dělá totéž co Write_lock_record.

ODBC kurzor se nedá použít ve funkcích:

•	Undelete;

•	Read_lock_table, Read_unlock_table, Write_lock_table, Write_unlock_table;

•	C_sum, C_max, C_min, C_avg, C_count, Look_up;

•	Translate, Super_recnum, Add_record;

•	Set_fcursor, Relate_record.

ODBC kurzor se zavírá funkcí Close_cursor. Při skončení běhu programu ve vnitřním jazyce se zavřou všechny neuzavřené kurzory.

Příklad:

var

  c : cursor;

  conn, rec : integer;

begin

  conn:=Odbc_find_connection('WinBase602: D:\WB602');

  if conn=0 then halt;

  if Odbc_open_cursor(conn, c,

      'SELECT * FROM odbc_table') then halt;

  if not Rec_cnt(c,rec) then

     Info_box('Počet záznamů', int2str(rec));

  rec:=Insert(c);

  c[rec].attr:=56;

  if not Rec_cnt(c,rec) then

     Info_box('Počet záznamů', int2str(rec));

  if Restrict_cursor(c, 'attr > 30') then halt;

  if not Rec_cnt(c,rec) then

     Info_box('Počet záznamů', int2str(rec));

  Restore_cursor(c);

  if not Rec_cnt(c,rec) then

     Info_box('Počet záznamů', int2str(rec));

  Close_cursor(c);

end.

Viz také:	ODBC
	WinBase602 jako ODBC klient
	Řídicí panel - ODBC spojení


Seznam vlastností pohledu - návrh pohledu pomocí návrháře
Seznam vlastností - popis okna

Vlastnosti pohledu jako celku i jednotlivých složek se nastavují při návrhu (na rozdíl od dynamických vlastností formuláře a dynamických vlastností složek, které se nastavují až za běhu, a jichž je mnohem méně) pomocí speciálního okna nazvaného Seznam vlastností. Okno má tři záložky (obrázek):

•	první je nazvána podle typu upravovaného pohledu (formulář, sestava apod.) a týká se globálních vlastností pohledu (zdroj dat, rozložení záznamů, barva na pozadí apod.); některé vlastnosti se liší podle typu pohledu (formulář x sestava x štítky x graf, obecný x standardní (mřížka));

•	druhá je označena počtem vybraných složek (Není složka, 2 složky atd.) a týká se vlastností právě vybraných složek. Některé vlastnosti lze nastavovat pro vybrané složky najednou (font apod.), u jiných je nutné nastavovat pro každou složku zvlášť (akce apod.). Množina přístupných vlastností se může lišit podle typu složky;

•	třetí záložka je nazvaná Seznam a obsahuje seznam složek pohledu ve třech sloupcích: název složky, číslo složky a typ proměnné nebo sloupce zdroje dat, kterou složka zobrazuje. Poklepáním na složku v seznamu se složka stane vybranou.

Chování okna

Okno Seznamu vlastností se otevírá a  zavírá příkazem menu Zobrazení Seznam vlastností. Je stále viditelné nad ostatními okny, nicméně neblokuje do nich přístup. Pokud překáží, dá se odsunout stranou nebo zavřít.

Obsah okna

Okno (první dvě záložky) se skládá ze dvou částí - levý sloupec tvoří názvy a popisy vlastností, v pravém sloupci se editují a zapisují jejich hodnoty. Hranici mezi sloupci je možné pomocí myši posouvat.

Struktura seznamu - skupiny

Vlastností složky nebo pohledu je více, než by se vešlo na výšku obrazovky. Okno má proto vlastnosti, které spolu tematicky souvisejí, uspořádány do skupin. Každá skupina je znázorněna tlačítkem. Po stisku tlačítka se skupina rozvine - pod tlačítkem se objeví seznam vlastností ze skupiny. Tlačítko rozvinuté skupiny zůstane dole a opětovným stiskem můžete skupinu uzavřít. Skupinu lze také rozvinout  stiskem klávesy plus (+) na numerické klávesnici (šedivé plus) a sbalit pomocí minus (-). Stromová struktura vlastností skupin je navíc znázorněna u levého okraje okna čarou vycházející z názvu skupiny a spojující vlastnosti, které do ní patří.

Jedna z vlastností je vždy vybraná - je znázorněna inverzně. Vlastnost vyberete kliknutím nebo pomocí kláves s šipkami. Některé vlastnosti a skupiny jsou vypsány šedě a jsou neaktivní - jsou to ty, které v daném kontextu nemají smysl.

Pravý sloupec

Pravý sloupec slouží k zadání nebo změně hodnoty vybrané vlastnosti ze sloupce levého. Hodnoty se zapisují různými způsoby:

•	existuje-li k vlastnosti předem daná množina hodnot, hodnoty se nabídnou v combu ( [image]);

•	je-li potřeba pro zadání otevřít samostatné dialogové okno (např. pro volbo fontu), objeví se v pravé části pole tlačítko s šipkou směřující vpravo ( [image]), které toto dialogové okno otevře;

•	logické hodnoty (Ano, Ne) se zadávají pomocí označovacího čtverce;

•	souvisí-li s vlastnostmi nějaká akce, která se má přímo vykonat (např. nastavení rastru pro výstup do souboru), je na místě pole pro zadání hodnot tlačítko s vykřičníkem.

•	ostatní hodnoty se zapisují do běžných editačních polí;

Zadávání delších hodnot do úzkých editačních polí je nepohodlné. Po stisku kláves Shift+F2 je proto možné si toto editační pole rozšířit.

Nápovědu k jednotlivým vlastnostem získáte tak, že zvýrazníte danou vlastnost a stisknete klávesu F1.

Viz také:	Popis jednotlivých globálních vlastností pohledu
	Popis jednotlivých vlastností složky


Popis jednotlivých vlastností pohledu
Popis jednotlivých globálních vlastností pohledu

viz také:  Seznam vlastností - popis okna

Druh pohledu

Druh pohledu (formulář, sestava, štítky, graf) je zvolen ještě před vlastním návrhem. Nelze ho po celou dobu návrhu změnit. Je zde i rozlišení mezi obecným a standardním zobrazením (mřížkou).

Členění

Určíte, co bude obsahem okna formuláře nebo jedné stránky sestavy. Volba Jeden záznam znamená, že v okně resp. na jedné stránce bude jediný záznam. V ostatních případech bude okno resp. stránka vyplněna tolika záznamy, kolik se jich tam vejde. Oddělením záznamů se zde míní vykreslení tenké nebo tlusté vodorovné čáry mezi záznamy a po stranách záznamů.

skupina vlastností Obsah

Stanovíte, odkud se budou brát data pro pohled - z tabulky, z odpovědi na dotaz nebo pouze z proměnných projektu. Použije se tehdy, chcete-li změnit nastavení určený před návrhem.

Zdroj dat

Combo Vám nabídne seznam tabulek nebo dotazů z aplikace, které můžete použít jako zdroj dat, pokud byste dříve nastavený zdroj chtěli změnit.

Dynamicky lze změnit pomocí vlastnosti formuláře CursNum.

Projekt

Combo Vám nabídne seznam programů v aplikaci, které lze použít jako projekt a používat tedy jeho proměnné a procedury v návrhu pohledu. Při otevření pohledu bude projekt automaticky nastaven. Většinou je projekt zvolen již průvodcem vytvoření pohledu.

skupina vlastností Vzhled obsahu

Sdružuje skupinu vlastností, které se týkají vzhledu složek a pohledu jako celku (barvy, pozadí apod.)

Font

Informuje o použitém fontu pro všechny složky pohledu. Font je možno změnit pomocí standardního dialogu, který se otevře po stisku tlačítka vpravo. Standardně je zvolen font nastavený v globálních parametrech WinBase602.

Zvolený font se použije pouze v těch složkách, které nemají specifikovaný vlastní font. Vybraný font se zruší stiskem klávesy Delete.

Není-li vybrán žádný font, použije se font nastavený v globálních parametrech WinBase602. V poli je pak nápis Font WinBase602. V tomto případě je možné mít na různých počítačích různý font.

Dynamicky lze změnit pomocí metody formuláře Set_font.

Barva textu

Pole informuje o barvě nastavené globálně pro text ve složkách. Barvu je možno změnit pomocí standardního dialogu, který se otevře po stisku tlačítka vpravo. Výběr je možný pouze z nerastrových barev. Zvolená barva bude barvou textu ve složkách, které nově vložíte. V každé složce máte pak možnost tuto barvu individuálně změnit. Volbou barvy textu nezměníte zpětně barvu dříve vložených složek.

Dynamicky lze změnit pomocí vlastnosti formuláře TextColor

Barva pozadí

Pole informuje o barvě nastavené globálně pro pozadí pohledu. Barvu je možno změnit pomocí standardního dialogu, který se otevře po stisku tlačítka vpravo.

V obecných pohledech se zde zvolená barva pozadí uplatní v oblastech pohledu mimo složky. Objeví se také na pozadí nově vkládaných složek. Volbou barvy však nezměníte zpětně barvu pozadí v již vložených složkách.

Dynamicky lze změnit pomocí vlastnosti formuláře BackColor

Obrázek v pozadí

Pole informuje o obrázku, který byl určen jako pozadí pohledu (obecného). Nebyl-li dosud určen, je zde nápis -Není-. Combo nabízí všechny obrázky v aplikaci. Použijte připravený obrázek o rozměrech navrhovaného pohledu - obrázek se vykreslí pouze jednou od levého horního rohu.

Na panelu vybraný obrázek se zruší stiskem klávesy Delete.

Tisknout pozadí

Přepínač, umožňující stanovit, má-li se při tisku sestavy tisknout i grafické (obrázek na pozadí) nebo barevné pozadí pohledu či složek. Tisk pozadí (hlavně na jehličkových tiskárnách) značně zpomaluje a prodražuje tisk.

Zrušené záznamy

Zapnete-li přepínač Zrušené záznamy, pak pohled bude mít tyto (neobvyklé) vlastnosti:

1) vede-li do tabulky, pak v něm po otevření nebo při tisku budou i zrušené záznamy

2) vede-li do tabulky, pak záznamy, které při práci s pohledem zrušíte, nezmizí z obrazovky, ale zůstanou nezměněné v pohledu

3) vede-li pohled do odpovědi na dotaz, pak záznam, který zrušíte, nezmizí, ale bude obsahovat nápisy Zrušeno.

Zahrnutím zrušených záznamů lze podstatně urychlit práci s pohledem obsahujícím velmi mnoho záznamů. Zejména v případě pohledů do dotazů, v nichž žádné zrušené záznamy z povahy věci nejsou, nebo pohledů na jediný záznam, je zahrnutí opodstatněné.

Sjednotit text

Tlačítkem Sjednotit text nastavíte barvu textu všech složek v pohledu na barvu určenou v globální vlastnosti Barva textu.

Pokud chcete změnit barvu textu pouze u několika složek obecného pohledu, označte tyto složky a změňte najednou vlastnost složky Barva textu (v okně Seznamu vlastností nebo příkazem popup menu).

Sjednotit pozadí

Tlačítkem Sjednotit pozadí nastavíte barvu pozadí všech složek v pohledu na tu barvu, kterou má pozadí pohledu.

Pokud chcete změnit pozadí pouze u několika složek obecného pohledu, označte tyto složky a změňte najednou vlastnost složky Barva pozadí (v okně Seznamu vlastností nebo příkazem popup menu).

skupina vlastností Okno formuláře

Skupina vlastností popisující vzhled a chování okna formuláře. Pro sestavy nemá smysl.

Nadpis

Do pole Nadpis můžete zadat nadpis, který se objeví na horním rámu okna formuláře. Neuplatní se v subformulářích. Máte-li definovány jazykové mutace, můžete použít metařetězce z překladové tabulky - viz Jazyky.

Dynamicky lze změnit pomocí vlastnosti formuláře Caption.

Souřadnice X

Hodnotami zapsanými do polí Souřadnice X: a Y: specifikujete polohu okna formuláře při jeho otevření na obrazovce. Souřadnice se zadávají v pixelech relativně vzhledem k levému hornímu vnitřnímu rohu hlavního okna WinBase602 (pod lištou s tlačítky). X udává horizontální polohu.

Polohu formuláře můžete snáze nastavit tak, že návrh formuláře posunete na zvolené místo na obrazovce.

Dynamicky lze změnit pomocí vlastnosti formuláře X.

Souřadnice Y

Hodnotami zapsanými do polí Souřadnice X: a Y: specifikujete polohu okna formuláře při jeho otevření na obrazovce. Souřadnice se zadávají v pixelech relativně vzhledem k levému hornímu vnitřnímu rohu hlavního okna WinBase602 (pod lištou s tlačítky). Y udává vertikální polohu.

Polohu formuláře můžete snáze nastavit tak, že návrh formuláře posunete na zvolené místo na obrazovce.

Dynamicky lze změnit pomocí vlastnosti formuláře Y.

Šířka

Pomocí pole Šířka zadáte horizontální rozměr okna formuláře na obrazovce. Udává se v pixelech.

V praxi nastavíte rozměry okna formuláře snáze prostě tak, že změníte rozměry návrhu.

Šířka okna formuláře může být i menší, než je horizontální rozloha složek . Pak ve formuláři  nebudou současně viditelné všechny složky a horizontální posuvník u spodního okraje okna umožní pohyb vpravo a vlevo. Tato vlastnost je zcela přirozená u standardních formulářů, v obecných formulářích působí poněkud nepohodlně.

Při navrhování šířky formuláře počítejte s tím, že u pravého okraje se po otevření objeví svislý posuvník.

Dynamicky lze změnit pomocí vlastnosti formuláře Width.

Výška

Pomocí pole Výška zadáte vertikální rozměr okna formuláře na obrazovce. Udává se v pixelech.

V praxi nastavíte rozměry okna pohledu snáze prostě tak, že změníte rozměry návrhu. Pro sestavy se tato vlastnost neuplatňuje - důležitý je rozměr zvoleného formátu papíru při tisku. Pokud se sestava připravuje pro konkrétní formát papíru, nastavte si i výšku podle formátu, abyste měli přehled o velikostech oblastí. S výhodou lze využít centimetrového měřítka na pozadí.

Dynamicky lze změnit pomocí vlastnosti formuláře Heigth.

Pevná velikost

Přepínač Pevná velikost způsobí, že velikost okna formuláře nelze po otevření změnit. Okno bude mít pouze tenký rám.

Lze maximalizovat

Formulář půjde nebo nepůjde maximalizovat.

Lze minimalizovat

Formulář půjde nebo nepůjde minimalizovat.

Lze zavřít

Přepínačem Lze zavřít docílíte toho, že okno s formulářem půjde nebo nepůjde zavřít pomocí ikony v levém horním rohu, příkazu v systémovém menu ani žádnou kombinací kláves. Zavřít ho lze pouze příkazem jazyka nebo metodou formuláře Close.

Rozměry oblastí dle návrhu

Zatržením tohoto čtverce docílíte toho, že vertikální rozměry oblastí v návrháři se zachovají. V opačném případě se výška oblasti zmenší na souřadnici dolního okraje nejspodnější složky.

Svislé táhlo

Není-li zatržen čtverec Svislé táhlo, formulář nebude mít svislé táhlo (scroll bar), přechody mezi záznamy tím však nejsou zakázány.

Omezené menu

Zapnutý přepínač Omezené menu změní systémové menu formuláře na menu obvyklé u běžných oken. Chybějící příkazy ze systémového menu se dají nadále provádět pomocí tlačítek na ovládací liště nebo kombinací kláves.

Trojrozměrné

Přepínač Trojrozměrný vzhled změní vzhled složek formuláře na trojrozměrný. Barva pozadí se přitom změní na světle šedivou. Lze sice použít i jiné barvy pozadí, ty si však (s výjimkou tmavě šedé) s barvami stínů složek příliš nerozumí.

Při navrhování plastického formuláře pamatujte, že je rozumné nechávat mezi editačními složkami několik pixelů volného prostoru, aby se mohly vykreslit stíny dodávající trojrozměrný vzhled.

skupina vlastností Chování formuláře

Skupina vlastností ovlivňující chování formuláře. Pro sestavy nemá smysl.

Zákaz přechodů

Zapnete-li přepínač Zákaz přechodů mezi záznamy, pak ve formuláři nebude možno přecházet ze záznamu na záznam.

Dynamicky lze změnit pomocí vlastnosti formuláře Movable.

Zákaz editace

Pokud zapnete přepínač Zákaz editace, pak ve formuláři nebude možno měnit hodnoty žádných složek.

Dynamicky lze změnit pomocí vlastnosti formuláře Editable.

Zákaz vkládání INS

Při zapnutí přepínače Zákaz vkládání záznamů pomocí klávesy Insert nebude do formuláře možno vkládat nové záznamy jinak než pomocí fiktivního záznamu.

Dynamicky lze změnit pomocí vlastnosti formuláře Insertable.

Bez fiktivního

Při zapnutí přepínače Bez fiktivního záznamu se ve formuláři nebude trvale zobrazovat fiktivní záznam (záznamy lze vkládat pomocí klávesy Insert, není-li také blokována)

Rušení záznamů

Z nabídky Rušení záznamů můžete zvolit co se stane, pokusí-li se uživatel při práci s formulářem zrušit záznam. Varianta Povoleno dovoluje rušení, varianta Zakázáno jej znemožňuje, varianta Tázat se znamená, že při pokusu o zrušení záznamu bude nutno zrušení potvrdit ve zvláštním dotazovém okně.

Dynamicky lze změnit pomocí vlastnosti formuláře Deletable.

Zákaz QBE a třídění

Ve formuláři nebude možno otevírat okna pro QBE dotazy ani třídění. Funkčnost dotazových polí není dotčena. Zachováno zůstalo i setřiďování standardního formuláře poklepáním na záhlaví sloupce.

Automatické synchronizování

Pokud vypnuto, ve formuláři se subformuláři vedoucími do stejného zdroje dat nebude docházet k automatickému synchronizování (nastavování na stejný záznam).

Pouze pro vstup dat

Zapnutím přepínače Pouze pro vstup dat vytvoříte speciální záznamově synchronizovaný formulář, který se dá použít pouze pro vkládání nových záznamů.

Tento druh formuláře se odlišuje od normálních formulářů zejména v tom, že je v něm pouze fiktivní záznam. Do databáze se zapíše až po stisku klávesy Insert nebo provedení standardní akce "Vložit záznam do formuláře" nebo metody formuláře Insert. Poté se obsah složek vyprázdní (resp. naplní implicitními hodnotami) a lze vkládat další záznam.

Pokud není vyžadováno vkládání dalšího záznamu, před zavřením formuláře je nutné hodnoty uložit provedením standardní akce "Uložit změny ve formuláři" nebo provedením funkce jazyka Commit_view nebo metody formuláře Commit_view. Pokud ve formuláři pro vstup dat vyplníte hodnoty složek a formulář zavřete, do databáze se nezapíše nic (v obyčejném formuláři se v tomto případě hodnoty zapíší).

Pouze pro výběr záznamu

Zapnutím přepínače vytvoříte speciální formulář, který se dá použít pouze pro výběr záznamů obdobně jako se vybírá ze složky seznam (listbox). Má význam pouze pro standardní formulář. Výhodné je použít reakci na poklepání pro otevření podrobnějšího formuláře apod.

skupina vlastností Ukládání

Skupina vlastností týkající se způsobu ukládání dat do databáze. Pro sestavy nemá smysl.

Ukládat po změně složky

Je-li zatržen přepínač Ukládat po změně složky, zápis do databáze proběhne po každém přepsání složky formuláře (složková synchronizace). Není-li zatržen, používá se tzv. záznamová synchronizace, kdy zápis do databáze proběhne až při opuštění editovaného záznamu nebo po provedení funkce jazyka Commit_view nebo metody formuláře Commit_view - viz Synchronizace.

Ukládat při deaktivaci

Při záznamové synchronizaci je možno dále stanovit, má-li se editovaný záznam uložit při přechodu aktivity na jiné okno. Jestliže ano, zaškrtněte čtverec Ukládat při deaktivaci.

Tázat se před uložením

Při zápisu změn v záznamu do databáze je možno vyžadovat dodatečné potvrzení - čtverec Tázat se před uložením. Je-li zapnut, pak uživatel bude mít po přepsání každého záznamu možnost buď potvrdit nebo odvolat provedené změny, anebo pokračovat v editaci.

Modální chování

Zaškrtnutím čtverce Modální chování způsobíte, že formulář se bude po otevření chovat jako modální okno, tj. až do zavření formuláře nebude možno pracovat s jinými okny WinBase602.

Plovoucí okno

Zaškrtnutím čtverce Plovoucí okno nastavíte styl okna formuláře tak, že otevřené okno je vždy na vrchu, nebrání však práci s ostatními okny.

Zamčení

Zvolíte-li z nabídky Zamčení variantu Nic, docílíte tím normální práce WinBase602, během níž se záznam automaticky zamykáHE_LOCKS pouze při editaci textů, práci s obrázkem a přivazování záznamů. Při ostatních editačních akcích se hlídají pouze konflikty vzniklé ze souběžné práce více klientů se stejnými daty.

Varianta Běžný záznam znamená, že WinBase602 se pokusí zamknout pro čtení každý záznam, na který uživatel vstoupí, a odemkne ho při spuštění. Nepodaří-li se záznam zamknout, bude to uživateli oznámeno.

Varianta Všechny záznamy znamená, že WinBase602 se pokusí zamknout všechny záznamy v tabulce nebo tabulkách při otevírání formuláře. Nepodaří-li se zamčení, formulář nebude otevřen.

Číslo nápovědy

Číslo nápovědy je číslem stránky (topicu v terminologii vytváření nápovědy pro Windows), na níž se uživatelská nápověda otevře při stisku klávesy F1 při práci s formulářem. Pokud je definována nápověda i pro jednotlivé složky, má tato nápověda (při stisku F1 v době vybrání dané složky) přednost před nápovědou pro celý formulář.

Definování specifické nápovědy pro složku formuláře vyžaduje přidání textu nápovědy do souboru nápověd. Čísla od 0 do 10000 jsou rezervována pro potřeby WinBase602, nepoužívejte je.

Styl nápovědy

Zde je možné vybrat ze dvou způsobů zobrazení nápovědy k formuláři (klávesou F1): buď v samostatném okně nebo v popup okně ("žluté bublině"), které zmizí po kliknutí mimo něj. Samostatné okno se použije spíše pro nápovědu k formuláři jako celku, bublina spíše jako nápověda k jednotlivé složce.

Spočítat záznamy při otevření

Pokud zapnete přepínač Spočítat záznamy při otevření, pak se při otevření formuláře spočítají všechny jeho záznamy.

Posuvník na pravém okraji okna bude ve všech případech pohybovat adekvátně pozici ve formuláři. Spočtení všech záznamů může ve formulářích do velkého počtu záznamů zpomalit otevírání.

Akce při otevření

Zadáte-li Akci při otevření formuláře, můžete definovat akci, která se automaticky provede pokaždé, když je formulář otevřen, a to nezávisle za způsobu otevření. Při provádění akce jsou již vytvořeny a naplněny složky formuláře.

Akce při uzavření

Akce při uzavření formuláře se automaticky provede bezprostředně před zavřením formuláře. Provede se bez ohledu na to, jakým způsobem je formulář zavřen (akcí uživatele, programem, atd.). Akce se provádí před zrušením složek formuláře.

Pokud potřebujete rozlišit akce při zavření formuláře jedním z několika příkazů menu nebo jedním z několika tlačítek, pak specifické akce musíte předřadit akcím zavírajícím formulář a Akci při uzavření nepoužívat.

Akce při vstupu na záznam

Akce při vstupu na záznam se automaticky provede při změně aktuálního záznamu ve formuláři. Je tak např. možné si definovat vlastní synchronizaci s ostatními formuláři (je-li vypnuta vlastnost Automatická synchronizace).

Akce na pravé tlačítko myši

Akce se provede, pokud se ve formuláři mimo kteroukoliv složku klikne pravým tlačítkem. Obvykle se použije standardní akce Nabídnout popup menu.

Akce při poklepání

Akce se provede, pokud se ve standardním formuláři poklepe na záznam (na libovolném sloupci s výjimkou Textu a Obrázku, kde má již poklepání svůj význam - otevření). Je-li formulář typu Pro výběr záznamu, pak lze poklepat kdekoliv na záznamu.

skupina vlastností Členění sestavy

Skupina vlastností týkající se definování a vzhledu sestavy. Pro formuláře a štítky nelze nastavovat.

Úroveň A

 Výraz definující první skupinu záznamů.

Úroveň B

Výraz definující druhou vnořenou skupinu záznamů.

Úroveň C

Výraz definující třetí vnořenou skupinu záznamů.

Úroveň D

Výraz definující čtvrtou vnořenou skupinu záznamů.

Úroveň E

Výraz definující pátou vnořenou skupinu záznamů.

Nová stránka

V návrhu lze zadat, jak se má sestava členit do stránek. Přitom ale nelze obejít velikost stránky - jediné, čeho lze dosáhnout, je to, že se na novou stránku bude přecházet dříve, než je to nezbytně nutné.

Ve vlastnostech sestavy vyberte jednu z šesti možností comba Nová stránka označených Na úrovni A, B, C, D, E nebo Nikde. Tím specifikujete, že přechod na novou stránku se má vynutit na hranici skupin zvolené úrovně nebo že se nevnucuje nikde, když není zapotřebí.

Hlava sestavy

Vlastnost ovlivňující vzájemný vztah mezi oblastmi na začátku sestavy - viz Záhlaví

Hlava sestavy na zvláštní stránce

Přepínač modifikující předchozí výběr - hlava sestavy bude vždy na samostatné stránce.

Pata sestavy

Vlastnost ovlivňující vzájemný vztah mezi oblastmi na konci sestavy - viz Paty

Pata sestavy na zvláštní stránce

Přepínač modifikující předchozí výběr - pata sestavy bude vždy na samostatné stránce.

Plovoucí pata stránky

Zatrhnete-li označovací čtverec Plovoucí pata stránky, nebude pata stránky na konci stránky, ale těsně za poslední oblastí. Týká se to všech stránek sestavy, nikoli jen stránky poslední.

Rastr

Informuje o nastaveném rastru, tj. počtu pixelů, na jejichž násobky se zaokrouhlují souřadnice složek pohledu. Není-li dosud nastaven, bere se nastavení z globálních parametrů WinBase602.

Vodorovný krok

Rastr ve vodorovném směru.

Svislý krok

Rastr ve svislém směru.

Pro tisk do souboru

Speciální nastavení rastru pro případ tisku sestavy do souboru, aby nedošlo při zaokrouhlování k tisku několika řádků na řádek jeden.

Zarovnávat na rastr

Složky budou při změně velikosti nebo umístění pomocí myši zarovnány na nejbližší násobek zvoleného rastru. Při posunu složek z klávesnice (Shift+šipka) se rastr uplatňuje vždy.

Štítky - viditelné pouze pro štítky

Pole informuje o tom, je-li pohled navrhován v režimu štítků nebo nikoliv. Tlačítkem vpravo je možno vyvolat dialog pro nastavení velikosti a rozložení štítků.

Šablona

Combo Vám nabídne seznam pohledů z aplikace, které můžete použít jako šablonu. Většinou je nastavena již průvodcem návrhu nového pohledu.


Popis jednotlivých vlastností složek pohledu
Popis jednotlivých vlastností složek v okně Seznam vlastností

viz také:  Seznam vlastností - popis okna

Druh složky

Každá složka pohledu je jednoho určitého druhu. Druh složky se určuje již při vzniku složky a nelze ho později změnit.

Obsah složky

Obsahem složky je hodnota sloupce, proměnná nebo výraz (pro needitovatelné složky). Je-li zdrojem dat pro pohled tabulka nebo dotaz, pak combo Obsah složky nabízí všechny jeho sloupce zdroje dat. Proměnné nebo výrazy musíte vepsat ručně.

Referenční hodnota

Přepínače (případně i označovací čtverce) se v obecném formuláři dají sdružovat do skupin společně editujících jeden sloupec nebo proměnnou. Ve skupině je vždy zapnut nejvýše jeden přepínač. Zapnutím některého přepínače ve skupině se všechny ostatní vypnou.

Sloupec, editovaný skupinou přepínačů, není typu Boolean (jako v případě samostatných přepínačů), ale některého jiného typu umožňujícího porovnávání hodnot. Pro každý přepínač je kromě tohoto sloupce, uvedeného jako Obsah složky, zadána také Referenční hodnota, která je stejného typu jako sloupec a je jiná v každém přepínači ve skupině. Platí tato dvě pravidla:

•	přepínač je zobrazen jako zapnutý, pokud se hodnota atributu rovná referenční hodnotě.

•	pokud uživatel zapne přepínač, do atributu tím zapíše referenční hodnotu. Tím se automaticky vypnou všechny ostatní přepínače.

Nápis

Neměnný nápis na složce se týká složek typu Nápis, tlačítek a v obecném formuláři také přepínačů. Nápis se zadává vždy bez uvozovek. Máte-li definovány jazykové mutace, můžete použít metařetězce z překladové tabulky - viz Jazyky.

Akce

Tlačítko v pravé části pole Akce otevře okno pro zadávání posloupnosti akcí. Uplatní se u složek typu Tlačítko.

skupina vlastností Vzhled obsahu

Skupina vlastností popisující vzhled složky.

Font

Informuje o použitém fontu pro složku pohledu. Font je možno změnit pomocí standardního dialogu, který se otevře po stisku tlačítka vpravo. Není-li zvolen žádný font, použije se font nastavený pro celý pohled a není-li nastaven ani ten, použije se font určený v globálních parametrech WinBase602. V poli je pak nápis Globální font pohledu. Vybraný font se zruší stiskem klávesy Delete. Pro sestavy používejte vektorové fonty (TrueType), pro formuláře je výhodné použít rychleji vykreslovaných bitmapových fontů.

Font ve složce lze dynamicky měnit pomocí metody složky Set_font.

Barva textu (čáry)

Pole informuje o barvě nastavené pro text ve vybrané složce. Barvu je možno změnit pomocí standardního dialogu, který se otevře po stisku tlačítka vpravo. Výběr je možný pouze z nerastrových barev.

Barvy textu ve složce lze dynamicky měnit pomocí vlastnosti složky TextColor.

Barva pozadí

Pole informuje o barvě nastavené pro pozadí vybrané složky. Barvu je možno změnit pomocí standardního dialogu, který se otevře po stisku tlačítka vpravo.

Barvy pozadí složky lze dynamicky měnit pomocí vlastnosti složky BackColor.

Zobrazení

Combo Zobrazení obsahuje nabídku formátů, v nichž lze obsah daného typu zobrazit.Obsah nabídky závisí na typu složky a na typu sloupce či proměnné, do něhož vede. Platí, že způsoby zobrazení pro editační složku jsou omezené, zatímco pro složku hodnotovou jich je mnohem více.

Seznam možných formátů zobrazení naleznete u popisu dynamické vlastnosti Format

Počet des. míst

Počet desetinných míst lze zadat pouze pro složky typu Reálné číslo. Lze dynamicky měnit pomocí vlastnosti složky Precision.

Maska

Maska umožňuje definovat tzv. vstupní masku zadávaného údaje (většinou řetězce nebo data). Maskou stanovíte, jaký druh znaku může či musí být na které pozici vkládaného údaje.

Umístění

Podle nabídky z comba u vlastnosti Umístění můžete volit umístění obsahu složky vlevo, vpravo nebo uprostřed prostoru, který je pro složku v pohledu vymezen. Vlastnost je aktivní pouze pro složku nápis a hodnotovou složku.

Obrázek (neměnný)

Na tlačítku nebo ve složce typu Obrázek může být zobrazen neměnný obrázek vložený předem do aplikace. Combo u vlastnosti Obrázek (neměnný) nabídne seznam všech použitelných obrázků. Jako obrázek lze použít libovolný objekt kategorie obrázek. Chcete-li vložit neměnný obrázek, nevyplňujte vlastnost Obsah složky.

Pokud jste pro složku nastavili obrázek a chcete jej zrušit, stiskněte klávesu Delete. Místo názvu obrázku se objeví nápis -Není-.

Tato vlastnost se netýká obrázků, které máte uloženy v databázových tabulkách a které budou v každém záznamu jiné (mají vyplněnu vlastnost Obsah složky).

Rám

Většinu složek lze orámovat jednoduchou čarou, některé čarou se stínem. Tuto vlastnost volíte v combu Rám.

Zachovat formát

Při zobrazení složky typu Text můžete stanovit, jak se má obsah rozlámat. Možnosti jsou dvě: zachovat původní formát, v jakém je text uložen v databázi nebo nově rozlámat podle velikosti složky.

skupina vlastností Poloha a rozměry

Skupina vlastností týkající se umístění a velikosti složky.

Souřadnice X

Poloha složky se zadává údaji Souřadnice X a Souřadnice Y. Poloha složky je míněna v rámci oblasti. Poloha se vyjadřuje v pixelech obrazovky. Pohodlnějším způsobem zadávání těchto parametrů je přemísťování a roztahování složky pomocí myši nebo z klávesnice (šipka). Přímé zadání hodnot parametrů však umožňuje umístit složku mimo specifikovaný rastr.

Souřadnice Y

Poloha složky se zadává údaji Souřadnice X a Souřadnice Y. Poloha složky je míněna v rámci oblasti. Poloha se vyjadřuje v pixelech obrazovky. Pohodlnějším způsobem zadávání těchto parametrů je přemísťování složky pomocí myši nebo z klávesnice (šipka). Přímé zadání hodnot parametrů však umožňuje umístit složku mimo specifikovaný rastr.

Šířka

Rozměry složky se zadávají údaji Šířka a Výška. Rozměry se vyjadřují v pixelech obrazovky.

Pohodlnějším způsobem zadávání těchto parametrů je roztahování složky pomocí myši nebo z klávesnice (Shift+šipka). Přímé zadání hodnot parametrů však umožňuje umístit složku mimo specifikovaný rastr.

Výška

Rozměry složky se zadávají údaji Šířka a Výška. Rozměry se vyjadřují v pixelech obrazovky.

Pohodlnějším způsobem zadávání těchto parametrů je roztahování složky pomocí myši nebo z klávesnice (Shift+šipka). Přímé zadání hodnot parametrů však umožňuje umístit složku mimo specifikovaný rastr.

Pružná výška v sestavě

Pro složky typu Seznam a Text, u kterých předem nemusí být jasno, kolik místa při tisku zaberou, je možno nastavit pružnou výšku při tisku. Na nový záznam se pak přejde až tehdy, když se vypíše celý obsah složky. Taková sestava pak bude mít záznamy proměnlivé výšky. Složku s pružnou výškou je rozumné umístit až na konec oblasti, aby případně nepřekryla jiné složky.

Přetékání vpravo při tisku

Zapnete-li přepínač Přetékání vpravo při tisku, pak při tisku sestavy může obsah složky přesáhnout pravý okraj složky. Této vlastnosti využijete ve standardních sestavách, např. pokud chcete v záhlaví nebo patě umístit nápis široký přes několik sloupců. V obecných sestavách  není tato vlastnost potřebná, protože složku můžete natáhnout na potřebnou šířku.

skupina vlastností Editace

Vlastnosti skupiny Editace se týkají pouze těch editačních složek, které jsou svázány s nějakým databázovým sloupcem nebo proměnnou projektu (smysl pouze ve formulářích)

Implicitní hodnota

Pokud složka má definovanou implicitní hodnotu, pak se tato hodnota objeví v každém novém záznamu vloženém do formuláře klávesou Insert nebo metodou formuláře Insert. Implicitní hodnota musí být stejného typu jako editovaný sloupec nebo proměnná. Implicitní hodnotu zadáte v okně vlastností složky. Můžete ji zadat i jako výraz, v něm lze volat i standardní funkce nebo funkce definované v projektu. Hodnota výrazu se po stisku Insert vyčíslí a vloží do složky.

Implicitní hodnota se neuplatní, pokud nový záznam bude přidán tak, že uživatel zapíše hodnotu do některé složky fiktivního záznamu na konci formuláře. Implicitní hodnota se objeví také ve speciálním formuláři pouze pro vstup dat. Zapíše se do složky při otevření formuláře a znova po každém uložení záznamu do databáze.

Implicitní hodnoty se dají definovat i pro přepínače.

Implicitní hodnota definovaná ve formuláři má přednost před implicitní hodnotou uvedenou v definici tabulky. V definici tabulky však můžete předepsat implicitní hodnoty i pro ty sloupce, které ve formuláři nejsou.

Integritní omezení

Integritní omezení je podmínka, jíž se ověřuje přípustnost zadané hodnoty. Pokaždé, když uživatel zapíše novou hodnotu do editační složky a buď stiskne Enter nebo přejde na jiné pole, vyhodnotí se integritní omezení. Má-li hodnotu TRUE, pokračuje se bez zásahu. Pokud má hodnotu FALSE, pak se nově zadaná hodnota nezapíše do databáze resp. proměnné, ale uživateli se oznámí chyba (viz Akce po chybě).

Vede-li editační složka do sloupce jménem CisloFakt, lze zadat Integritní omezení např. takto: CisloFakt > 1. Jméno sloupce lze použít i jako parametr vlastní funkce, která provede složitější kontrolu a vrátí TRUE, je-li hodnota v pořádku a FALSE v opačném případě.

Akce při chybě

Akce při chybě se provede v těchto případech:

•	uživatel zapíše do složky údaj nepřípustného typu (např. písmena do celočíselné složky);

•	hodnota zapsaná uživatelem poruší Integritní omezení definované pro složku v návrhu formuláře.

Typickou akcí při chybě je vypsání upozornění a vhodného vysvětlení v okně na obrazovce. Není-li akce při chybě definována, chyba se oznámí standardním způsobem.

Akce při chybě se nevyvolá, pokud chybu rozpozná až databázový server, například při porušení integritního omezení definovaného v návrhu tabulky, při zápisu duplicitní hodnoty do unikátního indexu apod. Tyto chyby jsou vždy hlášeny standardními chybovými okny.

Akce po změně

Akce po změně umožňuje reagovat na změnu hodnoty složky a například přepsat hodnoty jiných složek. Nedoporučujeme provádět v akci po změně příliš složité akce. Je zakázáno jako reakci na změnu zavírat aktuální formulář.

Pozor! V akci po změně se vyhněte zejména takovým akcím, které vyvolají opět změnu ve složce, která vyvolá akci atd. Taková akce vede nutně k pádu systému a možné ztrátě dat.

Maximální délka

Pro jednořádkovou editační složku a editační combo lze zadat omezení na počet znaků. které lze zadat. Pro řetězec je automaticky nastavena délka podle délky řetězce.

Převádět na malá písmena

Pro jednořádkovou editační složku a editační combo lze zadat, aby se zapisované znaky automaticky zkonvertovaly před uložením na malá písmena.

Převádět na velká písmena

Pro jednořádkovou editační složku a editační combo lze zadat, aby se zapisované znaky automaticky zkonvertovaly před uložením na velká písmena.

Editovat jako heslo

Pro jednořádkovou editační složku lze předepsat, aby se při zadávání znaků ve složce objevovaly pouze hvězdičky - do databáze se uloží původní znaky. Nelze použít ve standardním formuláři.

Po vyplnění přeskočit dále

Pro jednořádkovou editační složku lze předepsat, aby po dosažení limitu zadaného ve vlastnosti Maximální délka se aktivní automaticky stala následující složka v pořadí.

skupina vlastností Chování složky

Podmínka viditelnosti

Podmínkou viditelnosti složky je výraz typu Boolean, který říká, za jakých podmínek se složka má ve formuláři  objevit. Je-li tato podmínka zadána, pak může zajistit, že složka bude viditelná pouze v některých záznamech.

Je-li složka tlačítko neviditelná, pak se nedá stisknout, ani když uživatel stiskne tlačítko myši na místě, kde se tlačítko ve formuláři nachází. K sestavení výrazu můžete použít okno s nabídkou konstant, proměnných, procedur a metod. V případě návrhu složek na záložkách se uplatňuje viditelnost již při návrhu a ke zjednodušení zápisu lze použít následující tři vlastnosti

Zobrazovat na stránce

Je-li složka navrhovaná pro viditelnost na některé stránce složky Záložky, zde je možno zapsat číslo stránky (číslováno od nuly), na níž bude viditelná. Záložku lze určit pomocí jména nebo pomocí čísla složky (následující vlastnosti).

Přepínat pomocí záložek jménem

Zadejte jméno složky Záložky, na jejíž jedné stránce se má navrhovaná složka zobrazit (vylučuje se s následující vlastností).

Přepínat pomocí záložek číslo

Zadejte číslo složky Záložky, na jejíž jedné stránce se má navrhovaná složka zobrazit (vylučuje se s předchozí vlastností). Je-li ve formuláři složka Záložky jediná, hodnota se ignoruje.

Podmínka aktivity

Podmínkou aktivity složky je výraz typu Boolean, který říká, za jakých podmínek lze pracovat se složkou formuláře. Je-li tato podmínka zadaná, pak může zajistit, že se složkou bude možno pracovat pouze v některých záznamech.

Pojem ”pracovat se složkou” zahrnuje možnost editovat hodnotu složky (včetně otevření editoru na atribut typu Text), možnost stisknout tlačítko, zaškrtnout nebo zrušit zaškrtnutí označovacího čtverce, přepnout přepínač, vyvolat akci definovanou pro složku, získat nabídku hodnot z comba, vložit digitální podpis apod.. Nic z toho se nedá provádět, není-li podmínka aktivity splněna.

Neaktivní nápisy a hodnotové složky jsou vykresleny šedě. Ostatní složky mají normální barvu, pouze nereagují na pokusy o změnu hodnoty. Složka podpis nabízí pouze prověření podpisu.

K sestavení výrazu můžete použít okno s nabídkou konstant, proměnných, procedur a metod.

Lze vybrat TAB?

Přepínačem Lze vybrat TAB? můžete specifikovat, zda se při práci s formulářem při přechodech mezi složkami pomocí klávesy Tab (nebo Shift+Tab) dostanete i na tuto složku. Zatržení má význam pouze pro složky v datové oblasti formuláře, složky v záhlaví se klávesou Tab vybrat nedají. Možnost vybrat složku klávesou Tab platí i pro subformuláře, z nich však touto klávesou již nelze odejít.

Obnovit po změně v záznamu?

Aktivujete-li přepínač Obnovit složku po změně v záznamu, pak se po změně kterékoli jiné složky v záznamu znovu přečte nebo vypočte a vypíše hodnota této složky. Čtverec označte tehdy, pokud hodnota složky závisí na hodnotě některé jiné složky v záznamu: například tehdy, pokud je obsahem složky výraz obsahující sloupec editovatelný v jiné složce formuláře.

Dotazové pole

Složka formuláře (pouze některých druhů) může být označena jako Dotazové pole. Dotazová pole slouží k rychlému vyhledávání záznamů.

Pomocí nabídky u skupiny Dotazové pole vyberte jednu ze tří možností: Není dotazové pole, dynamické pole, statické pole.

Dotazová podmínka

Definujete-li dotazové pole, musíte zadat podmínku výběru. Tuto podmínku zapíšete do editačního pole vedle vlastnosti Dotazová podmínka. Podmínku na rovnost zadané hodnoty a sloupce zdroje dat u statických dotazových polí není třeba vyplňovat.

Číslo nápovědy

Do pole Číslo nápovědy lze zadat identifikační číslo nápovědného textu (číslo topicu v terminologii vytváření nápovědy pro Windows). Ten se objeví na obrazovce, když je tato složka vybrána a uživatel stiskne klávesu F1. Nápověda pro složku má přednost před nápovědou pro celý formulář.

Definování specifické nápovědy pro složku formuláře vyžaduje přidání textu nápovědy do souboru nápověd. Čísla od 0 do 10000 jsou rezervována pro potřeby WinBase602, nepoužívejte je.

Styl nápovědy

Zde je možné vybrat ze dvou způsobů zobrazení nápovědy ke složce formuláře (klávesou F1, je-li vybraná složka): buď v samostatném okně nebo v popup okně ("žluté bublině"), které zmizí po kliknutí mimo něj. Popup okénko je malé okno, otevřené v místě kurzoru myši, bez menu a lišty nápovědy

skupina vlastností Klávesy

Možnost definovat význam vybraných kláves v navrhovaném formuláři podle místních potřeb. Lze zadat, zda se klávesa předá vybrané složce formuláře nebo zda bude zpracována podle pravidel pohybu po formuláři. Pro příklad: klávesa Home standardně znamená skok na první složku formuláře, v jednořádkových editačních boxech má však častěji význam skok na začátek editovaného řetězce apod.

Šipky nahoru nebo dolů

Umožní určit, má-li se význam daných kláves vztahovat k formuláři jako celku (volba Pohyb po formuláři) nebo pouze pro tuto složku (volba Pohyb uvnitř složky).

Šipky vlevo nebo vpravo

Umožní určit, má-li se význam daných kláves vztahovat k formuláři jako celku (volba Pohyb po formuláři) nebo pouze pro tuto složku (volba Pohyb uvnitř složky).

Page Up, Page Dn

Umožní určit, má-li se význam daných kláves vztahovat k formuláři jako celku (volba Pohyb po formuláři) nebo pouze pro tuto složku (volba Pohyb uvnitř složky). Užívá se např. tehdy, chcete-li ve víceřádkovém editačním boxu nebo formátovaném textu používat klávesy Page Up a Page Dn pro skok na další resp. předchozí stránku editovaného textu, nikoliv na jiný záznam.

Ctrl+Page Up, Ctrl+Page Dn

Umožní určit, má-li se význam kombinace daných kláves vztahovat k formuláři jako celku (volba Pohyb po formuláři) nebo pouze pro tuto složku (volba Pohyb uvnitř složky). Užívá se např. tehdy, chcete-li ve formátovaném textu používat klávesy Ctrl+Page Up a Ctrl+Page Dn pro skok na konec resp. začátek stránky editovaného textu, nikoliv na následující resp. předchozí záznam.

Home, End

Umožní určit, má-li se význam daných kláves vztahovat k formuláři jako celku (volba Pohyb po formuláři) nebo pouze pro tuto složku (volba Pohyb uvnitř složky). Užívá se např. tehdy, chcete-li v jednořádkovém editačním boxu používat klávesy End a Home pro skok na konec resp. začátek editovaného textu, nikoliv na poslední resp. první složku formuláři.

Ctrl+Home, Ctrl+End

Umožní určit, má-li se význam kombinace daných kláves vztahovat k formuláři jako celku (volba Pohyb po formuláři) nebo pouze pro tuto složku (volba Pohyb uvnitř složky). Užívá se např. tehdy, chcete-li ve víceřádkovém editačním boxu používat klávesy Ctrl+End a Ctrl+Home pro skok na konec resp. začátek editovaného textu, nikoliv na poslední resp. první záznam.

Tab (tabelátor)

Umožní určit, má-li se význam klávesy Tab vztahovat k formuláři jako celku (volba Pohyb po formuláři) nebo pouze pro tuto složku (volba Pohyb uvnitř složky). Užívá se např. tehdy, chcete-li ve víceřádkovém editačním boxu používat klávesy Tab pro úpravu editovaného textu a nikoliv pro skok na další složku formuláři.

Příjemce Enter

Takto označené tlačítko bude stisknuto, pokud uživatel stiskne klávesu Enter na kterékoli složce, která tuto klávesu nezpracovává sama (tedy mimo složky Subpohled, Text, Formátovaný text a víceřádkové editační složky). Tlačítko, které je příjemcem Enter, má silnější rám. Funguje od otevření formuláře do okamžiku, kdy ve formuláři vyberete některé jiné tlačítko - od této chvíle bude na klávesu Enter reagovat vždy naposled vybrané tlačítko. Může být použito ve formuláři pouze jednou.

Akce na pravé tlačítko myši

Akce se provede, pokud se ve formuláři na tuto složku klikne pravým tlačítkem. Obvykle se použije standardní akce Nabídnout popup menu.

Na tomto místě se zobrazuje skupiny specifických vlastností, které se týkají pouze jediné složky. Podrobnosti o těchto vlastnostech naleznete na stránkách Vlastnosti složky Combo, Čárový kód, Kalendář, DTP, OLE, Krokovač, Posuvník, ActiveX a Subpohled.

Číslo složky

Identifikace složky je číslo z intervalu 1 až 512. Na jeho konkrétní hodnotě nezáleží, ale každé dvě složky se v tomto čísle musí lišit, a to i tehdy, pokud jsou v různých oblastech.

Číslo nové složky přidělí WinBase602 tak, aby se neshodovala s číslem žádné existující složky.

Čísla složek využívají aplikační programy ve WinBase602, když chtějí přímo číst nebo zapisovat hodnoty složek nebo vybrat určitou složku, krokovače apod.

Jméno složky

Identifikace složky pro objektový styl práce. Jména se přidělují automaticky při vkládání složek a je v nich obsazen druh složky, datový typ sloupce zdroje dat nebo proměnné a číslo složky. Jména lze libovolně měnit. Přehled složek lze nalézt na záložce Seznam okna Seznamu vlastností.

Vysvětlující text

Do pole Vysvětlující text můžete vepsat text, který se vypíše na stavový řádek WinBase602 nebo do malé žluté bubliny, kdykoli uživatel vybere tuto složku formuláře.

Umístění

Podle volby se vysvětlující text zapíše buď na stavový řádek nebo do bubliny u složky


Skupina specifických vlastností složky Čárový kód

skupina vlastností Čárový kód

Druh kódu - podrobnosti o čárových kódech naleznete zde.

Tloušťka nejtenčí čáry

Tloušťka nejtenčí čáry určuje rozměry i všech ostatních prvků čárového kódu. Udává se v jednotkách 0.01 mm. Doporučená tloušťka je 26 až 76, minimální tloušťka pro UPC a EAN je 26, pro ostatní 19. Povolené rozmezí je 0 až 500 (pokud nedojde k překročení maximální velikosti kódu), přičemž 0 označuje implicitní tloušťku 33.

Redukce tloušťky

Redukce tloušťky dovoluje specifikovat, o kolik procent se má zmenšit (pro kladné hodnoty) nebo zvětšit (pro záporné hodnoty) tloušťka čar. Povolené rozmezí je -99 až +99. Kladné hodnoty použijte pro tisk inkoustem na rozpíjející papír, záporné hodnoty pro tisk na materiály, na nichž se vysychající inkoust smršťuje.

Délka čar

Délka čar se udává je jednotkách 0.01 mm. Povolený rozsah je 100 až 20000 (pokud nedojde k překročení maximální velikosti kódu). Povolena je také hodnota 0, která označuje implicitní hodnotu 2540 (jeden palec).

Poměr tloušťky tenké a tlusté čáry

Poměr tloušťky tenké a tlusté čáry lze zadat pro Code 39, Interleaved 2 z 5 a CodaBar. Zadává se jako celočíselný desetinásobek poměru tlouštěk. Měl by ležet v rozmezí 20 až 30. Pokud zadáte hodnotu 0, použije se implicitní hodnota 25.

Rotace

Rotace dovoluje specifikovat natočení čárového kódu. Otáčí se po směru hodinových ručiček po 90 stupních.

Barva textového zápisu

Barva textového zápisu se uplatní při vypisování obsahu kódované zprávy pod nebo nad kódem.

Textový zápis

Údaj vyjádřený čárovým kódem lze vypsat v textové podobě čitelné pro člověka pod nebo nad kódem, případně lze vypisování zamezit.

Vymezovací pruhy

Vymezovací pruhy kolmé na kódové čáry mohou zvýšit spolehlivost čtení kódu a také kvalitu tisku na některé povrchy. Dají se použít pro Code 39, Code 93, Interleaved 2 z 5, CodaBar a Code 128.

Klidová zóna

Zatržením zvětšíte volnou plochu okolo složky.

Skupina vlastností Kód Code 39 - pouze pro tento kód

ASCII verze pro Code 39

Zapíná plnou ASCII verzi Code 39 místo normálního Code 39. Netýká se jiných kódů.

Start/Stop * v Code 39

Zapíná zobrazení start- a stop-znaků jako hvězdiček v oblasti kódu čitelné pro člověka. Týká se pouze Code 39.

HIBC verze pro Code 39

Zapíná verzi HIBC (Health Industry Bar Code) pro Code 39. Netýká se ostatních kódů.

Kontrolní číslice

Dovoluje připojit jednu nebo dvě kontrolní číslice ke kódu. Kontrolní číslice vyžadované specifikací kódu jsou k němu připojeny vždy bez ohledu na nastavení této vlastnosti. Pro EAN/UCC 128 lze kontrolní číslici připojit pouze k číselné zprávě.

Přizpůsobit rozlišení tiskárny

Zapnutí této vlastnosti přizpůsobí tloušťku čár tak, aby byla celočíselným násobkem rozlišení tiskárny. Tím se minimalizuje zkreslení kódu způsobené malou rozlišovací schopnosti tiskárny a zvýší kvalita výstupu.

Skupina vlastností Kód PDF417 - pouze pro tento kód

Šířka modulu

Šířka modulu se uvádí v jednotkách 0.01 mm. Doporučené rozmezí je 25 až 76, minimum je 17.

Výška modulu

Výška modulu se uvádí v jednotkách 0.01 mm. Doporučená výška je trojnásobkem šířky, minimum je 25.

Poměr stran symbolu

Poměr velikosti stran celého kódového symbolu se udává reálným číslem. Hodnoty větší než 1 vytvářejí vysoké symboly, rovné 1 čtvercové symboly, menší než 1 široké symboly. Poměr stran je pouze přibližný, protože existuje pouze omezený počet způsobů, jak obsah symbolu rozdělit do řádek a sloupců.

Úroveň bezpečnosti

Dovoluje zadat míru automatické korekce chyb v symbolu. Větší hodnoty znamenají větší symbol a větší schopnost korekce chyb. Pokud zvolíte variantu "Vyjádřit níže v procentech", pak úroveň bezpečnosti se odvodí z údaje ve vlastnosti Úroveň korekce chyb.

Úroveň korekce chyb

Procentuální vyjádření schopnosti korekce chyb v rozmezí 0-99. Hodnota 0 označuje implicitní korekci 11%. Tento údaj je využije pouze tehdy, když zadáte vlastnost Úroveň bezpečnosti jako "Vyjádřit níže v procentech".

Způsob zkompaktnění

Existují 3 základní způsoby zkompatknění symbolu: Extended Alphanumeric (EXC), Binary/ASCII (Bin) a Numeric (Num). Kromě nich lze zvolit automatickou volbu ze všech tří (Auto EXC/Bin/Num), která poskytuje maximální možnou kompresi, nebo automatickou volbu z prvních dvou způsobů (Auto EXC/Bin).

Maximální počet řádků

Maximální počet řádků v symbolu musí ležet v rozmezí 3 až 90.

Maximální počet sloupců

Maximální počet sloupců v symbolu musí ležet v rozmezí 1 až 30.

Použít zkrácené symboly

Zapíná vytváření zkrácených symbolů.


Skupina specifických vlastností složky Kalendář

skupina vlastností Kalendář - viz Složka Kalendář. Aby složka fungovala, je nutné vlastnit novější knihovnu Windows COMCTL32.DLL.

Uvést dnešní datum

Ve spodní části složky se vypíše dnešní datum. Kliknutím na toto datum má stejný význam jako vybrání dnešního data na ploše kalendáře.

Zakroužkovat dnešní datum

Na listu kalendáře bude červeně zakroužkováno dnešní datum - pouze zvýraznění.

Uvést čísla týdnů

Na levé straně kalendáře bude pro každý týden (řádek) uvedeno jeho pořadové číslo.


Skupina specifických vlastností složky DTP

skupina vlastností Volba data a času - viz Složka DTP Aby složka fungovala, je nutné vlastnit novější knihovnu Windows COMCTL32.DLL.

Krokovač místo kalendáře

Volba varianty složky: buď je v pravé části krokovač, kterým lze po krocích měnit vybranou část údaje, nebo je tam značka pro combo, která rozvine kalendář pro vybrání data.

Umí zobrazovat NULL

Pro zobrazení data nebo timestampu ve variantě s kalendářem lze využít zvláštního způsobu zobrazení hodnoty NULL; použijete-li vlastnost Umí zobrazovat NULL, objeví se v levé části složky označovací čtverec, pomocí něhož lze hodnotu NULL zadat;


Skupina specifických vlastností složky OLE

Druh OLE objektu

Umožní předepsat, že složka smí obsahovat pouze vložený (embedded) objekt, pouze připojený (linked) objekt nebo oba typy OLE objektů.

OLE server

Umožní vybrat jeden z nabídky OLE serverů instalovaných na počítači nebo položku -Libovolný server-. Je-li server vybrán, lze do složky vkládat nebo připojovat pouze objekty tohoto serveru, není-li vybrán, lze použít objekty od všech serverů.

Máte-li na svém počítači větší množství OLE serverů, může otevření comba s nabídkou chvíli trvat. Vybraný server zrušíte stiskem klávesy Delete.


Skupina specifických vlastností složky Krokovač

Krokovač

Složka se skládá ze dvou malých šipek - nahoru a dolů. Slouží k usnadnění editace číselné hodnoty v editační složce, s níž je svázána. Stiskem šipky nahoru se obsah editační složky zvětší o stanovenou hodnotu, stiskem šipky doků se zmenší.

Dolní mez

Minimální hodnota, od níž bude možno pomocí krokovače zvyšovat hodnotu v editační složce a pod níž nelze klesnout;

Horní mez

Maximální hodnota, do níž bude možno pomocí krokovače zvyšovat hodnotu v editační složce. Pro datum se nebere v úvahu. Pro čas zapište hodnotu s tisícinách vteřiny (24 hodin je 86400000 tisícin).

Krok

Velikost kroku, tedy hodnota, o kterou se změní obsah editační složky při jednom stisknutí šipky krokovače. Pro datum použijte hodnoty 7 pro posun o týden, 31 pro posun o měsíc nebo 372 pro posun o rok. Pro čas použijte hodnotu 60000 pro posun o minutu nebo 3600000 pro posun o hodinu.

Číslo ovládané složky

Číslo editační složky, s níž bude krokovač svázán (pokud není správně vyplněno, krokovač nefunguje);


Skupina specifických vlastností složky Posuvník

Posuvník

Složka vyjadřuje celočíselnou hodnotu pomocí polohy jezdce a posouváním jezdce umožňuje tuto hodnotu editovat. Je vždy svázaná se sloupcem nebo proměnnou typu Integer nebo Short.

Dolní mez

Dolní mezi bude odpovídat poloha jezdce vlevo resp. nahoře

Horní mez

Horní mezi bude odpovídat poloha jezdce vpravo resp. dole

Krok na stupnici

Počet hodnot, kterým bude odpovídat jedna čárka na stupnici; zadáte-li 0, stupnice se nenakreslí, zadáte-li 1, bude čárka na stupnici odpovídat každé hodnotě, zadáte-li N, pak bude čárka na stupnici odpovídat každé N-té hodnotě;

Stupnice

Umístění stupnice (uplatní se pouze pokud je krok nenulový), možnosti jsou Dole nebo vpravo, Nahoře nebo vlevo, Po obou stranách; o orientaci posuvníku rozhoduje šířka a výška složky.


Skupina specifických vlastností složky Subpohled

Subpohled

Složku subpohled lze vložit do obecného pohledu. Vytváří "pohled v pohledu" a umožňuje oba pohledy synchronizovat. Pohledu obsahujícímu subpohled říkáme superpohled.

Combo nabízí seznam všech pohledů v aplikaci. Jeden z nich vyberte jako subpohled.

Způsob synchronizace

Zde se určuje způsob provázání subpohledu se superpohledem.

Stejný záznam - oba pohledy budou současně zobrazovat tentýž záznam (přehledový subpohled);

Záznamy propojené relací - subpohled bude zobrazovat záznamy vybrané z protější tabulky relačního vztahu dříve definovaného v aplikaci. Relační podmínka (na rovnost jednoho či více sloupců tabulek) se nemusí zadávat, protože je součástí definované relace.

Záznamy propojené podmínkou - subpohled bude zobrazovat záznamy vybrané z jiné tabulky podle vztahu zadaného až nyní při návrhu pohledu. Může být použito složitějších podmínek než pouze na rovnost.

Použít kurzor ze subpohledu

Pouze u subpohledu synchronizovaného na stejný záznam - vedou-li super- i subpohled do stejného zdroje dat, použijte tento přepínač. Otevírání i práce s pohledem se zrychlí, protože se zdroj dat otevírá pouze jednou.

Jméno relace

Má-li subpohled zobrazovat záznamy vyhovující relační podmínce, je nutné zde vybrat z comba jeden objekt typu relace (uložený v aplikaci).

Propojovací hodnota v superpohledu

Pouze u podmínkou propojeného subpohledu - jméno sloupce ze superpohledu (pohledu, který navrhujete), které slouží jako relační klíč.

Výběrová podmínka na subpohled

Pouze u relačně propojeného subpohledu - výraz, na jehož základě se budou vybírat záznamy do subpohledu. Výraz musí mít tyto vlastnosti:

•	použijí se v něm sloupce ze subpohledu a znak %, který symbolizuje hodnotu sloupce superpohledu uvedeného v poli Propojovací hodnota v superpohledu;

•	po zapsání hodnoty propojovacího sloupce na místo znaku % musí vzniknout výraz typu Boolean; do subpohledu se vyberou ty záznamy, pro něž tento výraz má hodnotu TRUE;

•	ve výběrové podmínce se nesmí použít proměnné, konstanty ani funkce projektu.

Nejčastější případ (propojení na rovnost hodnot dvou sloupců) je jednodušší definovat přes vytvoření objektu typu relace a použití této relace..


Skupina specifických vlastností složky Combo

Combo

Zde se popisuje skupina vlastností, které lze zadat pouze pro combo - typ a způsob naplnění comba

Druh comba

Combo je buď editovatelné nebo překládané. V prvním případě uživatel může zadat kromě nabízených hodnot i jakoukoli jinou (lze použít pro všechny sloupce s pevnou délkou), v druhém případě se z nabídky vybraná hodnota při zápisu do databáze nahrazuje hodnotou jinou, tzv. překladem - např. z comba vybíráte mezi hodnotami Odběratel, Dodavatel a do sloupce typu Short se zapisuje hodnota 0 nebo 1. Překládané combo lze použít pro pouze pro sloupce typu Char, Short nebo Integer.Editovatelné combo lze použít pro sloupce Real, Money, String, Date, Time, Timestamp a Boolean.

Obsah comba

Pokus chcete, aby nabídka hodnot byla pokaždé stejná (pevně uložená v definici formuláře), pak nabídku můžete zahrnout přímo do popisu comba. K editaci nabídky slouží specializované okno, které se otevře po stisku tlačítka u vlastnosti Obsah comba.

Dotaz plnící combo

Pokud chcete, aby obsah nabídky v combu mohl být v různých situacích různý, nebo chcete stejnou nabídku používat ve více různých pohledech, pak nabídku nezadáte v popisu comba, ale místo ní uvedete dotaz, z jehož odpovědi se nabídka později vytvoří. Tuto možnost využijete zejména při implementaci číselníků: číselník bude zadán ve zvláštní tabulce, dotaz vybere z číselníku do nabídky názvy a bude je překládat na čísla.

Dotaz buď vyberte z nabídky existujících dotazů nebo jej přímo zapište slovy do vlastnosti Dotaz plnící combo.

Dotaz plnící combo je vhodné si připravit a zde ho použít vybráním z nabídky.

Vede-li složka Combo do sloupce typu Znak, Integer nebo Short, používá se Combo překládané. Pak dotaz plnící toto combo musí obsahovat v prvním sloupci řetězec (nabízená hodnota) a ve druhém odpovídající typ (Znak, Integer nebo Short). Hodnota ve druhém sloupci se použije jako překlad obsahu prvního sloupce: pokud tedy uživatel vybere z nabídky některou hodnotu, do databáze se ve skutečnosti zapíše hodnota druhého sloupce ze stejného záznamu v odpovědi na dotaz.

Vede-li složka Combo do sloupce typu Řetězec, Datum, Čas, Timestamp, Reálné číslo, Peníze nebo Boolean, používá se Combo editační. Dotaz plnící toto combo musí obsahovat v prvním sloupci odpovídající typ.

Při otevírání pohledu se zodpoví dotaz zadaný v popisu složky. Pokud odpověď má více než 1000 záznamů, použije je pouze prvních 1000. První sloupec z každého záznamu z odpovědi se objeví v nabídce složky.

Pokud je uveden i druhý sloupec, pak se použije jako překlad obsahu prvního sloupce: pokud tedy uživatel vybere z nabídky některou hodnotu, do databáze se ve skutečnosti zapíše hodnota druhého sloupce ze stejného záznamu v odpovědi na dotaz.

Dotaz se vyhodnocuje pouze při otevírání pohledu nebo při volání akce Aktualizovat nabídku v combech (funkce Reset_view s parametrem RESET_COMBOS) nebo při volání metody složky ResetCombo.


Skupina specifických vlastností složky ActiveX Control

Active X

Nabídka registrovaných ActiveX controlů na Vašem počítači. Vyberte jedn žádaný control, u něhož znáte popis vlastností.

Vlastnosti

Zde se nabídne seznam vlastností vybraného ActiveX controlu. Nabídka vlastností záleží na typu vybraného controlu. Použití hledejte v nápovědě pro daný control.

Metody

Zde se nabídne seznam metod vybraného ActiveX controlu. Nabídka metod záleží na typu vybraného controlu.


Řídicí panel (základní stránka)
Řídicí panel

Řídicí panel je základní ovládací prvek WinBase602. Je to okno, které se automaticky otevírá po spuštění vývojového nebo provozního prostředí WinBase602.

Okno se skládá ze tří částí:

•	levé okno obsahuje seznam serverů, které jsou na tomto počítači registrovány (tučné názvy) nebo běží v lokální síti (netučné); po vybrání a přihlášení se na server se zde objeví strom aplikací, v němž lze sestupovat až do úrovně kategorií objektů nebo složek  (folderů) v jednotlivých kategoriích. Pomocí tlačítka [image] můžete levé okno zavírat a ušetřit tím trochu místa na obrazovce - viz obrázek.

•	střední okno ukazuje v seznamu po přihlášení k serveru složku Systém (uživatelé, systémové tabulky) a přehled aplikací; v okně lze sestoupit až do úrovně jednotlivých objektů (tabulky, pohledy apod.) včetně uživatelských složek a provádět s nimi určité akce (vytváření, mazání apod.). Přesun o úroveň výše se provede pomocí složky označené dvěma tečkami [image] nebo tlačítkem na liště [image]. O úroveň níže se dostanete poklepáním na řádek seznamu (aplikace -> kategorie / složky -> objekty). V seznamu lze vedle jména objektu zjistit i datum a  čas poslední úpravy. Kliknutím na záhlaví sloupce lze položky seznamu třídit (podle jména nebo podle času úpravy). Je-li zavřen levý panel, objeví se v levé části středního okna sada tlačítek se symboly kategorií pro rychlejší přepínání mezi nimi - viz obrázek.

•	pravá část obsahuje soubor funkčních tlačítek, které se vztahují k právě vybrané komponentě z levé nebo střední části; pomocí několika záložek v horní části je možné obsah okna přepínat - počet a druh záložek závisí na typu vybraného objektu. Pomocí tlačítka [image] lze omezit počet tlačítek na minimum, zobrazí se jen ty nejpotřebnější.

V pravé dolní části panelu se nalézají tři označovací čtverce, sloužící k stanovení, má-li se označený objekt exportovat resp. má-li být vybraný objekt startovním objektem aplikace, resp. má-li se objekt vyexportovat v utajené (zašifrované) podobě.

Na řídicím panelu můžete nalézt:	Symboly serverů a databází;
	Symboly jednotlivých komponent aplikace;
	Složky
	Složka Systém
Další související stránky:	Menu programu
	Lišta řídicího panelu
	Export vybraných komponent aplikace
	Startovní objekt
	Utajený objekt


Dva stavy řídicího panelu:

1) zavřené levé okno po vybrání aplikace

2) otevřené levé okno


Servery a databáze na řídicím panelu

V levé části řídicího panelu se může objevit pět druhů symbolů serverů.

	lokální server, který neběží, je však možné ho spustit.
	lokální server, který běží.
	zaregistrovaný vzdálený server, který neběží a není možné se k němu přihlásit.
	zaregistrovaný vzdálený server, u něhož není možné rozhodnout, jestli běží či nikoliv. Jedná se o servery, na něž se přistupuje přes firewall nebo přes modem pomocí protokolu TCP/IP.
	běžící vzdálený server, na nějž je možné se připojit. S touto značkou se objeví na řídicím panelu i servery, které běží a inzerují své služby v lokální síti a nejsou přitom zaregistrovány. Na řídicím panelu se objevují postupně, jak se o nich klient dozvídá.

Klient je spuštěn vždy s jedním protokolem a tento protokol je použit k vyhledání serverů. Dokud není z řídicího panelu vybrán server, klient je ve stavu, kdy prohledává síť a čeká na odpovědi serverů komunikujících stejným protokolem. Tento stav je signalizován na stavovém řádku okna klienta. Je-li použit protokol TCP/IP, je možné tlačítkem Test spojení IP vyzkoušet propojení s vybraným serverem. Provede se PING na protější adresu a oznámí se výsledek.

Po přihlášení se k serveru se pod značkou serveru objeví složka Systém a aplikace v databázi spravované serverem.

	složka Systém
	Aplikace v databázi
Viz také:	Seznam akcí řídicího panelu při vybraném serveru
	Seznam akcí řídicího panelu při vybrané aplikaci
	Složka Systém
	Řídicí panel


Řídicí panel - vybraný server
Řídicí panel - vybraný server (databáze)

Základní akce, které je možno s provádět z řídicího panelu v době, kdy je vybraný pouze server (databáze), lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se objeví po stisku pravého tlačítka myši na obrázku serveru.

Odpojit	klient se odpojí od vybraného serveru, v tomto stavu pak vyhledává servery běžící v lokální síti
Vytvořit databázi	vytvoří novou prázdnou databázi, stará databáze bude po varování nenávratně zničena
Import aplikace	naimportuje aplikaci z disku do databáze
Vytvořit aplikaci	vytvoří novou prázdnou aplikaci
Replikace	otevře okno pro nastavení základních parametrů replikací vč. povolení replikací
Rychlost spojení	program vyzkouší rychlost spojení s vybraným serverem a nechá rozhodnout, není-li spojení neúnosně pomalé
Viz také:	Řídicí panel


Řídicí panel - vybraná aplikace

Základní akce, které je možno s provádět z řídicího panelu v době, kdy je vybraná aplikace, lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se objeví po stisku pravého tlačítka myši na obrázku aplikace.

Spustit	spustí (otevře) startovní objekt aplikace
Vytvořit aplikaci	vytvoří novou prázdnou aplikaci
Import aplikace	naimportuje aplikaci z disku do databáze
Zrušit	celou aplikaci se všemi komponentami odstraní z databáze
Export aplikace	vyexportuje aplikaci podle nastavení v následujícím dialogu, exportují se ty komponenty, které jsou označeny k exportování - přepínač pod spodním okrajem řídicího panelu
Vlastnosti	okno pro nastavení speciálních vlastností aplikace, které se použijí při replikacích (1. záložka), při nastavování závislostí aplikací (2. záložka) a pro nastavení parametrů WWW (3. záložka)
Replikovat tam	umožní vytvořit replikační paket pro vybraný replikační server (replikovat data) mimo časový plán
Replikovat sem	umožní zažádat protější server o replikaci mimo časový plán
Replik. pravidla	otevře okno pro editaci replikačních pravidel
Vypustit replikaci	Synchronizuje replikační čítače tak, že v příští replikaci se nepřenesou žádná data (i kdyby se tak podle replikačních pravidel měno stát)
Viz také:	Řídicí panel


Komponenty aplikace na řídicím panelu

Seznam všech typů komponent aplikace WinBase602. Pro přehled akcí a operací s jednotlivými typy klikněte na obrázek.

	tabulka - základní objekt obsahující ve sloupcích data; tabulka je členěna do záznamů
	tabulka, která je určena pro replikaci
	obecný formulář - navržený formulář pro vstup dat, editaci, prohlížení apod. Může obsahovat všechny typu složek v libovolných pozicích.
	standardní (tabulkový) formulář - navržený formulář tabulkového vzhledu používaný pro rychlé zobrazení většího množství dat, jako subformulář apod. Může obsahovat pouze některé typy složek, volba umístění i dalších vlastností složek jsou omezené.
	sestava - speciální pohled, který ve své definici obsahuje členění do skupin, agregační funkce a další rysy, které se uplatňují pouze při tisku. Nelze i otevřít a pracovat jako s normálním pohledem.
	graf - speciální pohled, obsahující pouze graf vložený z programu MagicGraf602 pomocí OLE.
	štítky - pohled navržený pro tisk štítků nebo jmenovek - odlišuje se mj. možností tisknout více záznamů (štítků) vedle sebe.
	menu standardní (řádkové) - menu navržené pro řízení aplikace - řádek v horní části okna
	menu popup (sloupcové) - menu navržené většinou pro nabídku akcí vyvolanou pravým tlačítkem na nějakém objektu
	dotaz - připravená pomocná tabulka, vzniklá dynamicky podle definice dotazu z jiných tabulek, uplatněny výběry záznamů, volba sloupců, relační propojení, agregační funkce, skupiny záznamů apod.
	program - v interním textovém editoru napsaný zdrojový text programu, který řídí běh aplikace nebo její části.
	include - součást rozsáhlejšího programu
	přenos dat - návrh obecného přenosu dat – exporty, importy, modifikace
	obrázek - samostatné rastrové obrázky, sloužící v aplikaci jako pozadí pohledu, obrázek na tlačítkách nebo v pohledu.
	relace - předem pevně připravený relační vztah (na rovnost) mezi dvěma tabulkami. Využití v aplikaci např. pro otevírání relačních pohledů.
	schéma části aplikace - jiný (grafický) způsob znázornění vybraných komponent aplikace s možností definovat relace a se všemi akcemi řídicího panelu.
	role - subjekt práva definovaný v rámci aplikace, přenáší se s aplikací. Do role je možno obsadit uživatele nebo skupinu.
	ODBC spojení - připravené napojení WinBase602 na cizí zdroj dat pomocí rozhraní ODBC
	replikační vztah - předpis, které sloupce z tabulek a jak často se mají replikovat
	procedury a funkce - připravené SQL rutiny
	triggery - SQL rutiny, spouštěné při aktualizacích tabulek
	www objekty - konektory, elektory a šablony použitelné s WinBase602 Internet klientem pro internetové aplikace (dynamické HTML stránky)
	sekvence - speciální objekty pro správu číselných posloupností v SQL
	startovní objekt - objekt, který se spustí (otevře) při spuštění aplikace; může to být program, menu nebo formulář
	připojený objekt z WinBase602 - objekt kterékoliv kategorie připojený do aplikace z jiné aplikace téže databáze

Back-endovou část aplikace tvoří tabulky, dotazy, procedury a funkce, triggery a sekvence.

Viz také:	Řídicí panel
	Složka Systém


Řídicí panel - REPLIKAČNÍ SERVERY

Základní akce, které je možno s provádět z řídicího panelu v době, kdy je v levém panelu vybraná složka Systém a ve středním panelu Replikační servery, lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se objeví po stisku pravého tlačítka myši na obrázku serveru. Popis vybraného replikačního serveru lze nalézt na záložce Popis pravé části panelu

Registrovat	Navázání spojení s protějším serverem - nutno zadat adresu, na níž čeká druhý WB server. Po určité době, až si servery vymění pakety, se zaregistrovaný server objeví v seznamu.
Aktualizovat	Zašle protějšímu serveru speciální paket se žádostí o zaslání stavu tohoto serveru a případné nové potvrzení posledního paketu. Pokud server neobdržel potvrzení o zpracování posledního paketu, je replikování blokováno. Pokud se paket cestou "ztratí", je touto akcí možné odblokovat komunikaci.
Synchronizovat	Tlačítko poslední záchrany v případě násilného rozpojení komunikace - znovu se zahájí replikování s protějším serverem "od nuly" bez ohledu na momentální stav. Přitom se přereplikuje celý obsah sdílených tabulek ve všech sdílených aplikacích.
Zrušit	Odstranit zaregistrovaný replikační server ze seznamu
Viz také:	Řídicí panel
	Složka Systém


Složka System na řídicím panelu
Složka Systém na řídicím panelu

Ve složce Systém naleznete důležité komponenty databáze, využívané společně všemi aplikacemi. Pro více informací o jednotlivých typech klikněte na obrázek.

	uživatel - subjekt práva, definovaný (stejně jako skupina) v rámci celé databáze, platí tedy pro všechny aplikace. V jednotlivých aplikacích se práva upravují obsazováním do rolí.
	skupina - množina uživatelů, kteří mají mít stejná práva. Právo přidělené skupině získávají všichni její členové.
	replikační server - servery, se kterým probíhá výměna dat pomocí replikací
	systémové tabulky - tabulky jádra WinBase602, kde jsou uloženy informace o tabulkách v databázi, o dalších objektech, uživatelích, replikacích apod.
Viz také:	Řídicí panel


Systémové tabulky
Řídicí panel - SYSTÉMOVÉ TABULKY

Mezi systémové tabulky ve WinBase602 patří:

Tabulka objektů (OBJTAB) - zde jsou uloženy veškeré objekty všech aplikací vyjma tabulek. Tabulku lze z řídicího panelu otevřít a prohlížet, nikoliv modifikovat. Výjimkou je možnost smazání nebo obnovení smazaného objektu zatržení nebo nezatržením čtverce Zrušený?.

Tabulka tabulek (TABTAB) - zde jsou uloženy definice všech tabulek; tabulku lze otevřít, nelze editovat (ani čtvercem Zrušená?).

Tabulka uživatelů (USERTAB) - tabulka obsahuje uživatele a skupiny uživatelů. Nelze editovat.

Tabulka replikačních serverů (SERVERTAB) - obsahuje názvy a parametry zaregistrovaných replikačních serverů. Nelze editovat.

Tabulka replikačních pravidel (REPLTAB) - seznam replikačních pravidel uložených na serveru. Nelze editovat.

Tabulka klíčů (KEYTAB) - seznam digitálních klíčů vydaných uživatelům. Nelze editovat.

Akce, které lze se systémovými tabulkami provádět, jsou tyto: Otevřít, Uvolnit zrušené, Opravit indexy a Práva k datům. Poslední položka umožňuje nastavit jednotlivým subjektům práva právo vkládat záznamy do systémových tabulek (lze tím zakázat, aby běžný uživatel nemohl vytvářet své aplikace).

Viz také:	Řídicí panel
	Složka Systém
	Systémové tabulky - použití v aplikacích
	Práva k systémovým tabulkám


Složky (foldery) na řídicím panelu

Objekty v rámci jedné aplikace lze rozdělit do několika složek (folderů) [image].  Složky jsou společné pro všechny kategorie. Složky lze do sebe i zanořovat (tj. ve složce lze vytvořit další složku atd.). Objekt tedy může patřit do kategorie a do složky. Nepatří-li objekt do žádné složky (implicitní stav, stav předchozích verzí), říkáme, že objekt je v kořenu kategorie. Objekt patří právě do jedné složky nebo do kořene.

Na řídicím panelu lze měnit způsob zobrazení (tlačítkem na liště [image]) - složky jsou zobrazeny vždy pod každou kategorií

nebo jsou zobrazeny nejdřiv složky s těmi kategoriemi, které obsahují objekt patřící do této složky, a poté kategorie s objekty, které patří do kořenu.

Využití složek v aplikaci

Složky naleznou použití ve složitějších aplikacích, kdy je potřebné mít skupiny složek "pohromadě", aby se udržel přehled a vztahy mezi objekty. Ideálním případem je aplikace, která lze vertikálně rozdělit na více relativně samostatných částí, které se umístí do různých složek. Příkladem mohou být nějaké správcovské includy a formuláře spolu s pomocnými tabulkami parametrů a tabulek pro přenosy dat, které po odladění se schovají do složky a tím později "nepřekážejí" při vývoji aplikace.

Viz také:	Řídicí panel


Lišta řídicího panelu

Při vybrané aplikaci je zobrazena pracovní lišta s tlačítky následujících významů:

Vystřihnout, Zkopírovat, Vlepit - tlačítka pro práci se schránkou způsobem ve Windows běžným; lze je použít na objekty vybrané na řídicím panelu ve třech významech:

- přenášet je mezi aplikacemi (libovolný objekt);

- přenášet do schématu;

- vytvářet na ploše zástupce spouštějící aplikaci s tímto objektem (pohledy, menu, programy - ty, co mohou být startovní objekt).

Běh - spustí startovní objekt aplikace (program, menu nebo pohled);

Skrytí okna serverů - tlačítko skryje nebo odkryje levou část řídicího panelu;

Přepínač mezi způsobem zobrazením složek (folderů) -  změna zobrazení v levé části řídicího panelu, pokud jsou vytvořeny uživatelské složky;

Skok o úroveň výše ve stromu objektů - přesun o úroveň výše (objekty -> kategorie / složky -> aplikace); je totožné se značkou [image] ve střední části řídicího panelu;

Vyhledat - otevře okno pro vyhledání řetězce v textu definic objektů - viz Hledání objektu

Ladící režimu - zapne nebo vypne ladící režim pro programy - viz Debugger

Monitor - otevře plovoucí okno Monitoru, kam se vypisují informace o dění a o chybách v klientovi i na serveru. Lze zde také nalézt, pod jakým jménem je uživatel přihlášen, seznam všech uživatelů s možností odpojení, seznam zámků apod.

Čekající dokumenty - prohledá databázi, nejsou-li v nějaké aplikaci dokumenty, které (v rámci konceptu Koloběhu dokumentů) čekají na vyřízení od přihlášeného uživatele. Pokud ano, spustí se program nebo se otevře vhodný formulář.

Viz také:	Řídicí panel
	Složky (foldery)
	Ladící režim (debugger)
	Hledání objektu


Hlavní menu WinBase602

Většina základních akcí s komponentami databáze se provádí pomocí řídicího panelu, některé speciální operace se volají z menu.

Položky hlavního menu umožňují:

Aplikace

Spustit - spuštění vybrané aplikace (aplikačního programu nebo menu);

Přihlásit se jiným jménem - právě přihlášený uživatel se odhlásí a objeví se okno pro přihlášení uživatele nového. Otevřená aplikace se automaticky uzavře;

Konec - ukončení práce s WinBase602.

Nástroje

Vyhledat - nalezne v otevřené aplikaci všechny objekty, které ve své textové definici obsahují zadaný řetězec.

Parametry - nastavení globálních parametrů WinBase602 - viz Parametry WinBase602;

Přenosy dat - otevře návrhář přenosů dat - viz Návrhář přenosu dat

Připravit include - vytvoří definiční soubor v jazyce Pascal nebo C obsahující popisy objektů z aplikace, na něž odkazuje Váš aplikační program;

Server - submenu obsahující příkazy pro správu, údržbu a obnovu databáze. Lze také z tohoto místa exportovat či importovat uživatele a skupiny. Provádět údržbářské akce je povoleno správci (členu skupiny DB_ADMIN). Podrobnosti viz Správa databáze a Export/import uživatelů

Jazyk -  umožní pracovat s vícejazyčnými verzemi aplikací - viz Vícejazyčné verze

Ladící režim - zapíná / vypíná ladící režim pro programy ve vnitřním jazyce

Monitor - otevře okno monitoru, kde lze nalézt informace o stavu klienta i serveru

Okna - standardní menu Windows aplikace

Nápověda - položky pro práci s nápovědou

Viz také:	Řídicí panel


Export a import uživatelů
Export a import všech uživatelů

Častým požadavkem bývá, aby po nové instalaci databáze server pracoval se stejnými uživateli a skupinami jako v instalaci předešlé a aby toto nastavení nespočívalo v ručním vytvoření uživatelů a skupin a znovuzavedením práv. Nejjednodušší cestou, jak toho dosáhnout, je export uživatelů ze staré databáze a po vytvoření databáze nové jejich import. Po této akci se ovšem ztratí přístupová hesla uživatelů, kteří musí při prvním přihlášení své heslo zadat znovu.

Mají-li se zachovat práva k objektům a datům v aplikaci, je nutné tuto aplikaci ze staré databáze exportovat včetně práv (příznak při exportu aplikace).

Příkazy pro export a import uživatelů jsou v menu Nástroje / Server.

Export všech uživatelů, skupin a klíčů - vyexportuje na disk informace o uživatelích a jejich případných klíčích a o skupinách uživatelů, včetně vztahu "náležení do skupin". Použije se při přenosu prostředí do nového databázového souboru.

Import všech uživatelů, skupin a klíčů -  import informací z předešlého odstavce. Použije se při zakládání nového FILu, pokud chceme zachovat prostředí FILu původního. Následující import aplikací vyexportovaných včetně práv zajistí, že je možné okamžitě začít pracovat.

Viz také:	Řídicí panel


Připojení objektu
Připojení objektu k aplikaci

Akce Připojit umožňuje vytvoření tzv. spojovacího objektu, tedy objektu, který je odkazem na objekt z jiné aplikace. Pomocí spojovacího objektu pak budete moci pracovat s tímto objektem, jako by byl součástí právě otevřené aplikace.

Všechny změny, které provedete s takto vytvořeným spojovacím objektem, se provedou s původním objektem, na nějž spojovací objekt odkazuje. Platí to jak o změnách v definici objektu, tak i o změnách dat v tabulce. Výjimkou je pouze zrušení a přejmenování spojovacího objektu -- tehdy se ovlivňuje spojovací objekt sám a nikoli objekt, na nějž odkazuje.

 Po stisku tlačítka Připojit se otevře dialogové okno obsahující dva seznamy: seznam aplikací a seznam objektů zvolené kategorie ve vybrané aplikaci. Poté, co ze seznamů vyberete aplikaci a objekt a zadáte jméno pro spojovací objekt, bude spojovací objekt vytvořen. Spojovací objekt je trvalou součástí aplikace - přenese se i při exportu a importu aplikace.

Aplikace je schopna pracovat pouze s těmi objekty, které jsou jejími komponentami nebo které byly ní připojeny. Proto připojíte-li pohled, musíte připojit také tabulku nebo dotaz, kam pohled směřuje. Připojíte-li dotaz, musíte připojit všechny tabulky, z nichž vybírá data.

Připojit lze tabulky (jiný dialog), pohledy, menu, dotazy, programy a obrázky.

Viz také:	Připojení tabulky


Připojení tabulky
Připojení tabulky k aplikaci - popis dialogu

Akce Připojit umožňuje podle přepínače v horní části

•	vytvoření tzv. spojovacího tabulky, tedy tabulky, která je odkazem na tabulku WinBase602 z jiné aplikace téže databáze - přepínač je v poloze Tabulky z ostatních aplikací ve WinBase602.

•	napojení na tabulku z cizího zdroje dat - přepínač je v poloze Tabulky zpřístupněné přes ODBC.

Viz také:	Připojení tabulky WinBase602
	Připojení tabulky ODBC
	Připojení objektu do aplikace


Připojení tabulky WinBase602
Připojení tabulky WinBase602 k aplikaci

Tzv. spojovací tabulka je objekt, který je odkazem na tabulku WinBase602 z jiné aplikace téže databáze. Pomocí spojovací tabulky pak je možné pracovat s touto tabulkou, jako by byla součástí právě otevřené aplikace. Připojená tabulka je na řídicím panelu aplikace označena symbolem šipky.

Všechny změny, které provedete s takto vytvořeným spojovacím objektem, se provedou s původní tabulkou, na níž spojovací objekt odkazuje. Platí to jak o změnách v definici, tak i o změnách dat v tabulce. Výjimkou je pouze zrušení a přejmenování spojovacího objektu -- tehdy se ovlivňuje spojovací objekt sám a nikoli tabulka, na níž odkazuje.

V dialogovém okně jsou dva seznamy: seznam aplikací a seznam tabulek ve vybrané aplikaci. Poté, co ze seznamů vyberete aplikaci a tabulku a zadáte jméno pro spojovací objekt, bude spojovací objekt vytvořen. Spojovací objekt je trvalou součástí aplikace - přenese se i při exportu a importu aplikace.

Aplikace je schopna pracovat pouze s těmi objekty, které jsou jejími komponentami nebo které byly ní připojeny. Připojíte-li tabulku, musíte připojit všechny tabulky, do nichž z ní vedou ukazatele (to ovšem pouze v případě, že s těmito ukazateli budete pracovat, např. jsou-li použity v pohledu).

Viz také:	Připojení tabulky ODBC
	Připojení objektu


Připojení tabulky ODBC
Připojení tabulky ODBC k aplikaci

V levém seznamu je nabídka ODBC zdrojů dat, na něž je tato aplikace napojena. Označte v levém seznamu požadovaný zdroj dat a v pravém seznamu se objeví jeho tabulky. Pod seznamy se mohou aktivovat až dvě comba umožňující vyhledání správné tabulky ve zdroji dat. Nedaří-li se připojení tabulek nebo se žádné neobjevují, zkontrolujte nastavení parametrů příslušného ODBC driveru ve Windows.

Zvolenou tabulku označte v pravém seznamu a stiskem tlačítka Připojit ji připojte do aplikace. Připojená tabulka se objeví na řídicím panelu aplikace se symbolem zeměkoule. Stane se trvalou součástí aplikace. Spojení na tuto tabulku se přenese i při exportu a importu aplikace.

S ODBC tabulkami lze pracovat buď interaktivně (vytvoříte si formuláře a sestavy do těchto tabulek) nebo programově (vytvoříte si ODBC kurzory a do nich zapisujete). ODBC tabulky nelze použít v definicích pevných dotazů.

Přes ODBC lze připojit i tabulky z WinBase602, pak ale budou pro práci s nimi platit všechna omezení plynoucí z ODBC - např. nebude možno pracovat s multiatributy.

Viz také:	Připojení tabulky WinBase602
	Připojení objektu


Obrázky v aplikaci
Komponenty aplikace typu Obrázek

Součástí front-endu aplikace jsou obrázky uložené v tabulce objektů. Použít lze různé grafické bitmapové formáty (z důvodu rychlosti načítání však doporučujeme formát BMP). Komponenty aplikace typu obrázek lze použít na tyto účely:

•	jako pozadí formuláře resp. sestavy (v tomto případě je nutné zapnout tisk pozadí) - vlastnost návrhu formuláře Obrázek na pozadí;

•	jako statický obrázek ve formuláři - vlastnost návrhu formuláře Obrázek (neměnný) (na rozdíl od zobrazení hodnoty sloupce typu Obrázek - vlastnost Obsah složky);

•	jako obrázek na tlačítku ve formuláři - vlastnost návrhu složky typu Tlačítko Obrázek (neměnný) ;

•	jako obrázek na tlačítku uživatelského toolbaru (pracovní lišty) - pevná velikost 19x19 pixelů

•	jako pozadí hlavního okna aplikace - nastaví se funkcí Background_bitmap

Nepleťte si komponentu aplikace obrázek s obsahem sloupce typu Obrázek!!

Viz také:	Řídicí panel - OBRÁZKY


Řídicí panel - OBRÁZKY

Obrázky jsou komponenty aplikace použitelné při návrhu pohledů. Základní akce, které je možno s obrázky provádět, lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se objeví po stisku pravého tlačítka myši na objektu typu obrázek.

Otevřít	otevře se okénko s obrázkem
Zrušit	zrušení označeného obrázku
Duplikovat	vytvoření přesné kopie označeného obrázku
Připojit	možnost připojení obrázku z jiné aplikace
Exportovat objekt	export obrázku do souboru v různých formátech
Importovat objekt	import obrázku ze souboru
Práva k objektu	nastavení objektových práv

Nepleťte si komponentu aplikace obrázek (uloženou v systémové tabulce objektů) s obsahem sloupce typu Obrázek určité konkrétní tabulky!!


Řídicí panel - PROCEDURY a FUNKCE

Základní akce, které je možno s rutinami provádět, lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se objeví po stisku pravého tlačítka myši na objektu typu rutina. Podrobnosti o rutinách - viz Procedury a funkce uložené na serveru.

Vytvořit	vytvoření nové rutiny (pomocí textového editoru)
Spustit	umožní spustit vytvořenou rutinu - pomocí dialogu zadáte hodnoty vstupních parametrů; slouží např. k otestování procedury (lze ladit); takto nelze získat hodnotu funkce nebo hodnoty výstupních parametrů procedury; je-li procedura bez parametrů, provede se bez otevření dialogu.
Modifikovat	úprava stávající rutiny (pomocí textového editoru)
Zrušit	zrušení označené rutiny
Editovat text	stejné jako Modifikovat
Exportovat objekt	export rutiny do souboru
Importovat objekt	import rutiny ze souboru; jméno rutiny se musí shodovat se jménem objektu
Práva k objektu	nastavení objektových práv


Spuštění procedury - popis dialogu

Vytvořenou proceduru je možné spustit přímo z řídicího panelu aplikace. Spuštění slouží buď ke spuštění jednoúčelové rutiny nebo k otestování rutiny bez nutnosti psát program ve vnitřním jazyce, který by ji zavolal. Při testovacím spuštění lze s výhodou využít možnosti krokování procedury pomocí debuggeru.

Parametry procedury se zadávají v dialogu, který se otevře po provedení akce Spustit. V dialogu jsou vypsány první čtyři parametry, případné další parametry se zapíší do posledního pole a oddělí se čárkami. Zadávejte pouze vstupní parametry (označené IN nebo INOUT), výstupní (OUT) nechte prázdné. Po provedení procedury se hodnoty výstupních parametrů (ani případná hodnota funkce) do dialogu nepřenesou.

Slouží-li procedura k vytvoření objektů, řídicí panel se po provedení automaticky nepřekreslí.

Je-li procedura bez parametrů, provede se bez otevření dialogu.


Řídicí panel - TRIGGERY

Základní akce, které je možno s triggery provádět, lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se objeví po stisku pravého tlačítka myši na objektu typu trigger. Podrobnosti o triggerech - viz Triggery.

Vytvořit	vytvoření nového triggeru (s pomocí Průvodce)
Modifikovat	úprava stávajícího triggeru (pomocí textového editoru)
Zrušit	zrušení označené triggeru
Duplikovat	vytvoření kopie označeného triggeru; nutno upravit jméno triggeru podle jména objektu!!
Editovat text	stejné jako Modifikovat
Exportovat objekt	export triggeru do souboru
Importovat objekt	import triggeru ze souboru; jméno triggeru se musí shodovat se jménem objektu
Práva k objektu	nastavení objektových práv


Řídicí panel - SEKVENCE;sekvence
Řídicí panel - SEKVENCE

Základní akce, které je možno se sekvencemi provádět, lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se objeví po stisku pravého tlačítka myši na objektu typu sekvence. Podrobnosti o sekvencích - viz Sekvence.

Vytvořit	vytvoření nové sekvence
Modifikovat	úprava stávajícího sekvence
Zrušit	zrušení označené sekvence
Duplikovat	vytvoření kopie označené sekvence
Exportovat objekt	export označené sekvence do souboru
Importovat objekt	import sekvence ze souboru
Práva k objektu	nastavení objektových práv

Na záložce Náhled si lze prohlédnout definici sekvence. V komentáři před touto definicí je příští hodnota, která bude ze sekvence získána. Pokud je pro sekvenci definována vyrovnávací paměť, pak to nemusí být hodnota, kterou vrátí příští volání NEXTVAL, protože některé dosud nepoužité hodnoty mohou být ve vyrovnávací paměti.


Parametry WinBase602

Okno Parametry slouží pro nastavení globálních provozních parametrů klienta WinBase602. Parametry jsou uloženy v souboru WINBASE.INI.

V okně vidíte seznam nastavitelných parametrů. Dvojitým kliknutím na položce seznamu nebo vybráním položky a stiskem tlačítka Nastavit se přenesete do dalšího okna, v němž zvolíte některou nabízenou konkrétní hodnotu parametru nebo zapíšete hodnoty vlastní.

Parametr Editor: Font na obrazovce nastaví font, v němž se budou zobrazovat textové informace v editoru. Volba fontu probíhá způsobem standardním pro všechny programy pod Windows.

Nabídka fontů obsahuje pouze neproporcionální fonty.

Parametr Editor: Font na tiskárně otevře dialogové okno, v němž můžete zvolit font, který se použije při tisku textu z vnitřního textového editoru. Nabídka fontů obsahuje fonty použitelné pro nastavenou tiskárnu.

Při nastavování parametru Editor: Ovládání a chování můžete stanovit tři údaje:

- čtverec Turbo-styl ovládání zaškrtnete tehdy, jste-li zvyklí pracovat s Turbo-editory nebo editory typu WordStar či Text602. Vyhovuje-li Vám více Windows styl editorů (Notepad, Write, WinText602), ponechte čtverec nezaškrtnutý;

- čtverec Přehazovat slova na konci řádky se uplatní pouze při editaci sloupce typu Text. Způsobí automatický přechod na nový řádek při dosažení pravého konce okna, přičemž slovo, které by přesahovalo, se již ocitne na novém řádku;

- čtverec Zarovnávat pravý okraj textu se uplatní pouze při editaci sloupce typu Text. Při zaškrtnutí se budou mezi slova textu doplňovat mezery tak, aby text byl zarovnán k pravému okraji okna.

Parametr Formuláře: Implicitní font otevře dialogové okno, v němž můžete zvolit font, který se použije ve všech formulářích, které nemají stanovený font vlastní - jsou to zejména ty formuláře, které WinBase602 automaticky vytvoří, otevřete-li přímo tabulku nebo dotaz.

Parametr Sestavy: Implicitní font otevře dialogové okno, v němž můžete zvolit font, který se použije ve všech sestavách, které nemají stanovený font vlastní.

Parametr Formuláře a sestavy: Implicitní zobrazení umožní nastavit pro většinu typů sloupce zobrazení, které se použije, není-li v definici formuláře stanoveno zobrazení vlastní - jsou to zejména ty formuláře, které WinBase602 automaticky vytvoří, otevřete-li přímo tabulku nebo dotaz.

Parametr Sestavy: Kompatibilita tisku se použije, když některé nové rysy pohledů jsou v rozporu se starými návrhy pohledů. Je možno:

a) okraje sestavy přičítat k netisknutelné oblasti stránky (dané příslušným ovladačem) nebo nově počítat okraje sestavy od kraje papíru - v tomto případě nelze zadat okraje sestavy menší než rozměry netisknutelné plochy.

b) tisknout postaru štítky s posunutím složek nahoru nebo nově přesně tak, jak je navrženo.

c) povolit nebo zakázat zarámování některých složek (editační složky, comba a seznamy aj.) tenkou čarou při tisku;

Parametr Formuláře a sestavy: Rastr při návrhu nastaví rastr pro návrhář pohledu. Rastr určuje počet pixelů obrazovky, v jehož násobcích se složky posunují a mění velikost.

Parametr Tiskárna: Volba otevře dialogové okno, které umožňuje zvolit, na kterou tiskárnu mají směřovat veškeré tištěné výstupy z WinBase602.

Parametr Tiskárna: Okraje přednastaví levý, pravý, horní a dolní okraj o který se zmenší plocha papíru při tisku. Všechny tyto údaje lze znovu předefinovat před vlastním tiskem.

Parametr Import a export slouží

  a) ke stanovení, jestli a kde se má vytvořit při importu aplikace do WinBase602 ikona jejího zástupce,

  b) mají-li se při exportu objektů zachovávat jejich dlouhá jména; popis viz Export a import

Dalších šest parametrů nastavuje barvy písma a pozadí významných řádků při ladění programu. Jedná se o tyto řádky:

- řádek, na němž je umístěn bod zastavení (breakpoint)

- řádek, na němž stojí laděný program (aktuální pozice programu)

- řádek, na němž je bod zastavení a zároveň na něm stojí program.

Parametr Monitor: Velikost obrazu nastaví velikost monitoru pro přesné zobrazení preview; popis viz Rozměry monitoru.

Parametr Externí HTML editor pro HTML šablony dovolí vybrat vlastní editor jazyka HTML. Lze použít pouze pro editaci WWW objektu typu šablona.

V parametru Externí editor pro ostatní objekty můžete stanovit, jaký editor se má otevřít při akci Externí editace.


Nastavení implicitního nastavení
Nastavení implicitního zobrazení

Parametr Formuláře a sestavy: Implicitní zobrazení umožní nastavit pro většinu typů sloupců zobrazení, které se použije, není-li v definici pohledu stanoveno zobrazení vlastní - jsou to zejména ty standardní formuláře, které WinBase602 automaticky vytvoří, otevřete-li přímo tabulku nebo dotaz.


Nastavení ikony importované aplikace
Import a export

Okno Import a export umožní nastavit některé parametry exportu objektů a importu aplikace:

1) stanovení, jestli a kde se má vytvořit při importu aplikace její zástupce

- Vytvořit dle APL souboru - zástupce se vytvoří tam, kde jí to předepisuje APL soubor vzniklý při exportu aplikace, standardně Aplikace602;

- Nevytvářet - zástupce se nevytvoří nikde;

- Vytvořit ve skupině jménem: - zadejte jméno složky v hlavním nabídce Windows, do níž se má zástupce vytvářit.

2) rozhodnout, mají-li se při exportu zachovávat dlouhá jména objektů -  tabulka nazvaná Žádost o dovolenou  se vyexportuje podle nastavení buď Žádost o dovolenou.TDF nebo Zadost_o.TDF.


Nastavení rozměrů monitoru
Rozměry monitoru

Pro přesné zobrazení velikosti stránek sestavy při preview musí program znát fyzické rozměry monitoru. Změřte pravítkem velikost obrazovky (bez černého okraje) a nalezené hodnoty v milimetrech zapište do okna, které se objeví po vybrání položky Monitor: Velikost obrazu ze seznamu parametrů.

Implicitní hodnota je 250 x 200 mm (přibližně 14" monitor).


Databázová aplikace

Databázovou aplikací nazýváme logický celek sestávající z dat a definic tabulek, pohledů, menu, dotazů, programů a dalších pomocných komponent, které společně řeší určitý úkol z oblasti zpracování dat. Jádrem samostatné aplikace je buď program vytvořený ve vnitřním programovacím jazyce WinBase602 (nebo v jazyce externím) nebo v jednodušších případech uživatelem definované menu.

Vytvořenou aplikaci je možno šířit s provozním systémem i na jiné počítače.

Aplikaci je nutno vytvořit ve vývojovém prostředí nebo (aplikaci vytvořenou jinde) importovat do databáze. Práva k objektům a datům přidělená rolím se importem neztrácejí.

Od verze 6.0 je možné aplikaci dělit na dvě části - datovou základnu (back-end) a uživatelské rozhraní (front-end). Mohou se vytvářet aplikace sdílející back-end (více front-endových aplikací přistupuje ke stejným datům) nebo front-end (různé soubory dat jsou spravovány jedním uživatelským rozhraním).

Viz také:	Vícejazyčné aplikace
	Sdílení aplikací
	Seznam akcí řídicího panelu při vybrané aplikaci
	Export aplikace
	Import aplikace


Export aplikace

Export aplikace jako celku, tj. přenesení všech složek otevřené aplikace z prostředí řídicího panelu WinBase602 na disk (disketu) se provádí akcí Export aplikace. Otevře se dialog, který nabízí různé varianty exportu.

Chcete-li exportovat pouze některé komponenty aplikace, musíte před exportem označit ty objekty, které se exportovat nemají.

Po vybrání varianty exportu musíte zadat cestu a jméno pro definiční soubor exportované aplikace (APL soubor).

Komponenty aplikace se exportují do stejného adresáře, v němž vznikne definiční soubor aplikace (APL soubor). Každá komponenta bude ve zvláštním souboru. Exportují-li se i data z tabulek, proběhne jejich export ve vnitřním tvaru WinBase602. Pokud ve stejném adresáři již existuje stejně pojmenovaný soubor, budete varováni.

Export definic objektů je velmi rychlý, export dat z rozsáhlých tabulek může chvíli trvat. Definice objektů jsou exportovány v podobě editovatelného textového souboru, soubor exportovaných dat editovat nelze.

Viz také:	Řídicí panel
	Export aplikace - popis dialogu
	Import aplikace
	Export pouze vybraných komponent aplikace
	Šifrování objektů
	Volba kódování souborů s diakritikou


Import aplikace

Import aplikace jako celku, tj. přenesení všech složek aplikace ze souborů do WinBase602 se provádí akcí Importovat z řídicího panelu aplikací. Aplikace, kterou chcete importovat, musí být na disku nebo na disketě a musí být popsána svým definičním souborem (tento soubor má příponu APL).

V dialogovém okně definiční soubor importované aplikace. Je-li v databázi již aplikace téhož jména, WinBase602 vás na to upozorní. Budete mít na výběr tři možnosti:

- zrušit import

- přejmenovat importovanou aplikaci

- nahradit komponenty existující aplikace komponentami importovanými

Součástí importu může být i vytvoření ikony aplikace ve Windows . Požadavek na vytvoření ikony a jméno skupiny, v níž ikona vznikne, je součástí definičního souboru aplikace. Tento požadavek lze ovlivnit nastavením globálních parametrů WinBase602.

Pokud import aplikace zahrnuje také import jejích dat, může trvat i delší dobu. Po dobu importu jste informováni ve zvláštním okně o importovaném objektu a na informační řádce o počtu přenesených záznamů tabulek.

Po importu je aplikace otevřena. Je-li před importem otevřená nějaká jiná aplikace, uzavře se spolu se všemi svými otevřenými pohledy.

Byl-li před exportem aplikace zatržen v dialogu pro ODBC zdroje dat čtverec Používat tabulky aktivního zdroje dat, budete před vlastním importem dotázáni, chcete-li tabulky aplikace importovat do WinBase602 nebo je vytvořit ve zmíněném zdroji dat.

Některé parametry importu a exportu aplikace lze nastavit globálně v parametrech WinBase602.

Viz také:	Řídicí panel
	Export aplikace
	Export a import – globální parametry
	Výběr zdroje dat (ODBC)
	Šifrování objektů
	Volba kódování souborů s diakritikou


Výběr zdroje dat při importu aplikace

Byl-li před exportem aplikace zatržen v dialogu pro ODBC zdroje dat čtverec Používat tabulky aktivního zdroje dat, jste před importem dotázáni, chcete-li tabulky aplikace importovat do WinBase602 běžným způsobem nebo je vytvořit ve zdroji dat, který označíte v seznamu v levé části. Implicitně je vybrán ten zdroj, který jste použili v původní aplikaci. Vyberete-li cizí zdroj dat, tabulky se neobjeví v řídicím panelu.


Jména objektů ve WinBase602

Objektem se ve WinBase602 rozumí tabulka, pohled, program, dotaz, menu, obrázky, relace aj. Každý objekt má své jméno. Pro jména objektů platí tato pravidla:

•	jméno smí mít nejvýše 31 znak (nepoužívejte ve jménech tečky, uvozovky a apostrofy);

•	mezi velkými a malými písmeny se nerozlišuje, mezery na začátku a na konci se odřezávají;

•	žádné dva objekty ze stejné kategorie v jedné aplikaci nesmí mít stejná jména. Mimo to nedoporučujeme dávat stejná jména tabulkám a dotazům - mohlo by to znemožnit jejich použití v programu;

Viz také:	Řídicí panel


Stav záznamu v tabulce

Každá databázová tabulka se skládá ze záznamů. Každý záznam je v jednom ze tří stavů:

Platný záznam - záznam, se kterým lze normálním způsobem pracovat.

Zrušený záznam - záznam, který byt dříve platným záznamem a poté byl zrušen. Zrušený záznam za normálních okolností není vidět a nepracuje se s ním, může být ale obnoven a převeden mezi platné záznamy bez ztráty informace, která je v něm obsažena.

Uvolněný záznam - záznam, který byl zrušen a poté uvolněn, díky čemuž nelze z něj zpětně vytvořit platný záznam. Místo, které zabírá uvolněný záznam, bude využito, jakmile se do tabulky vkládá nový záznam - uvolněný záznam se jim přepíše. Pokud se nějaké uvolněné záznamy ocitnou na konci tabulky, tabulka se automaticky zkrátí a tyto záznamy přestanou existovat.

Akce Zkompaktnění tabulky provede přemístění záznamů tak, že po skončení akce nejsou v tabulce žádné uvolněné ani zrušené záznamy. Tuto akci nelze provést na tabulce, do níž vedou ukazatele.

Počty záznamů jednotlivých druhů v určité tabulce můžete zjistit takto:

1) na řídicím panelu zvolíte Tabulky;

2) zvýrazníte příslušnou tabulku;

3) provedete akci Statistika

Pomocí funkce Set_sql_option lze zapnout takový režim provozu serveru, že záznamy jsou při smazání automaticky také uvolněny.


Volba souboru

Se soubory, ukládanými na disk pod správu operačního systému, se ve WinBase602 pracuje zejména při importech a exportech všeho druhu. Importovat resp. exportovat lze např. definice objektů, data v různých formátech, texty a jejich části, kompletní aplikace.

Kdykoli je třeba zadat soubor, objeví se na obrazovce standardní dalog pro výběr souboru. Umožňuje jak vybrat existující soubor, tak zadat jméno a umístění pro nový soubor.

Nejprve vyberte správnou složku (adresář) pomocí comba Kde hledat resp. Uložit do na liště nebo klikáním na složky v seznamu pod ním. Když dospějete ke správné složce, při ukládání zadejte jméno souboru do pole Název souboru, při načítání vyberte některý z nabízených souborů v seznamu. Výběr je usnadněn tím, že v poli Typ souboru je vždy přednastaven typ (přípona) souboru.

Při většině operací se souborem je možné provést překódování obsahu - viz Kódování souborů s diakritikou


Kódování souborů s diakritikou

Při většině operací se souborem je možné provést překódování obsahu. Překódování zařídíte tak, že v nabídce označíte kód, v němž je čtený soubor nebo má být vytvářený soubor. Ve WinBase602 a v Windows 95 CZ se vnitřně používá kód označený Windows EECS (cp 1250). Zvolíte-li tuto položku, překódování se neprovádí.

Překódování je možné z (do) těchto znakových sad:

KEYBCS2 - kód Kamenických;

KOI8-CS

Latin2 - použitý v Text602;

MS DOS 5.0 cp 852 - standardní Latin2 (od předchozího se liší pouze v několika grafických symbolech);

Windows ANSI - znaková sada používaná ve Windows 3.0;

Windows EECS cp 1250 - standardní znaková sada pro Windows95 CZ.

Kódování se nastavuje při volbě souboru.


Export aplikace - popis dialogu

V dialogu lze nastavit:

1) Jakou část aplikace exportovat:

Exportovat kompletní aplikaci - provede se export všech komponent aplikace s výjimkou těch, které jsou na řídicím panelu označeny, aby se neexportovaly;

Exportovat pouze back-end - provede se export serverové části aplikace, tj. tabulek, dotazů, uložených procedur a triggerů s výjimkou těch, které jsou na řídicím panelu označeny, aby se neexportovaly.

Exportovat pouze kód programů - výsledkem exportu je pouze soubor s příponou EXX obsahující přeložený program.

2) Upřesnění exportu:

Exportovat včetně dat v tabulkách - je-li zatrženo, budou se exportovat spolu s definicí tabulky i příslušná data ve vnitřním formátu. Netýká se tabulek, u nichž je export dat explicitně nepovolen

Exportovat včetně práv rolí - je-li zatrženo, s aplikací se exportují práva objektů a dat přidělená rolím aplikace.

Exportovat včetně práv uživatelů a skupin - je-li zatrženo, s aplikací se exportují práva objektů a dat přidělená uživatelům a skupinám; samotní uživatelé a skupiny se však neexportují (nejsou součástí aplikace!).

Exportovat zašifrovaně - export těch objektů, které byly označeny na řídicím panelu (čtverec Utajit objekt), proběhne v nečitelné podobě. V této podobě budou i uloženy na serveru po příštím importu aplikace, tedy jejich definice nebudou čitelné pro nikoho jiného než pro tuto aplikaci. Tato varianta exportu slouží k utajení práce vývojáře před ostatními uživateli.

Po vybrání varianty exportu musíte zadat cestu a pro definiční soubor exportované aplikace (APL soubor).

Komponenty aplikace se exportují do stejného adresáře, v němž vznikne definiční soubor aplikace. Každá komponenta bude ve zvláštním souboru. Exportují-li se i data z tabulek, proběhne jejich export ve vnitřním tvaru WinBase602. Pokud ve stejném adresáři již existuje stejně pojmenovaný soubor, budete varováni.

Export definic objektů je velmi rychlý, export dat z rozsáhlých tabulek může chvíli trvat. Definice objektů jsou exportovány v podobě editovatelného textového souboru, soubor exportovaných dat editovat nelze.

Viz také:	Řídicí panel
	Export aplikace
	Export a import – globální parametry
	Export pouze vybraných komponent.
	Šifrování objektů
	Volba kódování souborů s diakritikou


Export vybraných komponent aplikace

Některé komponenty aplikace lze označit příznakem, který říká, se při exportu aplikace exportovat nemají. Pro tabulky lze zvlášť a nezávisle zamezit exportu návrhu a/nebo exportu dat. Objekty, které se neexportují, se ani nezapíší do definičního souboru aplikace (přípona APL).

Příznaky ovlivňující export se nastavují na řídicím panelu aplikace pomocí jednoho nebo dvou označovacích čtverců skrytých pod pravým sloupcem tlačítek. Chcete-li se k nim dostat, musíte roztáhnout výšku řídicího panelu.

Každý nově vytvořený nebo importovaný objekt má nastaven příznak exportu. Stav příznaku se trvale pamatuje.

Spojení na ODBC tabulky se exportuje vždy, nikoli však jejich konkrétní návrh nebo obsah. Pro tabulky připojené z jiných aplikací ve WinBase602 nelze exportovat jejich návrh ani obsah, lze však exportovat spojovací objekt.

Přeložený program se exportuje vždy, i v případě, kdy zabráníte exportu zdrojového programu.

Viz také:	Řídicí panel
	Export aplikace


Nalezení řetězce v textu definic objektů
Nalezení řetězce v textu definic objektů - popis dialogu

Dialogové okno slouží pro rychlé vyhledání zadaného řetězce v textových definicích objektů aplikace. Používá se při úpravách aplikace, když si nejste jisti, na kolika místech se některý řetězec (např. volání procedury nebo jméno tabulky apod.) vyskytuje.

Do pole Hledaný řetězec napište řetězec, který se má vyhledat (bez uvozovek). Pomocí označovacích čtverců můžete zpřesnit podmínky vyhledání. Po stisku tlačítka OK se seznam v dialogu naplní položkami složenými z druhu a názvu objektů (v závorce je případný název složky, v níž je objekt umístěn), které ve své textové definici řetězec obsahují. Stiskem tlačítka Editovat se otevře textový editor pro označenou položku s kurzorem blikajícím na prvním výskytu řetězce.

Viz také:	Řídicí panel


Startovní objekt

V aplikaci lze označit jeden objekt jako tzv. startovní objekt. Tento objekt bude automaticky použit, když aplikaci spustíte. Místo řídicího panelu otevřené aplikace se přímo spustí startovní program nebo se otevře startovní menu, případně startovní pohled.

Jako startovní objekt lze označit buď program, menu nebo pohled. Nejprve jej musíte označit ve středním okně řídicího panelu a pak můžete zatrhnout čtverec Startovní objekt, který se objeví po odtažení spodního okraje řídicího panelu. Je-li na řídicím panelu aplikace označen objekt jiné kategorie, je tento příkaz neaktivní.

Startovní objekt je označen na řídicím panelu hvězdičkou.

Viz také:	Řídicí panel


Vícejazyčné aplikace

Součástí WinBase602 jsou nástroje pro vytváření vícejazyčných aplikací. Jejich účelem je:

•	odstranit nutnost paralelní údržby všech jazykových mutací aplikace,

•	umožnit, aby se v jednou navržených formulářích, sestavách, menu a pomocných oknech objevovaly nápisy v různých jazycích,

•	umožnit odlišné chování programu nebo odlišnosti v uživatelském rozhraní aplikace v závislosti na jazyce tam, kde je to nutné.

Vícejazyčnosti aplikace se ve WinBase602 dosahuje tím, že:

•	místo znakových řetězců v určitém jazyce se v aplikaci (ve formulářích, v menu, v programech, ...) používají metařetězce;

•	součástí aplikace je překladová tabulka, která pro každý metařetězec obsahuje odpovídající řetězce ve všech podporovaných jazycích;

•	podle toho, který jazyk je právě zvolen, se v aplikaci objevují místo metařetězců odpovídající řetězce v tomto jazyce.

Postup při návrhu vícejazyčné aplikace:

1. definovat jazyky aplikace

V hlavním menu vyberte příkaz Nástroje / Jazyk / Přidat jazyk. V okně zadejte název jazyka (např. čeština) a délku, jakou budou řetězce maximálně dosahovat. Opakujte i pro další jazyky (např. angličtina).

2. vytvořit jazykové varianty řetězců

Pomocí příkazu Nástroje / Jazyk / Editovat jazyk otevřete překladovou tabulku. Do sloupce Id zapište identifikátor, na nějž se budete později odkazovat (např. Zadání jména) a do sloupců nadepsaných jmény jazyků zapište jazykové varianty (např. Zadejte své jméno a Enter your name).

3. použít metařetězce v definicích objektů

V příslušném návrháři v místě, kde se má objevit text z překladové tabulky zadejte odkaz na identifikátor z překladové tabulky uvozený znakem @. (např. "@Zadání jména").  Zápis je bez uvozovek tam, kde se očekává řetězec (např. nadpis okna), s uvozovkami tam, kde není jasné, že jde o řetězec (např. hodnotová složka formuláře).

4. nastavení jazykové verze

Do menu Nástroje / Jazyk jsou přidány názvy jazyků. Vyberte jeden z nich - jazyk se označí a od této chvíle se budou metařetězce překládat.

Viz také:	Řídicí panel


Sdílení datové základny nebo uživatelského rozhraní
Sdílení datové základny nebo uživatelského rozhraní mezi aplikacemi

Databázovou aplikaci lze rozdělit do dvou částí, na:

•	datovou základnu, tvořenou databázovými tabulkami a daty v nich obsaženými, triggery k těmto tabulkám, dotazy a procedurami uloženými na serveru a replikačními vztahy a sekvencemi (tzv. back-end);

•	aplikační a prezentační část, tvořenou aplikačními programy, formuláři, sestavami, menu a dalšími objekty, které souvisejí s prezentací dat, přístupem k datům a využitím dat z databáze (tzv. front-end).

WinBase602 umožňuje sdílet front-end nebo back-end mezi aplikacemi, tedy přistupovat ke stejným datům přes více různých rozhraní nebo využívat jedno rozhraní pro více různých souborů dat.

Příklad 1: Uvažujme celopodnikový informační systém. Data popisující podnik mohou být do té míry provázána, že nemá smysl je dělit do více schémat. Nad celopodnikovým datovým schématem (back-end) pak lze vytvořit řadu aplikačních programů (front-end), řešících například pohyb materiálu, objednávky, fakturaci, personalistiku, mzdy atd. Tyto programy sdílejí v určité míře data, kromě nich však nemají nic společného, a jsou tedy rozděleny do různých databázových aplikací.

Příklad 2: Uvažujme účetní aplikaci, která dovoluje vést účetnictví pro více různých firem. Může být výhodné zcela oddělit data patřící různých firmám, protože tím se usnadní přenosy a zálohování dat po jednotlivých firmách a také přidělování uživatelských práv k datům jednotlivých firem. Proto vytvoříme společné uživatelské rozhraní pro všechny firmy, tedy front-end část aplikace, a pro každou firmu zvláštní instanci datové základny, tedy zvláštní back-end.

Principy sdílení ve WinBase602

Sdílení front-endu nebo back-endu mezi aplikacemi se realizuje ve WinBase602 ve formě aplikací závislých na jiných aplikacích:

•	Pro aplikaci lze předepsat, že nemá vlastní back-end a využívá back-end z jiné aplikace (příklad 1).

•	Pro aplikaci lze předepsat, že nemá vlastní front-end a využívá front-end z jiné aplikace (příklad 2).

Na řídicím panelu aplikace A, která využívá data z jiné aplikace B, vidíte tabulky, dotazy, triggery, uložené procedury a replikační vztahy z aplikace B. Na řídicím panelu aplikace A, která využívá front-end z jiné aplikace B, vidíte pohledy, menu, programy, obrázky, relace, schémata, ODBC spojení a WWW objekty z aplikace B. Pro jakoukoli aplikaci vidíte na řídicím panelu pouze její vlastní role.

V situaci popsané v příkladu 1 vytvoříme jednu bázovou aplikaci obsahující kompletní back-end, tedy všechny tabulky, triggery, dotazy, procedury a sekvence. Tato aplikace buď nemá žádný front-end, nebo pouze minimální, například pro zálohovací a správní funkce. Poté pro každou oblast nasazení informačního systému vytvoříme zvláštní aplikaci, která obsahuje pouze front-end - aplikační programy a uživatelské rozhraní pro tuto oblast, ale využívá datovou základnu z bázové aplikace.

V situaci popsané v příkladu 2 vytvoříme kompletní účetní aplikaci. Poté z této aplikace vezmeme pouze back-end a v databázi vytváříme jeho další instance (novou aplikaci). Pro každou z těchto instanci předepíšeme, že má používat front-end z původní aplikace.

Jak fungují aplikace využívající front-end nebo back-end z jiné aplikace? Předpokládejme, že v aplikaci A je nastaveno využití back-endu nebo front-endu z aplikace B. Pak platí:

•	při exportu aplikace A se neexportují objekty ani data z aplikace B; exportuje se však informace o tom, co se z aplikace B využívá a jméno aplikace B;

•	při importu A se automaticky nastaví využití objektů z aplikace B (pokud aplikace B neexistuje, aplikace A nebude kompletní  nebude fungovat);

•	při zrušení nebo přejmenování aplikace A nebudou objekty z aplikace B nijak dotčeny;

•	při zrušení nebo přejmenování aplikace B zmizí její objekty z aplikace A a aplikace A přestane fungovat;

•	v aplikaci A lze modifikovat objekty z aplikace B, rušit je nebo vkládat nové. Změny se projeví v aplikaci B a ve všech aplikacích, které tyto objekty z aplikace B využívají. Tyto manipulace s cizími objekty lze omezit přístupovými právy.

Pokud v aplikaci A byl vytvořen nějaký objekt X před nastavením využití objektů stejné třídy z jiné aplikace B, pak objekt X nebude přístupný.

Jak ovládat sdílení částí aplikací?

Sdílení front-endu a back-endu se ve WinBase602 řídí pomocí záložky Závislosti v dialogovém okně otevřeném stiskem tlačítka Vlastnosti na řídicím panelu, na němž je vybraná aplikace.

Postup vytvoření nové instance back-endu aplikace (příklad 1):

•	exportujte aplikaci s příznakem Exportovat pouze back-end (příznak Exportovat včetně dat v tabulkách nastavte dle potřeby, obvykle nebude zatržen);

•	importujte vyexportovanou aplikaci a přidělte ji nové jméno - takto vytvořená aplikace bude mít na záložce Závislosti nastaveno v combu Aplikace využívá uživatelské rozhraní z aplikace jméno výchozí aplikace.

Postup vytvoření aplikace využívající back-end z jiné aplikace (příklad 2):

•	vytvořte novou aplikaci;

•	tlačítkem Vlastnosti otevřete dialogové okno a vyberte záložku Závislosti;

•	v combu nadepsaném Aplikace využívá data z aplikace vyberte jméno aplikace, která obsahuje back-end.

Role a závislé aplikace

Roli nelze sdílet mezi aplikacemi a lze ji přidělit práva pouze k objektům ze stejné aplikace. Proto v aplikaci A, která využívá front-end nebo back-end objekty z jiné aplikace B, nelze přidělit roli R z A právo k objektu X z B.

Pokud při práci s aplikací A uživatel potřebuje využívat kromě objektů z A také objekty z jiné aplikace B, je nutno jej obsadit současně do role RA z A, který má práva k objektům z A, a do role RB, která má práva k objektům z B.

Pokud v aplikaci A, která využívá front-end z jiné aplikace B, vytvoříte nový objekt patřící do front-endu, tento objekt se sice objeví v B a bude patřit do B, ale standardním rolím (v žádné aplikaci) se nepřidělí žádná práva k tomuto objektu. Totéž platí pro sdílení back-endu.


Šifrované objekty

Většina komponent databázové aplikace se za normálních okolností ukládá do databáze v textovém tvaru a je tudíž čitelná pro každého uživatele, který má dostatečná práva. To platí i o dohotovených aplikacích distribuovaných klientům. WinBase602 nabízí možnost uložení komponent v šifrovaném tvaru, aby se zamezilo riziku zneužití zdrojových textů aplikace.

Autor, který chce šířit aplikaci v šifrovaném stavu, postupuje takto:

•	pro komponenty, které chce šifrovat, zatrhne ve spodní části řídicího panelu Utajit objekt (přímo může označit skupinu objektů a zatržení provést pro celou skupinu najednou);

•	při exportu aplikace zatrhne čtverec Exportovat zašifrovaně.

Po importu zašifrované aplikace:

•	databázový klient dokáže šifrované komponenty aplikace dešifrovat a pracuje s nimi zcela stejně, jako kdyby šifrované nebyly;

•	na šifrované komponenty nelze otevřít návrhář ani textový editor, nelze je exportovat ani duplikovat;

•	na šifrované komponenty nelze vyvolat návrháře ani z programu pomocí funkcí jako Edit_view apod.;

•	při přímém čtení komponent z databáze se jejich obsah jeví jako nesmyslná binární data;

•	aplikaci nelze exportovat, přepínač Utajit objekt již nemá žádný význam;

•	nové komponenty, které případně vznikají při provozu aplikace, zašifrované nejsou.

Pro šifrování je použit kryptograficky odolný generátor pseudonáhodných čísel. Každý objekt je šifrován pomocí jiného klíče, proto případná znalost zdrojového tvaru některých zašifrovaných objektů nenapomůže k dešifrování ostatních. Pokud se na straně databázového klienta využívá cache, objekty jsou v ní uloženy v zašifrovaném stavu. Šifrovat nelze obrázky, role, relace ani ODBC spojení.

Viz také:	Řídicí panel
	Export aplikace - popis dialogu
	Import aplikace
	Export pouze vybraných komponent aplikace


DIALOG Import stejné aplikace


V databázi již existuje aplikace tohoto jména nebo tohoto ID. Po stisku tohoto tlačítka budete vyzváni k zadání nového jména aplikace, nové ID se doplní automaticky. Změna ID nesmí proběhnout, pokud je aplikace sdílena (ve smyslu replikací). Import vytvoří novou aplikaci.


V databázi již existuje aplikace tohoto jména nebo tohoto ID. Po stisku tohoto tlačítka bude import pokračovat tak, že definice objektů v APL souboru přepíší stávající definice v databázi. Této varianty se využívá při nahrazování starších verzí aplikací. Pokud APL soubor obsahuje odkazy i na tabulky (i bez dat), původní data se po importu ztratí.


V databázi již existuje aplikace tohoto jména nebo tohoto ID. Po stisku tohoto tlačítka bude import ukončen.


DIALOG Přepsání souboru při exportu aplikace


V určeném adresáři již existuje soubor stejného jména. Při stisku tlačítka bude soubor přepsán a export pokračuje.


V určeném adresáři již existuje soubor stejného jména. Při stisku tlačítka soubor nebude přepsán a export bude ukončen.


V určeném adresáři již existuje soubor stejného jména. Při stisku tlačítka bude soubor přepsán a bez dalšího dotazování přepíše i ostatní případné shodné soubory.


DIALOG Přidání jazyka


Zadejte název jednoho jazyka, do kterého se bude aplikace překládat. Název může obsahovat i diakritiku - příklad: cestina nebo čeština. Aby mělo použití překladové tabulky řetězců smysl, musí tabulka obsahovat alespoň dva jazyky.


Zadejte, jak dlouhé budou moci být řetězce v tomto jazyku. Velikost není omezena. Použijete li hodnotu < 255, urychlíte tím jejich načítání.


DIALOG VLASTNOSTI APLIKACE


Používá-li aplikace předávání editačních pešků, je nutno určit jeden server jako správce pešků. Tento server musí být nastaven stejně na všech serverech sdílejících tuto aplikaci, jinak se nepodaří navázat sdílení. Správce pešků stačí nastavit na jedné ze stran, které budou navazovat sdílení, na druhou stranu se přenese automaticky.


Pokud se v některých tabulkách aplikace provádí detekce replikačních konfliktů, je třeba nastavit pro každou dvojici komunikujících serverů, který z nich bude hrát roli otcovského serveru.


Pokud aplikace mají sdílet stejné uživatelské rozhraní (front-end), zde se zadává příslušná závislost. Z nabídky vyberte aplikaci, jejíž front-end bude aktuální aplikace (tj. kopie datové základny (back-endu) jiné aplikace) využívat. Po importu back-endové části je závislost nastavena automaticky.


Pokud aplikace mají sdílet stejnou datovou základnu (back-end), zde se nastavuje příslušná závislost. Z nabídky vyberte aplikaci, pro jejíž back-end vyvíjíte uživatelské rozhraní.


DIALOG Sekvence


Zadejte jméno sekvence (max. 31 znaků)


Zadejte počáteční hodnotu sekvence (celé číslo, kladné i záporné)


Zadejte krok sekvence (celé číslo, kladné i záporné, různé od nuly)


Zatrhněte, pokud má být sekvence omezena maximální hodnotou. Není-li zatrženo, maximální hodnota je implicitně nastavena na největší zobrazitelné kladné celé číslo resp. číslo -1, je-li krok záporný.


Zadejte maximální hodnotu sekvence (celé číslo, větší než počáteční hodnota)


Zatrhněte, pokud má být sekvence omezena minimální hodnotou. Není-li zatrženo, minimální hodnota je implicitně nastavena na nejmenší zobrazitelné záporné celé číslo, resp. na číslo 1, je-li krok kladný.


Zadejte minimální hodnotu sekvence (celé číslo, menší než počáteční hodnota)


Zatrhněte, pokud má sekvence po dosažení maxima (či minima v případě záporného kroku) začít znovu generovat čísla od nastavené nebo implicitní minimální (resp. maximální pro záporný krok) hodnoty; nevhodné pro generování unikátního klíče


Zatrhněte, pokud má být využita vyrovnávací paměť sekvence. Její použití urychlí generování dalších hodnot -  při první potřebě alokovat hodnotu se naplní celá cache a generování dalších hodnot probíhá v cache.


Zadejte velikost cache (kolik čísel v ní může být uloženo)


Tlačítkem můžete nastavit sekvenci do výchozího stavu. Změny provedené v dialogu těsně před stiskem tlačítka se uplatní (např. změna startovní hodnoty). Zavřete-li dialog tlačítkem OK, změny se uplatní okamžitě, zavřete-li ho tlačítkem Storno, nejprve se doberou hodnoty uložené v cache (je-li zapnutá) a poté teprve se začne podle nového nastavení.


DIALOG Rychlost sítové komunikace


Objektové programování a práce s formuláři - úvod
Objektové programování a práce s formuláři

Formuláře (resp. jejich složky) lze ovládat pomocí jejich metod a vlastností. Vlastnost je hodnota sdružená s formulářem (se složkou). Hodnotu vlastnosti lze přečíst a do vlastnosti lze také zapsat hodnotu novou. Metoda je podprogram sdružený s formulářem (se složkou). Může mít parametry a může vracet hodnotu.

Vlastnosti a metody formuláře se označují tak, že za jménem formuláře nebo identifikátorem proměnné typu formuláře se uvede tečka a jméno vlastnosti či metody.

Vlastnosti a metody složky formuláře se označují tak, že za jménem formuláře nebo identifikátorem proměnné typu formuláře se uvede tečka a název složky a poté jméno vlastnosti či metody.

Vlastnosti a metody formulářů a složek se z větší části funkčně překrývají s funkcemi programovacího jazyka.

Příklad :

procedure OtevritInfo;

{*************************************}

var

  cc : cursor;

  ss : string[255];

  lidiform : form X_superlidi;   //deklarace proměnné typu formulář

begin

 ss := "SELECT * FROM Lidi WHERE cislo="+Int2str(cisloCtenare);

 if not Open_sql_cursor(cc,ss) then begin

  lidiform.CursNum := cc;        // nastavení zdroje dat (vlastnost)

  lidiform.Editable := false;

  if not lidiform.Open(NIL)      // otevření (metoda)

    then Info_box("Chyba","Otevření");

  end;

end;

Pokračování:	Vlastnosti a metody formulářů
	Vlastnosti a metody složek formulářů


Vlastnosti a metody formulářů - objektové programování
Vlastnosti a metody formulářů

Na formulář, s nímž chceme manipulovat, se můžeme odvolávat třemi cestami:

•	pomocí jména formuláře, tedy pomocí jména, pod nimž je formulář vidět na řídicím panelu aplikace,

•	pomocí proměnné typu formulář deklarované v programu,

•	pomocí klíčového slova thisform, kterým označujeme ten formulář, v němž se odkaz nachází.

První cesta, tedy odvolávání se na formulář pomocí jména formuláře, je jednodušší, protože nevyžaduje existenci programu, v němž by byla deklarována proměnná typu formulář. Dovoluje však ovládat pouze formuláře otevřené na obrazovce, neumožňuje tedy například nastavovat vlastnosti formuláře před jeho otevřením. Pokud na obrazovce otevřete více instancí stejného formuláře, neumí je rozlišit. Pokusíte-li touto cestou se manipulovat s formulářem, který není otevřen, pak se automaticky otevře.

Druhá cesta vyžaduje deklarování proměnné typu formulář, umožňuje však ovládat formulář i době, kdy není otevřen na obrazovce. Dovoluje tedy například upravit polohu a rozměry formuláře před jeho otevřením. Nastavené vlastnosti formuláře se zachovávají i když je jeho okno zavíráno a otevíráno.

Třetí cesta slouží pouze pro ten případ, kdy jedna složka formuláře odkazuje na složku jinou nebo na formulář jako celek.

Příklad nastavení vlastnosti WIDTH (šířka):

Nechť v aplikaci je formulář BASFORM. Po jeho otevření na obrazovce lze změnit jeho šířku na 400 pixelů příkazem

BASFORM.WIDTH := 400;

Není-li formulář BASFORM při provedení tohoto příkazu otevřen, automaticky se otevře a pak se změní jeho šířka.

Nechť v projektu je deklarována globální proměnná BASFORMVAR takto:

VAR BASFORMVAR : FORM BASFORM;

Šířku tohoto formuláře lze nastavit na 400 pixelů příkazem

BASFORMVAR.WIDTH := 400;

ať je okno s formulářem zrovna otevřené či nikoli. Pokud okno nebylo při provedení tohoto příkazu otevřené, pak při nejbližším otevření bude mít nastavenou šířku 400 pixelů.

Je-li ve formuláři tlačítko, jehož funkcí je nastavit šířku tohoto formuláře na 400 pixelů, pak akci sdruženou s tímto tlačítkem popíšeme jako:

THISFORM.WIDTH:=400;

Příklad:

procedure OtevritInfo;

{*************************************}

var

  cc : cursor;

  ss : string[255];

  lidiform : form X_superlidi;   //deklarace proměnné typu formulář

begin

 ss := "SELECT * FROM Lidi WHERE cislo="+Int2str(cisloCtenare);

 if not Open_sql_cursor(cc,ss) then begin

  lidiform.CursNum := cc;        // nastavení zdroje dat (vlastnost)

  lidiform.Editable := false;

  if not lidiform.Open(NIL)      // otevření (metoda)

    then Info_box("Chyba","Otevření");

  end;

end;

Pokračování:	Vlastnosti formuláře
	Metody formuláře


Vlastnosti formuláře - přehled

Seznam vlastností formuláře:

X - souřadnice levého okraje okna

Y - souřadnice horního okraje okna

Width - šířka okna

Heigth - výška okna formuláře

Caption - nadpis okna

Visible - viditelnost okna formuláře

CurExtRec - externí číslo vybraného záznamu

CurPos - pořadové číslo vybraného záznamu

CurItem - číslo vybrané složky

CursNum - číslo zdroje dat

Editable - příznak, že je povolena editace dat

Movable - příznak, že se může přecházet mezi záznamy

Insertable - příznak, že se smějí vkládat záznamy

Deletable - příznak, že se smějí rušit záznamy

BackColor - pozadí formuláře

TextColor - text ve složkách standardního formuláře

Pokračování:	Objektové programování a práce s formuláři
	Vlastnosti a metody formulářů
	Metody formulářů


Vlastnosti formuláře X, Y, Width, Heigth
Vlastnosti formuláře X, Y, Width a Heigth

Vlastnosti formulářů - přehled

Formát:

form.X

form.Y

form.Width

form.Heigth

Typ

Integer

Popis:

Tyto vlastnosti udávají souřadnice levého horního rohu okna formuláře, jeho šířku a výšku. Pro okna typu MDI jsou souřadnice vztaženy k levému hornímu rohu klientské oblasti jejich rodičovského okna, pro okna typu POPUP k levého hornímu rohu okna vlastníka.

Obdoba v jazyce:

Není, lze použít externí funkci Win API.


Vlastnost formuláře Caption

Vlastnosti formulářů - přehled

Formát:

form.Caption

Typ:

String

Popis:

Nadpis okna formuláře. Tuto vlastnost nelze nastavovat v době, když není otevřeno okno pohledu.

Obdoba v jazyce:

Není, pro nastavení lze použít externí funkci Win API SetWindowText


Vlastnost formuláře Visible

Vlastnosti formulářů - přehled

Formát:

form.Visible

Typ:

Boolean

Popis:

Viditelnost okna pohledu. Tuto vlastnost nelze nastavovat v době, když není otevřeno okno pohledu.

Obdoba v jazyce:

Není, lze použít externí funkci Win API.

Příklad:

Akce tlačítka, které skrývá a zobrazuje subformulář:

THISFORM.`5tab subpohled`.VISIBLE := NOT THISFORM.`5tab subpohled`.VISIBLE


Vlastnost formuláře CurPos

Vlastnosti formulářů - přehled

Formát:

form.CurPos

Typ:

trecnum (Integer)

Popis:

Pořadové neboli interní číslo vybraného záznamu ve formuláři. Záznamy jsou číslovány od nuly. Fiktivní záznam má konkrétní kladnou hodnotu. Externí číslo záznamu lze získat vlastností CurExtRec.

Odpovídá dříve používanému symbolu @@.

Posun po záznamech provádějí metody FirstRec, LastRec, NextRec, PrevRec, NextPage, PrevPage - viz přechody po záznamech.

Obdoba v jazyce:

Číslo aktuálního záznamu lze získat funkcí Get_view_pos.

Nastavit se ve formuláři na záznam číslo (interní) lze funkcí Set_int_pos.


Vlastnost formuláře CurExtRec

Vlastnosti formulářů - přehled

Formát:

form.CurExtRec

Typ:

trecnum (Integer)

Popis:

Externí číslo vybraného záznamu ve formuláři. Záznamy jsou číslovány od nuly. Pro fiktivní záznam má hodnotu -1. Externí číslo záznamu ve formuláři je po dobu otevření formuláře neměnné (i v případě, že se záznamy mažou a přidávají) - tím se odlišuje od čísla interního (vlastnost CurPos).

Odpovídá dříve používanému symbolu @.

Posun po záznamech provádějí metody FirstRec, LastRec, NextRec, PrevRec, NextPage, PrevPage - viz přechody po záznamech.

Obdoba v jazyce:

Číslo záznamu lze získat funkcí Get_view_pos.

Nastavit se ve formuláři na záznam číslo (externí) lze funkcí Set_ext_pos.


Vlastnost formuláře CurItem

Vlastnosti formulářů - přehled

Formát:

form.CurItem

Typ:

Integer

Popis:

Číslo vybrané složky ve formuláři. Je-li ve standardním formuláři vybrán celý řádek, vlastnost má hodnotu 0, tuto hodnotu však do vlastnosti nelze zapsat.

Obdoba v jazyce:

Číslo vybrané složky formuláře lze získat funkcí Current_item .

Vybrat ve formuláři složku daného čísla lze pomocí funkce Send_message.


Vlastnost formuláře CursNum

Vlastnosti formulářů - přehled

Formát:

form.CursNum

Typ:

tcursnum

Popis:

Číslo tabulky nebo číslo otevřeného kurzoru, který slouží jako zdroj dat pro formulář. Pro formulář do proměnných projektu má hodnotu NOCURSNUM.

Obdoba v jazyce:

Číslo zdroje dat formuláře lze funkcí Get_fcursor.

Nastavit jiný zdroj dat lze funkcí Set_fcursor.

Příklad:

formuláři přiřadit nový zdroj a otevřít ho:

procedure OtevritInfo;

{*************************************}

var

  cc : cursor;

  ss : string[255];

  lidiform : form X_superlidi;  // deklarace prom. typu formulář

begin

  ss := "SELECT * FROM Lidi WHERE cislo="+Int2str(cisloCtenare);

  if not Open_sql_cursor(cc,ss) then begin

    lidiform.Cursnum := cc;   // vnutit nový zdroj dat (proměnný kurzor)

    lidiform.Open(NIL);       // otevřít formulář

  end;

end;


Vlastnost formuláře Editable

Vlastnosti formulářů - přehled

Formát:

form.Editable

Typ:

Boolean

Popis:

Příznak, že ve formuláři je povolena editace dat.

Obdoba v jazyce:

Nastavit tuto vlastnost lze pomocí parametru NO_EDIT ve funkci Open_view.


Vlastnost formuláře Movable

Vlastnosti formulářů - přehled

Formát:

form.Movable

Typ:

Boolean

Popis:

Příznak, že uživatel smí ve formuláři přecházet mezi záznamy.

Obdoba v jazyce:

Nastavit tuto vlastnost lze pomocí parametru NO_MOVE ve funkci Open_view.


Vlastnost formuláře Insertable

Vlastnosti formulářů - přehled

Formát:

form.Insertable

Typ:

Boolean

Popis:

Příznak, že uživatel smí ve formuláři vkládat nové záznamy.

Obdoba v jazyce:

Nastavit tuto vlastnost lze pomocí parametru NO_INSERT ve funkci Open_view.


Vlastnost formuláře Deletable

Vlastnosti formulářů - přehled

Formát:

form.Deletable

Typ:

Boolean

Popis:

Příznak, že uživatel smí ve formuláři rušit záznamy. Hodnota 0 znemožňuje rušení záznamů, hodnota 1 povoluje rušení záznamů bez potvrzování, hodnota 2 povoluje rušení záznamů s potvrzováním.

Obdoba v jazyce:

Nastavit tuto vlastnost lze pomocí parametru NO_DELETE ve funkci Open_view.


Vlastnost formuláře BackColor

Vlastnosti formulářů - přehled

Formát:

form.BackColor

Typ:

Integer

Popis:

Pomocí vlastnosti BackColor lze nastavit barvu pozadí formuláře (obecného i standardního) - viz Barvy ve formuláři.

Obdoba v jazyce:

Není


Vlastnost formuláře TextColor

Vlastnosti formulářů - přehled

Formát:

form.TextColor

Typ:

Integer

Popis:

Pomocí vlastnosti TextColor lze nastavit barvu textu ve složkách standardního formuláře - viz Barvy ve formuláři.

Obdoba v jazyce:

Není


Metody formuláře - přehled

Seznam metod formuláře:

Otevírání a zavírání, vzhled

IsOpen  - vrací, je-li okno formuláře otevřeno

Open  - otevře okno formuláře

Close  - zavře okno formuláře

Pick_window  - vysune do popředí okno formuláře

Handle - vrátí handle (id) okna formuláře

Set_source - nastaví nový zdroj

Attach_toolbar - nastaví toolbar podle jiného formuláře

Set_font - nastaví font ve standardním formuláři

Přechody

FirstRec, LastRec, NextRec, PrevRec, NextPage, PrevPage – přechody po záznamech  formuláře

FirstItem, LastItem, NextTab, PrevTab, UpItem, DownItem – přechody po složkách  v záznamu

QBE

OpenQBE  - otevře okno pro kladení QBE dotazu

OpenSort - otevře okno pro uspořádání záznamů

AcceptQuery - ukončuje zadávání dotazu

CancelQuery - ruší QBE omezení

QBEState - vrací údaj, probíhá-li kladení dotazu nebo uspořádání

Editace

Commit_view - zapíše změny ve formuláři

Roll_back_view - odvolá změny ve formuláři

Reset_view - překreslí formulář

DelRec - maže aktuální záznam

DelAsk - maže všechny záznamy ve formuláři po odsouhlasení

Insert - připraví formulář pro vložení záznamu

Ostatní

Print - otevře okno pro tisk

Help - otevře okno s nápovědou

Pokračování:	Objektové programování a práce s formuláři
	Vlastnosti a metody formulářů
	Vlastnosti formulářů


Metoda formuláře Is_open

Metody formulářů - přehled

Formát:

form.Is_open : Boolean;

Popis:

Tato metoda vrací údaj o tom, zda na obrazovce je otevřeno okno formuláře. Je to jediná metoda, která při použití na neotevřený formulář označený jménem jej neotevře.

Hodnota funkce:

Je-li formulář otevřen, hodnota funkce je TRUE.

Obdoba v jazyce:

V jazyce se otevření sleduje obvykle pomocí hodnoty globální proměnné, do níž program při otevření formuláře funkcí Open_view zapíše hodnotu handle okna a při uzavření nulu. Alternativním způsobem je použití funkce View_state.


Metoda formuláře Open

Metody formulářů - přehled

Formát:

form.Open (var id : window_id) : Boolean;

Parametry:

id	handle okna formuláře – výstupní parametr

Popis:

Metoda otevře na obrazovce okno formuláře a do proměnné předané jako parametr zapíše handle tohoto okna. Poté, co uživatel nebo program zavře okno, do stejné proměnné se zapíše nula. Pokud handle nepotřebujete, předejte jako parametr NIL.

Hodnota funkce:

Metoda vrací TRUE, pokud se okno podařilo otevřít. Je-li při volání metody okno již otevřeno, metoda nedělá nic a vrací FALSE.

Obdoba v jazyce:

Otevření formuláře se provede funkcí Open_view, resp. funkcí View_open.


Metoda formuláře Close

Metody formulářů - přehled

Formát:

form.Close;

Popis:

Metoda zavře okno formuláře. Pokud okno není otevřeno, nedělá nic.

Obdoba v jazyce:

Zavření formuláře se provede funkcí Close_view, resp. funkcí View_close.


Metoda formuláře Pick_window

Metody formulářů - přehled

Formát:

form.Pick_window;

Popis

Metoda přesune do popředí a aktivuje okno formuláře. Pokud okno formuláře není otevřeno, metoda nedělá nic.

Obdoba v jazyce:

Lze použít obdobná funkce Pick_window.


Metoda formuláře Handle

Metody formulářů - přehled

Formát:

form.Handle : window_id;

Popis

Metoda vrací handle okna formuláře. Pokud okno formuláře není otevřeno, metoda nedělá nic.

Handle formuláře může být potřeba pro spolupracující funkce jazyka, kde se formulář identifikuje právě tímto číslem.

Obdoba v jazyce:

Při otevření formuláře pomocí funkce Open_view se handle okna zapíše do definované globální proměnné projektu.


Metoda formuláře Set_source

Metody formulářů - přehled

Formát:

form.Set_source(var source : string);

Parametry:

Source	textová definice formuláře

Popis

Metoda umožní formulářové proměnné deklarované v programu bez popisu nastavit svojí definici - tímto způsobem lze pracovat s formuláři, jejichž definice nejsou nikde uložené.

Syntaxi definice formuláře získáte nejlépe tak, že si formulář předem "nanečisto" vytvoříte ve vývojovém prostředí a jeho textovou definici použijete.

Příklad:

var

  novyform : form;

  source : string[2000];

begin

  source :=

           "a DBDIALOG 66 52 291 319 "

           "STYLE 17563712 "

           "HDFTSTYLE 7483392 "

           "_STYLE3 4  "

           "BACKGROUND *12632256 "

           "FONT 8 238 34 ""MS Sans Serif""  "

           "BEGIN "

           " LTEXT 3,40,36 146 141 65569 0 "

           "  BPICTURE `Modré kuličky` "

           "END";

  novyform.Set_source(source);

  novyform.Open(nil);

...

Obdoba v jazyce:

Není


Metoda formuláře Attach_toolbar

Metody formulářů - přehled

Formát:

form.Attach_toolbar(var formname : string);

Parametry:

formname	jméno formuláře, jehož toolbar se má použít

Popis

Metoda umožní k formuláři připojit toolbar jiného existujícího (i neotevřeného) formuláře. Slouží k tomu, aby více formulářů sdílelo toolbar vytvořený a upravený na jediném místě.

Obdoba v jazyce:

Není


Metoda formuláře Set_font

Metody formulářů - přehled

Formát:

form.Set_font(var facename : string; height : integer; charset : integer; bold, italic, strikeout, underline : Boolean);

Parametry:

facename	název písma
height	velikost písma
charset	zvolená znaková sada (238 pro Střední Evropu)
bold	příznak, má-li být písmo tučné
italic	příznak, má-li být použita kurzíva (italica)
strikeout	příznak, má-li být písmo přeškrtnuté
underline	příznak, má-li být písmo podtržené

Popis:

Metoda umožní změnit font ve složkách otevřeného standardního formuláře.

Příklad:

Změnit font v celém standardním subformuláři

THISFORM.SUBFORM1.SET_FONT("Arial",9,238,true,true,false,false)

Obdoba v jazyce:

Není


Metody formuláře pro posun po záznamech

Metody formulářů - přehled

Formát:

form.FirstRec;

form.LastRec;

form.NextRec;

form.PrevRec;

form.NextPage;

form.PrevPage;

Popis:

Metody způsobí přechod na první, poslední, následující, předchozí záznam nebo na následující či předchozí stránku ve formuláři. Pokud okno formuláře není otevřeno, metody nedělají nic.

Přechod na konkrétní záznam lze provést nastavením vlastnosti CurPos nebo CurExtRec.

Obdoba v jazyce:

Přesuny po záznamech formuláře lze zajistit pomocí obecné funkce Send_message.


Metody formuláře pro posun po složkách

Metody formulářů - přehled

Formát:

form.FirstItem;

form.LastItem;

form.NextTab;

form.PrevTab;

form.UpItem;

form.DownItem;

Popis:

Metody způsobí přechod na první, poslední, následující, předchozí složku nebo na výše či níže umístěnou složku ve formuláři. Pokud okno formuláře není otevřeno, metody nedělají nic.

Přechod na konkrétní složku lze provést nastavením vlastnosti CurItem.

Obdoba v jazyce:

Přesuny po složkách v aktuálním záznam formuláře lze zajistit pomocí obecné funkce Send_message.


Metoda formuláře OpenQBE

Metody formulářů - přehled

Formát:

form.OpenQBE;

Popis:

Metoda otevře okno pro kladení dotazu ve formuláři. Pokud okno formuláře není otevřeno, metoda nedělá nic.

Obdoba v jazyce:

Lze zajistit pomocí obecné funkce Send_message.


Metoda formuláře OpenSort

Metody formulářů - přehled

Formát:

form.OpenSort;

Popis:

Metoda otevře okno pro zadávání uspořádání záznamů ve formuláři. Pokud okno formuláře není otevřeno, metoda nedělá nic.

Obdoba v jazyce:

Lze zajistit pomocí obecné funkce Send_message.


Metoda formuláře AcceptQuery

Metody formulářů - přehled

Formát:

form.AcceptQuery;

Popis:

Metoda ukončuje zadávání dotazu nebo uspořádání ve zvláštním okně.

Obdoba v jazyce:

Lze zajistit pomocí obecné funkce Send_message.


Metoda formuláře CancelQuery

Metody formulářů - přehled

Formát:

form.CancelQuery;

Popis:

Metoda ruší omezení zadaná formou dotazu nebo upořádání záznamu a naplní formulář původním obsahem. Pokud okno formuláře není otevřeno nebo není zadán dotaz či uspořádání, metoda nedělá nic.

Obdoba v jazyce:

Lze zajistit pomocí obecné funkce Send_message.


Metoda formuláře QBE_State

Metody formulářů - přehled

Formát:

form.QBE_State : Integer;

Popis:

Metoda vrací údaj o tom, zda ve formuláři probíhá zadávání dotazu nebo uspořádání. Vrací 0 pro normální stav formuláře, 1 pro zadávání dotazu, 2 pro zadávání uspořádání, NONEINTEGER pokud okno formuláře není otevřeno.

Obdoba v jazyce:

Lze použít obdobnou funkci QBE_state.


Metoda formuláře Commit_view

Metody formulářů - přehled

Formát:

form.Commit_view(can_ask : Boolean; report_error : Boolean) : Boolean;

Parametry:

can_ask	příznak, má-li se žádat potvrzení uložení změn
report_error	příznak, má-li se hlásit chyba při ukládání

Popis:

Metoda zapíše do databáze změny a nově zadané hodnoty z formuláře. Vrací FALSE při chybě. Parametr can_ask se uplatní ve formulářích, které vyžadují potvrzení zápisu do databáze, je-li FALSE, pak se o potvrzení nežádá. Parametr report_error určuje, zda se chyba při zápisu do databáze má ohlásit uživateli.

Často se používá společně s metodou Close jako reakce na stisk tlačítka OK ve formuláři pro vstup dat.

Pokud okno formuláře není otevřeno, metoda nedělá nic.

Obdoba v jazyce:

Lze použít obdobnou funkci Commit_view.

Příklad:

Akce na tlačítku OK:

THISFORM.COMMIT_VIEW(False,True)

THISFORM.CLOSE


Metoda formuláře Roll_back_view

Metody formulářů - přehled

Formát:

form.Roll_back_view;

Popis:

Metoda odvolá změny databázových údajů provedené v pohledu a naplní pohled hodnotami z databáze. Pokud okno formuláře není otevřeno, metoda nedělá nic. Nejčastěji se používá společně s metodou Close jako reakce na stisk tlačítka Storno ve formuláři se záznamovou synchronizací.

Obdoba v jazyce:

Lze použít obdobnou funkci Roll_back_view.

Příklad:

Akce na tlačítku Storno:

THISFORM.ROLL_BACK_VIEW

THISFORM.CLOSE


Metoda formuláře Reset_view

Metody formulářů - přehled

Formát:

form.Reset_view(intrec : trecnum; extent : integer);

Parametry:

intrec	číslo záznamu nebo –1
extent	rozsah akcí

Popis:

Metoda naplní záznam s pořadovým (interním) číselm intrec ve formuláři aktualizovanými hodnotami v závislosti na parametru extent. Pokud intrec je NORECNUM, aktualizují se všechny záznamy ve formuláři. Pokud okno formuláře není otevřeno, metoda nedělá nic.

Podrobnosti o použití a významu parametru extent naleznete u popisu funkce Reset_view.

Obdoba v jazyce:

Lze použít obdobnou funkci Reset_view.


Metoda formuláře DelRec

Metody formulářů - přehled

Formát:

form.DelRec;

Popis:

Metoda zruší aktuální záznam ve formuláři. Pokud okno formuláře není otevřeno, metoda nedělá nic.

Metoda provádí totéž, co stisk tlačítka na liště pro zrušení záznamu (nebo ekvivalentní klávesová kombinace)

Obdoba v jazyce:

Stejné chování lze zajistit pomocí obecné funkce Send_message.

Jinak pro mazání zázamů lze použít funkci Delete.


Metoda formuláře DelAsk

Metody formulářů - přehled

Formát:

form.DelAsk;

Popis:

Metoda zruší všechny záznamy zobrazitelné ve formuláři poté, co uživatel zrušení potvrdí. Pokud okno formuláře není otevřeno, metoda nedělá nic.

Metoda provádí totéž, co stisk tlačítka na liště pro zrušení všech záznamů (nebo ekvivalentní klávesová kombinace Shitf+F7)

Obdoba v jazyce:

Stejné chování lze zajistit pomocí obecné funkce Send_message.


Metoda formuláře Insert

Metody formulářů - přehled

Formát:

form.Insert;

Popis:

Metoda způsobí přechod na fiktivní záznam ve formuláři. Pokud ve formuláři fiktivní záznam nebyl, vloží jej.

Metoda provádí totéž, co stisk klávesy Insert ve formuláři

Obdoba v jazyce:

Stejné chování lze zajistit pomocí obecné funkce Send_message.

Jinak pro vkládání zázamů lze použít funkce Insert nebo Append.


Metoda formuláře Print

Metody formulářů - přehled

Formát:

form.Print;

Popis:

Metoda otevře dialogové okno pro tisk obsahu formuláře. Pokud okno formuláře není otevřeno, metoda nedělá nic.

Obdoba v jazyce:

Stejné chování lze zajistit pomocí obecné funkce Send_message.


Metoda formuláře Help

Metody formulářů - přehled

Formát:

form.Help;

Popis:

Metoda otevře nápovědu pro aktuální složku formuláře resp. pro formulář, není-li nápověda pro složku definována. Pokud okno formuláře není otevřeno, metoda nedělá nic.

Obdoba v jazyce:

Lze použít funkci Show_help.


Složky pohledů (formulářů a sestav) - přehled
Složky formulářů a sestav - přehled

Formulář nebo sestava se skládá ze složek. Složky jsou různých druhů. Podrobnosti o jednotlivých typech složek zobrazíte, kliknete-li na obrázek složky, převzatý z návrháře formulářů.

	Složky pro vstup a editaci dat:		Složky pomocné
	Editační pole jednořádkové (Edit Box)		Hodnotová složka
	Needitovatelné (překládané) combo (Combo Box)		Nápis
	Editovatelné combo (Combo Box)		Tlačítko
	Označovací (zaškrtávací) čtverec (Check Box)		Subpohled
	Přepínač (Radio Button)		Rám a čára
	Seznam (List Box)		Posuvník
	Neformátovaný text		Krokovač
	Formátovaný text (RTF)		Indikátor postupu
	Editační pole víceřádkové (Edit Box)		Záložky
	Kalendář		ActiveX
	Datum a čas (DTP)		Čárový kód
	Obrázek
	Podpis
	OLE


Editační pole
Editační pole jednořádkové (Edit Box)

Vlastnosti:	Metody:

Využití pro datové typy:  všechny číselné formáty, všechny řetězcové formáty, datum, čas, timestamp, méně často pro boolean;

Oblast použití: formuláře

K čemu se používá:

- k přístupu k hodnotám sloupců zdroje dat nebo proměnných ve formulářích, které slouží k zadávání nebo úpravě;

Poznámky:

- vlastnost Rám se uplatní pouze při případném tisku

- nelze nastavit způsob zobrazení

- způsob zarovnání (vlastnost Umístění - vlevo, vpravo, uprostřed) lze nastavit od Windows 98

- maximální počet znaků zapsaných do složky je 254

- při použití fontu TrueType bude mezi okrajem složky a prvním znakem znatelná mezera;

Tipy a triky:

- krokovač - v mnoha případech (při zadávání čísla, data, času apod.) lze s výhodou využít služeb pomocné složky krokovač. Tato složka se sváže s konkrétním editačním polem a pomocí šipek nahoru a dolu umožňuje zvyšovat či snižovat zadávanou hodnotu;

- pro zadávání data do editační složky lze využít jako Akci na pravé tlačítko metodu Calendar, která otevře jako popup složku Kalendář a umožní vybrat datum interaktivně; tato metoda se nesmí použít pro edit vedoucí do timestampu!

- vstupní maska - při zadávání údaje, který je pevné struktury (např. PSČ nebo SPZ auta), je možné pro edit předdefinovat vstupní masku, která nedovolí vložit znaky jiného typu na jiná místa;

- kontrola zadané hodnoty (integritní omezení) - při zadávání hodnot, u nichž musí být splněna určitá podmínka (např. plat je větší než 0), lze zadat, aby při porušení této podmínky byla zavolána určitá akce a nebylo možno hodnotu zapsat;

- zadávání hesla - při zadávání údajů, které nemají být na obrazovce viditelné (např. heslo), je možné zvolit speciální styl editačního pole zapnutý vlastností Editovat jako heslo; na obrazovce se objevují pouze hvězdičky;

- pomocí vlastností Převádět na malá a Převádět na velká písmena lze vynutit změnu velikosti znaků;

- pomocí vlastnosti Maximální délka lze omezit počet zadávaných znaků - implicitně je pro řetězce nastaven počet rovný délce řetězce; lze také zadat pomocí vlastnosti Po vyplnění přeskočit dále, aby po zapsání posledního povoleného znaku se fokus automaticky přesunul na následující složku;

Viz také:	Složky - přehled
	Krokovač
	Vstupní maska


Vlastnosti složky Editační pole jednořádkové:

Value

Text

BackColor

TextColor

Format

Precision


Metody složky Editační pole jednořádkové:

Refresh

SetFocus

IsNull

SetNull

Set_font

Calendar

Selection

Handle


Needitovatelné (překládané) combo
Needitovatelné (překládané) combo (Combo Box)

Vlastnosti:	Metody:

Využití pro datové typy:  Short, Integer a Char

Oblast použití: formuláře a sestavy

K čemu se používá:

- k výběru z předem známých hodnot bez možnosti editace; vybraná řetězcová hodnota se před vložením "přeloží" na celé číslo, které se uloží do tabulky;

- v opačném případě, je-li třeba (např. v sestavě) zobrazit ne číselnou hodnotu, ale srozumitelný překlad;

Poznámky:

- nabídka a její překlad může být definována dvěma způsoby: pevně (vše je uloženo v definici formuláře) nebo dynamicky (je vytvořen dotaz daného tvaru, který se vyhodnotí při otevření formuláře nebo na požádání);

- ještě větší dynamičnosti se docílí tím, že se v definici dotazu použije odkaz na globální proměnnou projektu, která může nabývat různých hodnot i za doby otevření formuláře;

Tipy a triky:

- Pro sloupec typu Char se nezadává jako Překlad znak přímo, ale kód znaku, tedy celé číslo v rozsahu 0 až 255. Do databáze se uloží znak se zadaným kódem;

- chcete-li měnit nabídku comba za doby otevření formuláře (např. podle některé zapsané hodnoty), použijte dynamický dotaz s odkazem na hodnotu proměnné a standardní akci Aktualizovat nabídku v combech nebo funkci jazyka Reset_view s parametrem RESET_COMBOS (nebo metodu ResetCombo s novým zdrojem dat pro combo).

Viz také:	Složky - přehled
	složka Editovatelné combo
	Proměnné jazyka v SQL dotazech


Vlastnosti složky Needitovatelné (překládané) combo:

Value

Text

BackColor

TextColor

SelIndex


Metody složky Needitovatelné (překládané) combo:

Refresh

SetFocus

IsNull

SetNull

Set_font

ResetCombo

Handle


Editovatelné combo
Editovatelné combo (Combo Box)

Vlastnosti:	Metody:

Využití pro datové typy: řetězcové formáty, méně často číselné formáty, datum, čas, Timestamp, Boolean;

Oblast použití: formuláře

K čemu se používá:

- stejné použití jako pro editační pole, obsahuje navíc vlastní nabídku hodnot, z nichž si uživatel může vybrat a poté doupravit;

Poznámky:

- nabídka může být definována dvěma způsoby: pevně (je uložena v definici formuláře) nebo dynamicky (je vytvořen dotaz daného tvaru, který se vyhodnotí při otevření formuláře nebo na požádání);

- obsah comba tvořený odpovědí na dotaz nemůže obsahovat prázdné hodnoty. Pokud jsou v dotazu, v combu se neobjeví;

Tipy a triky:

- platí poznámky pro editaci obsahu složky z popisu jednořádkového editačního pole;

- nabídku comba lze měnit i při otevřeném formuláři - viz needitovatelné combo

Viz také:	Složky - přehled
	složka Needitovatelné combo
	složka Editační pole


Vlastnosti složky editovatelné combo:

Value

Text

BackColor

TextColor

Format

Precision


Metody složky editovatelné combo:

Calendar

Refresh

SetFocus

IsNull

SetNull

Set_font

ResetCombo

Selection

Handle


Označovací (zaškrtávací) čtverec
Označovací (zaškrtávací) čtverec (Check Box)

Vlastnosti:	Metody:

Využití pro datové typy:  typ Boolean

Oblast použití: formuláře

K čemu se používá:

- nastavuje se s ním hodnota logické proměnné (nebo sloupce);

Poznámky:

- má tři stavy: zaškrtnuto (TRUE), nezaškrtnuto (FALSE) a hodnota NULL;

- na složku lze v návrháři umístit obrázek. Složka se pak chová jako dvoustavové tlačítko. Pokud se svázaná se sloupcem (nebo proměnnou) typu Boolean, je dole právě když má hodnotu TRUE. Pokud má zadanou referenční hodnotu, je dole právě když se hodnota sloupce (resp. proměnné) rovná referenční hodnotě.

Tipy a triky:

- přepínat mezi stavy TRUE a FALSE lze i z klávesnice pomocí mezerníku;

- nastavit hodnotu NULL lze pouze z klávesnice klávesou Delete;

Viz také:	Složky - přehled


Vlastnosti složky Označovací čtverec:

Value

Text

TextColor

Checked


Metody složky Označovací čtverec:

Refresh

SetFocus

IsNull

SetNull

Set_font

Handle


Přepínač
Přepínač (Radio Button):

Vlastnosti:	Metody:

Využití pro datové typy: ve skupině několika přepínačů z různými referenčními hodnotami pro libovolný typ, u něhož lze porovnávat hodnoty; nepoužívá se pro typ Boolean;

Oblast použití: formuláře

K čemu se používá:

- pro jeden sloupec se vytvoří několik přepínačů s různými referenčními hodnotami - zapnutím jednoho se vypnou ostatní a referenční hodnota vybraného se zapíše do databáze;

Poznámky:

- přepínač nemá třetí stav jako označovací čtverec;

- získá-li přepínač fokus, zapne se (narozdíl od označovacího čtverce);

- pomocí klávesy TAB se lze dostat pouze na první přepínač ze skupiny, na ostatní pomocí kurzorových šipek;

- na složku lze v návrháři umístit obrázek. Složka se pak chová jako dvoustavové tlačítko. Pokud se svázaná se sloupcem (nebo proměnnou) typu Boolean, je dole právě když má hodnotu TRUE. Pokud má zadanou referenční hodnotu, je dole právě když se hodnota sloupce (resp. proměnné) rovná referenční hodnotě.

Viz také:	Složky - přehled


Vlastnosti složky Přepínač:

Value

Text

TextColor

Checked


Metody složky přepínač:

Refresh

SetFocus

IsNull

SetNull

Set_font

Handle


Seznam
Seznam (List Box):

Vlastnosti:	Metody:

Využití pro datové typy: složky multiatributu libovolného typu nebo pro složky pole (Array) deklarovaného v programu;

Oblast použití: formuláře, sestavy

K čemu se používá:

- k zobrazení a editaci předem neznámého počtu složek multiatributu (zápis MULTIATR[]);

- k zobrazení obsahu pole řetězců (zápis POLE[]);

Poznámky:

- poklepáním na seznam s multiatributem se otevře speciální formulář na editaci složek multiatributu; nemá-li se otevřít (v případě zobrazení pro pole), je nutné zadat podmínku aktivity FALSE;

- v seznamu se zobrazí vždy všechny složky pole podle deklarace v programu;

Tipy a triky:

- k získání indexu vybrané složky seznamu použijte vlastnost Selindex

Viz také:	Složky - přehled


Vlastnosti složky Seznam:

BackColor

TextColor

SelIndex


Metody složky Seznam:

Refresh

SetFocus

IsNull

SetNull

Set_font

Handle


Přepínač
Text (neformátovaný)

Vlastnosti:	Metody:

Využití pro datové typy: text

Oblast použití: formuláře, sestavy

K čemu se používá:

- k zpřístupnění obsahu sloupce typu Text;

Poznámky:

- editace textu probíhá v okně textového editoru, který se otevře po poklepání na složce;

- pro editaci musí být definována standardní akce Editovat text;

- vlastnost Zachovat formát zajistí, že ve složce se objeví text v té podobě, jak byl zapsán. Pokud není zapnuto, text se rozláme podle velikosti okénka;

- má-li být složka použita v tiskové sestavě, je možné zapnout vlastnost Pružná výška v sestavě, pak ovšem pod touto složkou nesmí být v datové oblasti již žádná další složka, aby nebyla přepsána;

Viz také:	Složky - přehled
	složka Víceřádkové editační pole
	složka RTF


Vlastnosti složky Text (neformátovaný):

BackColor

TextColor

Length


Metody složky Text (neformátovaný):

Refresh

SetFocus

IsNull

SetNull

Set_font

Open

ReadFile -

WriteFile -

Handle


Formátovaný text (RTF)

Vlastnosti:	Metody:

Využití pro datové typy: text

Oblast použití: formuláře, sestavy

K čemu se používá:

- k zpřístupnění obsahu sloupce typu Text, je-li třeba používat formátovacích možností RTF (různé fonty, řezy, barvy apod.); v návrháři lze nastavit barvu pozadí, nikoli však barvu textu nebo druh písma - tyto vlastnosti se nastaví pro jednotlivé části textu během editace.

Poznámky:

- editace probíhá přímo ve složce v okně formuláře;

- text je ukládán ve formátu RTF, který obsahuje i formátovací informace, takže není přímo čitelný; nedoporučujeme kombinovat;

- text ve složce se formátuje pomocí příkazů popup-menu, které vyvoláte stiskem pravého tlačítka myši nebo kombinace kláves Shift+F10. Příkazy se zpravidla vztahují k označené části textu, a pokud není žádný text označen, pak k pozici kurzoru. Příkazy Tučně, Kurzíva a Podtržení nastavují příslušné atributy textu. Pomocí příkazu Písmo můžete otevřít standardní dialogové okno na nastavování vzhledu, velikosti, barvy a dalších atributů písma. Příkazy Zarovnat doleva, Zarovnat na střed a Zarovnat doprava určují zarovnání textu v odstavci. Příkaz Odrážka vkládá značku na začátek odstavce, příkaz Odsadit první řádku odsazuje počáteční řádky odstavců. Zatržení kteréhokoli z výše uvedených příkazů v menu indikuje, že příslušná vlastnost je aktivní v celém vybraném úseku. Příkaz Editace otevírá standardní editační submenu, příkazem Tisk lze vytisknout buď vybraný úsek textu nebo celý text;

- pro přenášení textu doporučujeme využívat standardních operací se schránkou;

- jeden sloupec editujte buď vždy textovou, editační nebo RTF složkou, ale nekombinujte tyto možnosti. Různé způsoby totiž vkládají do textu pomocné znaky (např. zalomení odstavce), a ty by v jiné složce působily rušivě.

- má-li být složka použita v tiskové sestavě, je možné zapnout vlastnost Pružná výška v sestavě, pak ovšem pod touto složkou nesmí být v datové oblasti již žádná další složka, aby nebyla přepsána;

Viz také:	Složky - přehled
	složka Text
	složka Víceřádkové editační pole


Vlastnosti složky Formátovaný text (RTF):

BackColor

Length


Metody složky Formátovaný text (RTF):

Refresh

SetFocus

IsNull

SetNull

ReadFile

WriteFile

Selection

Handle


Editační pole víceřádkové
Editační pole víceřádkové (Edit Box)

Vlastnosti:	Metody:

Využití pro datové typy: text

Oblast použití: formuláře, sestavy

K čemu se používá:

- k zpřístupnění obsahu sloupce typu Text;

Poznámky:

- editace probíhá přímo ve složce v okně formuláře;

- pokud ve víceřádkové editační složce stisknete klávesu Enter, neopustíte tuto složku, ale přejdete v ní na další řádku. Stiskem Home resp. End se dostanete na začátek resp. konec běžné řádky ve složce. Složku můžete opustit například stiskem klávesy Tab;

- jeden sloupec editujte buď vždy textovou, editační nebo RTF složkou, ale nekombinujte tyto možnosti. Textová složka totiž vkládá do textu pomocné znaky vyznačující zalomení odstavce, a ty by v editační složce působily rušivě;

- pro složku lze nastavit Umístění obsahu (vlevo, vpravo, uprostřed)

- vlastnost Zachovat formát zajistí, že ve složce se objeví text v té podobě, jak byl zapsán. Pokud není zapnuto, text se rozláme podle velikosti okénka;

- má-li být složka použita v tiskové sestavě, je možné zapnout vlastnost Pružná výška v sestavě, pak ovšem pod touto složkou nesmí být v datové oblasti již žádná další složka, aby nebyla přepsána;

Viz také:	Složky - přehled
	složka RTF
	složka Text


Vlastnosti složky Editační pole víceřádkové:

BackColor

TextColor

Length


Metody složky Editační pole víceřádkové:

Refresh

SetFocus

IsNull

SetNull

Set_font

ReadFile

WriteFile

Selection

Handle


Kalendář

Vlastnosti:	Metody:

Využití pro datové typy: datum

Oblast použití: formuláře

K čemu se používá:

- složka slouží k zobrazení a zadávání data pomocí kalendáře zobrazujícího jeden nebo více měsíců.

Poznámky:

- počet současně zobrazených měsíců je určen šířkou složky;

- pro složku kalendář lze volit font, barvu textu a pozadí, orámování, vypsání dnešního data ve spodní části kalendáře, zakroužkování dnešního data na listu kalendáře a vypsání čísel týdnů (v rámci roku);

- výběr data lze provádět myší nebo z klávesnice. Pomocí myši lze den vybrat kliknutím na datum, měsíc pomocí šipek v záhlaví složky nebo kliknutím na název měsíce, rok po kliknutí na letopočet. Rozsah ovládání z klávesnice je závislý na tom, zda je nastaveno využití příslušných kláves pro ovládání pohledu nebo složky. Pokud nastavíte, že všechny skupiny kláves řídí složku, pak šipky znamenají změnu data v rámci měsíce, klávesy Home a End skok na první nebo poslední den měsíce, klávesy Page Up a Page Down změnu data o měsíc. Je-li současně zobrazeno více měsíců, pak stisk klávesy Ctrl mění význam kláves tak, že Home a End skočí na první nebo poslední den zobrazené skupiny měsíců, Page Up a Page Down mění datum o zobrazený počet měsíců.

- protože kalendář neumí vhodně reprezentovat prázdné datum, zobrazí se místo něj datum 1.1.1900.

Složku kalendář lze vyvolat i jako popup okno pomocí metody Calendar.

Viz také:	Složky - přehled


Vlastnosti složky Kalendář:

Value

Text

BackColor

TextColor


Metody složky Kalendář:

Refresh

SetFocus

Set_font

Handle


Datum čas
Datum čas (DateTime Picker)

Vlastnosti:	Metody:

Využití pro datové typy: datum, čas, Timestamp

Oblast použití: formuláře

K čemu se používá:

- složka slouží k zobrazení a zadávání data, času nebo obojí informace pomocí speciální složky která je kombinací vlastností několika jednodušších složek: editačního pole, comba, označovacího čtverce, krokovače a kalendáře. Složka má dvě základní podoby. Pro zobrazení času je vhodnější varianta s krokovačem v pravé části, kdy pro každou označenou část času lze zvětšovat nebo zmenšovat hodnotu. Pro zobrazení data lze použít buď variantu s krokovačem nebo variantu s kalendářem, kdy se pod touto složkou objeví složka kalendář a umožní jednoduše vybrat datum.

Poznámky:

- varianta s krokovačem pro čas neumožňuje krokovat tisíciny vteřiny;

- varianty složky se nastavují podle vlastnosti Krokovač místo kalendáře?

- pro zobrazení data nebo timestampu ve variantě s kalendářem lze využít zvláštního způsobu zobrazení hodnoty NULL; použijete-li vlastnost Umí zobrazovat NULL, objeví se v levé části složky označovací čtverec, pomocí něhož lze hodnotu NULL zadat;

Viz také:	Složky - přehled


Vlastnosti složky DTP:

Value

Text

Format


Metody složky DTP:

Refresh

SetFocus

IsNull

SetNull

Set_font

Handle


Obrázek

Vlastnosti:	Metody:

Využití pro datové typy: obrázek

Oblast použití: formuláře, sestavy

K čemu se používá:

- složka slouží k vkládání, zobrazení a odstranění obsahu databázového sloupce Obrázek;

- složka může také zobrazovat neměnný pevný obrázek, uložený v databázi;

Poznámky:

- s obrázkem (obsahem sloupce tabulky) se pracuje pomocí menu, které se otevře, pokud v obecném formuláři na složce typu obrázek stisknete pravé tlačítko myši (nebo klávesu Enter, je-li obrázek vybrán), kromě položek pro práci se schránkou obsahuje položku Načíst ze souboru, která umožňuje naplnění složky obrázkem formátu BMP, PCX, TIF, GIF, JPG nebo WPD, a položku Uložit do souboru, které slouží k exportu obrázku na disk v jednom zvoleném formátu.

- pokud nezadáte explicitně nějakou akci (vlastnost Akce), po poklepání se otevře samostatné okno s obrázkem; pokud akci zadáte, provede se tato akce

Viz také:	Složky - přehled


Vlastnosti složky Obrázek:

BackColor

Length

Format


Metody složky Obrázek:

Refresh

SetFocus

IsNull

SetNull

Open

ReadFile

WriteFile

Handle


Podpis

Vlastnosti:	Metody:

Využití pro datové typy: podpis

Oblast použití: formuláře, méně pro sestavy

K čemu se používá:

- složka slouží k digitálnímu podepsání nebo zjištění stavu podpisu

Poznámky:

Viz také:	Složky - přehled


Vlastnosti složky Podpis:

BackColor

TextColor


Metody složky Podpis:

SetFocus

SetNull

Set_font

Signature_state

Signature_sign

Signature_check

Handle


Hodnotová složka

Vlastnosti:	Metody:

Oblast použití: formuláře, sestavy

K čemu se používá:

- k zobrazení výrazů ve formulářích nebo sestavách

Poznámky:

- maximální počet znaků zobrazených ve složce je 254

Tipy a triky:

- při zobrazení řetězcových hodnot platí pravidla pro práci s řetězci z programovacího jazyka, např.

"Dnes je "+Date2str(Today,1)

Viz také:	Složky - přehled


Vlastnosti složky Hodnota:

Value

Text

BackColor

TextColor

Format

Precision


Metody složky Hodnota:

Refresh

SetFocus

IsNull

SetNull

Set_font

Handle


Nápis

Vlastnosti:	Metody:

Oblast použití: formuláře, sestavy

K čemu se používá:

- k zobrazení neměnných nápisů ve formulářích nebo sestavách

Poznámky:

-

Tipy a triky:

Viz také:	Složky - přehled


Vlastnosti složky Nápis:

BackColor

TextColor

Text


Metody složky Nápis:

SetFocus

IsNull

SetNull

Set_font

Handle


Subformulář
Subpohled

Vlastnosti:	Metody:

Oblast použití: formuláře, sestavy

K čemu se používá:

Speciální složkou pohledu může být i jiný pohled. Pohled, který je obsažen v jiném pohledu, nazýváme subpohled. Pohledu, který obsahuje subpohledy, budeme říkat superpohled. Subpohledy mohou být pouze v obecných pohledech, nikoli ve standardních pohledech. Subpohled ve formuláři nazýváme subformulář, v sestavě subsestava.

Mezi superpohledem a subpohledy existuje určitý druh vazby, který v závislosti na záznamu zvoleném v jednom z pohledů volí záznam nebo záznamy v ostatních pohledech.

•	subpohled i superpohled jsou synchronizovány na stejný záznam (listovací, přehledový subpohled):

Super- i subpohled vedou do stejného zdroje dat, nejčastější je varianta, kdy superpohled tvoří obecný pohled s jedním záznamem na stránku a subpohled standardní pohled. Přecházením v subpohledu se automaticky překreslují rozšířené informace o vybraném záznamu v superpohledu (a naopak). V návrháři použijte vlastnost Způsob synchronizace Na stejný záznam a zatrhněte Použít kurzor ze superpohledu. Použití je výhradně pro formuláře, pokud by se takovýto formulář tiskl, ze subpohledu se vytiskne pouze jeden aktuální záznam.

•	subpohled a superpohled vedou do různých zdrojů dat a jsou svázány pomocí nějaké vazby (relačně synchronizovaný subpohled):

Při listování v superpohledu se v subpohledu automaticky zobrazují pouze ty záznamy, které vyhovují zadané vazbě na aktuální záznam superpohledu. Nejjednodušší a nejběžnější případ je propojení záznamů při rovnosti hodnot dvou sloupců, ale mechanizmus relační synchronizace zvládne i složitější případy, které lze zadat podmínkou. Pokud pro relační propojení tabulek máte navrženu relaci (jako objekt aplikace), v návrháři použijte vlastnost Způsob synchronizace Záznamy propojené relací a do pole Jméno relace uveďte příslušnou relaci.

Pokud relaci nemáte nebo je podmínka složitější než rovnost, použijte jako způsob synchronizace  Záznamy propojené podmínkou a do polí Propojovací hodnota v superpohledu a Výběrová podmínka v subpohledu doplňte příslušnou podmínku. Ke všem vlastnostem je také lokální nápověda (F1). Používá se pro formuláře i sestavy.

Poznámky:

- přechody mezi super- a subformulářem:

a) myší - kliknutí do příslušného pohledu;

b) z klávesnice - klávesou F6.

- vlastnost Rám se uplatní pouze při tisku;

- vlastnost Pružná výška v sestavě způsobí, že se vytiskne celý relační subpohled (subsestava), ne pouze ty záznamy, které se vejdou na výšku navrženého subpohledu. V tomto případě musí být subsestava poslední v datové oblasti, jinak přepíše ostatní složky níže (složky se "neodsunou")

Viz také:	Složky - přehled


OLE složka
OLE

Vlastnosti:	Metody:

Využití pro datové typy: OLE

Oblast použití: formuláře, méně pro sestavy

K čemu se používá:

- ke zpřístupnění obsahu OLE sloupce pomocí externího programu (OLE serveru)

Poznámky:

- pravé tlačítko myši nebo Enter zpřístupní menu pro práci s touto složkou. Viz OLE - popis menu

Viz také:	Složky - přehled


Vlastnosti složky OLE:

Length


Metody složky OLE:

Refresh

SetFocus

IsNull

SetNull

Open

ReadFile

WriteFile

Handle


ActiveX složka
ActiveX

Vlastnosti:	Metody:

Oblast použití: formuláře méně pro sestavy

K čemu se používá:

- ke vložení cizího objektu ActiveX do formuláře

Viz také:	Složky - přehled


Vlastnosti složky ActiveX:


Metody složky ActiveX:

SetFocus

IsNull

SetNull

Open

Handle


Rám a čára

Vlastnosti:	Metody:

Oblast použití: formuláře, sestavy

K čemu se používá:

- pro nakreslení obdélníkového rámu nebo úsečky ve formuláři;

Poznámky:

- čáru nelze zneviditelnit podmínkou neviditelnosti;

- čára se zobrazí i na fiktivním záznamu

Viz také:	Složky - přehled


Vlastnosti složky Rám a čára

BackColor


Tlačítko

Vlastnosti:	Metody:

Oblast použití: formuláře

K čemu se používá:

- stisk tlačítka způsobí určitou akci definovanou v návrhu;

Poznámky:

- tlačítka se dají stisknout buď myší, nebo mezerníkem, pokud je tlačítko předtím vybráno. Vybrané tlačítko poznáte tak, že má kolem svého nápisu tečkovaný rámeček;

- má-li se tlačítko stisknout (resp. provést definovaná akce) stiskem klávesy Enter kdekoliv ve formuláři, musíte v návrháři zapnout volbu Příjemce Enter;

- na tlačítko je možné umístit místo nápisu obrázek (uložený předem v aplikaci); zpomaluje však práci s formulářem, protože obrázky nejsou kešovány u klienta.

Viz také:	Složky - přehled


Vlastnosti složky Tlačítko:

Text


Metody složky Tlačítko:

SetFocus

Set_font

Handle


Krokovač

Vlastnosti:	Metody:

Oblast použití: formuláře

K čemu se používá:

- slouží k usnadnění editace hodnoty v editační složce, s níž je svázána.

Poznámky:

- složka se skládá ze dvou malých šipek - nahoru a dolů. Stiskem šipky nahoru se obsah editační složky zvětší o stanovenou hodnotu, stiskem šipky doků se zmenší. Krokovač je zvykem umisťovat bezprostředně vpravo od té editační složky, kterou ovlivňuje;

Vložíte-li do pohledu krokovač, musíte pomocí okna se seznamem vlastností zadat tyto její parametry: číslo editační složky, s níž bude krokovač svázán, dolní a horní mez hodnot, velikost kroku.

Pokud je v editační složce hodnota ležící mimo meze krokovače, pak se stiskem kterékoli šipky dostane do těchto mezí.

Tipy a triky:

- krokovač pro typ Datum:

Hodnota vlastnosti Krok pro posun o jeden den je 7, pro jeden měsíc je 31, pro jeden rok je 372. Vývojář se nemusí starat o počty dní v měsíci, přestupné roky apod.

- krokovač pro typ Čas:

Hodnoty vlastností Krok pro posun o minutu je 60000, pro posun o hodinu je to 3600000.

Viz také:	Složky - přehled


Posuvník

Vlastnosti:	Metody:

Oblast použití: formuláře

K čemu se používá:

- složka vyjadřuje celočíselnou hodnotu pomocí polohy jezdce a posouváním jezdce umožňuje tuto hodnotu editovat.

Poznámky:

- je vždy svázaná se sloupcem nebo proměnnou typu Integer nebo Short;

- jezdec se ovládá pomocí myši nebo šipkami z klávesnice. Použití posuvníku je omezeno tím, že nemůže zobrazovat prázdnou hodnotu a nedá se použít k jejímu zadávání;

Posuvník může být vodorovný nebo svislý - podle toho, který rozměr posuvníku je větší. Vložíte-li do pohledu složku Posuvník, musíte pomocí okna se seznamem vlastností zadat tyto její vlastnosti: Dolní a Horní mez hodnot, Krok na stupnici a Umístění stupnice.

Pokud ve formuláři existuje ještě další složka, která pracuje se stejným údajem jako posuvník (např. hodnotová, editační složka), pak pro obě složky zatrhněte vlastnost Obnovit po změně, aby se změny provedené v jedné složce průběžně promítaly i do druhé složky.

Posuvník lze použít i ke kladení dotazů. Otevřete-li dotazové okno s posuvníkem a umístíte-li jezdec do určité polohy, pak se vyberou pouze záznamy s jezdcem posuvníku ve stejné poloze. Toto omezení lze zrušit stejně jako jakékoli jiné omezení QBE, nebo selektivně v dotazovém okně stiskem klávesy Delete v situaci, kdy je posuvník vybranou složkou.

Viz také:	Složky - přehled


Vlastnosti složky Posuvník:

Value

Text

BackColor


Metody složky Posuvník:

Refresh

SetFocus

IsNull

Handle


Indikátor postupu

Vlastnosti:	Metody:

Oblast použití: formuláře

K čemu se používá:

- složka slouží ke grafickému znázorňování postupu práce pomocí čtverečků vyplňujících zleva doprava vodorovný pruh.

Poznámky:

- tato složka přistupuje ke sloupci nebo (častěji) proměnné typu Integer nebo Short a na základě jejich hodnot vykresluje čtverce. Je-li hodnota 0 (nebo menší), nekreslí se žádný čtverec, pro hodnotu 1000 (nebo větší) se celý pruh vyplní čtverci, pro hodnoty ležící mezi 0 a 1000 se vykreslí úměrný počet čtverců.

Pokud změníte hodnotu proměnné řídících obsah indikátoru postupu, musíte provést překreslení pohledu (pomocí standardní akce, metody nebo funkce Reset_view), aby vzhled indikátoru opět odpovídal hodnotě.

Pro tuto složku se při návrhu nenastavují žádné speciální vlastnosti.

Viz také:	Složky - přehled


Záložky

Vlastnosti:	Metody:

Oblast použití: formuláře

K čemu se používá:

- slouží k přepínání obsahu formuláře

Poznámky:

- při návrhu se některé složky (většinou subformuláře nebo hodnoty) navrhnou v zákrytu nad sebou a svážou se s odpovídající záložkou. Při otevření formuláře budou viditelné jen ty složky, které jsou svázány s právě vybranou záložkou.

- texty na jednotlivé záložky se zapisují do vlastnosti Nápis (neměnný) a oddělí se od sebe čárkami - tím se zadá současně i počet záložek. Čárka se bere vždy jako oddělovač - není možné mít v textu na záložkách znak čárka;

- pokud využíváte vícejazyčnou překladovou tabulku, je nutné texty na všechny záložky vytvořit jako jeden řetězec obsahující čárky v tabulce _multiling

- složky, které se mají objevovat a mizet podle vybraných záložek, musí v podmínkách viditelnosti použít funkci Tab_page ve tvaru  Tab_page(!!, číslo_složky_záložka)=číslo_záložky nebo odpovídající metodu Page;

- pro zjednodušení zápisu Podmínky viditelnosti u složek slouží další vlastnosti, které se objeví po rozbalení skupiny: pomocí Přepínat pomocí záložek ... definujete složky typu Záložky buď jménem nebo číslem, pomocí Zobrazovat na stránce definujete číslo stránky (od nuly), na níž bude složka viditelná.

- podmínka viditelnosti se uplatňuje již při návrhu;

Viz také:	Složky - přehled


Vlastnosti složky Záložky:

Page


Metody složky Záložky:

Set_font

Handle


Čárový kód
Čárové kódy

Vlastnosti:	Metody:

Oblast použití: sestavy, formuláře

K čemu se používá:

- ke generování a tisku čárových kódů;

Poznámky:

WinBase602 umí generovat a tisknout 10 základních druhů jednorozměrných čárových kódů (včetně řady jejich modifikací a variant) a dvourozměrný kód PDF 417.

Na tvorbě čárového kódu se podílejí data, která mají být čárovým kódem vyjádřena, a parametry, definující druh, variantu a vzhled kódu. Data pocházejí obvykle z databáze. Parametry se popíšou v seznamu vlastností složky pohledu.

Vstupní data čárového kódu

Údaj, který se má ve složce zobrazit, zadáte v seznamu vlastností jako Obsah složky. Obvykle použijete jméno databázového sloupce ze zdroje dat pohledu, lze však použít libovolný výraz, například volání funkce, který data pro čárový kód vytvoří a vrátí jako řetězec znaků.

Jednotlivé druhy čárových kódů mají specifické požadavky na to, jaká data lze jimi zakódovat a jaká smí být délka těchto dat. Pokud kód vyžaduje vstup určité délky a vstupní data mají jinou délku, pak se čárový kód nevytvoří. Stejně tak kód nevznikne, pokud jsou na vstupu jiné než přípustné znaky. Maximální délka vstupu (kromě PDF417) je 100 znaků.

Obsah jednodimenzionálního čárového kódu lze nejsnáze zadat pomocí řetězce znaků. Délka řetězce pak udává délku dat, která se budou kódovat. Pro ostatní typy dat platí:

Typ	Konverze	Délka

typ proměnné velikosti	nekonvertují se, kóduje se po bajtech	skutečná délka dat v bajtech

typ Binary	nekonvertuje se, kóduje se po bajtech	pevná délka dle definice typu

ostatní typy	konvertují se na řetězec znaků	délka vzniklého řetězce

Pokud kód umí pracovat pouze s velkými písmeny a na vstupu se objeví malá písmena, budou automaticky konvertována na velká. Pokud kód má obsahovat kontrolní číslice, ty se na vstupu nikdy neuvádějí - vypočtou se a doplní se automaticky.

Čárové kódy UPC-A, UPC-E, EAN-8, EAN-13 a BookLan mohou být dvoudílné. Pokud chcete vytvořit dvoudílný kód, specifikujeme jako obsah čárového kódu obě části oddělené čárkou. Pokud tedy je například první část kódu ve sloupci CODE a druhá část ve sloupci CODEEXT, pak do vlastnosti Obsah složky zadáte:

CODE+","+CODEEXT

Pokračování:	Typy čárových kódů
	Vlastnosti čárových kódů
Viz také:	Složky - přehled


Druhy čárových kód
Druhy čárových kódů

Code 39

Code 39 kóduje zprávy proměnné délky. Normální verze kódu pracuje se znaky 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%. Full ASCII verze kódu umí pracovat se všemi 128 ASCII znaky.

UPC-A, UPC-E a rozšíření

UPC-A kóduje zprávy skládající se z 12 číslic, z toho 11 číslic nese informaci. Dvanáctá číslice je kontrolní - dopočte se automaticky a byla-li uvedena na vstupu, ignoruje se. UPC-E kóduje zprávy skládající se z 7 číslic, z toho 6 číslic nese informaci. Sedmá číslice je kontrolní - dopočte se automaticky a byla-li uvedena na vstupu, ignoruje se.

Jako rozšíření lze pro oba tyto kódy uvést dvě nebo pět číslic, které budou zakódovány vedle hlavního kódu. Tabulka uvádí přípustná vstupní data a odpovídající výstup:

Vstup	Alternativní vstup	Výstup
123456	1234567	UPC-E
123456,12	1234567,12	UPC-E s dvoučíselným rozšířením
123456,12345	1234567,12345	UPC-E s pětičíselným rozšířením
123456789012	1234567890123	UPC-A
123456789012,12	1234567890123,12	UPC-A s dvoučíselným rozšířením
123456789012,12345	1234567890123,12345	UPC-A s pětičíselným rozšířením

EAN-8, EAN-13

EAN-13 kóduje zprávy skládající se z 13 číslic, z toho 12 číslic nese informaci. Třináctá číslice je kontrolní - dopočte se automaticky a byla-li uvedena na vstupu, ignoruje se. EAN-8 kóduje zprávy skládající se z 8 číslic, z toho 7 číslic nese informaci. Osmá číslice je kontrolní - dopočte se automaticky a byla-li uvedena na vstupu, ignoruje se.

Jako rozšíření lze pro oba tyto kódy uvést dvě nebo pět číslic, které budou zakódovány vedle hlavního kódu.

BookLan

BookLan se používá pro označování knih a obsahuje prvních 9 číslic ISBN a případně jako rozšíření cenu. Na vstupu lze zadat kompletní ISBN (případné pomlčky se ignorují) a za čárkou cenu. Jinak je tento kód totožný s EAN-13.

Code 93

Code 93 kóduje zprávy proměnné délky, v nichž lze používat všech 128 znaků ASCII.

CODABAR

CODABAR kóduje zprávy proměnné délky. Zprávy musí začínat a končit některým ze znaků A, B, C nebo D. Uvnitř zpráv mohou být obsaženy znaky 0123456789-$:/.+.

Interleaved 2 z 5 (ITF)

ITF kóduje zprávy proměnné délky skládající se sudého počtu číslic. Pokud na vstupu bude lichý počet číslic, doplní se zleva nula.

Code 128

Code 128 kóduje zprávy proměnné délky, které mohou obsahovat všech 128 znaků ASCII a navíc speciální funkční znaky FNC1 až FNC4, které se zadávají pomocí bajtů 128 až 131.

EAN/UCC 128

EAN/UCC 128 kóduje zprávy proměnné délky, které mohou obsahovat všech 128 znaků ASCII a navíc speciální funkční znak FNC1, který se zadávají pomocí bajtu 128.

PostNet

PostNet kóduje poštovní směrovací čísla. Ta se mohou skládat z 5, 9 nebo 11 číslic.

PDF417

PDF417 kóduje zprávu proměnné délky do dvourozměrného obrazce. Zpráva může obsahovat všech 255 znaků ASCII a její maximální délka je 2710 bajtů.

Viz také:	Čárové kódy


Vlastnosti čárových kód
Vlastnosti čárových kódů

Vlastnosti zobrazení čárového kódu se nastavují v seznamu vlastností složky pohledu ve skupině Čárový kód. Některé vlastnosti jsou použitelné pouze pro některé druhy kódů.

Barva čar a barva pozadí

Barvu čáry zvolíte jako barvu textu. Ne všechny kombinace barev se dají přečíst čtecím zařízením. Orientačně se lze řídit pravidlem, že údaj Světelnost v dialogu pro volbu barvy by pro čáru neměl přesahovat 60 a pro pozadí by neměl být menší než 180.

Font

Pro text, který je součástí čárového kódu, lze volit font. Specifikace převážně doporučují použít font OCR-B, k němuž se blíží fonty Arial, MS Sans Serif nebo System. Pokud font není pro tuto složku explicitně specifikován, nepoužije se globální font pohledu nebo WinBase602, nýbrž font Arial o velikosti přibližně jedné pětiny délky čáry.

Tloušťka nejtenčí čáry

Tloušťka nejtenčí čáry určuje rozměry i všech ostatních prvků čárového kódu. Udává se v jednotkách 0.01 mm. Doporučená tloušťka je 26 až 76, minimální tloušťka pro UPC a EAN je 26, pro ostatní 19. Povolené rozmezí je 0 až 500 (pokud nedojde k překročení maximální velikosti kódu), přičemž 0 označuje implicitní tloušťku 33.

Redukce tloušťky

Redukce tloušťky dovoluje specifikovat, o kolik procent se má zmenšit (pro kladné hodnoty) nebo zvětšit (pro záporné hodnoty) tloušťka čar. Povolené rozmezí je -99 až +99. Kladné hodnoty použijte pro tisk inkoustem na rozpíjející papír, záporné hodnoty pro tisk na materiály, na nichž se vysychající inkoust smršťuje.

Délka čar

Délka čar se udává je jednotkách 0.01 mm. Povolený rozsah je 100 až 20000 (pokud nedojde k překročení maximální velikosti kódu). Povolena je také hodnota 0, která označuje implicitní hodnotu 2540 (jeden palec).

Poměr tloušťky tenké a tlusté čáry

Poměr tloušťky tenké a tlusté čáry lze zadat pro Code 39, Interleaved 2 z 5 a CodaBar. Zadává se jako celočíselný desetinásobek poměru tlouštěk. Měl by ležet v rozmezí 20 až 30. Pokud zadáte hodnotu 0, použije se implicitní hodnota 25.

Rotace

Rotace dovoluje specifikovat natočení čárového kódu. Otáčí se po směru hodinových ručiček po 90 stupních.

Textový zápis

Údaj vyjádřený čárovým kódem lze vypsat v textové podobě čitelné pro člověka pod nebo nad kódem, případně lze vypisování zamezit.

Barva textového zápisu

Barva textového zápisu se uplatní při vypisování obsahu kódované zprávy pod nebo nad kódem.

Vymezovací pruhy

Vymezovací pruhy kolmé na kódové čáry mohou zvýšit spolehlivost čtení kódu a také kvalitu tisku na některé povrchy. Dají se použít pro Code 39, Code 93, Interleaved 2 z 5, CodaBar a Code 128.

ASCII verze pro Code 39

Zapíná plnou ASCII verzi Code 39 místo normálního Code 39. Netýká se jiných kódů.

Start/Stop * v Code 39

Zapíná zobrazení start- a stop-znaků jako hvězdiček v oblasti kódu čitelné pro člověka. Týká se pouze Code 39.

HIBC verze pro Code 39

Zapíná verzi HIBC (Health Industry Bar Code) pro Code 39. Netýká se ostatních kódů.

Kontrolní číslice

Dovoluje připojit jednu nebo dvě kontrolní číslice ke kódu. Kontrolní číslice vyžadované specifikací kódu jsou k němu připojeny vždy bez ohledu na nastavení této vlastnosti. Pro EAN/UCC 128 lze kontrolní číslici připojit pouze k číselné zprávě.

Přizpůsobit rozlišení tiskárny

Zapnutí této vlastnosti přizpůsobí tloušťku čár tak, aby byla celočíselným násobkem rozlišení tiskárny. Tím se minimalizuje zkreslení kódu způsobené malou rozlišovací schopnosti tiskárny a zvýší kvalita výstupu.

Níže uvedené vlastnosti se týkají pouze kódu PDF:

Použít zkrácené symboly

Zapíná vytváření zkrácených symbolů.

Šířka modulu

Šířka modulu se uvádí v jednotkách 0.01 mm. Doporučené rozmezí je 25 až 76, minimum je 17.

Výška modulu

Výška modulu se uvádí v jednotkách 0.01 mm. Doporučená výška je trojnásobkem šířky, minimum je 25.

Poměr stran symbolu

Poměr velikosti stran celého kódového symbolu se udává reálným číslem. Hodnoty větší než 1 vytvářejí vysoké symboly, rovné 1 čtvercové symboly, menší než 1 široké symboly. Poměr stran je pouze přibližný, protože existuje pouze omezený počet způsobů, jak obsah symbolu rozdělit do řádek a sloupců.

Úroveň bezpečnosti

Dovoluje zadat míru automatické korekce chyb v symbolu. Větší hodnoty znamenají větší symbol a větší schopnost korekce chyb. Pokud zvolíte variantu "Vyjádřit níže v procentech", pak úroveň bezpečnosti se odvodí z údaje ve vlastnosti Úroveň korekce chyb.

Úroveň korekce chyb

Procentuální vyjádření schopnosti korekce chyb v rozmezí 0-99. Hodnota 0 označuje implicitní korekci 11%. Tento údaj je využije pouze tehdy, když zadáte vlastnost Úroveň bezpečnosti jako "Vyjádřit níže v procentech".

Způsob zkompaktnění

Existují 3 základní způsoby zkompaktnění symbolu: Extended Alphanumeric (EXC), Binary/ASCII (Bin) a Numeric (Num). Kromě nich lze zvolit automatickou volbu ze všech tří (Auto EXC/Bin/Num), která poskytuje maximální možnou kompresi, nebo automatickou volbu z prvních dvou způsobů (Auto EXC/Bin).

Maximální počet řádků

Maximální počet řádků v symbolu musí ležet v rozmezí 3 až 90.

Maximální počet sloupců

Maximální počet sloupců v symbolu musí ležet v rozmezí 1 až 30.

Viz také:	Čárové kódy


Vlastnosti složek formuláře - přehled

Abecední seznam vlastností složek formuláře:

BackColor - vrátí / nastaví barvu pozadí složky

Checked - vrátí / nastaví zatržení složky Označovací čtverec nebo Přepínač

Format -vrátí / nastaví formát zobrazení složky

Length - vrátí / nastaví délku objektu proměnné velikosti ve složce

Page - vrátí / nastaví vybranou záložku

Precision - vrátí / nastaví počet desetinných míst ve formátu pro reálné číslo

Selindex - vrátí / nastaví vybranou položku Seznamu či Překládaného comba

Text - vrátí / nastaví obsah složky

TextColor - vrátí / nastaví barvu textu ve složce

Value - vrátí / nastaví hodnotu složky

Pokračování:	Objektové programování a práce s formuláři
	Vlastnosti a metody složek formulářů
	Metody složek - přehled


Vlastnost Value

Vlastnosti složek formulářů - přehled

Formát:

form.složka.Value

Typ:

stejný typ jako sloupec / proměnná, do něhož složka vede

Popis:

Vlastnost Value je hodnotou složky. Tato hodnota je stejného typu jako složka, pokud tedy například složka zobrazuje sloupec typu Integer z databázové tabulky, pak vlastnost Value má celočíselnou hodnotu.

Pokud složka obsahuje hodnotu proměnné velikosti, pak pomocí vlastnosti Value lze s ní pracovat po částech. Zápis Value[offset,size] označuje úsek hodnoty délky size počínaje bajtem offset. Zápis Value# označuje celkovou délku hodnoty.

Obdoba v jazyce:

Získat hodnoty složky formuláře lze pomocí funkce Get_item_value.

Zapsat hodnotu do složky lze pomocí funkce Set_item_value.


Vlastnost Text

Vlastnosti složek formulářů - přehled

Formát:

form.složka.Text

Typ:

řetězec znaků

Popis:

Vlastnost Text obsahuje data ze složky konvertovaná na znakový řetězec. Na složkách Nápis nebo Tlačítko dovoluje číst nebo přepisovat nápis na složce, v ostatních složkách dovoluje manipulovat s obsahem složky. Obsah řetězce Text přečteného ze složky závisí na nastaveném formátu zobrazení a přesnosti. Na složkách zaškrtávací čtverec nebo přepínač je tato vlastnost "+", je-li složka zatržena, "-" není-li zatržena, nebo prázdný řetězec, je-li šedá.

Obdoba v jazyce:

Získat obsah složky formuláře lze pomocí funkce Get_view_item.

Zapsat text do složky lze pomocí funkce Set_view_item.


Vlastnost Length

Vlastnosti složek formulářů - přehled

Formát:

form.složka.Length

Typ:

Integer

Popis:

Vlastnost Length udává délku hodnoty. Tuto vlastnost mají pouze složky, jejichž typ je proměnné velikosti (text, obrázek). Alternativním zápisem vlastnosti Length je Value#.

Obdoba v jazyce:

Není přímo, lze číst a přepisovat hodnotu proměnné či sloupce, do níž složka vede.


Vlastnost Format

Vlastnosti složek formulářů - přehled

Formát:

form.složka.Format

Typ:

Integer

Popis:

Vlastnost Format určuje způsob zobrazení obsahu složky. Dá se použít pro obrázky, OLE objekty, a pro editační a hodnotové složky obsahující data typu reálné číslo, Money, datum, čas nebo Timestamp.

Hodnoty vlastnosti Format pro editační a hodnotové složky:

	Editační pole a Combo	Hodnotová složka
	hodnota	formát	hodnota	formát	Poznámka
Real	0	desetinný	0	desetinný	+ vlastnost Precision pro
	1	semilogaritmický	1	semilogaritmický	počet des. Míst
	2	účetní	2	účetní
	hodnota	formát	hodnota	formát	Poznámka
Money	0	tvar 5,-	0	tvar 5,-
	1	tvar 5.00	1	tvar 5.00
	2	účetní	2	účetní
	hodnota	formát	hodnota	formát	Poznámka
Date	0	27.12.	0	27.12.
	1	27.12.1998	1	27.12.1998
			2	27.prosinec
			3	27.prosinec 1998
			4	dlouhý W formát	formát nastavený v parametrech Windows
			5	krátký W formát
	hodnota	formát	hodnota	formát	Poznámka
Time	0	12:45	0	12:45
	1	12:44:59	1	12:44:59
	2	12:44:59.999	2	12:44:59.999
			3	W formát
	hodn.	Formát	hodn.	Formát
Timestamp			0	27.prosinec 12:45:56
			1	27.prosinec 1998 12:45:56
			2	dlouhý W formát s časem
			3	krátký W formát s časem
			4	27.12. 12:45:56
	5	27.12.1998 12:45:56	5	27.12.1998 12:45:56
			6	27.prosinec
			7	27.prosinec 1998
			8	dlouhý W formát bez času
			9	krátký W formát bez času
			10	27.12.
			11	27.12.1998
			12	27.prosinec 12:45
			13	27.prosinec 1998 12:45
			14	dlouhý W formát s časem bez sekund
			15	krátký W formát s časem bez sekund
			16	27.12. 12:45
			17	27.12.1998 12:45

Hodnoty vlastnosti Format pro speciální složky:

	hodnota	formát
Obrázek	0	zachovat velikost (pevná velikost)
	1	vyplnit prostor (proměnná velikost)
	2	zachovat poměr stran
	hodnota	formát
OLE	0	vyplnit prostor (proměnná velikost)
	1	zachovat velikost (pevná velikost)
	2	zachovat poměr stran
	3	zobrazit pouze ikonu
	4	zobrazit pouze titulek

Obdoba v jazyce:

Není.


Vlastnost Checked

Vlastnosti složek formulářů - přehled

Formát:

form.složka.Checked

Typ:

Boolean

Popis:

Vlastnost Checked říká, zda složka zaškrtávací čtverec nebo přepínač je zatržena. Podmínka form.složka.Checked je TRUE, pokud hodnota editovaného sloupce nebo proměnné má hodnotu TRUE nebo NULL, podmínka form.složka.Checked=TRUE je TRUE, pokud hodnota editovaného sloupce nebo proměnné má hodnotu pouze TRUE.

Obdoba v jazyce:

Není přímo, lze číst a přepisovat hodnotu proměnné či sloupce, do níž přepínač vede.


Vlastnost Page

Vlastnosti složek formulářů - přehled

Formát:

form.složka.Page

Typ:

Integer

Popis:

Vlastnost Page je číslo aktivní stránky ve složce Záložky. Stránky jsou očíslovány od nuly zleva doprava. Tuto vlastnost lze číst a nastavovat pouze v otevřeném formuláři.

Obdoba v jazyce:

Pro získání číslo stránky záložky lze použít ekvivalentní funkci Tab_Page.


Vlastnost SelIndex

Vlastnosti složek formulářů - přehled

Formát:

form.složka.SelIndex

Typ:

Integer

Popis:

Vlastnost SelIndex je číslo vybrané položky ve složce seznam nebo v překládaném combu. Pokud v seznamu není vybrána žádná složka, vlastnost má hodnotu -1. Položky jsou číslovány od 0.

Tuto vlastnost lze číst a nastavovat pouze v otevřeném formuláři.

Obdoba v jazyce:

Není.


Vlastnost Precision

Vlastnosti složek formulářů - přehled

Formát:

form.složka.Precision

Typ:

Integer

Popis:

Vlastnost Precision určuje počet desetinných míst použitých při zobrazení reálné hodnoty. Dá se použít pro editační a hodnotové složky.

Pro zobrazení 0 desetinných míst v desetinném zobrazení použijte hodnotu 127. Hodnota 0 je vyhrazena pro zobrazení semilogaritmické.

Obdoba v jazyce:

Není.


Vlastnost BackColor

Vlastnosti složek formulářů - přehled

Formát:

form.složka.BackColor

Typ:

Integer

Popis:

Vlastnost BackColor určuje barvu pozadí složky obecného formuláře. Pro formuláře standardní i obecné lze nastavit obdobnou vlastností barvu pozadí najednou.

Barva je zakódována pomocí intenzity červené, zelené a modré složky. Jednotlivé intenzity se vyjadřují čísly od 0 do 255. Intenzita červené se zapíše do nejnižšího bajtu barvy, intenzita zelené do druhého bajtu a intenzita modré do třetího. Více o barvách ve formulářích - podrobnosti.

Tabulka uvádí čísla a konstanty reprezentující nejběžnější barvy:

černá	0
červená	255
modrá	16711680
zelená	65280
fialová	16711935
tyrkysová	16776960
žlutá	65535
bílá	16777215

Obdoba v jazyce:

Není.


Vlastnost TextColor

Vlastnosti složek formulářů - přehled

Formát:

form.složka.TextColor

Typ:

Integer

Popis:

Vlastnost TextColor určuje barvu textu ve složce obecného formuláře. Pro formuláře standardní lze nastavit obdobnou vlastností barvu textu najednou.

Barva je zakódována pomocí intenzity červené, zelené a modré složky. Jednotlivé intenzity se vyjadřují čísly od 0 do 255. Intenzita červené se zapíše do nejnižšího bajtu barvy, intenzita zelené do druhého bajtu a intenzita modré do třetího. Více o barvách ve formulářích - podrobnosti.

Tabulka uvádí čísla a konstanty reprezentující nejběžnější barvy:

černá	0
červená	255
modrá	16711680
zelená	65280
fialová	16711935
tyrkysová	16776960
žlutá	65535
bílá	16777215

Obdoba v jazyce:

Není.


Metody složek formuláře - přehled

Abecední seznam metod složek formuláře:

Calendar - zobrazí složku Kalendář a umožní vybrat datum

Handle - vrací handle okna složky

IsNull - zjistí, je-li složka prázdná či nikoliv

Open - aktivuje složku Obrázek, Text či OLE

ReadFile - načte do složky s obsahem proměnné délky text ze souboru

Refresh - obnoví obsah složky

ResetCombo - znovu vyhodnotí obsah comba

Selection -označí úsek textu

SetFocus - vybrání složky

Set_font - změní font ve složce

SetNull - vyprázdní složku

Signature_check - prověří digitální podpis

Signature_sign - vytvoří podpis ve složce (podepíše)

Signature_state - zjistí stav digitálního podpisu

WriteFile - obsah složky s obsahem proměnné velikosti uloží do souboru

Pokračování:	Objektové programování a práce s formuláři
	Vlastnosti a metody složek formulářů
	Vlastnosti složek - přehled


Metoda IsNull

Metody složek formulářů - přehled

Formát:

form.složka.IsNull : Boolean

Popis:

Metoda IsNull říká, zda obsah složky má hodnotu NULL (je-li prázdný, nevyplněný).

Obdoba v jazyce:

Není přímo, lze číst hodnotu proměnné či sloupce, do níž složka vede.


Metoda ReadFile

Metody složek formulářů - přehled

Formát:

form.složka.ReadFile(filename : string) : boolean

Parametry:

filename	jméno souboru

Popis:

Funkce přečte obsah souboru zadaného parametrem a zapíše jej do složky. Dá se použít pro složky Text, Obrázek nebo Ole. Funkce vrací TRUE při úspěchu, FALSE při chybě, když se soubor nepodaří otevřít nebo přečíst nebo když se do složky nepodaří zapsat.

Obdoba v jazyce:

Není, lze naprogramovat.


Metoda WriteFile

Metody složek formulářů - přehled

Formát:

form.složka.WriteFile(filename : string; append : boolean) : boolean

Parametry:

filename	jméno souboru
append	příznak

Popis:

Funkce zapíše obsah složky do souboru zadaného prvním parametrem. Pokud soubor již existuje, pak je-li parametr append roven FALSE, jeho obsah se přepíše, je-li parametr append roven FALSE, data se přidají na konec souboru. Metoda se dá použít pro složky Text, Obrázek nebo Ole. Funkce vrací TRUE při úspěchu, FALSE při chybě, když se soubor nepodaří otevřít nebo přepsat nebo když se obsah složky nepodaří přečíst.

Obdoba v jazyce:

Není, lze naprogramovat.


Metoda SetNull

Metody složek formulářů - přehled

Formát:

form.složka.SetNull

Popis:

Procedura zapíše do složky hodnotu NULL. Funkci lze také použít ke smazání nápisu nebo textu na tlačítku.

Obdoba v jazyce:

Není přímo.


Metoda Signature_state

Metody složek formulářů - přehled

Formát:

form.složka.Signature_state : integer

Popis:

Metoda vrátí stav digitálního podpisu. Hodnoty menší než nula znamenají neplatný podpis.

Hodnota funkce	Stav podpisu
0	není podepsáno (podpis vymazán)
-1	Falešný podpis
-2	Změněno po podpisu
-3	Nelze ověřit, uživatel není známý
-4	Podpis snad platný, neověřena identita
-5	Dokument podepsán po zneplatnění certifikátu
-6	Identita ověřena nikoli certifikační autoritou
-7	Rezervováno
-8	Jiná chyba v podpisu nebo není dosud podepsáno

Obdoba v jazyce:

Lze použít obdobnou funkci Signature_state.


Metoda Open

Metody složek formulářů - přehled

Formát:

form.složka.Open : boolean

Popis:

Funkce pracuje v závislosti na druhu složky. Pro složku Text otevře textový editor v samostatném okně, pro složku Raster otevře zvláštní okno s obrázkem, pro složku OLE aktivuje její server. Pro jiné složky nelze funkci použít.

Funkce vrací FALSE při chybě.

Obdoba v jazyce:

Není.


Metoda ResetCombo

Metody složek formulářů - přehled

Formát:

form.složka.ResetCombo(var source : string) : Boolean

Popis:

Funkce znovu naplní nabídku ve složce combo podle nově zadaného dotazu.

Funkce vrací FALSE při chybě.

Obdoba v jazyce:

Není.


Metoda Calendar

Metody složek formulářů - přehled

Formát:

form.složka.Calendar(show_today, circle_today, week_numbers : Boolean);

Parametry:

show_today	příznak, má-li se vypsat dnešní datum ve spodní části
circle_today	příznak, má-li se zakroužkovat dnešní datum v kalendáři
week_numbers	příznak, mají-li se zobrazit čísla týdnů

Popis:

Procedura zobrazí v popup okně kalendář a dovolí vybrat datum. Tuto metodu mají pouze hodnotové a editační složky. Dá se použít pouze pro typ datum. Výběr data se ukončí buď kliknutím na číslo dne nebo stiskem Enter. Při stisku ESC nebo kliknutí mimo okno se výběr ukončí bez zaznamenání data.

Obdoba v jazyce:

Není.


Metoda Handle

Metody složek formulářů - přehled

Formát:

form.složka.Handle : window_id

Popis:

Metoda vrací handle okna složky formuláře. Pokud formulář obsahuje více záznamů, vrací se handle okna složky ve vybraném záznamu.

Obdoba v jazyce:

Není, lze použít externí funkce Win API GetDlgItem.


Metoda Selection

Metody složek formulářů - přehled

Formát:

form.složka.Selection(start_pos, stop_pos : integer);

Parametry:

start_pos	začátek výběru
stop_pos	konec výběru

Popis:

Metoda se dá použít pro editační složky (jedno- i víceřádkové), složky editační combo a RTF. Metoda vybere úsek textu ve složce od pozice StartPos do StopPos (délky StopPos -StartPos). Pokud mají oba parametry stejnou hodnotu, pak se na tuto pozici nastaví kurzor a nebude vybrán žádný úsek textu. Hodnota -1 označuje konec textu, proto Selection(0,-1) vybere celý text a Selection(-1,-1) přesune kurzor na konec. První znak složky je na pozici nula.

Pouze složka RTF si pamatuje výběr, když nemá fokus, v ostatních druzích složek se vybere celý text, jakmile získají fokus.

Příklad:

vybrat první tři znaky ve složce X_EDIT:

THISFORM.X_EDIT.SELECTION(0,3)

Obdoba v jazyce:

Není.


Metoda Refresh

Metody složek formulářů - přehled

Formát:

form.složka.Refresh

Popis:

Metoda obnoví obsah složky z vyrovnávací paměti pohledu. Pokud obsah vyrovnávací paměti byl změněn (například pomocí editace jiné složky nad stejným sloupcem zdroje dat), pak pomocí této metody lze zobrazit aktuální hodnotu. Pokud byl změněn obsah databáze, pak je třeba místo této metody použít metodu formuláře Reset_view.

Tato metoda je určena pro složky obecného pohledu, pokud je použita ve standardním pohledu, způsobí překreslení celého záznamu.

Obdoba v jazyce:

Není.


Metoda SetFocus

Metody složek formulářů - přehled

Formát:

form.složka.SetFocus

Popis:

Metoda vybere složku a předá ji vstupní fokus.

Obdoba v jazyce:

Není.


Metoda Set_font

Metody složek formulářů - přehled

Formát:

form.složka.Set_font(var facename : string; height : integer; charset : integer; bold, italic, strikeout, underline : Boolean);

Parametry:

facename	název písma
height	velikost písma
charset	zvolená znaková sada (238 pro Střední Evropu)
bold	příznak, má-li být písmo tučné
italic	příznak, má-li být použita kurzíva
strikeout	příznak, má-li být písmo přeškrtnuté
underline	příznak, má-li být písmo podtržené

Popis:

Metoda umožní změnit font ve složce. Stejnou metodu lze použít i na otevřený standardní formulář jako celek.

Více o fontech ve formulářích - podrobnosti.

Příklad:

Změnit font v celém standardním subformuláři

THISFORM.SUBFORM1.SET_FONT("Arial",9,238,true,true,false,false)

Změnit font ve složce s názvem EDIT30

THISFORM.EDIT30.SET_FONT("MS Sans Serif",10,238,true,true,false,false)

Obdoba v jazyce:

Není.


Metoda Signature_check

Metody složek formulářů - přehled

Formát:

form.složka.Signature_check

Popis:

Metoda prověří podpis obsažený ve složce typu podpis. Poté se složka překreslí, aby obsahovala aktuální informaci o stavu podpisu.

Akce odpovídá stisku tlačítka Prověřit na složce typu Podpis.

Obdoba v jazyce:

Není.


Metoda Signature_sign

Metody složek formulářů - přehled

Formát:

form.složka.Signature_sign

Popis:

Metoda vytvoří podpis ve složce typu podpis. Pokud tajný klíč není držen v paměti, uživatel bude vyznán, aby vložil disk s tajným klíčem. Ke smazání existujícího podpisu lze použít metodu SetNull.

Akce odpovídá stisku tlačítka Podepsat na složce typu Podpis.

Obdoba v jazyce:

Není.


Vlastnosti a metody složek formulářů - objektové programování
Vlastnosti a metody složek formulářů

Formulář je tvořen množinou složek různých druhů, například editačních polí, tlačítek, přepínačů apod. S jednotlivými složkami lze manipulovat také pomocí jejich vlastností a metod. Přitom platí tato pravidla:

•	Je-li ve formuláři současně zobrazeno více záznamů, a formulář tedy obsahuje více sad složek, pak vlastností a metody manipulují vždy se složkami ve vybraném záznamu; chcete-li pracovat se složkami jiného záznamu, je nutno tento záznam předem vybrat, například pomocí vlastností formuláře CurPos nebo CurExtRec.

•	Pokud se metody či vlastnosti složky vztahují k hodnotě ve složce, pak je vždy míněna hodnota načtená do formuláře a zobrazena ve formuláři. Obvykle to bývá hodnota z databáze, ale nemusí tomu tak být vždy. Pokud obsah složky nebo obsah databáze byl přepsán, ve složce může být jiná hodnota než v databázi.

•	Zápis nové hodnoty do složky obvykle nezpůsobí automatické bezprostřední zapsání této hodnoty do databáze. Hodnoty zapsané do složek se přepíšou do databáze na základě pravidel specifikovaných pro formulář.

Viz také:	Objektové programování a práce s formuláři
Pokračování:	Vlastnosti složek - přehled
	Metody složek - přehled
	Druhy složek


Řídicí panel - WWW objekty

Základní akce, které je možno s WWW objekty provádět, lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se objeví po stisku pravého tlačítka myši na objektu typu WWW. Podrobnosti o WWW objektech a jejich použití naleznete v podrobné nápovědě přístupné ze stránky Návrhář dynamických HTML stránek.

Vytvořit	vytvoření nového WWW objektu - konektoru, šablony nebo selektoru
Modifikovat	úprava označeného WWW objektu
Zrušit	odstranění označeného WWW objektu
Duplikovat	vytvoření kopie označeného WWW objektu
Připojit	možnost připojení objektu z jiné aplikace
Editovat text	úprava označeného WWW objektu pomocí textového editoru
Exportovat objekt	export objektu do souboru
Importovat objekt	import objektu ze souboru
Práva k objektu	nastavení objektových práv


Návrhář dynamických HTML stránek

Tento návrhář slouží k vytváření WBC konektorů. Tyto konektory spolu s HTW šablonami definují obsah a vzhled dynamicky generovaných HTML stránek, které pracují s databází WinBase602 prostřednictvím některého z WinBase602 Internet klientů.

Pomocí tohoto návrháře můžete nastavovat parametry WBC konektoru a vytvářet a měnit komponenty WBC konektoru.

Pokud chcete pochopit principy provozu dynamických HTML stránek, přečtěte si úvod do vytváření dynamických HTML stránek.


Seznam příkazů v menu

Konektor

Editovat v textovém editoru

Konec editace

Změnit

Parametry konektoru...

Vzorové hodnoty proměnných...

Nápověda

Kontextová nápověda

Seznam témat

O Návrháři dynamických HTML stránek...


Úvod do vytváření dynamických HTML stránek pomocí 602Textu a WinBase602
Úvod do vytváření dynamických HTML stránek

Pomocí těchto nástrojů můžete snadno vytvořit dynamické HTML stránky, které mají číst a zapisovat údaje do databáze WinBase602. V této nápovědě (součást WB602.HLP) naleznete spíše návody "jak na to..." a popisy součástí klienta WinBase602. Referenční příručka je obsažena v manuálu nebo v samostatném souboru nápověd WBCGI.HLP. Spustit WBCGI.HLP.

K čemu slouží tato technologie?

Pomocí dynamických HTML stránek lze vytvořit internetové uživatelské rozhraní libovolné aplikace napsané ve WinBase602.

Nejlepším příkladem použití dynamických HTML stránek je produkt 602WebCatalog (systém pro objednávání zboží prostřednictvím Internetu), jehož internetová uživatelská část je celá vytvořena pomocí těchto dynamických HTML stránek. Tento produkt si můžete vyzkoušet na adrese http://www.software602.cz.

Dalším produktem, jehož internetová uživatelská část je celá vytvořena pomocí této technologie, je 602WebForum (diskusní fórum, do kterého přispívají účastníci prostřednictvím Internetu). Pomocí 602WebForum je realizována on-line podpora produktů, které vyvíjí a prodává Software602, a.s. Tato on-line podpora je umístěna na adrese http://www.software602.cz.

Co je potřebné k provozu dynamických HTML stránek?

1. WinBase602 SQL server (případně také WinBase602 Personální databáze)

2. WinBase602 Internet klienta (je součástí dodávky WinBase602 SQL serveru)

3. webserver, který podporuje aspoň jeden z protokolů CGI, FastCGI, ISAPI

Co je potřebné k vytváření dynamických HTML stránek?

1. Editor, který umožňuje psát HTML zdrojový text (např. 602Text )- pomocí něj navrhujete vzhled stránek

2. WinBase602 (libovolnou instalaci) - součástí WinBase602 je tento Návrhář, pomocí kterého stanovujete, které akce má dynamická HTML stránka provádět s databází (tj. např. které údaje se mají z databáze přečíst, které údaje se mají do databáze zapsat atd.). Návrhář je volaný 602Textem při nastavování akce formulářového tlačítka typu Submit.

Pokračování:

Jakým způsobem jsou při provozu vytvářeny dynamické HTML stránky?


Jak jsou při provozu vytvářeny dynamické HTML stránky

Bližší představu o mechanismu tvorby dynamické HTML stránky Vám dá následující obrázek:

Při vytváření dynamické HTML stránky spolupracuje několik aplikací:

1. www browser - s touto aplikací pracuje uživatel, browser odesílá požadavky webserveru a zobrazuje výslednou stránku

2. webserver - komunikuje s browserem, předává uživatelův požadavek WinBase602 Internet klientovi, přebírá od něj sestavenou stránku a odesílá ji browseru

3. WinBase602 Internet klient

- přebere od webserveru požadavek na sestavení dynamické HTML stránky

- vyhledá a přečte WBC konektor (jeho název je obsažen v požadavku, který Internet klient obdržel od webserveru) a provede operace s databází, které jsou popsány v tomto konektoru (tj. typicky sestaví a provede SQL příkazy a v případě příkazu SELECT přečte ty údaje z databáze, které vyhovují podmínce v příkazu SELECT)

- vyhledá a přečte HTW šablonu a podle ní sestaví výslednou HTML stránku, přičemž podle příkazů v šabloně zformátuje přečtené údaje z databáze do výsledné stránky

- výslednou stránku předá webserveru

4. WinBase602 SQL server - spravuje data, se kterými pracuje daná aplikace a provádí SQL příkazy, které sestavil Internet klient; uchovává WBC konektory a HTW šablony

Struktura požadavku, který vysílá www browser a který obdrží Internet klient, je následující:

Zároveň s požadavkem www browser vysílá také seznam tzv. formulářových proměnných a jejich hodnot. Jsou to údaje, které uživatel zadal v HTML formuláři (tag <FORM>), respektive v jednotlivých prvcích formuláře (tagy <INPUT>). Internet klient je volán typicky v okamžiku, kdy uživatel stiskne tlačítko SUBMIT (tj. <INPUT TYPE=”SUBMIT” VALUE=”Odeslat”>) a Internet klient zpracuje zadané údaje (které dostane prostřednictvím formulářových proměnných) a vygeneruje HTML stránku, kterou následně browser zobrazí.

WinBase602 Internet klienti jsou realizováni formou skriptů, které rozšiřují možnosti webserveru. Z tohoto důvodu je nutno v požadavku uvést adresář se skripty webserveru a také název skriptu (tj. Internet klienta), který má vyřídit tento požadavek (protože samotný webserver neumí sestavovat dynamické HTML stránky s údaji z databáze WinBase602).

Místo názvu konektoru lze uvést název HTW šablony, která však musí obsahovat tzv. WBC sekci, což je vlastně konektor ve zcela stejné podobě, v jaké by byl v samostatném souboru.


WinBase602 Internet klienti

Jsou to programy, které zpracovávají WBC konektory a HTW šablony a podle nich provádějí požadované akce s databází a generují dynamické HTML stránky.

Jsou realizovány ve formě skriptů, které rozšiřují schopnosti webserveru. Bližší představu o principu jejich činnosti naleznete zde.

S WinBase602 SQL serverem se dodává několik druhů Internet klientů: CGI klient, FastCGI klient, ISAPI klient a LCGI klient. Tito klienti rozumějí naprosto stejným WBC a HTW příkazům a z toho samého konektoru a šablony vygenerují naprosto stejnou HTML stránku. Jejich jedinou odlišností je komunikační protokol, kterým komunikují s webserverem. Každý Internet klient je pojmenován podle toho komunikačního protokolu, který “ovládá”.

Pokračování:

Další informace o Internet klientech (např. popis instalace k webserveru atd.) naleznete v souboru Přečtěte si o CGI, který byl nainstalován spolu s WinBase602 a jehož zástupce (shortcut) naleznete v seskupení WinBase602.


Co je WBC konektor

WBC konektor je buď samostatný objekt kategorie WWW objekty v databázi WinBase602, nebo část HTW šablony. Jsou v něm popsány jazykem WBC konektorů následující informace:

- SQL příkazy a procedury ve vnitřním programovacím jazyku WinBase602, které musí být provedeny, aby bylo možno sestavit výslednou HTML stránku, a ostatní komponenty

- ostatní parametry

Název WBC konektoru je obsažen v požadavku, který převezme Internet klient od webserveru (blíže viz mechanismus sestavování výsledné HTML stránky).

Pomocí tohoto Návrháře dynamických HTML stránek vytváříte WBC konektor, pomocí HTML editoru vytváříte HTW šablonu. Další možností je vytvářet WWW objekty přímo ve vývojovém prostředí WinBase602. Tento Návrhář je i v tomto případě využíván.

Pokračování:

Podrobný popis jazyka WBC konektorů je součástí Příručky SQL serveru ze sady manuálů k WinBase602 SQL serveru, nebo jej lze nalézt v Nápovědě k CGI klientovi (wbcgi.hlp - součást instalace WinBase602).


Co je HTW šablona

Je to databázový objekt kategorie WWW objekty, který obsahuje jednak text ve formátu HTML, jednak speciální HTW příkazy, kterými je řízeno formátování dat z databáze do HTML textu. Internet klient provádí toto formátování dat do HTML textu podle výše zmíněných HTW příkazů. Výsledkem práce Internet klienta je text pouze ve formátu HTML, tj. bez HTW příkazů (blíže viz mechanismus sestavování výsledné HTML stránky).

HTW šablony lze vytvářet vizuálně pomocí libovolného HTML editoru, nebo přímo ve vývojovém prostředí WinBase602.

Pokračování:

Podrobný popis HTW příkazů je uveden v Příručce SQL serveru ze sady manuálů k WinBase602 SQL serveru, nebo v Nápovědě k CGI klientovi (wbcgi.hlp - součást instalace WinBase602).


Co jsou komponenty WBC konektoru
Komponenty WBC konektoru

Jsou to SQL příkazy a zdrojové texty ve vnitřním programovacím jazyku WinBase602, které jsou prováděny při běhu konektoru. Např. konektor může pomocí SQL příkazu INSERT vytvořit nový záznam v tabulce a pomocí SQL příkazu SELECT vybrat z téže tabulky záznamy, které posléze HTW šablona zformátuje do HTML textu.

Při běhu konektoru jsou komponenty prováděny v tom samém pořadí, v jakém jsou zobrazeny v hlavním okně Návrháře.

WBC konektor obsahuje komponenty čtyř druhů:

1. SQLStatement - SQL příkazy (SELECT, INSERT, UPDATE, DELETE)

2. Program - zdrojové texty ve vnitřním programovacím jazyku WinBase602

3. GetVariable - zpřístupňují globální proměnné programů aplikace WinBase602 v HTW šabloně

4. komentář - používá se na psaní krátkých poznámek k WBC konektoru

Pokračování:

Co je WBC konektor.

Jak vytvořit komponentu.

Jak editovat komponentu.

Jak smazat komponentu.

Jak změnit pořadí komponent.


Co je komponenta SQLStatement
Komponenta SQLStatement

Je to SQL příkaz, který bude prováděn při běhu konektoru.

K vytváření a editaci SQL příkazů SELECT je využíván Návrhář dotazů, který je součástí vývojového prostředí WinBase602. Práce s Návrhářem dotazů je popsána v manuálech, které jsou dodávány s WinBase602, nebo také v nápovědě, která se zobrazí po stisknutí klávesy F1, když je tento Návrhář aktivní.

SQL příkazy INSERT jsou vytvářeny pomocí Průvodce vytvořením SQL příkazu INSERT.

Ostatní SQL příkazy (např. UPDATE, DELETE) jsou vytvářeny a editovány v textovém editoru.

SELECT

Je to dotaz, kterým vybíráme řádky z tabulek v databázi, které vyhovují podmínce zapsané v dotazu. Výsledkem dotazu je seznam řádků, které vyhovují podmínce. Tento výsledek musíme pojmenovat nějakým názvem, který začíná písmenem anglické abecedy, nebo znakem podtržítko, obsahuje písmena anglické abecedy, znak podtržítko, nebo číslice a je libovolně dlouhý. Tímto názvem se na výsledek odkazujeme v HTW šabloně při formátování údajů z databáze do HTML textu.

Pokud v hlavním okně Návrháře dynamických HTML stránek klikneme pravým tlačítkem myši na komponentě typu SQLStatement, která obsahuje příkaz SELECT, zobrazí se toto kontextové menu:

 Dotaz vytváříme a editujeme pomocí Návrháře dotazů, který je součástí vývojového prostředí WinBase602. Návrhář dotazů spustíme pomocí příkazu Změnit z kontextového menu. Práce s Návrhářem dotazů je popsána v manuálech, které jsou dodávány s WinBase602, nebo také v nápovědě, která se zobrazí po stisknutí klávesy F1, když je tento Návrhář aktivní.

Ve vlastnostech SELECTu (příkaz Vlastnosti SELECTu z kontextového menu) můžeme dále uvést, že se mají z databáze přečíst pouze některé řádky, a také zde můžeme pojmenovat výsledek SELECTu.

Příkazem Změnit - editovat text můžeme editovat textovou podobu příkazu SELECT v textovém editoru.

Ostatní SQL příkazy

Všechny ostatní SQL příkazy editujeme v textovém editoru.

Příkaz INSERT vytváříme Průvodcem vytvořením příkazu INSERT, úpravy příkazu po jeho vytvoření provádíme opět v textovém editoru.


Co je komponenta Program
Komponenta Program

V této komponentě můžeme napsat (a při běhu konektoru provádět) libovolné příkazy vnitřního programovacího jazyka WinBase602. Každá komponenta Program může mít nastavený tzv. projekt. Projektem rozumíme objekt typu program definovaný v aplikaci WinBase602 v databázi, se kterou daný konektor pracuje. Pokud komponenta Program nastavuje projekt, můžeme v této komponentě volat procedury a funkce definované v projektu a nastavovat a číst hodnoty globálních proměnných projektu. Jiný projekt bude nastaven až v okamžiku, kdy začne provádění další komponenty Program, která nastavuje projekt.

Typicky komponenta Program nastavuje určitý projekt a tělo komponenty Program sestává pouze z volání určité procedury projektu.

Příklad:

Mějme aplikaci pro sběr objednávek po Internetu. V daném konektoru chceme založit novou objednávku a zapsat do databáze její údaje. Vytvoříme komponentu Program s následujícím obsahem; komponenta Program nastavuje projekt Web_objednavka, ve kterém je definována procedura Vytvor_novou_objednavku, která zakládá novou prázdnou objednávku a její číslo zapíše do globální proměnné cislo_nove_objednavky:

Vytvor_novou_objednavku;

Následně pomocí komponenty GetVariable získáme číslo nové objednávky:

proměnná v projektu: cislo_nove_objednavky

její alias v šabloně: nova_obj

A nyní můžeme pomocí SQL příkazu UPDATE zapsat údaje o objednávce:

UPDATE objednavky

SET firma="%firma%", adresa="%adresa%", datum=Today

WHERE cislo_objednavky=%nova_obj%;

Pokračování:

Podrobnější popis (spolu s příklady použití) lze nalézt v Nápovědě k CGI klientovi.


Co je komponenta GetVariable
Komponenta GetVariable

Pomocí této komponenty můžeme vytvořit kopii (alias) globální proměnné projektu, pomocí kterého se můžeme na tuto proměnnou odkazovat v HTW šabloně a v komponentách konektoru, které následují za touto komponentou GetVariable.

Aby bylo zřejmé, ze kterého projektu bude globální proměnná zkopírována, musí být před komponentou GetVariable komponenta Program, která nastavuje požadovaný projekt.

Ve zbytku konektoru se na hodnotu proměnné odkazujeme pomocí zápisu:
%alias%

V šabloně se na proměnnou odkazujeme přímo, bez znaků procenta. Např. citace této proměnné v šabloně se zadá zápisem:
<% alias %>

Pokračování:

Podrobnější popis (spolu s příklady použití) lze nalézt v Nápovědě k CGI klientovi..


Co je komponenta komentář
Komponenta komentář

Obsahem této komponenty může být libovolně dlouhý libovolný text. Komponenty tohoto typu jsou při běhu konektorů ignorovány. Slouží pro vkládání krátkých popisů do konektoru, které pomáhají autorovi snadněji se v konektoru orientovat.


Dialog Vlastnosti komentáře

V tomto okně můžete upravit text komentáře. Komentář je jeden z několika druhů komponent WBC konektoru.

Tento dialog otevřeme stisknutím tlačítka Změnit v hlavním okně Návrháře, zatímco je v seznamu komponent vybrána komponenta typu komentář, nebo při vytváření nové komponenty typu komentář (tlačítkem Vytvořit v hlavním okně Návrháře).

Pokračování:

Co je to WBC konektor

Co jsou komponenty WBC konektoru

Co je komponenta komentář


Dialog Vlastnosti komponenty GetVariable

V rozvinovacím seznamu Proměnná projektu vybereme název globální proměnné projektu, který nastavuje komponenta typu Program předcházející této komponentě typu GetVariable.

V editačním řádku Její alias v šabloně zadáme, pod jakým jménem chceme mít vybranou globální proměnnou přístupnou v šabloně a v komponentách WBC konektoru, které následují po této komponentě typu GetVariable.

Tento dialog otevřeme stisknutím tlačítka Změnit v hlavním okně Návrháře, zatímco je v seznamu komponent vybrána komponenta typu GetVariable, nebo při vytváření nové komponenty typu GetVariable (tlačítkem Vytvořit v hlavním okně Návrháře).

Pokračování:

Co je to WBC konektor

Co jsou komponenty WBC konektoru

Co je komponenta GetVariable


Dialog Komponenta SQLStatement

V editačním boxu upravte zdrojový text komponenty SQLStatement.

Odkazy na vstupní formulářové proměnné můžete do textu vložit tak, že nejdříve umístíte kurzor ve zdrojovém textu komponenty na to místo, kam chcete vložit odkaz. Dále v rozvinovacím seznamu Formulářové proměnné vyberete proměnnou, jejíž odkaz chcete vložit do textu. Nyní stisknete tlačítko [image] a na místo, kde se nachází kurzor, bude vložen odkaz na vybranou formulářovou proměnnou.

Komponentu uložíte tlačítkem Uložit, provedené změny odvoláte tlačítkem Storno.

Tento dialog je otevřen tlačítkem Změnit v hlavním okně Návrháře, pokud je zároveň vybrána v seznamu komponent komponenta SQLStatement, která není SELECT. Stejný dialog je použit v případě, že je zvolen příkaz Změnit - editovat text z kontextového menu komponenty SQLStatement SELECT, která se nachází v seznamu komponent v hlavním okně Návrháře.

Pokračování:

Co je to WBC konektor

Co jsou komponenty WBC konektoru

Co je komponenta SQLStatement


Dialog Komponenta Program

V editačním boxu upravte zdrojový text komponenty Program.

Projekt, který bude nastavovat tato komponenta, vyberte z rozvinovacího seznamu Projekt. V tomto seznamu jsou všechny programy ve vnitřním jazyku WinBase602, které jsou definovány v aplikaci, se kterou konektor pracuje.

Odkazy na vstupní formulářové proměnné můžete do textu vložit tak, že nejdříve umístíte kurzor ve zdrojovém textu komponenty na to místo, kam chcete vložit odkaz. Dále v rozvinovacím seznamu Formulářové proměnné vyberete proměnnou, jejíž odkaz chcete vložit do textu. Nyní stisknete tlačítko [image] a na místo, kde se nachází kurzor, bude vložen odkaz na vybranou formulářovou proměnnou.

Komponentu uložíte tlačítkem Uložit, provedené změny odvoláte tlačítkem Storno.

Tento dialog je otevřen tlačítkem Změnit v hlavním okně Návrháře, pokud je zároveň vybrána v seznamu komponent komponenta Program.

Pokračování:

Co je to WBC konektor

Co jsou komponenty WBC konektoru

Co je komponenta Program


Dialog Vlastnosti komponenty SQLStatement - SELECT

V editačním řádku Pojmenování výsledku SELECTu zadejte název, kterým se budete v šabloně odvolávat na výsledek tohoto příkazu SELECT, tj. na řádky (záznamy), které vyhovují podmínce v tomto příkazu SELECT.

Dále můžete zadat, zda budou přečteny z databáze všechny vyhovující řádky (přepínač všechny, které vyhovují dotazu), nebo zda budou přečteny jen některé (přepínač jen některé z vyhovujících, a to). Ve druhém případě zadejte v editačním řádku od záznamu číslo pořadové číslo prvního záznamu, který má být přečten z databáze a buď zatrhněte přepínač pouze tento záznam (pak bude přečten ze všech vyhovujících záznamů pouze tento), nebo zatrhněte přepínač prvních a zadejte, kolik záznamů má být z databáze přečteno.

Tento dialog je vyvolán příkazem Vlastnosti SELECTu z kontextového menu komponenty SQLStatement typu SELECT v seznamu komponent v hlavním okně Návrháře.

Pokračování:

Co je to WBC konektor

Co jsou komponenty WBC konektoru

Co je komponenta SQLStatement


Dialog WBC konektor

V editačním boxu upravte zdrojový text konektoru.

Odkazy na vstupní formulářové proměnné můžete do textu vložit tak, že nejdříve umístíte kurzor ve zdrojovém textu komponenty na to místo, kam chcete vložit odkaz. Dále v rozvinovacím seznamu Formulářové proměnné vyberete proměnnou, jejíž odkaz chcete vložit do textu. Nyní stisknete tlačítko [image] a na místo, kde se nachází kurzor, bude vložen odkaz na vybranou formulářovou proměnnou.

Konektor uložíte tlačítkem Uložit, provedené změny odvoláte tlačítkem Storno.

Tento dialog je otevřen, pokud stisknete tlačítko Textový editor v hlavním okně Návrháře, nebo při pokusu o editaci konektoru, který je příliš složitý na to, aby jej bylo možno editovat vizuálním editorem.

Pokračování:

Co je to WBC konektor

Jazyk WBC konektorů je popsán v Nápovědě k CGI klientovi, která byla nainstalována spolu s WinBase602 SQL serverem.


Dialog Parametry WBC konektoru

V tomto dialogu nastavujete následující parametry konektoru:

1. Šablona, podle které má být vygenerována dynamická HTML stránka (Šablony - pro odpověď); pokud je editovaný WBC konektor součástí HTW šablony, tento údaj se nezadává (ovládací prvky jsou šedé).

2. Šablona, podle které má být vygenerována dynamická HTML stránka, pokud při zpracování konektoru, nebo šablony pro odpověď nastala chyba (Šablony - chybová); pokud není tato šablona zvolena a nastane chyba při zpracování, použije se standardní chybová šablona.

3. Vstupní proměnné, jejichž předání do WBC konektoru má být vyžadováno (pokud aspoň jedna z těchto vstupních formulářových proměnných nebude předána do WBC konektoru, zpracování skončí s chybou). Jsou uvedeny v seznamu RequiredValues.
Do seznamu přidáváme proměnnou tak, že ji vybereme v rozvinovacím seznamu název proměnné a v editačním řádku počet hodnot zadáme, kolik hodnot této proměnné má být vyžadováno. Následně stiskneme tlačítko Přidat.
Proměnnou odstraníme ze seznamu tak, že ji v seznamu vybereme a stiskneme tlačítko Smazat.
Počet hodnot proměnné, která už je v seznamu, změníme tak, že ji opět v seznamu vybereme a stiskem klávesy F2 vyvoláme editační řádek s počtem hodnot, upravíme počet hodnot a stiskneme klávesu Enter.

4. RunProgram: je to název vnitřního programu v aplikaci WinBase602, který obsahuje proceduru RunProgram, podle které má být vygenerována výsledná dynamická HTML stránka. Tento způsob generování je zcela odlišný od klasického, tj. od toho, že v konektoru jsou vykonány SQL příkazy a v šabloně jsou získaná data pomocí formátovacích příkazů zalámána do HTML textu. Princip fungování procedury RunProgram je takový, že v šabloně jsou pouze stanovena pojmenovaná místa v HTML textu (tzv. návěští) a v proceduře RunProgram je procedurálním způsobem vkládán libovolný text na tato návěští. V šabloně může být definováno libovolné množství návěští a v proceduře RunProgram může být libovolně dlouhý text vkládán na libovolná návěští libovolně-krát.
Tato problematika je podrobněji diskutována v Nápovědě k CGI klientovi.

5. V editačním řádku MaxRecords lze stanovit, kolik záznamů může být maximálně přečteno z databáze při čtení odpovědi na SQL příkaz SELECT.

Tento dialog lze otevřít pomocí příkazu Změnit | Parametry konektoru... v menu hlavního okna Návrháře.


Dialog Návrhář dynamických HTML stránek

Jedná se o hlavní okno Návrháře. Je v něm zobrazen seznam komponent editovaného WBC konektoru (v seznamu Seznam komponent v konektoru). Vpravo od seznamu jsou tlačítka, kterými lze manipulovat s komponentami (přidávat nové, měnit existující, mazat existující a měnit jejich pořadí).

Toto okno má také nabídku příkazů (menu).

V titulku okna je název editovaného WBC konektoru (nebo HTW šablony, ve které je editovaný konektor umístěn). Tento název je vypsán v hranatých závorkách za názvem okna.

Ve stavovém řádku (u spodního okraje okna) jsou vypisovány krátké pokyny, informace o činnosti Návrháře a krátká nápověda k jednotlivým příkazům v menu. Např. pokud přesuneme kurzor myši nad některé tlačítko v dialogu, bude ve stavovém řádku vypsán popis jeho funkce.

Jak...

vytvořit novou komponentu

změnit existující komponentu

smazat existující komponentu

změnit pořadí komponent

Co je...

WBC konektor

komponenta WBC konektoru

HTW šablona

Úvod do vytváření dynamických HTML stránek pomocí WinTextu602 a WinBase602.


Jak vytvořit novou komponentu

Komponenty vytváříme v hlavním okně Návrháře tlačítkem Vytvořit. Po jeho stisku se zobrazí kontextové menu, ze kterého vybereme typ nové komponenty.

V následujícím dialogu upravíme vlastnosti nové komponenty.

Další možností je vyvolat kontextové menu (kliknutím pravým tlačítkem myši) kdekoliv v seznamu komponent a v něm buď rozvinout submenu Vytvořit a v něm zvolit typ (pokud bylo kontextové menu vyvoláno pro některou z už existujících komponent) nebo přímo zvolit typ nové komponenty (v ostatních případech).

Nová komponenta bude přidána za momentálně vybranou komponentu v seznamu komponent.

Pokračování:

Co je WBC konektor.

Co jsou komponenty WBC konektoru.

Jak editovat komponentu.

Jak smazat komponentu.

Jak změnit pořadí komponent.


Jak editovat komponentu

V hlavním okně Návrháře vybereme tuto komponentu v seznamu komponent a stiskneme tlačítko Změnit.

Další možností je vyvolat kontextové menu komponenty, kterou chceme editovat a v něm zvolit příkaz Změnit.

Kontextové menu komponenty typu SQLStatement, která obsahuje příkaz SELECT, vypadá takto:

Dotaz editujeme pomocí Návrháře dotazů, který je součástí vývojového prostředí WinBase602. Návrhář dotazů spustíme pomocí příkazu Změnit z kontextového menu. Práce s Návrhářem dotazů je popsána v manuálech, které jsou dodávány s WinBase602, nebo také v nápovědě, která se zobrazí po stisknutí klávesy F1, když je tento Návrhář aktivní.

Ve vlastnostech SELECTu (příkaz Vlastnosti SELECTu z kontextového menu) můžeme dále uvést, že se mají z databáze přečíst pouze některé řádky, a také zde můžeme pojmenovat výsledek SELECTu.

Příkazem Změnit - editovat text můžeme editovat textovou podobu příkazu SELECT v textovém editoru.

Pokračování:

Co je WBC konektor.

Co jsou komponenty WBC konektoru.

Jak vytvořit komponentu.

Jak smazat komponentu.

Jak změnit pořadí komponent.


Jak smazat komponentu

V hlavním okně Návrháře v seznamu komponent vybereme tuto komponentu a stiskneme tlačítko Odstranit. Tím bude vybraná komponenta smazána.

Další možností je vyvolat kontextové menu komponenty, kterou chceme smazat, a v něm zvolit příkaz Odstranit.

Pokračování:

Co je WBC konektor.

Co jsou komponenty WBC konektoru.

Jak vytvořit komponentu.

Jak editovat komponentu.

Jak změnit pořadí komponent.


Jak změnit pořadí komponent

V hlavním okně Návrháře můžeme přesouvat vybranou komponentu v seznamu komponent pomocí tlačítek Nahoru a Dolu.

Dále lze využít myši, konkrétně techniky drag and drop. Nejdříve komponentu uchopíme (přesuneme na ni kurzor myši, stiskneme levé tlačítko myši a držíme jej stisknuté). Nyní vybereme pohybem myši komponentě jiné místo v seznamu, přičemž stále držíme stisknuté levé tlačítko. Uvolněním levého tlačítka myši přesuneme vybranou komponentu na jiné místo v seznamu komponent.

Proč měnit pořadí komponent

Pořadí komponent v konektoru je důležité při provádění konektoru. Jednotlivé komponenty jsou prováděny WinBase602 Internet klientem v tom pořadí, v jakém jsou zobrazeny v Návrháři. Je tedy nutné např. příkaz INSERT (tj. komponenta SQLStatement - INSERT) umístit před příkaz SELECT (předp. oba příkazy pracují se stejnou tabulkou), aby se ve výsledku příkazu SELECT mohl objevit příkazem INSERT nově vytvořený záznam. Naopak pokud nechceme, aby do výsledku příkazu SELECT byl zahrnut nově vytvořený záznam, musíme příkaz SELECT umístit před příkaz INSERT.

Pořadí komponent je zcela zásadní pro správné použití komponenty GetVariable. Tato komponenta vytváří kopii globální proměnné projektu, který musí nastavit komponenta Program, která musí být umístěna před komponentou GetVariable.

Pokračování:

Co je WBC konektor.

Co jsou komponenty WBC konektoru.

Co je komponenta SQLStatement

Co je komponenta Program

Co je komponenta GetVariable

Jak vytvořit komponentu.

Jak editovat komponentu.

Jak smazat komponentu.


Průvodce vytvořením SQL příkazu INSERT - úvod
Průvodce vytvořením SQL příkazu INSERT
>> krok 1

Tento Průvodce Vám pomůže vytvořit nový SQL příkaz INSERT. Pomocí tohoto příkazu se vytváří nový záznam (řádek) v databázové tabulce. V rámci tohoto příkazu předepisujete hodnoty některých sloupců nově vytvářeného řádku databázové tabulky.

Další podrobnosti o databázových tabulkách a o příkazu INSERT naleznete v Nápovědě WinBase602, nebo v manuálech k WinBase602.

V tomto úvodním kroku Průvodce si přečtěte pokyny pro práci s ním a stiskněte tlačítko Next > (Další >).

Průvodce je spuštěn, pokud vytváříte novou komponentu WBC konektoru typu SQLStatement - INSERT.


Průvodce vytvořením SQL příkazu INSERT - výběr tabulky
<< pokyny  >> krok 2

Nejdříve musíte vybrat tabulku, do které bude tento příkaz INSERT přidávat nové záznamy.

Seznam tabulek, které jsou definovány v aplikaci WinBase602, je zobrazen v rozvinovacím seznamu Tabulka. Vyberte jednu z těchto tabulek a přejděte k následujícímu kroku Průvodce.


Průvodce vytvořením SQL příkazu INSERT - výběr sloupců
<< krok 1  >> krok 3

Vyberte sloupce, jejichž hodnoty bude tento příkaz INSERT nastavovat v nově vytvořeném řádku databázové tabulky.

Je zobrazen seznam jmen sloupců spolu s jejich typy. V tomto seznamu pomocí myši označte ty sloupce, které bude INSERT nastavovat.

Tlačítkem Vybrat vše můžete vybrat všechny sloupce dané tabulky.

Tlačítkem Nevybrat nic můžete zrušit vybrání sloupců.


Průvodce vytvořením SQL příkazu INSERT - hodnoty sloupců
<< krok 2 >> krok 4

V tomto kroku Průvodce je třeba určit hodnoty všech sloupců, které bude příkaz INSERT nastavovat.

V seznamu Sloupce a jejich hodnoty jsou zobrazeny vybrané sloupce, jejich typ a hodnotu, kterou bude mít nastaven nově vytvářený záznam. Dále je v seznamu Formulářové proměnné zobrazen seznam vstupních formulářových proměnných.

Hodnotu určitému sloupci nastavíme (změníme) takto: Nejdříve jej vybereme v seznamu sloupců. Dále v editačním řádku Hodnota vybraného sloupce upravíme hodnotu sloupce. Nakonec stiskneme tlačítko Nastavit.

Při úpravě hodnoty vybraného sloupce můžeme využít seznam vstupních formulářových proměnných. Dvojitým kliknutím na určité proměnné bude na aktuální místo kurzoru v editačním řádku Hodnota vybraného sloupce přidána citace hodnoty této proměnné.

Musíme nastavit hodnoty všech sloupců, které jsme označili v předcházejícím kroku Průvodce. Stiskem tlačítka Next (Další) Průvodce přejde k poslednímu kroku.


Průvodce vytvořením SQL příkazu INSERT - čtení nově vytvořeného záznamu
<< krok 3

Zatrhněte čtvereček, pokud chcete, aby záznam vytvořený SQL příkazem INSERT byl automaticky přečten a aby s ním bylo možno pracovat v šabloně (např. pro kontrolu vypsat hodnoty jednotlivých sloupců).

Pokud nechcete tuto možnost aktivovat, ponechte čtvereček nezatržený a stiskněte tlačítko Finish (Dokončit). Pak bude vytvořen normální SQL příkaz INSERT.

Aby bylo možno automaticky přečíst nově vložený záznam, je třeba aby tabulka, do které je záznam vkládán, splňovala následující podmínky:

•	tabulka musí obsahovat sloupec typu Date (datum), jehož implicitní hodnota je TODAY, nebo CURRENT_DATE.

•	dále musí tabulka obsahovat sloupec typu Time (čas), jehož implicitní hodnota je NOW, nebo CURRENT_TIME.

Oba tyto sloupce je nutno zadat do rozvinovacích seznamů (combo) Sloupec typu Date (datum) a Sloupec typu Time (čas). Tyto ovládací prvky se objeví až po zaškrtnutí čtverečku (checkbox). Tyto seznamy obsahují všechny sloupce daného typu, které daná tabulka obsahuje.

Pokud chcete, aby Průvodce přidal k tabulce nové sloupce, které splňují požadované podmínky, pak žádný sloupec ze seznamu nevybírejte, ale do editační části seznamu zadejte název nového sloupce. V tomto případě Průvodce při vytváření SQL příkazu INSERT zmodifikuje definici vybrané tabulky a přidá k ní nové sloupce.

Pozor: musíte mít dostatečná práva, která umožňují modifikovat definici tabulky!

Dále je nutno zadat název, pod kterým bude v šabloně přístupný nově přidaný záznam (editační řádek Pojmenování záznamu). Při provádění konektoru bude totiž vytvořen SQLStatement SELECT, který vybere právě tento nově přidaný záznam a výsledek tohoto SELECTu bude pojmenován tímto názvem.

Po zadání všech údajů stiskněte tlačítko Finish (Dokončit) a Průvodce vytvoří požadovaný SQL příkaz INSERT INTO.


Dialog Vzorové hodnoty vstupních proměnných

V seznamu vstupních proměnných jsou uvedeny ty vstupní formulářové proměnné, jejichž citace jsou obsaženy v SQL příkazu, který je právě analyzován (např. jsou zjišťovány sloupce SQL příkazu SELECT, nebo je zjišťován typ určitého sloupce). Pokud byl dialog vyvolán příkazem Změnit|Vzorové hodnoty proměnných... z menu, pak seznam obsahuje všechny proměnné, kterým byly dosud nastaveny vzorové hodnoty.

Vyberte vstupní proměnnou v seznamu, stiskněte klávesu F2, nebo myší poklepejte (doubleclick) na názvu proměnné. V editačním řádku změňte vzorovou hodnotu.

Stiskem OK dialog ukončete.

Tento dialog je zobrazen v okamžiku, kdy Návrhář provádí analýzu SQL příkazu, který obsahuje citace vstupních formulářových proměnných. Druhou možností, jak vyvolat tento dialog, je použít příkaz Změnit|Vzorové hodnoty proměnných... z menu hlavního okna Návrháře.

Pokračování:

K čemu se používají vzorové hodnoty vstupních proměnných


Co jsou vzorové hodnoty vstupních proměnných

Tyto hodnoty používá Návrhář v okamžiku, kdy musí analyzovat SQL příkaz, který obsahuje citace vstupních formulářových proměnných. Při analýze se zjišťuje, které sloupce obsahuje odpověď na SQL příkaz, typy těchto sloupců atd.

Takový příkaz (např. SELECT * FROM tabulka WHERE příjmení.=”%začátek%”) nelze analyzovat v této podobě, je třeba nahradit citace vstupních formulářových proměnných (v tomto případě se jedná o proměnnou začátek) jejich hodnotami. Při běhu konektorů a šablon tímto způsobem pracuje WinBase602 Internet klient, přičemž hodnoty proměnných přebírá z webového browseru, kam je zadává internetový uživatel.

Vzorové hodnoty vstupních formulářových proměnných jsou právě ty hodnoty, které používá Návrhář při analýze SQL příkazů.

Vlastnosti vzorových hodnot

Vzorové hodnoty se zaznamenávají do zdrojového tvaru konektoru, a to ve formě komentáře:

;var jméno_proměnné=vzorová_hodnota_proměnné

Návrhář uchovává jednou zadanou vzorovou hodnotu i pro pozdější použití. Jednou zadanou vzorovou hodnotu lze změnit příkazem Změnit|Vzorové hodnoty proměnných... z menu hlavního okna Návrháře.

Pokračování:

Dialog Vzorové hodnoty vstupních proměnných


Dialog Vlastnosti komponenty SQLStatement

Tyto vlastnosti má smysl nastavovat pouze pro SQL příkaz INSERT INTO, který automaticky po vložení nového záznamu tento záznam přečte. Pro ostatní SQL příkazy (např. UPDATE, DELETE, INSERT INTO bez automatického přečtení nového záznamu atd.) nemá smysl nastavovat jakékoliv vlastnosti.

V editačním řádku Pojmenování výsledku zadejte název, pod kterým bude zpřístupněn nově vložený záznam v šabloně. V šabloně se lze na tento záznam odkazovat pomocí tečkové notace: pojmenování_výsledku.název_sloupce.

Dále (pro INSERT INTO s automatickým přečtením nového záznamu) vyberte sloupce typu Date/datum a Time/čas, prostřednictvím kterých bude realizováno automatické přečtení nového záznamu.

Stiskem OK uzavřete dialog.

Pokračování:

Co je SQL příkaz INSERT INTO s automatickým přečtením nového záznamu


Co je SQL příkaz INSERT INTO s automatickým přečtením nového záznamu

SQL příkaz INSERT INTO vkládá nový záznam (řádek) do databázové tabulky.

V prostředí webu je často třeba takový nově vložený záznam vypsat pro kontrolu na následující stránce. Např. uživatel zadá údaje o sobě do formuláře a na následující stránce je třeba tyto údaje vypsat pro kontrolu, a to ty údaje, které byly skutečně zapsány do databáze.

Právě tento problém řeší SQL příkaz INSERT INTO s automatickým přečtením nového záznamu. Tento příkaz okamžitě pro vložení nového záznamu do tabulky tento záznam z tabulky přečte (pomocí SQL příkazu SELECT). Tím je zajištěno, že jsou opravdu přečteny údaje, které byly zapsány do databáze.

Jak se vytváří

Tento SQL příkaz INSERT INTO se vytváří pomocí Průvodce vytvořením SQL příkazu INSERT. Tohoto Průvodce lze spustit příkazem SQLStatement - INSERT z menu, které se zobrazí po stisknutí tlačítka Vytvořit v hlavním okně Návrháře.

V posledním kroku Průvodce je třeba zatrhnout čtvereček ano, přečíst nově vytvořený záznam z databáze a dále je třeba zadat další potřebné údaje. Tyto úkony jsou popsány v nápovědě k tomuto poslednímu kroku Průvodce.

Co musí splňovat tabulka

Tabulka, ze které má být čten právě vložený záznam, musí mít definovány následující sloupce:

•	sloupec typu Date (datum), který obsahuje datum vytvoření daného záznamu

•	sloupec typu Time (čas), který obsahuje čas vytvoření daného záznamu

Typicky bude mít sloupec typu Date předepsánu implicitní hodnotu CURRENT_DATE a sloupec typu Time CURRENT_TIME. Hodnoty těchto sloupců nesmí být zadávány SQL příkazem INSERT INTO (jinak by se neuplatnily výše uvedené implicitní hodnoty).

Průvodce vytvořením SQL příkazu INSERT může také modifikovat definici použité tabulky a tím v ní vytvořit nové sloupce požadovaných typů a vlastností.

Pokračování:

Průvodce vytvořením SQL příkazu INSERT


Dialog Vyberte druh nového objektu

Zvolte, zda nový WWW objekt bude konektorem, šablonou, či selektorem. Stisknutím OK svoji volbu potvrdíte a nový objekt bude vytvořen, stisknutím Storno zavřete dialog a nový objekt se vytvářet nebude.

Pokud pro návrh WWW objektu (a příslušního HTML kódu) se má použít FormWizard, zatrhněte čtvereček v dolní části.

Pokračování:

Co je WBC konektor.

Co je HTW šablona.

Co je WBS selektor.

Co je Form Wizard.


Dialog Editace selektoru

Zde upravujeme selektor.

V editačním řádku Název tlačítek Submit zadáváme pojmenování tlačítek typu SUBMIT (parametr NAME v <INPUT TYPE=”SUBMIT”>) ve formuláři (tag <FORM>), ze kterého bude volán tento selektor. Jednotlivá tlačítka musí být stejně pojmenována.

V seznamu Hodnoty tlačítek Submit a volané konektory/šablony je uvedeno, které WWW objekty budou vyvolány po stisku kterých tlačítek.

Přiřadit WWW objekt určitému formulářovému tlačítku můžeme tak, že v editačním řádku Hodnota tlačítka Submit zadáme nápis na tomto formulářovém tlačítku (hodnota parametru VALUE) a v rozvinovacím seznamu Volaný konektor/šablona vybereme, který WWW objekt má být proveden při stisknutí výše zadaného tlačítka. Stiskem tlačítka Nastavit bude přiřazení zaznamenáno do seznamu.

Pokud už je v seznamu vybrán určitý WWW objekt pro dané tlačítko, pak tento řádek v seznamu vybereme. Tím se přenesou údaje do editačního řádku Hodnota tlačítka Submit a rozvinovacího seznamu Volaný konektor/šablona, kde pak můžeme vybrat jiný WWW objekt. Stiskem tlačítka Nastavit bude změna zaznamenána.

Smazat určitý řádek seznamu můžeme tak, že jej nejdříve vybereme. Tím budou údaje, které obsahuje, zkopírovány do složek Hodnota tlačítka Submit a Volaný konektor/šablona. Nyní stiskneme tlačítko Smazat a tím tento řádek smažeme.

Provedené změny potvrdíme stiskem tlačítka OK, odvoláme stiskem tlačítka Storno.

Pokračování:

Co je WBS selektor.


Dialog Editace šablony

Jak víme z popisu HTW šablony a z popisu WBC konektoru, může šablona obsahovat, mimo textu, HTML značek a HTW příkazů, také WBC konektor. V tomto dialogu vybíráte, zda chcete editovat zdrojový text šablony v textovém editoru, nebo zda chcete měnit konektor v této šabloně obsažený.

V případě, že vytváříte novou šablonu, vyberte, kterou její částí chcete začít její návrh: zda vytvořením konektoru, nebo šablony.

Vaši volbu si WinBase602 zapamatuje a při příštím výběru přednastaví.

Zatržením čtverečku Příště se neptat a použít toto nastavení můžete také stanovit, že nyní vybraný způsob editace bude použit i kdykoliv v budoucnu, a to bez toho, abyste museli vyplnit tento dialog.

Pokud budete chtít někdy v budoucnu toto nastavení změnit, podržte stisknuté tlačítko Ctrl v okamžiku, kdy stisknete tlačítko Modifikovat na řídícím panelu, resp. v okamžiku, kdy stisknete tlačítko OK v dialogu Vyberte druh nového objektu.


Co je WBS selektor

V určitých situacích může být užitečné mít ve svém HTML formuláři více tlačítek typu SUBMIT. Na druhou stranu jeden formulář provede po stlačení tlačítka typu SUBMIT vždy tu samou akci, spustí ten samý WBC konektor. Zde si vysvětlíme, jak umístit do formuláře více tlačítek typu SUBMIT a jak zajistit, aby se po jejich stlačení provedly různé akce v závislosti na tom, které tlačítko bylo stlačeno.

Abychom zajistili výše zmíněné chování formuláře, musíme tlačítka typu SUBMIT ve formuláři pojmenovat stejným jménem. Tzn. všechny tagy <INPUT TYPE=”SUBMIT”> musí mít v parametru NAME stejné jméno. Toto jméno musí být složeno z písmen (i s háčky a čárkami), z číslic a ze znaku podtržení ´_´.

WBS selektor je databázový objekt kategorie WWW objekty s následujícím obsahem:

[Submit]

SubmitName=jméno-tlačítek-typu-submit

[WBClist]

hodnota-tlačítka-číslo-1=název-WBC-konektoru-číslo-1

hodnota-tlačítka-číslo-2=název-WBC-konektoru-číslo-2

...

hodnota-tlačítka-číslo-n=název-WBC-konektoru-číslo-n

Jméno-tlačítek-typu-submit je ono jméno, kterým jsme pojmenovali všechna tlačítka typu SUBMIT v našem formuláři. Ve formuláři máme n tlačítek typu SUBMIT, hodnota-tlačítka-číslo-i je hodnota parametru VALUE i-tého tlačítka typu SUBMIT (tzn. to, co je na tlačítku zobrazeno v WWW browseru). Název-WBC-konektoru-číslo-i je název WBC konektoru, který má být použit, pokud uživatel stlačí i-té tlačítko. Může být zde uveden pouze WBC konektor z té samé aplikace, ve které je tento WBS selektor. Kromě konektoru lze zde uvést i název HTW šablony (opět ze stejné aplikace). Názvy WWW objektů je třeba uvést s patřičnou příponou. Stejný WBC konektor můžeme uvést u více tlačítek (i když tato situace odporuje tomu, proč jsme multitlačítkový formulář vytvářeli).

V parametru ACTION tagu FORM našeho multitlačítkového formuláře uvedeme odkaz na námi vytvořený WBS selektor. Syntaxe tohoto odkazu se řídí identickými pravidly, jako syntaxe odkazu na WBC konektor. V tomto ohledu se můžeme na WBS selektory dívat jako na speciální typ konektoru, který obsahuje pouze jakousi tabulku s přiřazením tlačítek typu SUBMIT a WBC konektorů, či HTW šablon.


Záložka WWW objekty

Zde se nastavují parametry WB Internet Klienta (WBIK) pouze pro aktuální aplikaci.

Jedná se o úroveň podrobnosti logfile a o to, zda smazat logfile před vyřízením každého požadavku na dynamicky generovanou HTML stránku.

LZe se také rozhodnout, že v této aplikaci se má přebírat globální nastavení těchto parametrů (program Konfigurace WinBase602, záložka WWW objekty).


Slovníček pojmů

CGI
protokol, kterým komunikují webserver a skript

FastCGI
protokol, kterým komunikují webserver a skript

HTML
jazyk, který popisuje formátování textu; v tomto jazyku jsou psány internetové stránky

HTW šablona
soubor, ve kterém je popsáno formátování databázových údajů do HTML textu; blíže viz Co je HTW šablona

ISAPI
protokol, kterým komunikují webserver a skript

komponenta
jedna část WBC konektoru; blíže viz Co jsou komponenty

skript
v souvislosti s webservery se tímto označením myslí programy, které rozšiřují schopnosti webserveru (např. o schopnost generovat dynamické HTML stránky, které obsahují údaje z databáze - tak je tomu v případě WinBase602 Internet klientů)

SQL
jazyk, který je používán pro manipulaci s databází; jeho nejznámější část je určena k formulování dotazů na údaje v databázi

vzorové hodnoty vstupních proměnných
tyto hodnoty používá Návrhář při analýze SQL příkazu, který obsahuje citaci vstupních proměnných; blíže viz Co jsou vzorové hodnoty vstupních proměnných

WBC konektor
soubor, nebo blok v HTW šabloně, ve kterém jsou popsány operace s databází; blíže viz Co je WBC konektor

webserver
program, který odesílá www browserům HTML stránky

www browser
program, který zobrazuje na obrazovce HTML stránky


Zde upravte text komentáre.


Potvrdí provedené změny a uzavře dialog.


Odvolá (stornuje) provedené změny a uzavře dialog.


Zobrazí nápovědu, která se vztahuje k tomuto oknu.


Vyberte globální proměnnou projektu, jejíž alias chcete vytvořit.


Zadejte alias, pod kterým má být dostupná hodnota vybrané globální proměnné projektu ve WBC konektoru a v HTW šabloně.


Vyberte vstupní formulářovou proměnnou, jejíž hodnotu má WBC konektor vkládat na vybrané místo.

Po výběru musíte stisknout tlačítko pro vložení značky.


Vloží na aktuální místo v textu značku (citace vstupní proměnné formuláře), kterou WinBase602 Internet klient bude nahrazovat hodnotou vybrané vstupní proměnné HTML formuláře.


Vyberte ze seznamu vnitrních programu v dané aplikaci program, který bude projektem pro tuto komponentu Program.


Zadejte název SELECTu, pomocí kterého se budete v šabloně odkazovat na odpověď.


Zatržením stanovíte, ze z databáze bude WinBase602 Internet klient číst všechny záznamy, které vyhovují danému SELECTu.


Zatržením stanovíte, ze WinBase602 Internet klient bude číst z databáze pouze některé záznamy z těch, které vyhovují SELECTu. Musíte určit, které to budou.


Zadejte pořadové číslo prvního záznamu (číslováno od nuly), který má být přečten z databáze.

Pořadovým číslem se myslí poradí v seznamu všech záznamu, které vyhovují danému SELECTu.


Zatržením stanovíte, ze má být přečten pouze záznam s daným pořadovým číslem a žádný jiný.


Zatržením stanovíte, ze má být přečteno prvních n záznamu od zadaného záznamu (včetně nej) z odpovědi na SELECT.


Zadejte, kolik záznamu od zadaného (včetně nej) má být přečteno z odpovědi na SELECT.


Umožní editaci WBC konektoru ve vizuálním editoru.


Vyberte HTW šablonu, která má být používána WinBase602 Internet klientem pro generování HTML stránky.


Vyberte chybovou HTW šablonu, která má být používána WinBase602 Internet klientem pro generování HTML stránky, pokud při zpracování WBC konektoru, nebo HTW šablony nastane chyba.


Zde je seznam vstupních proměnných formuláře, jejichž předání má WBC konektor vyžadovat (pokud by nebyla aspoň jedna z těchto proměnných předána, zpracování konektoru skončí chybou).

U každé proměnné je uveden počet jejích hodnot, které má konektor vyžadovat.

Změnit počet hodnot vybrané proměnné můžete stisknutím klávesy F2.


Vyberte název vstupní formulářové proměnné, jejíž předání má WBC konektor vyžadovat. V seznamu jsou pouze proměnné, jejichž předání WBC konektor zatím nevyžaduje.


Zadejte, kolik hodnot vybrané vstupní proměnné formuláře má WBC konektor při běhu vyžadovat.


Přidá vybranou vstupní proměnnou formuláře do seznamu vyžadovaných vstupních proměnných (RequiredValues). Bude vyžadováno předání zadaného poctu hodnot této proměnné.


Ze seznamu proměnných, jejichž hodnota(y) bude vyžadována při běhu WBC konektoru, odstraní vstupní proměnnou formuláře, která je momentálně v tomto seznamu vybraná.


Vyberte ze seznamu vnitrních programu dané aplikace ten program, který obsahuje proceduru RunProgram, podle které má být provedeno generování textu na HTW náveští v HTW šabloně.


Zadejte, kolik nejvýše může být přečteno záznamu z odpovědi na jeden SELECT.

Prázdný údaj znamená, ze může být přečten libovolný počet záznamu.


Zde je seznam komponent daného WBC konektoru.

WinBase602 Internet klient bude zpracovávat komponenty v tom poradí, v jakém jsou uvedeny v tomto seznamu.


Vytvoří novou komponentu WBC konektoru.


Změní vybranou komponentu WBC konektoru.


Smaže (odstraní) vybranou komponentu WBC konektoru.


Přesune vybranou komponentu WBC konektoru o jednu pozici k začátku seznamu komponent.


Přesune vybranou komponentu WBC konektoru o jednu pozici ke konci seznamu komponent.


Umožní editovat zdrojový text WBC konektoru.


Vyberte tabulku, ve které bude tento SQL průkaz INSERT vytvářet nové záznamy.


Označte sloupce, jejichž hodnoty bude tento SQL příkaz INSERT nastavovat.


Označí všechny sloupce dané tabulky.


Odznačí všechny sloupce dané tabulky.


Vyberte sloupec, jehož hodnotu chcete nastavit.

Tento seznam obsahuje ty sloupce, které byly označeny v předchozím kroku, a hodnoty, které budou při provádění WBC konektoru přirazeny těmto sloupcům.


Zadejte hodnotu, která bude přirazena vybranému sloupci.


Nastaví zadanou hodnotu vybranému sloupci.


Poklepáním na vybrané vstupní formulářové proměnné vložíte její citaci do hodnoty vybraného sloupce.

Tento seznam obsahuje vstupní formulářové proměnné.


Seznam vstupních proměnných. Hodnotu proměnné editujte stiskem klávesy F2, nebo poklepáním na proměnné.


Zaškrtnete tento čtverec, pokud chcete nove vložený záznam automaticky přečíst z databáze. Pak jej můžete v šabloně např. pro kontrolu vypsat.


Zadejte název, pod kterým bude v šabloně zpřístupněn nove přidaný záznam.

Na sloupce tohoto záznamu se pak budete odkazovat tečkovou notací:

tento_název.název_sloupce


Vyberte už existující sloupec typu Date (datum), nebo do comba zapište název nového sloupce typu Date, který má Průvodce vytvořit v dané databázové tabulce.


Vyberte už existující sloupec typu Time (čas), nebo do comba zapište název nového sloupce typu Time, který má Průvodce vytvořit v dané databázové tabulce.


Zadejte pojmenování výsledku tohoto SQL příkazu.


Pro SQL příkaz INSERT INTO s automatickým přečtením nového záznamu vyberte sloupec typu Date (datum), který bude při tomto automatickém čtení používán.


Pro SQL příkaz INSERT INTO s automatickým přečtením nového záznamu vyberte sloupec typu Time (čas), který bude při tomto automatickém čtení používán.


Zatržením stanovíte, ze pro tuto aplikaci bude přebíráno globální nastavení uvedených parametrů z Konfiguračního panelu, záložky WWW objekty.


Pouze pro tuto aplikaci vyberte úroveň podrobnosti logfile generovaného Internet klientem.

•	NONE - logfile nebude vytvářen

•	NORMAL - budou se zaznamenávat pouze chybová hlášení

•	DEBUG - bude se uchovávat podrobný protokol o práci Internet klienta.


Pokud je zatržen, pak Internet klient při každém spuštění smaže obsah dnešního logfilu, logfiles z předchozích dní nebudou změněny. V opačném případě se bude log stále přidávat na konec souboru.


Zadejte pojmenování tlačítek typu SUBMIT (parametr NAME v <INPUT TYPE=”SUBMIT”>) ve formuláři (tag <FORM>), ze kterého bude volán tento selektor.


V tomto seznamu je uvedeno, které WWW objekty budou vyvolány po stisku kterých tlačítek.


Zadejte nápis na formulářovém tlačítku (hodnota parametru VALUE), pro které chcete určit WWW objekt, který bude vyvolán po stisknutí tohoto tlačítka.


Vyberte, nebo změňte WWW objekt, který bude vyvolán po stisknutí daného formulářového tlačítka.


Vytvoří nový záznam v seznamu Hodnoty tlačítek Submit a volané konektory/šablony, nebo změní už existující záznam v tomto seznamu.


Odstraní vybraný záznam ze seznamu Hodnoty tlačítek Submit a volané konektory/šablony.


Záložka KLIENT


Tlačítkem zaktualizujete informace v horní části této záložky. Okno s událostmi se aktualizuje průběžně.


Zde se vypisuje jméno, pod nímž jste přihlášeni na server.


Zde se vypisuje množství paměti v bajtech, kterou klient právě využívá.


V tomto seznamu se vypisují některé události a chyby, které nastanou při běhu klienta v době, kdy je okno Monitoru otevřeno.


Tlačítkem lze vymazat obsah okna s událostmi.


Záložka SERVER


Zde se vypisuje jméno serveru, ke kterému jste právě přihlášeni.


Zde se vypisuje verze serveru, ke kterému jste právě přihlášeni. Verze serveru se nemusí vždy rovnat verzi klienta!


V tomto seznamu se vypisují chyby a hlášení SQL serveru (včetně uživatelských výpisů funkcí Log_write); obsah je stejný jako v okně serveru. Využívá se tehdy, pokud server běží na jiném počítači a uživatel chce sledovat výpisy serveru. Otevřené okno se samo neaktualizuje.


Tlačítkem provedete aktualizaci seznamu chyb a hlášení serveru.


Tlačítkem vymažete obsah seznamu chyb a hlášení serveru.


Záložka STAV SERVERU


Tlačítkem zaktualizujete informace na této záložce


Počet klientů připojených k serveru lokálně (z téhož počítače) bez využití síťových protokolů.


Počet klientů připojených k serveru síťově (z jiného počítače) využitím některého síťového protokolu.


Počet klientů připojených k serveru bez uživatele ANONYMOUS


Interní údaj - slouží k odhalování případných problémů ve spolupráci s Hotline


Interní údaj - slouží k odhalování případných problémů ve spolupráci s Hotline


Interní údaj - slouží k odhalování případných problémů ve spolupráci s Hotline


Interní údaj - slouží k odhalování případných problémů ve spolupráci s Hotline


Interní údaj - slouží k odhalování případných problémů ve spolupráci s Hotline


Interní údaj - slouží k odhalování případných problémů ve spolupráci s Hotline


Interní údaj - slouží k odhalování případných problémů ve spolupráci s Hotline


Hodnota udává, kolik kurzorů je na serveru právě otevřeno. Je zde možno sledovat, nezůstávají-li při běhu aplikace některé kurzory otevřené a tím zbytečně nezatěžují server.


Interní údaj - slouží k odhalování případných problémů ve spolupráci s Hotline


Zde se ukazuje množství paměti (v bajtech), kterou databázový server právě využívá. Je možné sledovat, zda stále neroste (což by signalizovalo chybu aplikace) a zda odpovídá nárokům aplikace. V případě, že využitá paměť serveru dosáhne určité hranice (vyčerpá stanovený limit), naalokuje se dynamicky paměť další. Počáteční velikost paměti serveru lze nastavit na Konfiguračním panelu, záložce Instalace.


Záložka UŽIVATELÉ


Tlačítkem zaktualizujete seznam právě přihlášených uživatelů.


Tlačítkem odpojíte vybraného uživatele; nelze odpojit sám sebe. Odpojený síťový uživatel obdrží zprávu, že databázový server odmítá komunikovat nebo že skončil práci a může pouze ukončit svoji aplikaci. Odpojování přihlášených uživatelů patří mezi hrubé zásahy, které by se za normálních okolností neměly příliš používat.


V seznamu jsou zobrazena jména všech uživatelů přihlášených na serveru.


Tlačítko umožní zapsat krátkou textovou zprávu, kterou okamžitě obdrží všichni klienti právě přihlášení na tento server.


Záložka ZÁMKY


Tlačítkem zaktualizujete informace o zámcích.


Tlačítkem lze provést odstranění vybraného zámku. Za normálních okolností by se takováto akce neměla provádět.


Seznam zobrazí přehled všech zámků umístěných uživateli na záznamech v tabulkách ve tvaru:

JMÉNO_TABULKY: Číslo záznamu, JMÉNO UŽIVATELE (druh zámku).


Posloupnost akcí a jejich parametry - popis dialogu

Definování akce nebo příkazů nebo jejich posloupnosti se provádí ve speciálním okně. Používá se při návrhu formulářů (u jiných typů pohledů se to v praxi nepoužije) nebo uživatelských menu.

Okno se skládá ze dvou hlavních částí - v horní části je přehled již vložených akcí / příkazů a je možné pomocí tlačítek vkládat nové, rušit stávající nebo měnit jejich pořadí. Dolní část může mít dvě podoby:

•	pokud vkládáte standardní akci, je v levé polovině seznam možných akcí. Akcí je velký počet a seznam má omezenou velikost, proto jsou akce uspořádány do skupin podle svých podobných vlastností. Skupina akcí je znázorněna tlačítkem. Stisknuté tlačítko značí, že skupina je "rozbalená", tedy jsou vidět všechny příslušné akce. Mezi akcemi je možné přecházet pomocí kurzorových šipek nebo pomocí myši. Chcete-li nějakou akci vybrat, kliknete na ní myší dvakrát nebo ji označíte a stisknete tlačítko Vybrat označenou akci. Vybraná akce je znázorněna červenou šipkou úplně vlevo. Většina akcí vyžaduje doplnění informací - pro otevření formuláře musíte  např. zadat jeho jméno, pro vypsání zprávy její text apod. K zadání parametrů slouží comba a editační složky v pravé polovině. Jejich názvy a aktivita se mění podle druhu akce. Okno nedovolí akci definovat a uložit, pokud nevyplníte správně její parametry.

•	pokud vkládáte vlastní příkaz jazyka WinBase602, otevře se v dolní části editační pole, do něhož se text příkazu zapíše. Pro ulehčení zadávání příkazu je k dispozici pomocné okno s nabídkou proměnných a podprogramů projektu a seznamem metod a vlastností pro jednotlivé objekty formuláře. Okno se otevírá tlačítkem s třemi tečkami.

Jednotlivé standardní akce i vlastní příkazy lze kombinovat. Počet akcí v posloupnosti není omezen, je však na uvážení, kdy je přehlednější a elegantnější místo posloupnosti akcí použít jedinou proceduru jazyka. Nelze kombinovat standardní akce a příkazy jazyka.

Posloupnost akcí a příkazů se provádí v zadaném pořadí, podmíněné vynechávání řádků nebo jejich opakování není možné. Je ovšem povoleno ve vlastních příkazech používat konstrukce jazyka (IF THEN ELSE apod.), pak ovšem opět platí úvaha, zda by nebylo výhodnější tyto konstrukce použít v proceduře programu a využít všech výhod psaní programu najednou v editoru (barevná syntaxe, ladění apod.).

Posloupnost akcí lze ukončit pouze dvěma způsoby:

•	pokud standardní akce otevírá dialog, který obsahuje tlačítko OK a Storno (např. dialog pro parametry tisku), tak po stisku Storno se posloupnost ukončí;

•	pokud ve vlastním příkazu bude proveden příkaz jazyka Halt.

Většinu standardních akcí (u kterých to má smysl) lze nahradit příslušnými příkazy (nebo posloupností příkazů) jazyka nebo odpovídajícími vlastnostmi a metodami formulářů a jejich složek. V praxi se nejvíce využívá způsob psaní složitějších aplikací takový, že většina akcí je napsána jako procedury programu a pro některé okrajové, dále se nerozvíjející činnosti se použije standardní akce.

Pokračování:	Nabídka standardních akcí
	Nabídka proměnných, podprogramů a metod - popis dialogu
	Návrh formulářů
	Objektové programování formulářů
	Návrh uživatelského menu


Nabídka standardních akcí

Otevírání a zavírání formuláře

Otevřít/Zavřít formulář - otevře resp. zavře formulář určený jménem. Odpovídá použití funkcí View_open() a View_close() nebo metod form.Open a form.Close.

Otevřít nebo zavřít formulář - je-li formulář otevřen, zavře ho, není-li otevřen, otevře ho. Odpovídá použití funkce View_toggle().

Na stejný záznam otevřít formulář - otevře druhý formulář do stejných dat na témže záznamu, (resp. vyhledá odpovídající záznam, je-li jeden formulář do tabulky a druhý do dotazu). Odpovídající kód jazyka je relativně složitý - spočívá v zjištění čísla aktuálního záznamu, přepočtu na číslo v tabulce, přepočtu na číslo záznamu ve zdroji dat otevíraného formuláře a otevření formuláře na tento záznam. Pokud mají oba formuláře stejný zdroj dat (otevírání detailu ze seznamu např.), je zápis (zde pomocí metod a vlastností) jednodušší:

Form2.Open(NIL); Form2.CurPos := ThisForm.CurPos;

Otevřít modální formulář (na stejný záznam) - otevře formulář modálně, tedy tak, že do uzavření tohoto formuláře nebude možno pracovat s jiným formulářem ani menu WinBase602. Odpovídá otevření formuláře s příznakem MODAL_VIEW.

Otevřít relační formulář - otevře formulář do relačně propojené tabulky. Pro relaci 1:N je tím míněn formulář do relačně nadřízené tabulky (číselníku), v němž se označí jeden záznam. Po zavření relačního formuláře se do propojovacího sloupce původní tabulky zapíše hodnota z označeného záznamu. Použitá relace 1:N musí být definována v aplikaci.

Pro relaci M:N se otevře formulář do protější tabulky relace. V něm je možno označit jeden nebo více záznamů. Po zavření relačního formuláře se pro všechny označené záznamy vytvoří nové záznamy ve spojovací tabulce, definované spolu s relacemi v některém schématu aplikace. Tyto akce se nedají přímo nahradit příkazy jazyka.

Otevřít relačně synchronizovaný formulář -otevře se zadaný formulář, který jako zdroj dat bude mít záznamy, vyhovující zadané relaci (definované v aplikaci), tedy stejný obsah jako relační subformulář. Oba formuláře budou nadále synchronizovány (změna záznamu v navrhovaném formuláři způsobí nové vyhodnocení dat pro relačně synchronizovaný formulář).

Otevřít vázací formulář - standardní akce pro tlačítko, které má otevřít vázací formulář. Vytvoří se v automatickém návrhu pro všechny složky typu ukazatel. Nelze nahradit příkazy jazyka (a nemá to ani význam).

Vložit záznam a otevřít na něm formulář - otevře formulář na nově vloženém záznamu - použití zvláště pro vložení nového záznamu, který je nutno digitálně podepsat, což nelze na fiktivním záznamu, kde se otevírá formulář pro vstup dat. Odpovídá posloupnosti příkazů jazyka: funkce Insert() vloží záznam a vrátí jeho číslo, funkce Open_view() s parametrem číslo záznamu otevře formulář na tomto záznamu.

Otevřít standardní formulář do tabulky/dotazu - umožní pracovat s obsahem tabulky nebo dotazu, aniž by byl vytvořen zvláštní formulář do těchto dat. Odpovídá funkci Open_view() ve tvaru

  Open_view('DEFAULT TAB1 TABLEVIEW', NO_REDIR,0,0,0,NIL) resp.

  Open_view('DEFAULT DOT1 CURSORVIEW', NO_REDIR,0,0,0,NIL) .

Editace a změny ve formuláři

Vložit záznam do běžného formuláře - vloží do formuláře nový záznam. Odpovídá stisku klávesy Insert ve formuláři nebo volání metody Insert. Využije se zvláště při vkládání pomocí speciálního formuláře pro vstup dat, kde Insert provede uložení dat do databáze.

Uložit změny ve formuláři - provede zapsání změn v záznamu do databáze; má smysl u záznamově synchronizovaných formulářů. Odpovídá funkci Commit_view() resp. metodě form.Commit_view().

Odvolat změny ve formuláři - odvolá změny dosud nezapsané do databáze; má smysl u záznamově synchronizovaných formulářů. Odpovídá funkci Roll_back_view() resp. metodě form.Roll_back_view().

Editovat text - otevření editačního okna pro sloupec typu Text, používá se pouze u složek typu Text. Odpovídá metodě Open pro složku Text.

Překreslit formulář - záznamy ve formuláři se překreslí. Odpovídá funkci nebo metodě Reset_view() s parametrem RESET_CONTROLS.

Načíst data a překreslit formulář - cache formuláře se naplní daty z databáze, záznamy se překreslí. . Odpovídá funkci nebo metodě Reset_view() s parametrem RESET_CACHE+RESET_CONTROLS.

Přebudovat kurzor a překreslit formulář - kurzor, do něhož vede formulář, se znovu vytvoří a záznamy se překreslí . Odpovídá funkci nebo metodě Reset_view() s parametrem RESET_CURSOR+RESET_CONTROLS.

Překreslit formulář a synchronizovat subformulář - relační subformuláře se sesynchronizují ke změněnému záznamu v superformuláři Odpovídá funkci nebo metodě Reset_view() s parametrem RESET_SYNCHRO+RESET_CONTROLS.

Aktualizovat nabídku v combech - comba plněná dotazem z číselníku se znovu naplní Odpovídá funkci nebo metodě Reset_view() s parametrem RESET_COMBOS.

Zrušit vybraný záznam - smaže vybraný záznam; akce totožná se stiskem tlačítka na liště formuláře, platí pro ni tatáž nastavení. Odpovídá metodě DelRec.

Otevřít dialog na editaci práv - otevře se okno s možností nastavit práva k datům - ekvivalentní tlačítku na liště

Otevřít dialog na manipulaci s peškem - otevře se okno s možností manipulace s peškem - ekvivalentní s tlačítkem na liště, pokud tabulka podporuje pešky. Odpovídá funkci Atoken_control().

Přivázat nebo odvázat záznam - ve vázacím formuláři provede přivázání nebo odvázání aktuálního záznamu (pomocí ukazatelů). Odpovídá stisku čtvercového tlačítka v levém horním rohu vázacího formuláře nebo stisku klávesy F8 v tomto formuláři. Tuto akci je možné spojit např. s uzavřením formuláře.

Tisky

Vytisknout sestavu - běžné vytištění připravené sestavy na nastavené tiskárně. Odpovídá funkci View_print().

Vytisknout stejný záznam v sestavě - aktuální (jeden) záznam se vytiskne na nastavené tiskárně jako zvolená sestava. Odpovídá funkci Print_view() s nastaveným omezením na jeden záznam.

Vytisknout stejné záznamy v sestavě - z aktuálního formuláře se vezme kurzor (zdroj dat) a na ten se přesměruje zvolená sestava. Odpovídá funkci Print_view() s přesměrováním.

Vytisknout aktivní formulář - otevře dialog pro parametry tisku a umožní vytisknou formulář, odpovídá metodě ThisForm.Print.

Zvolit tiskárnu - umožní změnit či nastavit tiskárnu ve standardním (starším) dialogu pro výběr tiskárny. Ovlivní se tím tisk na nastavenou tiskárnu. Odpovídá funkci Printer_dialog().  Zastaralé (Windows 3.1), používejte spíše následující akci.

Nastavit parametry tisku - otevře dialog pro parametry tisku sestavy. Zavřete-li tento dialog stiskem tlačítka Storno, přeruší se vykonávání posloupnosti akcí, neboť obvykle po této akci následuje vlastní tisk sestavy, který chtěl uživatel zrušit. Odpovídá funkci Print_opt().

Nastavit formát stránky - otevře dialog pro nastavení formátu stránky. Odpovídá funkci Page_setup(). Častěji se toto okno otevírá z dialogu pro parametry tisku (předchozí akce).

Menu

Otevřít menu - nahradí stávající menu menu novým. Odpovídá funkci Main_menu().

Odstranit menu - zruší uživatelské menu aplikace. Odpovídá funkci Main_menu() s parametrem NIL.

Překreslit menu - překreslí menu; používá se pro nové vyhodnocení podmínek viditelnosti a aktivity položek menu. Odpovídá funkci Main_menu() s parametrem "" (prázdný řetězec).

Zavřít formuláře a odstranit menu - běžná akce používaná při ukončení formulářově orientované aplikace. Odpovídá proceduře Close_all_views a funkci Main_menu() s parametrem NIL.

Zprávy a nápověda

Zobrazit okno se zprávou - otevře modální okno se zadanými informacemi. Odpovídá funkci Info_box().

Na stavový řádek vypsat zprávu - vypíše textovou informaci na stavový řádek WinBase602. Odpovídá funkci Set_status_text().

Zobrazit nápovědu v samostatném okně - zobrazí vybranou stránku nápovědy; pouze v případě, že aplikace vlastní nápovědu má. Odpovídá funkci Show_help().

Zobrazit nápovědu v popup okénku - zobrazí vybranou stránku nápovědy v malém okně poblíž místa, kde se akce vyvolala; pouze v případě, že aplikace vlastní nápovědu má. Odpovídá funkci Show_help_popup().

Pípnout - provede jedenkrát standardní systémové pípnutí. Nemá ekvivalent ve vnitřním jazyce, lze však volat pomocí funkce externí DLL Windows.

Tabulky a dotazy

Exportovat/Importovat data z tabulky/dotazu - umožní provést export/import dat ve vnitřním formátu a kódování Windows. Odpovídá provedení funkce Move_data s vhodně doplněnými parametry.

Uvolnit záznamy v tabulce - provede uvolnění smazaných záznamů. Odpovídá funkci Free_deleted().

Provést přenos dat - umožní provést předem připravený přenos dat, uložený jako typ programu v aplikaci. Odpovídá provedení funkce Move_data s kladným prvním parametrem.

Okno a ikony

V aplikacích pro Windows 95 a NT se již tyto akce nepoužívají.

Uspořádat okna do mozaiky - rozmístí okna na obrazovce tak, aby rovnoměrně vyplnila celý prostor.

Uspořádat okna do kaskády - rozmístí okna na obrazovce tak, aby bylo z každého vidět alespoň nadpis.

Uspořádat ikony - srovná ikony minimalizovaných oken ve spodní části hlavního okna.

Dotazy a uspořádání

Zadat omezení (QBE) - otevře formulář pro zadání QBE dotazu. Odpovídá metodě OpenQBE.

Zadat uspořádání (QBE) - otevře formulář pro zadání QBE uspořádání. Odpovídá metodě OpenOrder.

Zrušit omezení a uspořádání - zruší právě zadaný QBE dotaz či uspořádání. Odpovídá metodě CancelQuery.

Uplatnit omezení nebo uspořádání - zadaný dotaz či uspořádání se uplatní ve formuláři. Odpovídá metodě AcceptQuery.

Zadat omezení ve speciálním okně - otevře speciálně pro tento účel vytvořený formulář, v němž zadáte QBE dotaz jednodušeji než ve standardním dotazovém okně. Odpovídá volání funkce Open_view() s parametrem QUERY_VIEW.

Setřídit podle sloupce - okamžitě setřídí formulář podle sloupce zadaného v parametrech. Odpovídá zadání a uplatnění QBE setřídění. Nelze přímo naprogramovat, lze obejít změnou a náhradou zdroje dat.

Koloběh dokumentů a replikace

Předat dokument uživateli - kolující dokument bude předán explicitně určenému uživateli. Odpovídá volání funkce GetSet_next_user() s vhodně doplněnými parametry.

Vybrat uživatele a předat mu dokument - kolující dokument bude předán uživateli vybranému ze seznamu uživatelů. Tato akce by se programovala takto: získat seznam uživatelů ze systémové tabulky a nechat jednoho vybrat, pro něj se pak použije GetSet_next_user() s vhodně doplněnými parametry.

Ukončit koloběh dokumentu - koloběh dokumentu bude ukončen. Odpovídá volání funkce GetSet_next_user() s vhodně doplněnými parametry.

Replikovat aplikaci - dovolí vybrat replikační server a provede replikaci dat podle platných replikačních pravidel. Odpovídá funkci AReplicate s parametrem FALSE.

Odeslat žádost o replikaci - dovolí vybrat replikační server a odešle žádost o replikaci na tento server. Odpovídá funkci AReplicate s parametrem TRUE.

Ostatní

Zaslat programu zprávu - zpráva, na níž bude program reagovat. Odpovídá provedení příkazu Return.

Spustit soubor dle registrace - podle přípony zadaného souboru se zavolá ve Windows registrovaná aplikace a předá se jí tento soubor. Pole Akce nechte nevyplněné, pokud chcete provést primární akci (stejnou jako při poklepání v Exploreru). Pokud chcete provést jinou akci, musíte do pole Akce zapsat její název (zjistit lze v registrační databázi).

Pokračování:	Posloupnost akcí a jejich parametry - popis dialogu
	Nabídka proměnných, podprogramů a metod - popis dialogu
	Objektové programování formulářů


DIALOG Nabídka proměnných, podprogramů a metod


Nabídka proměnných, podprogramů a metod - popis dialogu

Okno, které slouží ke vkládání konstant, proměnných projektu podprogramů nebo metod a vlastností do výrazu. Je voláno z mnoha míst návrhářů objektů.

Záložka Proměnné obsahuje seznam všech proměnných aktuálního projektu. Pod seznamem se vypisuje typ proměnné.

Záložka Konstanty obsahuje seznam konstant projektu a standardních konstant TRUE a FALSE.

Záložka Podprogramy obsahuje seznam podprogramů projektu. Jedná-li se o funkci, je vypsán typ hodnoty, kterou funkce vrací. Má-li podprogram parametry, je zde možnost zadat jejich hodnoty.

Záložka Metody a vlastnosti nabízí přehled metod a vlastností formuláře či některé jeho složky včetně zadání jejich parametrů.

V combu Formulář je nutné nejprve vybrat formulář (teoreticky i sestavu). Nejčastěji budete potřebovat právě aktuální formulář - použijte volbu - Lokální formulář THISFORM -.

Combo Subformulář můžete použít ve dvou případech: pokud lokální formulář je subformulář a zajímá vás superformulář - volba , - Nadřazený formulář - nebo lokální formulář obsahuje subformuláře a vy chcete sestoupit do některého z nich - z nabídky vyberte jeden ze subformulářů. Ve ostatních případech ponechte volbu - Hlavní formulář -.

Třetí combo označené Složka formuláře slouží k výběru objektu - pro metody a vlastnosti celého formuláře použijte volbu - Formulář jako celek - , pro metody a vlastnosti jedné složky vyberte konkrétní složku.

V combu Metoda nebo vlastnost se nabízí abecední seznam vlastností a metod použitelných pro zvolený objekt. Po vybrání se vypíše hodnota (vrací-li metoda nějakou) a objeví se pole pro zadání parametrů.

Je-li zapnuta volba Bez typové kontroly, objevují se v seznamech vždy všechny položky (proměnných, konstant metod atd.). Není-li zapnuta, objeví se pouze ty, které typově vyhovují předpokládanému místu použití. Je-li okno otevřeno pro zadání Podmínky viditelnosti, vybírají se položky typu Boolean, je-li otevřeno pro zadání parametru funkce, vybírají se položky podle typu parametru apod.

To, co vyberete nebo sestavíte v tomto okně, se přenese jako řetězec do místa, odkud jste okno zavolali.

Pokračování:	Objektové programování formulářů


Průvodce návrhem formuláře nebo sestavy - krok 1

Náš průvodce s Vámi v několika krocích projde úvodem vytváření pohledů na data. Průvodce můžete kdykoliv opustit stiskem tlačítka Dokončit. V tom případě se použijí implicitně nastavené hodnoty následujících dialogů. Stejného efektu dosáhnete tím, že budete jednoduše používat tlačítko Další.

Na této úvodní stránce nejprve vyberte druh pohledu. Nabízíme čtyři druhy: formuláře, které slouží ke vkládání, prohlížení, editaci dat; tiskové sestavy, které se používají k získání souhrnů z dat a jejich vytištění, dále speciální typ sestav - štítky, používané pro tisk na archy štítků a na konec grafy, grafické znázornění průběhu hodnot určitých dat.

Dále je nutno vybrat zdroj dat pro pohled. Jsou tři možnosti: jako zdroj dat bude sloužit tabulka z aplikace, odpověď na pevný dotaz uložený v aplikaci nebo se zdroj dat neurčí a předpokládá se práce s proměnnými projektu.

Bude-li pohled (vedoucí do libovolného zdroje dat) potřebovat proměnné projektu (např. v podmínkách viditelnosti apod.), je možné zde zvolit z nabídky potřebný projekt. Tento projekt bude nastaven vždy při otevření pohledu. Nepovinný údaj.

Má-li se vytvářený pohled podobat již nějakému dříve vytvořenému pohledu, je možné tento zvolit jako šablonu. Vzhled vytvářených složek a parametry pohledu pak budou kopírovat složky a parametry v této šabloně.


Průvodce návrhem formuláře - krok 2

V tomto kroku se nastavuje struktura a vzhled formuláře.

Nejprve zadejte nadpis okna formuláře - bez uvozovek.

Dále rozhodněte, má-li formulář obsahovat na jedné stránce (v jednom okně) právě jeden záznam nebo má být v jednom okně záznamů více (tolik, kolik se jich vejde na výšku). Podle zvolené možnosti se nabízejí přednastavené grafické podoby možných způsobů rozvržení. Pro jeden záznam na stránce to jsou následující rozvržení:

•	složky a jejich popisky jsou pod sebou v levé části okna (vertikální rozložení);

•	složky s popiskami jsou rozmístěny po celé ploše okna (plošné rozložení)

Pro více záznamů na stránce se nabízí:

•	popisky sloupců jsou na prvním řádku, hodnoty pak ve sloupcích pod nimi (horizontální rozložení);

•	složky s popiskami jsou rozmístěny po celé ploše okna (plošné rozložení bez přechodu na novou stránku)

•	tabulkové rozložení v podobě, v jaké se otevírají tabulky a dotazy z řídicího panelu (standardní formulář).

Ve většině případů nevyhovuje okamžitě ani jeden z nabízených druhů a je nutné návrh posléze doupravit ručně.


Průvodce návrhem formuláře - krok 3

V tomto kroku se vybírá, které sloupce zdroje dat budou obsaženy v iniciálním návrhu. Abyste mohli plně využít nabízených možností, musíte se nejprve seznámit s návrhem formulářů a prací s nimi.

V okně je vidět seznam všech sloupců a je možné:

•	některé sloupce vypustit z návrhu (označte řádek a stiskněte Delete);

•	změnit jejich pořadí (pomocí tlačítek se šipkami);

•	určit text jejich popisky (sloupec Popiska);

•	u základních typů sloupců stanovit, bude-li složka formuláře editační nebo hodnotová (sloupec Druh složky);

•	zatržením ve sloupci Dotazové pole určíte, vytvoří-li se pro tento sloupec tzv. dotazové pole, sloužící k rychlému vyhledávání; pro typ řetězec se vytvoří dynamické vyhledávací pole, pro typy číselné, datum, čas statické dotazové pole apod.;

•	pro typy sloupců, u nichž lze použít k zadávání hodnot překládané combo (Znak, Integer a Short) můžete už zde zadat připravený dotaz, který překlad provádí.

V dolní části jsou tlačítka, která mohou usnadnit některé hromadné změny:

•	Odstranit vše - všechny sloupce z návrhu zmizí;

•	Vložit vše - všechny sloupce zdroje dat se opět objeví v okně;

•	Vše editační - všechny složky budou označeny jako editační;

•	Vše needitovatelné - všechny složky budou označeny jako hodnotové;


Průvodce návrhem formuláře - krok 4

Zde se nastavuje, k čemu je formulář určen, jak se bude chovat, bude-li obsahovat nějaká implicitní tlačítka apod.

Můžete zvolit, že formulář slouží:

•	pouze pro výběr záznamu - formulář (převážně standardní) se bude chovat podobně jako seznam položek: celý záznam se vybírá jako celek, není možná editace, předpokládá se použití převážně jako subformulář s definovanou akcí na poklepání (např. otevřít formulář na stejném záznamu).

•	pouze pro vložení záznamu - formulář se otevře vždy na "novém prázdném" záznamu a umožní jeho naplnění a vložení;. Není možné prohlížení obsahu zdroje dat.

•	pro práci se záznamy - obvyklý formulář, nejčastější varianta; jeho vlastnosti lze ještě blíže specifikovat pomocí skupiny označovacích čtverců (co bude ve formuláři povoleno) a dále pomocí dalšího okna parametrů, které se otevře po stisku tlačítka Detail.

Toto je poslední krok při návrhu formuláře. Pokračování - Návrh formuláře


Průvodce návrhem sestavy - krok 2

V tomto kroku se nastavuje struktura a vzhled sestavy.

Nejprve zadejte nadpis sestavy  - text, který se objeví v záhlaví sestavy. Podle typu rozvržení můžete též zadat záhlaví stránky, které se objeví na začátku každé stránky.

Dále se nabízejí přednastavené grafické podoby možných způsobů rozvržení.

•	popisky sloupců jsou v záhlaví stránky, hodnoty pak ve sloupcích pod nimi (horizontální rozložení);

•	složky s popiskami jsou rozmístěny po celé ploše okna (plošné rozložení bez přechodu na novou stránku)

•	tabulkové rozložení v podobě, v jaké se tisknou tabulky a dotazy z řídicího panelu (standardní sestava).

Ve většině případů nevyhovuje okamžitě ani jeden z nabízených druhů a je nutné návrh posléze doupravit ručně.


Průvodce návrhem sestavy - krok 3

V tomto kroku se vybírá, které sloupce zdroje dat budou obsaženy v iniciálním návrhu. Abyste mohli plně využít nabízených možností, musíte se nejprve seznámit s návrhem sestav, s tvořením skupin záznamů apod..

V okně je vidět seznam všech sloupců a je možné:

•	některé sloupce vypustit z návrhu (označte řádek a stiskněte Delete);

•	změnit jejich pořadí (pomocí tlačítek se šipkami);

•	určit text jejich popisky (sloupec Popiska);

•	zadat, které sloupce mají být v datové oblasti sestavy (sloupec Data);

•	další sloupce se vyplňují, pokud zdroj dat je vhodně setříděný a máte ve spodní části definované skupiny; v těchto sloupcích lze zadat, jestli a jak se zobrazí data v hlavičkách a patičkách prvních dvou skupin záznamů, vybírejte z nabídky agregačních (souhrnných) funkcí (např. součet cen po měsících) nebo zvolte hodnotu sloupce;

•	pro sloupce, u nichž bylo použito při zadávání hodnot překládané combo, můžete už zde zadat připravený dotaz, který provede zpětný překlad.

V tomto kroku je již možné definovat, jak budou záznamy v sestavě seskupovány. Je zde možné zadat definice pro první dvě skupiny, potřebujete-li jich více, budete pokračovat v úpravách v návrháři sestav.

V dolní části jsou tlačítka, která mohou usnadnit některé hromadné změny:

•	Odstranit vše - všechny sloupce z návrhu zmizí;

•	Vložit vše - všechny sloupce zdroje dat se opět objeví v okně;

Toto je poslední krok při návrhu sestavy. Pokračování - Návrh sestavy


Průvodce návrhem štítků - krok 2

V tomto kroku se nastavují rozměry a struktura štítků.

V horní části je seznam předdefinovaných druhů štítků, které se u nás používají. Štítky začínající A4 označují  formáty štítků na samostatných arších určené pro stránkové tiskárny (formát A4). Ostatní jsou určeny pro tisk na nekonečný pás (převážně jehličkové tiskárny - formát Fanfold)

Uživatel má navíc možnost nadefinovat si vlastní rozměry - po vybrání ze seznamu položku Níže definovaný formát je možno do příslušných políček zadávat nové hodnoty.

Zadává se:

•	šířka jedné jmenovky v mm;

•	výška jedné jmenovky v mm;

•	šířka mezery mezi jmenovkami, je-li na stránce více než jedna (horizontální směr);

•	výška mezery mezi jmenovkami (vertikální směr);

•	počet jmenovek vedle sebe (horizontální směr);

•	počet jmenovek na jedné stránce (vertikální směr), i když se tiskne na nekonečný pás ;

•	levý horizontální okraj - vzdálenost od kraje podkladu k prvnímu štítku shora;.

•	horní vertikální okraj - vzdálenost od kraje podkladu k prvnímu štítku zleva;

Minimální změna každého rozměru je 0,3 mm - přesněji než tento rozměr nelze údaje zadat. Případná odchylka se však nekumuluje, na nové stránce budou rozměry opět v pořádku.

Zde zvolený formát lze později v návrháři pohledů změnit.


Průvodce návrhem štítků - krok 3

V tomto kroku se vybírá, které sloupce zdroje dat budou obsaženy v iniciálním návrhu.

V okně je vidět seznam všech sloupců a je možné:

•	některé sloupce vypustit z návrhu (označte řádek a stiskněte Delete);

•	změnit jejich pořadí (pomocí tlačítek se šipkami);

•	určit text jejich popisky (sloupec Popiska), u štítků se příliš nevyužívá;

•	pro sloupce, u nichž bylo použito při zadávání hodnot překládané combo, můžete už zde zadat připravený dotaz, který provede zpětný překlad.

V dolní části jsou tlačítka, která mohou usnadnit některé hromadné změny:

•	Odstranit vše - všechny sloupce z návrhu zmizí;

•	Vložit vše - všechny sloupce zdroje dat se opět objeví v okně;

Toto je poslední krok při návrhu štítků. Pokračování - Návrh štítků


Průvodce návrhem triggerů - krok 1

Náš průvodce s Vámi v několika krocích projde úvodem vytváření triggerů. Průvodce můžete kdykoliv opustit stiskem tlačítka Dokončit. V tom případě se použijí implicitně nastavené hodnoty následujících dialogů. Stejného efektu dosáhnete tím, že budete jednoduše používat tlačítko Další.

Na úvodní stránce zadáte jméno triggeru a vyberete tabulku, při jejíž editaci se trigger bude spouštět.


Průvodce návrhem triggerů - krok 2

V tomto kroku musíte určit, při jaké editační akci s tabulkou se trigger spustí. K dispozici jsou tyto akce:

•	vložení záznamu do tabulky (SQL příkaz INSERT)

•	odstranění záznamu z tabulky (SQL příkaz DELETE)

•	změna hodnot v nějakém sloupci tabulky (SQL příkaz UPDATE)

Pokud zvolíte UPDATE trigger, můžete dále stanovit, má-li se spouštět při editaci libovolného sloupce nebo pouze sloupce některých. V druhém případě zatrnete volbu Spouštět pouze při UPDATE na vybrané sloupce a tyto sloupce vyberete ze seznamu.


Průvodce návrhem triggerů - krok 3

V tomto kroku je třeba zvolit, kdy se má trigger spustit. Zvolíte-li Před operací, bude proveden dříve než se provede příslušná databázové operace (vybraná v kroku 2). Zvolíte-li Po operaci, bude nejprve provedena databázová operace a poté se vykoná tento trigger.

Zvolíte-li Spustit jednou pro všechny změny v příkazu, stanovíte, že trigger bude spuštěn pouze jednou v rámci provádění celého SQL příkazu, který mění více řádků najednou (bez možnosti ovlivnit zadávané hodnoty). V opačném případě se trigger spustí pro každý měněný řádek zvlášť (s možností číst a přepisovat zadávané hodnoty).

Jako poslední se volí identifikátory umožňují odvolávat se v triggeru na obsah databázového záznamu před a po provedení akce, která trigger spustila. Tyto identifikátory zapište do polí ve spodní části. Podle druhu triggeru nastaveného v předcházejících krocích, mohou být tato pole zablokována.

Toto je poslední krok při návrhu sestavy. Dále editace probíhá v textovém editoru. Součástí tohoto průvodce není vlastní příkaz v jazyce SQL, který se má provést.


Server WinBase602
WinBase602 SQL Server

Databázový server WinBase602 pro Windows (program WBSERVER.EXE) je program, který spravuje data a poskytuje služby databázovým klientům. Spustit server samostatně (pomocí ikony vzniklé instalací s názvem WinBase602 Server) má význam na počítači zapojeném do lokální sítě. Po spuštění serveru se na něj mohou připojovat z ostatních stanic v síti databázoví klienti. Ve Windows NT/2000 se server může spustit jako služba (pomocí standardního dialogu Services nebo pomocí ovládacích prvků v programu Konfigurace WinBase602).

Při spuštění serveru bez parametrů na příkazové řádce se buď nabídne výběr lokálních databází, je-li registrována pouze jediná, server se k ní připojí v síťovém režimu.

Na jednom počítači je možno spustit i více serverů. Aby byly tyto servery od sebe rozeznatelné (při TCP/IP komunikaci), je třeba programem Konfigurace WinBase602 pro každý server zadat odlišné číslo portu.

Nepodaří-li se WinBase602 navázat síťové spojení, oznámí Nelze inicializovat komunikaci v síti a ukončí program.

Spouštíte-li vývojové nebo provozní prostředí (ikonou WinBase602) a vyberete-li server z nabídky lokálních serverů, server se spustí, ale pouze pro tohoto klienta. Chcete-li, aby i ostatní mohli s daty pracovat, je nutné spustit nejprve program WBSERVER.EXE s parametrem /N (ikona WinBase602 Server).

Přepnete-li se do úlohy WinBase602 Server (nebo v NT poklepete na ikonu serveru služby v pravém dolním rohu), otevře se okno s informací o verzi serveru, o počtu v tomto okamžiku přihlášených a maximálním počtu klientů a o protokolech, kterými se klienti mohou připojovat. V dolní části se vypisují různá hlášení (i uživatelská), lze vypsat uživatele přihlášené k serveru a využívanou paměť.

POZOR! Servery se liší maximálním počtem současně přihlášených uživatelů! Základní instalace obsahuje licence pouze pro jednoho přihlášeného klienta. Rozšíření serveru (licence) je nutno zakoupit (zvlášť pro přístup ze sítě a zvlášť pro přístup z WWW pomocí Internet Klientů). Rozšiřování serveru (zadávání licencí) se provádí programem Konfigurace WinBase602.

Ukončení činnosti samostatně spuštěného serveru se provede položkou Konec v menu ikony běžícího serveru nebo tlačítkem Ukončit server v okně serveru. Jsou-li v okamžiku uzavření serveru ještě připojeni nějací klienti, server Vás při zavírání upozorní. Není moudré ukončovat server v době, kdy zpracovává nějakou úlohu - za nepříznivých okolností může tato akce vést i ke ztrátě dat.

Existují také WinBase602 SQL servery pro prostředí Novell NetWare a Linux, které nejsou v tomto helpu popisovány.

Viz také:	Architektura klient - server
	Klienti WinBase602


Klient WinBase602
Klienti WinBase602

Klientem se rozumí každý program, který se přihlásí k serveru WinBase602. Nejčastěji je to vývojové a provozní prostředí spouštěné ikonou, mohou to být i aplikace napsaná pro tento účel nebo cizí ODBC klient. Na příkazové řádce klienta je určeno, má-li se na řídicím panelu nabídnout seznam zaregistrovaných serverů a serverů, které inzerují v lokální síti, nebo zda se má klient automaticky napojit na jeden předem určený server a další podrobnosti.

Speciálním případem klienta je WinBase602 Internet Klient (WBIK), který ve spolupráci s webserverem vytváří dynamické HTML stránky. Server, který má poskytovat data pro tento přístup, musí vlastnit tzv. Internet (WWW) licenci.

Pokusíte-li přihlásit na server ze sítě více klientů, než povoluje licence, server vydá hlášku Server nepovoluje připojení dalšího klienta a poslední klient se nespustí. Při nesíťovém provozu z lokální stanice není počet současně přihlášených klientů omezen.

Nepodaří-li se WinBase602 navázat síťové spojení, oznámí Nelze inicializovat komunikaci v síti.

Na jednom počítači je možno spustit i více klientů.

Je-li pro klienta zvolen lokální server, který dosud neběží, je klientem spuštěn a po ukončení práce klienta také ukončen. Přihlašuje-li se klient na již běžící server, ukončení práce s klientem neukončí běh serveru (ostatní klienti v síti mohou dosud pracovat).

Viz také:	Architektura klient - server
	WinBase602SQL Server


Architektura klient - server

WinBase602 je založena na tzv. modelu klient-server. Podstata tohoto modelu spočívá v tom, že program, který poskytuje služby v určité oblasti, je oddělen od programu, který těchto služeb využívá.

Programu poskytujícímu služby říkáme server, v našem případě databázový server. Server umí například uchovávat data v databázi, vyhledávat je podle různých kritérií, třídit je nebo zajišťovat jejich integritu. Programu, který těchto služeb využívá, říkáme databázový klient. Klient může například ukazovat data z databáze v oknech na obrazovce, tisknout sestavy, umožňovat vkládání dat pomocí formulářů, konvertovat data do jiných formátů, provádět výpočty nad daty atd. Jeden server je schopen obsluhovat více klientů.

Plná síla modelu klient-server se projeví při práci v síti počítačů. Server, instalovaný na jednom z počítačů, obsluhuje požadavky přicházející od klientů umístěných na všech počítačích v síti. Díky tomu mohou všichni klienti pracovat nad stejnými daty, využívat navzájem svoje výsledky, sdílet informace.

Model klient-server není jediným způsobem organizace síťových databází. Při alternativní organizaci řada počítačů v síti zasahuje do společných databázových souborů. Praktický rozdíl spočívá (mimo jiné) v tom, že při práci se sdílenými soubory se po síti musí stěhovat značné množství dat, zatímco klient se serverem komunikují ve stručném stylu žádost - odpověď a práci s velkými objemy dat obstarává server.

Viz také:	Klienti WinBase602
	Server WinBase602


DIALOG SERVER


Číslo verze serveru.


Seznam protokolů, kterými server komunikuje. Při lokálním provozu je zde uvedeno N/A - na server se není možno připojit vzdáleným klientem.


Počet právě připojených klientů. První číslice udává počet spotřebovaných Intranet licencí, číslo v závorce skutečný počet přihlášených (všichni lokální klienti čerpají jedinou licenci). Případný znak + a číslice udává aktuální počet WWW přístupů.

Jména právě přihlášených uživatelů lze zobrazit do dolního pole stiskem tlačítka Vypsat uživatele.


Informace o zakoupených klientských licencích. Číslice udává počet Intranet licencí (netýká se lokálního přístupu), je-li zakoupena Internet licence, objeví se zde nápis +WWW přístup.


Informační seznam, do něhož se vypisují některé informace o serveru. Lze zobrazit jmenný seznam přihlášených uživatelů, nechat vypisovat chybové a informační hlášky generované serverem, zjistit stav paměti apod. Současně je možné tento výpis ukládat do textového souboru (program Konfigurace, záložka Databáze a servery).

Pokud výpisy začínají slovem Neregistrováno, je spuštěn server, který není zaregistrován u výrobce. Dále je uveden datum a čas výpisu, značka pro typ výpisu a jméno klienta, který výpis vyvolal (resp. jméno vlákna, které výpis vyvolalo, např. console, jedná-li se o výpis vyvolaný z okna serveru, replicator, jde-li o monitor relikací apod.).

V seznamu přihlášených klientů se na každé řádce před jménem vypíše trojice znaků: písmeno D pro přímého klienta nebo N pro klienta síťového, dále znak + pokud server právě pracuje na požadavku tohoto klienta nebo znak - pokud server čeká na další požadavek a kladné číslo, které má diagnostický význam. Za jménem se vypíše IP adresa (při TCP/IP spojení) nebo Lokální klient.


Je-li zatržen tento čtverec, do seznamu se vypisují chyby hlášené serverem týkající se jednotlivých klientů (včetně jména uživatele a času chyby). V opačném případě se monitorují pouze (řídké) chyby a informační oznámení týkající se serveru jako celku.


Tlačítko slouží k okamžitému vypsání právě přihlášených uživatelů do seznamu výše.


Tlačítko slouží k vypsání velikosti paměti, kterou server právě využívá (v bajtech). Velikost alokované paměti při spuštění lze zvětšit pomocí nastavení parametrů programem Konfigurace na záložce Instalace. Pokud v průběhu práce serveru tato paměť nedostačuje, alokuje server automaticky paměť další. Pokud údaj o paměti během práce stále narůstá, může to signalizovat chybu aplikace.


Tlačítko uzavře toto okno, nikoliv běh serveru.


Tlačítko se pokusí uzavřít běžící databázový server. Jsou-li připojeni uživatelé, vydá varování a po potvrzení skončí činnost.


Je-li zatržen tento čtverec, do seznamu se vypisují informace o probíhajících replikacích. Čtverec je aktivní, pokud je povolena replikace v replikačních parametrech serveru.


Tlačítkem vymažete obsah okna s informacemi. Na běh serveru nemá žádný vliv.


DIALOG VOLBA DATABÁZE


Spustili jste server WinBase602 (tedy program WBSERVER.EXE) bez parametrů na příkazové řádce, které určují, s kterými daty má program pracovat. Zřejmě program nespouštíte ikonou vzniklou při instalaci. Výběr databáze se tedy musí provést dodatečně - seznam nabízí registrované lokální databáze na Vašem počítači.

Výběr databáze ze seznamu (např. Moje_databaze) odpovídá parametru příkazové řádky &"Moje_databaze"


Máte možnost zvolit, má-li server své služby nabízet v síti, aby se k němu mohli připojovat klienti z jiných stanic. Zatržení čtverce odpovídá parametru příkazové řádky /N


Encyklopedie funkcí a procedur

A, B, C, D, E, F, G, H, I, K, L, M, N, O, P, Q, R, S, T, U, V, W, Y

-- A --

Abs - absolutní hodnota reálného čísla

Acreate_user - vytvoření nového uživatele

Active_view - vrátí číslo aktivního formuláře

Addr - ukazatel na proměnnou

Add_record - přidání záznamu do kurzoru

Alogin - interaktivní zadání jména uživatele a hesla

Am_I_db_admin - test, je-li uživatel členem skupiny DB_ADMIN

Amodify_user - modifikace údaje o uživateli

answered - zjištění zda došla odpověď na poslední požadavek zaslaný serveru

Append - přidání záznamu na konec tabulky

Appl_inst_count - zjištění počtu současně běžících aplikací

Arctan - funkce arkus tangens

AReplicate - interaktivní odeslání replikačních paketů / žádosti o replikaci

Aset_password - změna hesla přihlášeného uživatele

Atoken_control - správa pešků

Attribute_info - vyhledání sloupce v tabulce - externí

Available_memory - zjištění velikosti volné paměti

-- B --

Background_bitmap- vykreslení obrázku na pozadí okna aplikace

Bind_records - přivazování záznamů k ukazateli

Break - zrušení právě prováděného požadavku na server

-- C --

C_Avg - zjištění průměrné hodnoty sloupce v kurzoru

C_Count - zjištění počtu záznamů v kurzoru

C_Max - zjištění maximální hodnoty sloupce v kurzoru

C_Min - zjištění minimální hodnoty sloupce v kurzoru

C_Sum - zjištění součtu hodnot sloupce v kurzoru

cdp_alloc - alokování kontextové proměnné klienta a vrací ukazatel na ni

cdp_free - dealokování kontextové proměnné klienta

cdp_init - inicializace kontextových proměnných klienta

cdp_size - velikost kontextové proměnné klienta

Chng_component_flag - nastavení příznaků pro objekt

Chr - konverze celých čísel na znaky

client_number - číslo připojení v SQL

Close - uzavření souboru

Close_all_views - zavření všech otevřených oken s pohledy

Close_cursor - uzavření kurzoru

Close_semaphore - zavření semaforu

Close_view - uzavření formuláře

CloseWBMail - ukončení práce s poštou

Commit - potvrzení a ukončení transakce

Commit_view - uložení změn ve formuláři do databáze

Compact_database - zkompaktnění databáze

Compact_table - zkompaktnění tabulky

concurrent - zapínání souběžné práce klienta a serveru

Connection_speed_test - orientační změření rychlosti komunikace

Cos - funkce kosinus

Create_group - vytvoření skupiny uživatelů

Create_link - vytvoření spojovacího objektu

Create2_link - vytvoření spojovacího objektu

Create_semaphore - vytvoření semaforu

Create_user - vytvoření uživatele

Current_application - vrátí jméno aktuální aplikace

Current_item - vrátí číslo složky formuláře, na níž stojí kurzor

-- D --

Database_integrity  - kontrola a případně oprava poškozené databáze

Data_export - obecná exportní funkce

Data_import - obecná importní funkce

Date2str - konverze data na řetězec znaků

datetime2timestamp - konverze zadaného data a času na údaj o datu a čase

Day - extrakce dne z data

Day_of_week - zjištění čísla dne v týdnu

Define_table - vytvoření nové tabulky

DefWinBaseFrameProc - funkce pro předávání nezpracovaných zpráv

Delete - zrušení záznamu

Delete_all_records - vymazání všech záznamů tabulky nebo kurzoru

Delete_file - smazání souboru DOSu

Dispose - uvolnění objektu

Draw_line - nakreslení úsečky v okně

-- E --

Edit_impexp - zpřístupnění návrháře přenosu dat z jazyka

Edit_privils - editace práv k záznamu

Edit_query - zpřístupnění návrháře dotazů z jazyka

Edit_relation - editace relace mezi uživateli, skupinami a rolemi

Edit_text - editace sloupce typu Text

Edit_view - editace definice pohledu

Enable_index - povoluje/zakazuje použití indexů

Enable_task_switch - povolení resp. zákaz doručování zpráv v době, kdy klient čeká na odpověď serveru

Enum_attributes - zjištění atributů v tabulce - externí

Eof - zjištění konce souboru

Err_mask - nastavení reakce na databázové chyby

Exec - souběžné spuštění dalšího programu

Exec_statements - provedení posloupnosti příkazů vnitřního programovacího jazyka

Exp - exponenciála (přirozená)

Export_appl - export aplikace z programu

Export_app_ex - export aplikace z programu od verze 6

-- F --

Filelength - zjištění délky souboru

Find_object - zjištění čísla objektu

Find2_object - zjištění čísla objektu v aplikaci

Find_object_by_id - zjištění čísla objektu na základě jeho identifikace

Free_deleted - uvolnění zrušených záznamů v tabulce

From_Xbase - import DBF dat do tabulky

-- G --

GetClient - handle MDI klienta aplikace

Get_data_rights - zjištění práv uživatele k datům

Get_ext_message - čekání na událost a vrácení čísla došlé zprávy

Get_fcursor - zjištění kurzoru a parametrů formuláře

Get_info- všeobecné informace o stavu databáze a serveru

Get_item_value - zjištění hodnoty ve složce formuláře

Get_logged_user - zjištění jmen připojených klientů

Get_message - čekání na událost a vrácení čísla došlé zprávy

Get_object_rights - zjištění práv uživatele k objektům

GetSet_fil_blocks - zjištění či nastavení velikosti databázového souboru

GetSet_fil_size- zjištění či nastavení velikosti databázového souboru

GetSet_group_role - zjištění, zařazení a vyřazení uživatele nebo skupinu do/ze skupiny nebo role.

GetSet_next_user - zjištění nebo zápis do kolujícího dokumentu označení uživatele, na nějž dokument čeká

GetSet_privils - nastavení, zjištění práva uživatele, skupiny nebo role k tabulce, případně k záznamu.

Get_var_address- Přístup k proměnným projektu

Get_view_item - zjištění obsahu složky formuláře

Get_view_pos - zjištění čísla vybraného záznamu ve formuláři

-- H --

Help_file - nastavení souboru nápověd

Hours - extrakce hodin z časového údaje

-- I --

Iabs - absolutní hodnota celého čísla

Import_appl - import aplikace z programu

Info_box - sdělení uživateli prostřednictvím modálního okna

Init_non_mdi_env - inicializace hlavního okna aplikace, které není MDI

Init_window_env - inicializace hlavního okna aplikace

InitWBMail - inicializace pošty

InitWBMail602 - inicializace pošty Mail602

Input_box - okno pro zadání řetězce

Insert - vložení záznamu do tabulky

Insert_object - vytvoření nového objektu

Int2str - konverze celého čísla na řetězec znaků

interf_close - ukončení komunikace se serverem

interf_init - inicializace spojení klienta se serverem

Isqr - druhá mocnina celého čísla

Is_repl_destin - pomocná funkce pro řízení replikací

-- K --

Kernel_error_box - vysvětlení chyb vzniklých při navázání nebo inicializaci spojení klienta se serverem

-- L --

LetterAddAddr - přidání adresáta k zásilkce

LetterAddFile - přidání souboru k zásilce

LetterCancel - zrušení neodeslaného dopisu

LetterCreate - vytvoření dopisu

LetterSend - odeslání dopisu

Like - podobnost řetězců

link_kernel - navázání spojení klienta se serverem

Ln - přirozený logaritmus

Login - přihlášení se uživatele

Logout - odhlášení se uživatele

Log_write - zápis řádku do logu serveru

Look_up - vyhledání záznamu podle hodnoty ve sloupci

-- M --

MailBoxDeleteMsg - vymazání došlé pošty ze schránky

MailBoxGetFilInfo - získání informací o připojených souborech k došlé zásilce

MailBoxGetMsg - získání textu došlé zásilky

MailBoxLoad - načtení seznamu zásilek ze schránky

MailBoxSaveFileAs - uložení k zásilce připojených souborů na disk

MailCloseInBox - uzavření poštovní schránky

MailDial - vytočení čísla telefonního spojení na Internet

MailGetInBoxInfo - získání informací o tabulkách použitých pro uložení došlých zásilek

MailGetType - získání typu inicializované pošty

MailHangUp - ukončení telefonního spojení na Internet

MailOpenInBox - otevření poštovní schránky

Main_menu - přidělení uživatelem definovaného menu hlavnímu oknu aplikace

Make_date - vytvoření data z dne, měsíce, roku

Make_directory - vytvoření adresáře

Make_time - vytvoření časového údaje

Memcpy - kopírování obsahu proměnných

Message_to_clients - rozeslání zprávy klientům

Minutes - extrakce minut z časového údaje

Money2str - konverze částky peněz na řetězec znaků

money2real - konverze částky peněz na reálné číslo

Month - extrakce měsíce z data

Move_data - přenos dat

-- N --

Next_user_name - funkce vrací údaje o uživateli, na nějž dokument čeká

New - dynamická alokace objektu zadaného typu

Now - běžný čas

-- O --

ODBC_create_connection - interaktivní vytvoření dočasného zdroje dat

ODBC_direct_connection - přímé vytvoření dočasného zdroje dat

ODBC_find_connection - získání čísla napojení na zdroj dat v aplikaci

ODBC_open_cursor - otevření proměnného kurzoru v ODBC zdroji dat

Odd - zjištění parity čísla

Open_cursor - otevření pevného kurzoru z databáze - interní

Open_cursor - otevření pevného kurzoru z databáze - externí

Open_cursor_direct - otevření proměnného kurzoru zadáním dotazu - externí

Open_project - nastavení projektu

Open_sql_cursor - otevření proměnného kurzoru zadáním dotazu

Open_sql_parts - otevření proměnného kurzoru zadáním dotazu po částech

Open_subcursor - otevření subkurzoru již otevřeného kursoru

Open_view - otevření formuláře na obrazovce

Ord - konverze znaků na celá čísla

Owned_cursors - zjištění počtu otevřených kurzorů

-- P --

Page_setup - nastavení parametrů formátu stránky

Peek_message - zjištění, došla-li nějaká zpráva

Pick_window - vytažení formuláře nad ostatní okna

Pref - relace 'prefix' mezi řetězci

Print_copies - nastavení počtu kopií při tisku

Print_margins - nastavení okrajů stránky při tisku

Print_opt - interaktivní nastavení parametrů tisku sestav

Print_view - tisk sestavy

Printer_dialog - volba tiskárny

Printer_select - nastavení parametrů tiskárny

Put_pixel - nakreslení bodu v okně

-- Q --

QBE_state - zjištění, zda byl položen QBE dotaz resp. uspořádání

Quarter - zjištění čísla čtvrtletí z data

-- R --

Read - čtení z textového souboru - interní jazyk

Read - čtení z databáze - externí jazyk

Read_ind - čtení obsahu sloupce pevné velikosti z databáze

Read_ind_cnt - zjištění počtu hodnot multiatributu

Read_len - zjištění velikosti sloupce proměnné velikosti

Read_lock_record - uzamknutí záznamu pro čtení

Read_lock_table - uzamknutí tabulky nebo kurzoru pro čtení

Read_record - čtení záznamu z databáze

Read_unlock_record - odemknutí záznamu pro čtení

Read_unlock_table - odemknutí tabulky nebo kurzoru pro čtení

Read_var - čtení  obsahu sloupce proměnné velikosti z databáze

real2money - konverze reálného čísla na typ peníze

Real2Str - konverze reálného čísla na řetězec znaků

Rec_cnt - zjištění počtu záznamů v tabulce nebo kurzoru

Register_key - definování reakce na stisk klávesy

Register_ext_menu - informace pro WinBase602 o změně menu hlavního okna WinBase602.

Register_rec_syn - synchronizování dvou pohledů na stejný záznam

Relate_record - vložení hodnoty z relačně provázané tabulky

Release_semaphore - zvednutí semaforu

Relist_objects - zajistí, že v aplikaci jsou pouze nesmazané tabulky

Repl_control - programové řízení replikací

Replicate - okamžité replikování nebo vyžádání replikace - neinteraktivní varianta

Reset - otevření existujícího souboru

Reset_view - aktualizace obsahu formuláře

Restore_cursor - návrat k původnímu obsahu zúženého kurzoru

Restore_table - načte obsah tabulky ze souboru

Restrict_cursor - zúžení kurzoru

Rewrite - vytvoření a otevření nového souboru

Roll_back - zrušení transakce

Roll_back_view - odvolání změn v záznamově synchronizovaném formuláři

Round - zaokrouhlení reálného čísla na celé číslo

-- S --

Save_table - uloží celý obsah tabulky do souboru

Sec1000 - extrakce tisícin sekundy z časového údaje

Seconds - extrakce sekund z časového údaje

Seek - nastavení pozice v souboru

Select_directory - výběr adresáře

Select_file - výběr souboru

Select_records - výběr množiny záznamů z formuláře

Send_message - zaslání zprávy oknu

send_package - zaslání balíku požadavků serveru

Set_appl_starter - nastavení startovního objektu

Set_application - výběr aplikace

Set_application_ex - výběr aplikace

Set_cursor - nastavení tvaru kurzoru

Set_data_rights - nastavení práv k datům

Set_ext_pos - vybrání záznamu ve formuláři dle absolutního čísla

Set_fcursor - nastavení kurzoru a parametrů formuláře

Set_first_label - nastavení prvního tištěného štítku na archu

Set_int_pos - vybrání záznamu ve formuláři dle pořadového čísla

Set_item_value - zápis hodnoty do složky formuláře

Set_object_rights - nastavení práv k objektům

Set_password - nastavení hesla

Set_printer - nastavení parametrů tisku sestav

Set_progress_report_modulus - nastavení frekvence zpráv ze serveru

Set_sql_option - nastavení vlastností SQL serveru

Set_status_nums - zápis do status baru

Set_status_text - zápis do status baru

Set_timer - nastaví časovač

Set_transaction_isolation_level - nastaví stupeň izolace transakce

Set_view_item - nastavení obsahu složky formuláře

Show_help - otevření stránky nápovědy

Show_help_popup - otevření stránky nápovědy v popup okně

Signalize - okno s popisem databázové chyby

Signature_state - zjištění stavu digitálního podpisu

Sin - funkce sinus

Sleep - pozastavení provádění SQL procedury

Sql_drop - zrušení připraveného SQL příkazu

Sql_execute - přímé provedení SQL příkazu

Sql_exec_prepared - provedení připraveného SQL příkazu

Sql_prepare - připravení SQL příkazu

Sqr - druhá mocnina reálného čísla

Sqrt - druhá odmocnina

start_package - zahájení ukládání požadavků na server do balíku

Start_transaction - zahájení transakce

Str2date - konverze řetězce znaků na datum

Str2int - konverze řetězce znaků na celé číslo

Str2money - konverze řetězce znaků na částku peněz

Str2real - konverze řetězce znaků na reálné číslo

Str2time - konverze řetězce znaků na čas

Str2timestamp- konverze řetězce znaků na datum a čas (timestamp)

Strcat - spojení dvou řetězců (zřetězení)

Strcopy - vybrání podřetězce z řetězce

Strdelete - zrušení podřetězce v řetězci

Strinsert - vložení řetězce dovnitř řetězce

Strlength - zjištění délky řetězce

Strpos - hledání podřetězce v řetězci

Strtrim - ořezání mezer řetězce

Substr - relace ”obsažen'' mezi řetězci

Super_recnum - převod čísla záznamu v subkurzoru na číslo téhož záznamu v superkurzoru

Sz_error - zjištění čísla chyby

Sz_warning - zjištění čísla varování

-- T --

Tab_Page - číslo vybrané záložky

TakeMailToRemOffice - spuštění poštovní brány vzdáleného klienta Mail602

Time2str - konverze času na řetězec znaků

timestamp2date - konverze údaje o datu a čase na datum

timestamp2str - konverze údaje o datu a čase na řetězec

timestamp2time - konverze údaje o datu a čase na čas

To_Xbase - export dat do souboru DBF

Today - dnešní datum

Token_control - manipulace s peškem

Translate - konverze čísla záznamu z kurzoru do tabulky

Trunc - seříznutí reálného čísla na celé číslo

-- U --

Undelete - obnovení zrušeného záznamu

Uninst_table - uvolnění paměti zabrané tabulkou

unlink_kernel - rozvázání spojení klienta se serverem

Upcase - konverze řetězce na velká písmena

Used_memory - zjištění velikosti použité paměti klienta a serveru

User_in_group - zjištění, je-li uživatel členem skupiny

User_to_group - zařazení uživatele do skupiny

-- V --

View_close - uzavření formuláře

View_open - otevření formuláře

View_pattern - nastavení čísla pohledu, který se použije při znázornění rozložení jmenovek na stránce

View_print - vytištění sestavy

View_state - zjištění, zda je formulář otevřen

View_toggle - otevření nebo uzavření formuláře

-- W --

waiting - určení doby čekání  požadavků klienta na uvolnění potřebných zámků na serveru

Wait_for_semaphore - čekání na zvednutí semaforu

Waits_for_me - zjištění čekajících dokumentů (pouze v SQL)

WinBase602_version - vrací číslo verze WinBase602

WinBaseFrameProc - zpracování zpráv, které přišly hlavnímu oknu aplikace WinBase602

Who_am_I - zjištění jména přihlášeného uživatele

Write - zápis do textového souboru - interní

Write - zápis do databáze

Write_ind - zápis obsahu proměnné do sloupce pevné velikosti

Write_ind_cnt - změna počtu hodnot multiatributu

Write_len - změna velikosti sloupce proměnné velikosti

Write_lock_record - uzamknutí záznamu pro zápis

Write_lock_table - uzamknutí tabulky nebo kurzoru pro zápis

Write_record - zápis všech atributů do záznamu v tabulce nebo kursoru

Write_unlock_record - odemknutí záznamu pro zápis

Write_unlock_table - odemknutí tabulky nebo kurzoru pro zápis

Write_var - zápis do sloupce proměnné velikosti

Writeln - zápis do textového souboru a odřádkování

-- Y --

Year - extrakce roku z data

Yesno_box - dotaz uživateli prostřednictvím modálního okna


Encyklopedie funkcí a procedur (vnitřní jazyk)

A, B, C, D, E, F, G, H, I, K, L, M, N, O, P, Q, R, S, T, U, V, W, Y	přehled podle významu

-- A --

Abs - absolutní hodnota reálného čísla

Acreate_user - vytvoření nového uživatele

Active_view - vrátí číslo aktivního formuláře

Addr - ukazatel na proměnnou

Add_record - přidání záznamu do kurzoru

Alogin - interaktivní zadání jména uživatele a hesla

Am_I_db_admin - test, je-li uživatel členem skupiny DB_ADMIN

Amodify_user - modifikace údaje o uživateli.

Append - přidání záznamu na konec tabulky

Appl_inst_count - zjištění počtu současně běžících aplikací

Arctan - funkce arkus tangens

AReplicate - interaktivní odeslání replikačních paketů / žádosti o replikaci

Aset_password - změna hesla přihlášeného uživatele.

Atoken_control - správa pešků

Available_memory - zjištění velikosti volné paměti

-- B --

Background_bitmap- vykreslení obrázku na pozadí okna aplikace

Bind_records - přivazování záznamů k ukazateli

-- C --

C_Avg - zjištění průměrné hodnoty sloupce v kurzoru

C_Count - zjištění počtu záznamů v kurzoru

C_Max - zjištění maximální hodnoty sloupce v kurzoru

C_Min - zjištění minimální hodnoty sloupce v kurzoru

C_Sum - zjištění součtu hodnot sloupce v kurzoru

Chng_component_flag - nastavení příznaků pro objekt

Chr - konverze celých čísel na znaky

Close - uzavření souboru

Close_all_views - zavření všech otevřených oken s pohledy

Close_cursor - uzavření kurzoru

Close_view - uzavření formuláře

CloseWBMail - ukončení práce s poštou

Commit - potvrzení a ukončení transakce

Commit_view - uložení změn ve formuláři do databáze

Compact_database - zkompaktnění databáze

Compact_table - zkompaktnění tabulky

Connection_speed_test - orientační změření rychlosti komunikace

Cos - funkce kosinus

Create_group - vytvoření skupiny uživatelů

Create_link - vytvoření spojovacího objektu

Create2_link - vytvoření spojovacího objektu

Create_user - vytvoření uživatele

Current_application - vrátí jméno aktuální aplikace

Current_item - vrátí číslo složky formuláře, na níž stojí kurzor

-- D --

Database_integrity  - kontrola a případně oprava poškozené databáze

Data_export - obecná exportní funkce

Data_import - obecná importní funkce

Date2str - konverze data na řetězec znaků

datetime2timestamp - konverze zadaného data a času na údaj o datu a čase.

Day - extrakce dne z data

Day_of_week - zjištění čísla dne v týdnu

Define_table - vytvoření nové tabulky

Delete - zrušení záznamu

Delete_all_records - vymazání všech záznamů tabulky nebo kurzoru

Delete_file - smazání souboru DOSu

Dispose - uvolnění objektu

Draw_line - nakreslení úsečky v okně

-- E --

Edit_impexp - zpřístupnění návrháře přenosu dat z jazyka

Edit_privils - editace práv k záznamu

Edit_query - zpřístupnění návrháře dotazů z jazyka

Edit_relation - editace relace mezi uživateli, skupinami a rolemi.

Edit_text - editace sloupce typu Text

Edit_view - editace definice pohledu interaktivním návrhářem

Enable_index - povoluje/zakazuje použití indexů

Enable_task_switch - povolení resp. zákaz doručování zpráv v době, kdy klient čeká na odpověď serveru

Eof - zjištění konce souboru

Err_mask - nastavení reakce na databázové chyby

Exec - souběžné spuštění dalšího programu

Exp - exponenciála (přirozená)

Export_app_exl - export aplikace z programu od verze 6

-- F --

Filelength - zjištění délky souboru

Find_object - zjištění čísla objektu

Find_object_by_id - zjištění čísla objektu na základě jeho identifikace.

Free_deleted - uvolnění zrušených záznamů v tabulce

From_Xbase - import DBF dat do tabulky

-- G --

Get_data_rights - zjištění práv uživatele k datům

Get_ext_message - čekání na událost a vrácení čísla došlé zprávy

Get_fcursor - zjištění kurzoru a parametrů formuláře

Get_item_value - zjištění hodnoty ve složce formuláře

Get_logged_user - zjištění jmen připojených klientů

Get_message - čekání na událost a vrácení čísla došlé zprávy

Get_object_rights - zjištění práv uživatele k objektům

GetSet_fil_blocks - zjištění či nastavení velikosti databázového souboru

GetSet_fil_size - zjištění velikosti databázového souboru WB5.FIL

GetSet_group_role - zjištění, zařazení a vyřazení uživatele nebo skupinu do/ze skupiny nebo role.

GetSet_next_user - zjištění nebo zápis do kolujícího dokumentu označení uživatele, na nějž dokument čeká

GetSet_privils - nastavení, zjištění práva uživatele, skupiny nebo role k tabulce, případně k záznamu.

Get_view_item - zjištění obsahu složky formuláře

Get_view_pos - zjištění čísla vybraného záznamu ve formuláři

-- H --

Help_file - nastavení souboru nápověd

Hours - extrakce hodin z časového údaje

-- I --

Iabs - absolutní hodnota celého čísla

Info_box - sdělení uživateli prostřednictvím modálního okna

InitWBMail - inicializace MAPI pošty

InitWBMail602 - inicializace pošty Mail602

Input_box - okno pro zadání řetězce

Insert - vložení záznamu do tabulky

Insert_object - vytvoření nového objektu

Int2str - konverze celého čísla na řetězec znaků

Isqr - druhá mocnina celého čísla

Is_repl_destin - pomocná funkce pro řízení replikací

-- K --

-- L --

LetterAddAddr - přidání adresáta k zásilkce

LetterAddFile - přidání souboru k zásilce

LetterCancel - zrušení neodeslaného dopisu

LetterCreate - vytvoření dopisu

LetterSend - odeslání dopisu

Like - podobnost řetězců

Ln - přirozený logaritmus

Login - přihlášení se uživatele

Logout - odhlášení se uživatele

Log_write - zápis řádku do logu serveru

Look_up - vyhledání záznamu podle hodnoty ve sloupci

-- M --

MailBoxDeleteMsg - vymazání došlé pošty ze schránky

MailBoxGetFilInfo - získání informací o připojených souborech k došlé zásilce

MailBoxGetMsg - získání textu došlé zásilky

MailBoxLoad - načtení seznamu zásilek ze schránky

MailBoxSaveFileAs - uložení k zásilce připojených souborů na disk

MailCloseInBox - uzavření poštovní schránky

MailDial - vytočení čísla telefonního spojení na Internet

MailGetInBoxInfo - získání informací o tabulkách použitých pro uložení došlých zásilek

MailGetType - získání typu inicializované pošty

MailHangUp - ukončení telefonního spojení na Internet

MailOpenInBox - otevření poštovní schránky

Main_menu - přidělení uživatelem definovaného menu hlavnímu oknu aplikace

Make_date - vytvoření data z dne, měsíce, roku

Make_directory - vytvoření adresáře

Make_time - vytvoření časového údaje

Memcpy - kopírování obsahu proměnných

Message_to_clients - rozeslání zprávy klientům

Minutes - extrakce minut z časového údaje

Money2str - konverze částky peněz na řetězec znaků

Month - extrakce měsíce z data

Move_data - přenos dat

-- N --

Next_user_name - funkce vrací údaje o uživateli, na nějž dokument čeká

New - dynamická alokace objektu zadaného typu

Now - běžný čas

-- O --

ODBC_create_connection - interaktivní vytvoření dočasného zdroje dat

ODBC_direct_connection - přímé vytvoření dočasného zdroje dat

ODBC_find_connection - získání čísla napojení na zdroj dat v aplikaci

ODBC_open_cursor - otevření proměnného kurzoru v ODBC zdroji dat

Odd - zjištění parity čísla

Open_cursor - otevření pevného kurzoru z databáze - interní

Open_sql_cursor - otevření proměnného kurzoru zadáním dotazu

Open_sql_parts - otevření proměnného kurzoru zadáním dotazu po částech

Open_view - otevření formuláře na obrazovce

Ord - konverze znaků na celá čísla

Owned_cursors - zjištění počtu otevřených kurzorů

-- P --

Page_setup - nastavení paramtrů formátu stránky

Peek_message - zjištění, došla-li nějaká zpráva

Pick_window - vytažení formuláře nad ostatní okna

Pref - relace 'prefix' mezi řetězci

Print_copies - nastavení počtu kopií při tisku

Print_margins - nastavení okrajů stránky při tisku

Print_opt - interaktivní nastavení parametrů tisku sestav

Print_view - tisk sestavy

Printer_dialog - volba tiskárny

Printer_select - nastavení parametrů tiskárny

Put_pixel - nakreslení bodu v okně

-- Q --

QBE_state - zjištění, zda byl položen QBE dotaz resp. uspořádání

Quarter - zjištění čísla čtvrtletí z data

-- R --

Read - čtení z textového souboru - interní

Read_lock_record - uzamknutí záznamu pro čtení

Read_lock_table - uzamknutí tabulky nebo kurzoru pro čtení

Read_unlock_record - odemknutí záznamu pro čtení

Read_unlock_table - odemknutí tabulky nebo kurzoru pro čtení

Real2Str - konverze reálného čísla na řetězec znaků

Rec_cnt - zjištění počtu záznamů v tabulce nebo kurzoru

Register_key - definování reakce na stisk klávesy

Register_rec_syn - synchronizování dvou pohledů na stejný záznam

Relate_record - vložení hodnoty z relačně provázané tabulky

Relist_objects - zajistí, že v aplikaci jsou pouze nesmazané tabulky

Repl_control - programové řízení replikací

Replicate - okamžité replikování nebo vyžádání replikace - neinteraktivní varianta

Reset - otevření existujícího souboru

Reset_view - aktualizace obsahu formuláře

Restore_cursor - návrat k původnímu obsahu zúženého kurzoru

Restore_table - načte obsah tabulky ze souboru

Restrict_cursor - zúžení kurzoru

Rewrite - vytvoření a otevření nového souboru

Roll_back - zrušení transakce

Roll_back_view - odvolání změn v záznamově synchronizovaném formuláři

Round - zaokrouhlení reálného čísla na celé číslo

-- S --

Save_table - uloží celý obsah tabulky do souboru

Sec1000 - extrakce tisícin sekundy z časového údaje

Seconds - extrakce sekund z časového údaje

Seek - nastavení pozice v souboru

Select_directory - výběr adresáře

Select_file - výběr souboru

Select_records - výběr množiny záznamů z formuláře

Send_message - zaslání zprávy oknu

Set_appl_starter - nastavení startovního objektu

Set_cursor - nastavení tvaru kurzoru

Set_data_rights - nastavení práv k datům

Set_ext_pos - vybrání záznamu ve formuláři dle absolutního čísla

Set_fcursor - nastavení kurzoru a parametrů formuláře

Set_first_label - nastavení prvního tištěného štítku na archu

Set_int_pos - vybrání záznamu ve formuláři dle pořadového čísla

Set_item_value - zápis hodnoty do složky formuláře

Set_object_rights - nastavení práv k objektům

Set_password - nastavení hesla

Set_printer - nastavení parametrů tisku sestav

Set_progress_report_modulus - nastavení frekvence zpráv ze serveru

Set_sql_option - nastavení vlastností SQL serveru

Set_status_nums - zápis do status baru

Set_status_text - zápis do status baru

Set_timer - nastaví časovač

Set_transaction_isolation_level - nastaví stupeň izolace transakce

Set_view_item - nastavení obsahu složky formuláře

Show_help - otevření stránky nápovědy

Show_help_popup - otevření stránky nápovědy v popup okně

Signalize - okno s popisem databázové chyby

Signature_state -  zjištění stavu digitálního podpisu

Sin - funkce sinus

Sql_drop - zrušení připraveného SQL příkazu

Sql_execute - přímé provedení SQL příkazu

Sql_exec_prepared - provedení připraveného SQL příkazu

Sql_prepare - připravení SQL příkazu

Sqr - druhá mocnina reálného čísla

Sqrt - druhá odmocnina

Start_transaction - zahájení transakce

Str2date - konverze řetězce znaků na datum

Str2int - konverze řetězce znaků na celé číslo

Str2money - konverze řetězce znaků na částku peněz

Str2real - konverze řetězce znaků na reálné číslo

Str2time - konverze řetězce znaků na čas

Str2timestamp- konverze řetězce znaků na datum a čas (timestamp)

Strcat - spojení dvou řetězců (zřetězení)

Strcopy - vybrání podřetězce z řetězce

Strdelete - zrušení podřetězce v řetězci

Strinsert - vložení řetězce dovnitř řetězce

Strlength - zjištění délky řetězce

Strpos - hledání podřetězce v řetězci

Strtrim - ořezání mezer řetězce

Substr - relace  ”obsažen'' mezi řetězci

Super_recnum - převod čísla záznamu v subkurzoru na číslo téhož záznamu v superkurzoru

Sz_error - zjištění čísla chyby

Sz_warning - zjištění čísla varování

-- T --

Tab_Page - číslo vybrané záložky

TakeMailToRemOffice - spuštění poštovní brány vzdáleného klienta Mail602

Time2str - konverze času na řetězec znaků

timestamp2date - konverze údaje o datu a čase na datum.

timestamp2str - konverze údaje o datu a čase na řetězec

timestamp2time - konverze údaje o datu a čase na čas.

To_Xbase - export dat do souboru DBF

Today - dnešní datum

Token_control - manipulace s peškem

Translate - konverze čísla záznamu z kurzoru do tabulky

Trunc - seříznutí reálného čísla na celé číslo

-- U --

Undelete - obnovení zrušeného záznamu

Uninst_table - uvolnění paměti zabrané tabulkou

Upcase - konverze řetězce na velká písmena

Used_memory - zjištění velikosti použité paměti klienta a serveru

User_in_group - zjištění, je-li uživatel členem skupiny

User_to_group - zařazení uživatele do skupiny

-- V --

View_close - uzavření formuláře

View_open - otevření formuláře

View_pattern - nastavení čísla pohledu, který se použije při znázornění rozložení jmenovek na stránce

View_print - vytištění sestavy

View_state - zjištění, zda je formulář otevřen

View_toggle - otevření nebo uzavření formuláře

-- W --

waiting - určení doby čekání  pozadavků klienta na uvolnění potřebných zámků na serveru

WinBase602_version - vrací číslo verze WinBase602

Who_am_I - zjištění jména přihlášeného uživatele

Write - zápis do textového souboru - interní

Write_lock_record - uzamknutí záznamu pro zápis

Write_lock_table - uzamknutí tabulky nebo kurzoru pro zápis

Write_unlock_record - odemknutí záznamu pro zápis

Write_unlock_table - odemknutí tabulky nebo kurzoru pro zápis

Writeln - zápis do textového souboru a odřádkování

-- Y --

Year - extrakce roku z data

Yesno_box - dotaz uživateli prostřednictvím modálního okna


Seznam funkcí a procedur podle okruhů (vnitřní jazyk)

funkce pro komunikaci s databází

Práce s kurzory

Add_record - přidání záznamu do kurzoru

Close_cursor - uzavření kurzoru

Open_cursor - otevření pevného kurzoru z databáze

Open_sql_cursor - otevření proměnného kurzoru zadáním dotazu

Open_sql_parts - otevření proměnného kurzoru zadáním dotazu po částech

Restore_cursor - návrat k původnímu obsahu zúženého kurzoru

Restrict_cursor - zúžení kurzoru

Super_recnum - převod čísla záznamu v subkurzoru na číslo téhož záznamu v superkurzoru

Translate - konverze čísla záznamu z kurzoru do tabulky

Práce se záznamy

Append - přidání záznamu na konec tabulky

Delete - zrušení záznamu

Delete_all_records - vymazání všech záznamů tabulky nebo kurzoru

Insert - vložení záznamu do tabulky

Look_up - vyhledání záznamu podle hodnoty ve sloupci

Undelete - obnovení zrušeného záznamu

Práva

GetSet_privils - nastavení, zjištění práva uživatele, skupiny nebo role k tabulce, případně k záznamu

Transakce

Commit - potvrzení a ukončení transakce

Roll_back - zrušení transakce

Set_transaction_isolation_level - nastaví stupeň izolace transakce

Start_transaction - zahájení transakce

Zámky

Read_lock_record - uzamknutí záznamu pro čtení

Read_lock_table - uzamknutí tabulky nebo kurzoru pro čtení

Read_unlock_record - odemknutí záznamu pro čtení

Read_unlock_table - odemknutí tabulky nebo kurzoru pro čtení

Write_lock_record - uzamknutí záznamu pro zápis

Write_lock_table - uzamknutí tabulky nebo kurzoru pro zápis

Write_unlock_record - odemknutí záznamu pro zápis

Write_unlock_table - odemknutí tabulky nebo kurzoru pro zápis

Práce s objekty

Create_link - vytvoření spojovacího objektu

Create2_link - vytvoření spojovacího objektu

Create_user - vytvoření uživatele

Find_object - zjištění čísla objektu

Find_object_by_id - zjištění čísla objektu na základě jeho identifikace

GetSet_group_role - zjištění, zařazení a vyřazení uživatele nebo skupiny do/ze skupiny nebo role

Insert_object - vytvoření nového objektu

Relist_objects - zajistí, že v aplikaci jsou pouze nesmazané tabulky skupiny nebo role.

Set_appl_starter - nastavení startovního objektu

Set_password - nastavení hesla

Sledování stavu

Am_I_db_admin - test, je-li uživatel členem skupiny DB_ADMIN

Appl_inst_count - zjištění počtu současně běžících aplikací

Available_memory - zjištění velikosti volné paměti

Compact_database - zkompaktnění databáze

Connection_speed_test - orientační změření rychlosti komunikace

Current_application - vrátí jméno aktuální aplikace

Database_integrity - kontrola a případně oprava poškozené databáze

Enable_task_switch - povolení resp. zákaz doručování zpráv v době, kdy klient čeká na odpověď serveru

Get_logged_user - zjištění jmen připojených klientů

GetSet_fil_blocks - zjištění či nastavení velikosti databázového souboru

GetSet_fil_size - zjištění či nastavení velikosti databázového souboru

Owned_cursors - zjištění počtu otevřených kurzorů

Set_progress_report_modulus - nastavení frekvence zpráv ze serveru

Used_memory - zjištění velikosti použité paměti klienta a serveru

WinBase602_version - vrací číslo verze WinBase602

Who_am_I - zjištění jména přihlášeného uživatele

Změna logovacího jména

Login - přihlášení se uživatele

Logout - odhlášení se uživatele

SQL server

Set_sql_option - nastavení vlastností SQL serveru

Sql_drop - zrušení připraveného SQL příkazu

Sql_execute - přímé provedení SQL příkazu

Sql_exec_prepared - provedení připraveného SQL příkazu

Sql_prepare - připravení SQL příkazu

Organizační funkce

waiting - určení doby čekání  požadavků klienta na uvolnění potřebných zámků na serveru

Manipulace s tabulkou

Enable_index - povoluje/zakazuje použití indexů

Free_deleted - uvolnění zrušených záznamů v tabulce

Compact_table - zkompaktnění tabulky

Kurzorové agregační funkce

C_Avg - zjištění průměrné hodnoty sloupce v kurzoru

C_Count - zjištění počtu záznamů v kurzoru

C_Max - zjištění maximální hodnoty sloupce v kurzoru

C_Min - zjištění minimální hodnoty sloupce v kurzoru

C_Sum - zjištění součtu hodnot sloupce v kurzoru

Napojení a práce s ODBC kurzory

ODBC_create_connection - interaktivní vytvoření dočasného zdroje dat

ODBC_direct_connection - přímé vytvoření dočasného zdroje dat

ODBC_find_connection - získání čísla napojení na zdroj dat v aplikaci

ODBC_open_cursor - otevření proměnného kurzoru v ODBC zdroji dat

Podpisy a replikace a koloběh dokumentů

AReplicate - interaktivní odeslání replikačních paketů / žádosti o replikaci

GetSet_next_user - zjištění nebo zápis do kolujícího dokumentu označení uživatele, na nějž dokument čeká

Repl_control - programové řízení replikací

Replicate - okamžité replikování nebo vyžádání replikace - neinteraktivní varianta

Is_repl_destin - pomocná funkce pro řízení replikací

Chyby a varování

Err_mask - nastavení reakce na databázové chyby

Sz_error - zjištění čísla chyby

Sz_warning - zjištění čísla varování

Konverzní procedury

Chr - konverze celých čísel na znaky

Day - extrakce dne z data

Day_of_week - zjištění čísla dne v týdnu

Date2str - konverze data na řetězec znaků

datetime2timestamp - konverze zadaného data a času na údaj o datu a čase.

Hours - extrakce hodin z časového údaje

Int2str - konverze celého čísla na řetězec znaků

Make_date - vytvoření data z dne, měsíce, roku

Make_time - vytvoření časového údaje

Minutes - extrakce minut z časového údaje

Money2str - konverze částky peněz na řetězec znaků

Month - extrakce měsíce z data

Ord - konverze znaků na celá čísla

Quarter - zjištění čísla čtvrtletí z data

Real2Str - konverze reálného čísla na řetězec znaků

Round - zaokrouhlení reálného čísla na celé číslo

Sec1000 - extrakce tisícin sekundy z časového údaje

Seconds - extrakce sekund z časového údaje

Str2date - konverze řetězce znaků na datum

Str2int - konverze řetězce znaků na celé číslo

Str2money - konverze řetězce znaků na částku peněz

Str2real - konverze řetězce znaků na reálné číslo

Str2time - konverze řetězce znaků na čas

Str2timestamp- konverze řetězce znaků na datum a čas (timestamp)

Time2str - konverze času na řetězec znaků

timestamp2date - konverze údaje o datu a čase na datum

timestamp2str - konverze údaje o datu a čase na řetězec

timestamp2time - konverze údaje o datu a čase na čas

Trunc - seříznutí reálného čísla na celé číslo

Year - extrakce roku z data

Aritmetické funkce

Abs - absolutní hodnota reálného čísla

Arctan - funkce arkus tangens

Cos - funkce kosinus

Exp - exponenciála (přirozená)

Iabs - absolutní hodnota celého čísla

Isqr - druhá mocnina celého čísla

Ln - přirozený logaritmus

Odd - zjištění parity čísla

Sin - funkce sinus

Sqr - druhá mocnina reálného čísla

Sqrt - druhá odmocnina

Práce se znakovými řetězci

Like - podobnost řetězců

Pref - relace "prefix" mezi řetězci

Strcat - spojení dvou řetězců (zřetězení)

Strcopy - vybrání podřetězce z řetězce

Strdelete - zrušení podřetězce v řetězci

Strinsert - vložení řetězce dovnitř řetězce

Strlength - zjištění délky řetězce

Strpos - hledání podřetězce v řetězci

Strtrim - ořezání mezer řetězce

Substr - relace ”obsažen'' mezi řetězci

Upcase - konverze řetězce na velká písmena

Zastaralé funkce

Create_group - vytvoření skupiny uživatelů

Define_table - vytvoření nové tabulky

Get_data_rights - zjištění práv uživatele k datům

Get_object_rights - zjištění práv uživatele k objektům

Restore_table - načte obsah tabulky ze souboru

Save_table - uloží celý obsah tabulky do souboru

Set_data_rights - nastavení práv k datům

Set_object_rights - nastavení práv k objektům

Uninst_table - uvolnění paměti zabrané tabulkou

User_in_group - zjištění, je-li uživatel členem skupiny

User_to_group - zařazení uživatele do skupiny

funkce pro programování uživatelského rozhraní

Informační a dotazovací okna  - jednoduchý vstup a výstup

Info_box - sdělení uživateli prostřednictvím modálního okna

Input_box - okno pro zadání řetězce

Log_write - zápis řádku do logu serveru

Set_status_nums - zápis do informační řádky

Set_status_text - zápis do informační řádky

Signalize - okno s popisem databázové chyby

Yesno_box - dotaz uživateli prostřednictvím modálního okna

Řídící funkce

Get_ext_message - čekání na událost a vrácení údajů o došlé zprávě

Get_message - čekání na událost a vrácení čísla došlé zprávy

Peek_message- doručení čekajících služebních zpráv a zjištění přítomnosti zprávy pro program

Register_key - definování reakce na stisk klávesy

Send_message - zaslání zprávy oknu

Main_menu - přidělení uživatelem definovaného menu hlavnímu oknu aplikace

Otevírání formulářů

Open_view - otevření formuláře na obrazovce

Relate_record - vložení hodnoty z relačně provázané tabulky

Select_records - výběr množiny záznamů z formuláře

Manipulace s otevřeným formulářem

Active_view - vrátí číslo aktivního formuláře

Close_all_views - zavření všech otevřených oken s pohledy

Close_view - uzavření formuláře

Current_item - vrátí číslo složky formuláře, na níž stojí kurzor

Get_fcursor - zjištění kurzoru a parametrů formuláře

Pick_window - vytažení formuláře nad ostatní okna

QBE_state - zjištění, zda byl položen QBE dotaz resp. uspořádání

Register_rec_syn - synchronizování dvou pohledů na stejný záznam

Set_fcursor - nastavení kurzoru a parametrů formuláře

Pozice ve formuláři

Get_view_pos - zjištění čísla vybraného záznamu ve formuláři

Set_ext_pos - vybrání záznamu ve formuláři dle absolutního čísla

Set_int_pos - vybrání záznamu ve formuláři dle pořadového čísla

Ovládání obsahu formuláře

Commit_view - uložení změn ve formuláři do databáze

Get_item_value - zjištění hodnoty ve složce formuláře

Reset_view - aktualizace obsahu formuláře

Roll_back_view - odvolání změn v záznamově synchronizovaném formuláři

Set_item_value - zápis hodnoty do složky formuláře

Tab_page - číslo vybrané záložky

Akce volané z formuláře

Bind_records - přivazování záznamů k ukazateli

Edit_text - editace sloupce typu Text

Zjednodušená práce s pohledy

View_close - uzavření formuláře

View_open - otevření formuláře

View_print - vytištění sestavy

View_state - zjištění, zda je formulář otevřen

View_toggle - otevření nebo uzavření formuláře

Tisky a nastavení tiskárny

Page_setup - nastavení parametrů formátu stránky

Print_copies - nastavení počtu kopií při tisku

Print_margins - nastavení okrajů stránky při tisku

Print_opt - interaktivní nastavení parametrů tisku sestav

Print_view - tisk sestavy

Printer_dialog - volba tiskárny

Printer_select - nastavení parametrů tiskárny

Set_first_label - nastavení prvního tištěného štítku na archu

Set_printer - nastavení parametrů tisku sestav

View_pattern - nastavení čísla pohledu, který se použije při znázornění rozložení jmenovek na stránce

Menu

Main_menu - přidělení uživatelem definovaného menu hlavnímu oknu aplikace

Nápověda

Help_file - nastavení souboru nápověd

Show_help - otevření stránky nápovědy

Show_help_popup - otevření stránky nápovědy v popup okně

Práce se soubory a adresáři

Close - uzavření souboru

Delete_file - smazání souboru DOSu

Eof - zjištění konce souboru

Filelength - zjištění délky souboru

Make_directory - vytvoření adresáře

Read - čtení z textového souboru

Reset - otevření existujícího souboru

Rewrite - vytvoření a otevření nového souboru

Seek - nastavení pozice v souboru

Select_directory - výběr adresáře

Select_file - výběr souboru

Write - zápis do textového souboru

Writeln - zápis do textového souboru a odřádkování

Práce s právy, uživateli a objekty

Acreate_user - vytvoření nového uživatele

Alogin - interaktivní zadání jména uživatele a hesla

Amodify_user - modifikace údaje o uživateli.

Aset_password - změna hesla přihlášeného uživatele

Chng_component_flag - nastavení příznaků pro objekt

Edit_privils - editace práv k záznamu

Edit_relation - editace relace mezi uživateli, skupinami a rolemi

Next_user_name - funkce vrací údaje o uživateli, na nějž dokument čeká

Předávání peška

Atoken_control - správa pešků

Token_control - manipulace s peškem

Funkce pro práci s poštou (i na serveru)

InitWBMail - inicializace MAPI pošty

CloseWBMail - ukončení práce s poštou

MailDial - vytočení čísla telefonního spojení na Internet

MailHangUp - ukončení telefonního spojení na Internet

LetterCreate - vytvoření dopisu

LetterAddAddr - přidání adresáta k zásilce

LetterAddFile - přidání souboru k zásilce

LetterSend - odeslání dopisu

LetterCancel - zrušení neodeslaného dopisu

TakeMailToRemOffice - spuštění poštovní brány vzdáleného klienta Mail602

MailOpenInBox - otevření poštovní schránky

MailBoxLoad - načtení seznamu zásilek ze schránky

MailBoxGetMsg - získání textu došlé zásilky

MailBoxGetFilInfo - získání informací o připojených souborech k došlé zásilce

MailBoxSaveFileAs - uložení k zásilce připojených souborů na disk

MailBoxDeleteMsg - vymazání došlé pošty ze schránky

MailCloseInBox - uzavření poštovní schránky

MailGetInBoxInfo - získání informací o tabulkách použitých pro uložení došlých zásilek

MailGetType - získání typu inicializované pošty

Ostatní

Addr - ukazatel na proměnnou

Background_bitmap- vykreslení obrázku na pozadí okna aplikace

Dispose - uvolnění objektu

New - dynamická alokace objektu zadaného typu

Edit_view - editace definice pohledu

Edit_query - zpřístupnění návrháře dotazů z jazyka

Edit_impexp - zpřístupnění návrháře přenosu dat z jazyka

Exec - souběžné spuštění dalšího programu

Export_app_exl - export aplikace z programu od verze 6

Message_to_clients - rozeslání zprávy klientům

Move_data - přenos dat

Set_cursor - nastavení tvaru kurzoru

Set_timer - nastaví časovač

Zastaralé funkce

Put_pixel - nakreslení bodu v okně

Draw_line - nakreslení úsečky v okně

Data_export - obecná exportní funkce

Data_import - obecná importní funkce

From_Xbase - import DBF dat do tabulky

To_Xbase - export dat do souboru DBF


Encyklopedie funkcí a procedur (externí jazyky)

A, B, C, D, E, F, G, H, I, K, L, M, N, O, P, Q, R, S, T, U, V, W, Y

-- A --

Acreate_user - vytvoření nového uživatele

Active_view - vrátí číslo aktivního formuláře

Add_record - přidání záznamu do kurzoru

Alogin - interaktivní zadání jména uživatele a hesla

Am_I_db_admin - test, je-li uživatel členem skupiny DB_ADMIN

Amodify_user - modifikace údaje o uživateli.

answered - zjištění zda došla odpověď na poslední požadavek zaslaný serveru

Append - přidání záznamu na konec tabulky

Appl_inst_count - zjištění počtu současně běžících aplikací

AReplicate - interaktivní odeslání replikačních paketů / žádosti o replikaci

Aset_password - změna hesla přihlášeného uživatele

Atoken_control - správa pešků

Attribute_info - vyhledání sloupce v tabulce

Available_memory - zjištění velikosti volné paměti

-- B --

Background_bitmap- vykreslení obrázku na pozadí okna aplikace

Break - zrušení právě prováděného požadavku na server

-- C --

C_Avg - zjištění průměrné hodnoty sloupce v kurzoru

C_Count - zjištění počtu záznamů v kurzoru

C_Max - zjištění maximální hodnoty sloupce v kurzoru

C_Min - zjištění minimální hodnoty sloupce v kurzoru

C_Sum - zjištění součtu hodnot sloupce v kurzoru

cdp_alloc - alokování kontextové proměnné klienta a vrací ukazatel na ni

cdp_free - dealokování kontextové proměnné klienta

cdp_init - inicializace kontextových proměnných klienta

cdp_size - velikost kontextové proměnné klienta

Chng_component_flag - nastavení příznaků pro objekt

Close_all_views - zavření všech otevřených oken s pohledy

Close_cursor - uzavření kurzoru

Close_view - uzavření formuláře

CloseWBMail - ukončení práce s poštou

Commit - potvrzení a ukončení transakce

Commit_view - uložení změn ve formuláři do databáze

Compact_database - zkompaktnění databáze

Compact_table - zkompaktnění tabulky

concurrent - souběžná práce klienta a serveru

Connection_speed_test - orientační změření rychlosti komunikace

Create_group - vytvoření skupiny uživatelů

Create_link - vytvoření spojovacího objektu

Create2_link - vytvoření spojovacího objektu

Create_user - vytvoření uživatele

Current_item - vrátí číslo složky formuláře, na níž stojí kurzor

-- D --

Database_integrity - kontrola a případně oprava poškozené databáze

Data_export - obecná exportní funkce

Data_import - obecná importní funkce

datetime2timestamp - konverze zadaného data a času na údaj o datu a čase

Day - extrakce dne z data

Day_of_week - zjištění čísla dne v týdnu

Define_table - vytvoření nové tabulky

DefWinBaseFrameProc - funkce pro předávání nezpracovaných zpráv

Delete - zrušení záznamu

Delete_all_records - vymazání všech záznamů tabulky nebo kurzoru

Draw_line - nakreslení úsečky v okně

-- E --

Edit_impexp - zpřístupnění návrháře přenosu dat z jazyka

Edit_privils - editace práv k záznamu

Edit_query - zpřístupnění návrháře dotazů z jazyka

Edit_relation - editace relace mezi uživateli, skupinami a rolemi.

Edit_view - editace definice pohledu

Enable_index - povoluje/zakazuje použití indexů

Enable_task_switch - povolení resp. zákaz doručování zpráv v době, kdy klient čeká na odpověď serveru

Enum_attributes - zjištění atributů v tabulce

Exec_statements - provedení posloupnosti příkazů vnitřního programovacího jazyka

Export_appl - export aplikace z programu

Export_app_exl - export aplikace z programu od verze 6

-- F --

Find_object - zjištění čísla objektu

Find2_object - zjištění čísla objektu v aplikaci

Find_object_by_id - zjištění čísla objektu na základě jeho identifikace

Free_deleted - uvolnění zrušených záznamů v tabulce

From_Xbase - import DBF dat do tabulky

-- G --

GetClient - handle MDI klienta aplikace

Get_data_rights - zjištění práv uživatele k datům

Get_fcursor - zjištění kurzoru a parametrů formuláře

Get_info - všeobecné informace o stavu databáze a serveru

Get_item_value - zjištění hodnoty ve složce formuláře

Get_logged_user - zjištění jmen připojených klientů

Get_object_rights - zjištění práv uživatele k objektům

GetSet_fil_blocks - zjištění či nastavení velikosti databázového souboru

GetSet_fil_size - zjištění či nastavení velikosti databázového souboru

GetSet_group_role - zjištění, zařazení a vyřazení uživatele nebo skupinu do/ze skupiny nebo role.

GetSet_next_user - zjištění nebo zápis do kolujícího dokumentu označení uživatele, na nějž dokument čeká

GetSet_privils - nastavení, zjištění práva uživatele, skupiny nebo role k tabulce, případně k záznamu.

Get_var_address - Přístup k proměnným projektu

Get_view_pos - zjištění čísla vybraného záznamu ve formuláři

-- H --

Help_file - nastavení souboru nápověd

Hours - extrakce hodin z časového údaje

-- I --

Import_appl - import aplikace z programu

Info_box - sdělení uživateli prostřednictvím modálního okna

Init_non_mdi_env - inicializace hlavního okna aplikace, které není MDI

Init_window_env - inicializace hlavního okna aplikace

InitWBMail - inicializace MAPI pošty

InitWBMail602 - inicializace pošty Mail602

Input_box - okno pro zadání řetězce

Insert - vložení záznamu do tabulky

Insert_object - vytvoření nového objektu

interf_close - ukončení komunikace se serverem

interf_init - inicializace spojení klienta se serverem

-- K --

Kernel_error_box - vysvětlení chyb vzniklých při navázání nebo inicializaci spojení klienta se serverem

-- L --

LetterAddAddr - přidání adresáta k zásilkce

LetterAddFile - přidání souboru k zásilce

LetterCancel - zrušení neodeslaného dopisu

LetterCreate - vytvoření dopisu

LetterSend - odeslání dopisu

Like - podobnost řetězců

link_kernel - navázání spojení klienta se serverem

Login - přihlášení se uživatele

Look_up - vyhledání záznamu podle hodnoty ve sloupci

Logout - odhlášení se uživatele

-- M --

MailBoxDeleteMsg - vymazání došlé pošty ze schránky

MailBoxGetFilInfo - získání informací o připojených souborech k došlé zásilce

MailBoxGetMsg - získání textu došlé zásilky

MailBoxLoad - načtení seznamu zásilek ze schránky

MailBoxSaveFileAs - uložení k zásilce připojených souborů na disk

MailCloseInBox - uzavření poštovní schránky

MailDial - vytočení čísla telefonního spojení na Internet

MailGetInBoxInfo - získání informací o tabulkách použitých pro uložení došlých zásilek

MailGetType - získání typu inicializované pošty

MailHangUp - ukončení telefonního spojení na Internet

MailOpenInBox - otevření poštovní schránky

Main_menu - přidělení uživatelem definovaného menu hlavnímu oknu aplikace

Make_date - vytvoření data z dne, měsíce, roku

Make_time - vytvoření časového údaje

Message_to_clients - rozeslání zprávy klientům

Minutes - extrakce minut z časového údaje

money2real - konverze částky peněz na reálné číslo

Month - extrakce měsíce z data

Move_data - přenos dat

-- N --

Next_user_name - funkce vrací údaje o uživateli, na nějž dokument čeká

Now - běžný čas

-- O --

ODBC_create_connection - interaktivní vytvoření dočasného zdroje dat

ODBC_direct_connection - přímé vytvoření dočasného zdroje dat

ODBC_find_connection - získání čísla napojení na zdroj dat v aplikaci

ODBC_open_cursor - otevření proměnného kurzoru v ODBC zdroji dat

Open_cursor - otevření pevného kurzoru z databáze - externí

Open_cursor_direct - otevření proměnného kurzoru zadáním dotazu - externí

Open_project - nastavení projektu

Open_subcursor - otevření subkurzoru již otevřeného kursoru

Open_view - otevření formuláře na obrazovce

Owned_cursors - zjištění počtu otevřených kurzorů

-- P --

Page_setup - nastavení parametrů formátu stránky

Pick_window - vytažení formuláře nad ostatní okna

Print_copies - nastavení počtu kopií při tisku

Print_margins - nastavení okrajů stránky při tisku

Print_opt - interaktivní nastavení parametrů tisku sestav

Print_view - tisk sestavy

Printer_dialog - volba tiskárny

Printer_select - nastavení parametrů tiskárny

Put_pixel - nakreslení bodu v okně

-- Q --

QBE_state - zjištění, zda byl položen QBE dotaz resp. uspořádání

Quarter - zjištění čísla čtvrtletí z data

-- R --

Read - čtení z databáze - externí

Read_ind - čtení obsahu sloupce pevné velikosti z databáze

Read_ind_cnt - zjištění počtu hodnot multiatributu

Read_len - zjištění velikosti sloupce proměnné velikosti

Read_lock_record - uzamknutí záznamu pro čtení

Read_lock_table - uzamknutí tabulky nebo kurzoru pro čtení

Read_record - čtení záznamu z databáze

Read_unlock_record - odemknutí záznamu pro čtení

Read_unlock_table - odemknutí tabulky nebo kurzoru pro čtení

Read_var - čtení  obsahu sloupce proměnné velikosti z databáze

real2money - konverze reálného čísla na typ peníze

Rec_cnt - zjištění počtu záznamů v tabulce nebo kurzoru

Register_ext_menu - informace pro WinBase602 o změně menu hlavního okna WinBase602.

Register_rec_syn - synchronizování dvou pohledů na stejný záznam

Relate_record - vložení hodnoty z relačně provázané tabulky

Relist_objects - zajistí, že v aplikaci jsou pouze nesmazané tabulky

Repl_control - programové řízení replikací

Replicate - okamžité replikování nebo vyžádání replikace - neinteraktivní varianta

Reset_view - aktualizace obsahu formuláře

Restore_table - načte obsah tabulky ze souboru

Roll_back - zrušení transakce

Roll_back_view - odvolání změn v záznamově synchronizovaném formuláři

-- S --

Save_table - uloží celý obsah tabulky do souboru

Sec1000 - extrakce tisícin sekundy z časového údaje

Seconds - extrakce sekund z časového údaje

Select_directory - výběr adresáře

Select_file - výběr souboru

Select_records - výběr množiny záznamů z formuláře

send_package - zaslání balíku požadavků serveru

Set_appl_starter - nastavení startovního objektu

Set_application - výběr aplikace

Set_application_ex - výběr aplikace

Set_data_rights - nastavení práv k datům

Set_ext_pos - vybrání záznamu ve formuláři dle absolutního čísla

Set_fcursor - nastavení kurzoru a parametrů formuláře

Set_first_label - nastavení prvního tištěného štítku na archu

Set_int_pos - vybrání záznamu ve formuláři dle pořadového čísla

Set_item_value - zápis hodnoty do složky formuláře

Set_object_rights - nastavení práv k objektům

Set_password - nastavení hesla

Set_printer - nastavení parametrů tisku sestav

Set_progress_report_modulus - nastavení frekvence zpráv ze serveru

Set_sql_option - nastavení vlastností SQL serveru

Set_status_nums - zápis do status baru

Set_status_text - zápis do status baru

Set_transaction_isolation_level - nastaví stupeň izolace transakce

Show_help - otevření stránky nápovědy

Show_help_popup - otevření stránky nápovědy v popup okně

Signalize - okno s popisem databázové chyby

Signature_state - zjištění stavu digitálního podpisu

Sql_drop - zrušení připraveného SQL příkazu

Sql_execute - přímé provedení SQL příkazu

Sql_exec_prepared - provedení připraveného SQL příkazu

Sql_prepare - připravení SQL příkazu

start_package - zahájení ukládání požadavků na server do balíku

Start_transaction - zahájení transakce

Super_recnum - převod čísla záznamu v subkurzoru na číslo téhož záznamu v superkurzoru

Sz_error - zjištění čísla chyby

Sz_warning - zjištění čísla varování

-- T --

Tab_Page - číslo vybrané záložky

TakeMailToRemOffice - spuštění poštovní brány vzdáleného klienta Mail602

timestamp2date - konverze údaje o datu a čase na datum

timestamp2time - konverze údaje o datu a čase na čas

To_Xbase - export dat do souboru DBF

Today - dnešní datum

Token_control - manipulace s peškem

Translate - konverze čísla záznamu z kurzoru do tabulky

-- U --

Undelete - obnovení zrušeného záznamu

Uninst_table - uvolnění paměti zabrané tabulkou

unlink_kernel - rozvázání spojení klienta se serverem

Upcase - konverze řetězce na velká písmena

Used_memory - zjištění velikosti použité paměti klienta a serveru

User_in_group - zjištění, je-li uživatel členem skupiny

User_to_group - zařazení uživatele do skupiny

-- V --

View_pattern - nastavení čísla pohledu, který se použije při znázornění rozložení jmenovek na stránce

-- W --

waiting - určení doby čekání  požadavků klienta na uvolnění potřebných zámků na serveru

WinBase602_version - vrací číslo verze WinBase602

WinBaseFrameProc - zpracování zpráv, které přišly hlavnímu oknu aplikace WinBase602

Who_am_I - zjištění jména přihlášeného uživatele

Write - zápis do databáze

Write_ind - zápis obsahu proměnné do sloupce pevné velikosti

Write_ind_cnt - změna počtu hodnot multiatributu

Write_len - změna velikosti sloupce proměnné velikosti

Write_lock_record - uzamknutí záznamu pro zápis

Write_lock_table - uzamknutí tabulky nebo kurzoru pro zápis

Write_record - zápis všech atributů do záznamu v tabulce nebo kursoru

Write_unlock_record - odemknutí záznamu pro zápis

Write_unlock_table - odemknutí tabulky nebo kurzoru pro zápis

Write_var - zápis do sloupce proměnné velikosti

-- Y --

Year - extrakce roku z data

Yesno_box - dotaz uživateli prostřednictvím modálního okna


Seznam funkcí a procedur podle okruhů (externí jazyky)
Seznam funkcí a procedur podle okruhů (externí jazyk)

funkce pro komunikaci s databází

Organizační funkce

answered - zjištění zda došla odpověď na poslední požadavek zaslaný serveru

Break - zrušení právě prováděného požadavku na server

concurrent - souběžná práce klienta a serveru

send_package - zaslání balíku požadavků serveru

start_package - zahájení ukládání požadavků na server do balíku

waiting - určení doby čekání  požadavků klienta na uvolnění potřebných zámků na serveru

Chyby a varování

Sz_error - zjištění čísla chyby

Sz_warning - zjištění čísla varování

Práce s kurzory

Add_record - přidání záznamu do kurzoru

Close_cursor - uzavření kurzoru

Open_cursor - otevření pevného kurzoru z databáze - externí

Open_cursor_direct - otevření proměnného kurzoru zadáním dotazu - externí

Open_subcursor - otevření subkurzoru již otevřeného kursoru

Super_recnum - převod čísla záznamu v subkurzoru na číslo téhož záznamu v superkurzoru

Translate - konverze čísla záznamu z kurzoru do tabulky

Práce se záznamy

Append - přidání záznamu na konec tabulky

Delete - zrušení záznamu

Delete_all_records - vymazání všech záznamů tabulky nebo kurzoru

Insert - vložení záznamu do tabulky

Look_up - vyhledání záznamu podle hodnoty ve sloupci

Rec_cnt - zjištění počtu záznamů v tabulce nebo kurzoru

Undelete - obnovení zrušeného záznamu

Čtení a zápis dat

Read - čtení z databáze - externí

Read_ind - čtení obsahu sloupce pevné velikosti z databáze

Read_ind_cnt - zjištění počtu hodnot multiatributu

Read_len - zjištění velikosti sloupce proměnné velikosti

Read_record - čtení záznamu z databáze

Read_var - čtení  obsahu sloupce proměnné velikosti z databáze

Write - zápis do databáze

Write_ind - zápis obsahu proměnné do sloupce pevné velikosti

Write_ind_cnt - změna počtu hodnot multiatributu

Write_len - změna velikosti sloupce proměnné velikosti

Write_record - zápis všech atributů do záznamu v tabulce nebo kursoru

Write_var - zápis do sloupce proměnné velikosti

Práva

GetSet_privils - nastavení, zjištění práva uživatele, skupiny nebo role k tabulce, případně k záznamu

Transakce

Commit - potvrzení a ukončení transakce

Roll_back - zrušení transakce

Set_transaction_isolation_level - nastaví stupeň izolace transakce

Start_transaction - zahájení transakce

Zámky

Read_lock_record - uzamknutí záznamu pro čtení

Read_lock_table - uzamknutí tabulky nebo kurzoru pro čtení

Read_unlock_record - odemknutí záznamu pro čtení

Read_unlock_table - odemknutí tabulky nebo kurzoru pro čtení

Write_lock_record - uzamknutí záznamu pro zápis

Write_lock_table - uzamknutí tabulky nebo kurzoru pro zápis

Write_unlock_record - odemknutí záznamu pro zápis

Write_unlock_table - odemknutí tabulky nebo kurzoru pro zápis

Práce s objekty

Create_link - vytvoření spojovacího objektu

Create2_link - vytvoření spojovacího objektu

Create_user - vytvoření uživatele

Find_object - zjištění čísla objektu

Find2_object - zjištění čísla objektu v aplikaci

Find_object_by_id - zjištění čísla objektu na základě jeho identifikace

GetSet_group_role - zjištění, zařazení a vyřazení uživatele nebo skupinu do/ze skupiny nebo role.

Insert_object - vytvoření nového objektu

Relist_objects - zajistí, že v aplikaci jsou pouze nesmazané tabulky

Set_appl_starter - nastavení startovního objektu

Set_password - nastavení hesla

Sledování stavu

Am_I_db_admin - test, je-li uživatel členem skupiny DB_ADMIN

Appl_inst_count - zjištění počtu současně běžících aplikací

Available_memory - zjištění velikosti volné paměti

Compact_database - zkompaktnění databáze

Connection_speed_test - orientační změření rychlosti komunikace

Database_integrity - kontrola a případně oprava poškozené databáze

Enable_task_switch - povolení resp. zákaz doručování zpráv v době, kdy klient čeká na odpověď serveru

Get_info - všeobecné informace o stavu databáze a serveru

Get_logged_user - zjištění jmen připojených klientů

GetSet_fil_blocks - zjištění či nastavení velikosti databázového souboru

GetSet_fil_size - zjištění či nastavení velikosti databázového souboru

Owned_cursors - zjištění počtu otevřených kurzorů

Set_progress_report_modulus - nastavení frekvence zpráv ze serveru

Used_memory - zjištění velikosti použité paměti klienta a serveru

WinBase602_version - vrací číslo verze WinBase602

Who_am_I - zjištění jména přihlášeného uživatele

Obálka aplikace v externích jazycích

cdp_init - inicializace kontextových proměnných klienta

cdp_size - velikost kontextové proměnné klienta

cdp_alloc - alokování kontextové proměnné klienta a vrací ukazatel na ni

cdp_free - dealokování kontextové proměnné klienta

interf_close - ukončení komunikace se serverem

interf_init - inicializace spojení klienta se serverem

link_kernel - navázání spojení klienta se serverem

Login - přihlášení se uživatele

Logout - odhlášení se uživatele

Set_application - výběr aplikace

Set_application_ex - výběr aplikace

unlink_kernel - rozvázání spojení klienta se serverem

SQL server

Set_sql_option - nastavení vlastností SQL serveru

Sql_drop - zrušení připraveného SQL příkazu

Sql_execute - přímé provedení SQL příkazu

Sql_exec_prepared - provedení připraveného SQL příkazu

Sql_prepare - připravení SQL příkazu

Manipulace s tabulkou

Compact_table - zkompaktnění tabulky

Enable_index - povoluje/zakazuje použití indexů

Free_deleted - uvolnění zrušených záznamů v tabulce

Kurzorové agregační funkce

C_Avg - zjištění průměrné hodnoty sloupce v kurzoru

C_Count - zjištění počtu záznamů v kurzoru

C_Max - zjištění maximální hodnoty sloupce v kurzoru

C_Min - zjištění minimální hodnoty sloupce v kurzoru

C_Sum - zjištění součtu hodnot sloupce v kurzoru

Napojení a práce s ODBC kurzory

ODBC_create_connection - interaktivní vytvoření dočasného zdroje dat

ODBC_direct_connection - přímé vytvoření dočasného zdroje dat

ODBC_find_connection - získání čísla napojení na zdroj dat v aplikaci

ODBC_open_cursor - otevření proměnného kurzoru v ODBC zdroji dat

Informace o sloupcích tabulky

Attribute_info - vyhledání sloupce v tabulce

Enum_attributes - zjištění sloupců v tabulce

Podpisy a koloběh dokumentů

AReplicate - interaktivní odeslání replikačních paketů / žádosti o replikaci

GetSet_next_user - zjištění nebo zápis do kolujícího dokumentu označení uživatele, na nějž dokument čeká

Repl_control - programové řízení replikací

Replicate - okamžité replikování nebo vyžádání replikace - neinteraktivní varianta

Signature_state - zjištění stavu digitálního podpisu

Konverzní procedury

datetime2timestamp - konverze zadaného data a času na údaj o datu a čase

Day - extrakce dne z data

Day_of_week - zjištění čísla dne v týdnu

Hours - extrakce hodin z časového údaje

Like - podobnost řetězců

Make_date - vytvoření data z dne, měsíce, roku

Make_time - vytvoření časového údaje

Minutes - extrakce minut z časového údaje

money2real - konverze částky peněz na reálné číslo

Month - extrakce měsíce z data

Now - běžný čas

Quarter - zjištění čísla čtvrtletí z data

real2money - konverze reálného čísla na typ peníze

Sec1000 - extrakce tisícin sekundy z časového údaje

Seconds - extrakce sekund z časového údaje

timestamp2date - konverze údaje o datu a čase na datum

timestamp2time - konverze údaje o datu a čase na čas

Upcase - konverze řetězce na velká písmena

Year - extrakce roku z data

Zastaralé funkce

Create_group - vytvoření skupiny uživatelů

Define_table - vytvoření nové tabulky

Get_data_rights - zjištění práv uživatele k datům

Get_object_rights - zjištění práv uživatele k objektům

Restore_table - načte obsah tabulky ze souboru

Save_table - uloží celý obsah tabulky do souboru

Set_data_rights - nastavení práv k datům

Set_object_rights - nastavení práv k objektům

Uninst_table - uvolnění paměti zabrané tabulkou

User_in_group - zjištění, je-li uživatel členem skupiny

User_to_group - zařazení uživatele do skupiny

Ostatní

Exec - souběžné spuštění dalšího programu

Now - běžný čas

Today - dnešní datum

funkce pro programování uživatelského rozhraní

Informační a dotazovací okna  - jednoduchý vstup a výstup

Info_box - sdělení uživateli prostřednictvím modálního okna

Input_box - okno pro zadání řetězce

Kernel_error_box - vysvětlení chyb vzniklých při navázání nebo inicializaci spojení klienta se serverem

Set_status_nums - zápis do informační řádky

Set_status_text - zápis do informační řádky

Signalize - okno s popisem databázové chyby

Yesno_box - dotaz uživateli prostřednictvím modálního okna

Otevírání formulářů

Open_view - otevření formuláře na obrazovce

Relate_record - vložení hodnoty z relačně provázané tabulky

Select_records - výběr množiny záznamů z formuláře

Manipulace s otevřeným formulářem

Active_view - vrátí číslo aktivního formuláře

Close_all_views - zavření všech otevřených oken s pohledy

Close_view - uzavření formuláře

Current_item - vrátí číslo složky formuláře, na níž stojí kurzor

Get_fcursor - zjištění kurzoru a parametrů formuláře

Pick_window - vytažení formuláře nad ostatní okna

QBE_state - zjištění, zda byl položen QBE dotaz resp. uspořádání

Register_rec_syn - synchronizování dvou pohledů na stejný záznam

Set_fcursor - nastavení kurzoru a parametrů formuláře

Pozice ve formuláři

Get_view_pos - zjištění čísla vybraného záznamu ve formuláři

Set_ext_pos - vybrání záznamu ve formuláři dle absolutního čísla

Set_int_pos - vybrání záznamu ve formuláři dle pořadového čísla

Ovládání obsahu formuláře

Commit_view - uložení změn ve formuláři do databáze

Get_item_value - zjištění hodnoty ve složce formuláře

Get_view_item - zjištění obsahu složky formuláře

Reset_view - aktualizace obsahu formuláře

Roll_back_view - odvolání změn v záznamově synchronizovaném formuláři

Set_item_value - zápis hodnoty do složky formuláře

Set_view_item - nastavení obsahu složky formuláře

Tab_Page - číslo vybrané záložky

Tisky

Page_setup - nastavení parametrů formátu stránky

Print_copies - nastavení počtu kopií při tisku

Print_margins - nastavení okrajů stránky při tisku

Print_opt - interaktivní nastavení parametrů tisku sestav

Printer_dialog - volba tiskárny

Printer_select - nastavení parametrů tiskárny

Print_view - tisk sestavy

Set_first_label - nastavení prvního tištěného štítku na archu

Set_printer - nastavení parametrů tisku sestav

View_pattern - nastavení čísla pohledu, který se použije při znázornění rozložení jmenovek na stránce

Menu

Main_menu - přidělení uživatelem definovaného menu hlavnímu oknu aplikace

Nápověda

Help_file - nastavení souboru nápověd

Show_help - otevření stránky nápovědy

Show_help_popup - otevření stránky nápovědy v popup okně

Výběr souboru nebo adresáře

Select_directory - výběr adresáře

Select_file - výběr souboru

Funkce pro vytvoření aplikace v externím jazyce

DefWinBaseFrameProc - funkce pro předávání nezpracovaných zpráv

Exec_statements - provedení posloupnosti příkazů vnitřního programovacího jazyka

GetClient - handle MDI klienta aplikace

Get_var_address - přístup k proměnným projektu

Init_non_mdi_env - inicializace hlavního okna aplikace, které není MDI

Init_window_env - inicializace hlavního okna aplikace.

Open_project - nastavení projektu

Register_ext_menu - informace pro WinBase602 o změně menu hlavního okna WinBase602.

WinBaseFrameProc - zpracování zpráv, které přišly hlavnímu oknu aplikace WinBase602

Práce s právy, uživateli a objekty

Acreate_user - vytvoření nového uživatele

Alogin - interaktivní zadání jména uživatele a hesla

Amodify_user - modifikace údaje o uživateli.

Aset_password - změna hesla přihlášeného uživatele.

Chng_component_flag - nastavení příznaků pro objekt

Edit_privils - editace práv k záznamu

Edit_relation - editace relace mezi uživateli, skupinami a rolemi

Next_user_name - funkce vrací údaje o uživateli, na nějž dokument čeká

Předávání peška

Atoken_control - správa pešků

Token_control - manipulace s peškem

Funkce pro práci s poštou (i na serveru)

InitWBMail - inicializace pošty

CloseWBMail - ukončení práce s poštou

MailDial - vytočení čísla telefonního spojení na Internet

MailHangUp - ukončení telefonního spojení na Internet

LetterCreate - vytvoření dopisu

LetterAddAddr - přidání adresáta k zásilce

LetterAddFile - přidání souboru k zásilce

LetterSend - odeslání dopisu

LetterCancel - zrušení neodeslaného dopisu

TakeMailToRemOffice - spuštění poštovní brány vzdáleného klienta Mail602

MailOpenInBox - otevření poštovní schránky

MailBoxLoad - načtení seznamu zásilek ze schránky

MailBoxGetMsg - získání textu došlé zásilky

MailBoxGetFilInfo - získání informací o připojených souborech k došlé zásilce

MailBoxSaveFileAs - uložení k zásilce připojených souborů na disk

MailBoxDeleteMsg - vymazání došlé pošty ze schránky

MailCloseInBox - uzavření poštovní schránky

MailGetInBoxInfo - získání informací o tabulkách použitých pro uložení došlých zásilek

MailGetType - získání typu inicializované pošty

Ostatní

Background_bitmap- vykreslení obrázku na pozadí okna aplikace

Edit_view - editace definice pohledu

Edit_query - zpřístupnění návrháře dotazů z jazyka

Edit_impexp - zpřístupnění návrháře přenosu dat z jazyka

Export_app_exl - export aplikace z programu od verze 6

Import_appl - import aplikace z programu

Move_data - přenos dat

Memcpy - kopírování obsahu proměnných

Message_to_clients - rozeslání zprávy klientům

Set_cursor - nastavení tvaru kurzoru

Zastaralé funkce

Put_pixel - nakreslení bodu v okně

Draw_line - nakreslení úsečky v okně

Data_export - obecná exportní funkce

Data_import - obecná importní funkce

From_Xbase - import DBF dat do tabulky

To_Xbase - export dat do souboru DBF

Export_appl - export aplikace z programu


Knihovny funkcí
Elektronická encyklopedie funkcí

Abecední seznam všech funkcí a procedur WinBase602

Funkce a procedury přístupné z vnitřního jazyka

•	abecední seznam

•	přehled podle významu

Funkce a procedury přístupné z externích jazyků

•	abecední seznam

•	přehled podle významu

Funkce a procedury přístupné z SQL (implementované na serveru)

•	přehled podle významu


Řídicí panel - REPLIKAČNÍ VZTAH
Řídicí panel - REPLIKAČNÍ VZTAHY

Replikační vztahy definuje autor aplikace. Popíše jimi možné způsoby replikací dat z této aplikace. Při navazování spojení s protějším serverem pro zahájení replikací se vybere jeden vztah, který se použije jako vzor pro replikační pravidla.

Základní akce, které je možno s replikačními provádět, lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se objeví po stisku pravého tlačítka myši na objektu typu replikační vztah.

Vytvořit	vytvoření nového vztahu
Modifikovat	úprava označeného vztahu
Zrušit	odstranění označeného replikačního vztahu
Duplikovat	vytvoření přesné kopie označeného vztahu
Exportovat	export vztahu do souboru
Importovat	import vztahu ze souboru
Práva	nastavení objektových práv


Tlačítkem potvrdíte zapsané hodnoty a zavřete okno.


Tlačítkem zavřete okno, aniž by se změněné hodnoty uložily nebo uplatnily.


DIALOG REPLIKAČNÍ VZTAHY


Při vzniku konfliktu mezi verzemi záznamů mají přednost lokální data před daty přicházejícími - v replikovaných datech mohou vzniknout odlišnosti


Při vzniku konfliktu mezi verzemi záznamů mají přednost data přicházející před daty lokálními - v replikovaných datech mohou vzniknout odlišnosti


Při vzniku konfliktu mezi verzemi záznamů mají přednost data serveru, který požádal o navázání spojení podle tohoto vztahu - replikovaná data jsou shodná


Při vzniku konfliktu mezi verzemi záznamů mají přednost data, serveru, který akceptovat požadavek na navázání spojení podle tohoto vztahu - replikovaná data jsou shodná


Zadejte periodu (hodiny a minuty), v níž se bude aplikace automaticky replikovat. První replikace se provede ihned po navázání sdílení, další v tomto intervalu.

Pokud nemá probíhat automatická replikace (pouze ruční), nastavte hodnoty na nulu.


Seznam nabízí replikovatelné tabulky aplikace


Seznam nabízí jména sloupců vlevo vybrané tabulky. Zatržením čtverce určujete, má-li se sloupec zahrnout do replikací.


Zadejte případnou logickou podmínku, která omezí záznamy vybrané tabulky účastnící se replikací.


Zatržením stanovíte, má-li se při replikaci přenášet informace o rušení záznamů.


DIALOG REPLIKACE


Pomocí této záložky zadejte jedním ze tří způsobů adresu tohoto SQL serveru, na níž bude SQL server protější zasílat replikační pakety.


V případě, že server má replikovat současně dvěma způsoby (např. v rámci lokální sítě přes sdílený adresářový prostor a jiné ven pomocí elektronické pošty), zapíše se na tuto záložku alternativní adresa SQL serveru (tedy: je-li první adresa poštovní, je alternativní adresář nebo naopak).


Zvolte, pokud replikace probíhají způsobem odesílání a přijímání poštovních zásilek obsahujících replikační pakety. Dále musíte v pravé části vybrat profil pošty a přístupové heslo.


Zvolte, pokud replikace probíhají bez pošty po navázaném TCP/IP spojení.


Zvolte, pokud replikace probíhají v rámci lokální sítě pomocí sdíleného diskového prostoru (několika adresářů).


Pro replikace pomocí pošty je nutné zadat poštovní adresu, na níž bude protější server zasílat zásilky obsahující replikační pakety. Podle typu pošty, zadaného profilem, použijte jeden z následujících formátů:

- Internet adresa (novak@abc.cz) pro SMTP poštu;

- Mail602 adresa ve tvaru ID, úřad (66000003,ABC) pro poštu Mail602;

Je-li možnost zjistit pravděpodobnou adresu podle údajů ve zvoleném profilu, přednastaví se tato adresa.


Pro replikace pomocí Direct IP je nutné zadat IP adresu, na níž bude protější server zasílat replikační pakety. Formát zápisu je:

- IP adresa a číslo portu (192.168.1.100:6003); číslo portu (a dvojtečku) uvádějte tehdy, pokud bylo nastaveno také číslo portu serveru (programem Konfigurace WinBase602), v tomto případě doporučujeme použít číslo o 2 větší než je číslo portu, na němž je spuštěn WinBase602 SQL server (není-li číslo portu serveru nastaveno, používá se defaultně 5001, pro replikace tedy 5003);


Pro replikace pomocí sdílených adresářů je nutné jako adresu zadat adresář, do něhož bude protější server kopírovat replikační pakety, např. W:\REPL\INQUEUE; mapování disků a syntaxe zápisu musí být srozumitelné pro protější server (on tam bude kopírovat!!). pro testovací účely nejlépe vyhovuje replikování dvou serverů na jednom počítači, v tomto případě ponechte adresáře nastavené po instalaci.


Z comba vyberte poštovní profil WinBase602, v němž je uloženo nastavení parametrů potřebných k navázání komunikace. Poštovní profily se vytvářejí a modifikují programem Konfigurace WinBase602.


Zadejte heslo, které umožní použít telefonní připojení zadané ve vybraném profilu. Pokud je heslo zadáno již v profilu, ponechte pole prázdné.


Zadejte heslo, které umožní přihlásit se pošty podle vybraného profilu. Pokud je heslo zadáno již v profilu, ponechte pole prázdné.


Z comba vyberte typ adresy (Internet nebo Mail602), kterou jste zadali v poli vlevo .


Tlačítko slouží k vyhledání adresáře sloužícího jako adresa při replikování pomocí sdílených adresářů.


Zadejte adresář, do něhož se budou ukládat replikační pakety vykopírované z pošty (došlé od protějšího serveru v případě replikací poštou). Adresář může zároveň sloužit jako poštovní adresa počítače při replikování v rámci lokální sítě (tentýž adresář nemusí být stejně namapován pro oba počítače!).

Pro testovací účely (dva servery na jenom počítači) lze ponechat adresář nastavený po instalaci.


Zadejte adresář, do něhož se budou ukládat replikační pakety určené pro protější server předtím, než se z nich stanou poštovní zásilky (replikace poštou) nebo než budou překopírovány (replikace pomocí adresářů).

Pro testovací účely (dva servery na jenom počítači) lze ponechat adresář nastavený po instalaci.


Tlačítko slouží k vyhledání vstupního nebo výstupního adresáře


Zadejte počet souběžných replikačních vláken - v naprosté většině případů stačí počet 1.


Zadejte periodu (v minutách) "taktování replikací": v tomto intervalu se

1) prohlíží všechny sdílené aplikace, není-li u nich podle nastavení intervalů v replikačních pravidlech doba k replikování dat.

2) prohlíží poštovní schránka (replikování poštou) nebo vstupní adresář (replikování pomocí adresářů), nedošly-li pakety od protějšího serveru.

Perioda by měla být malá, aby nedocházelo ke zpoždění.


Označovací čtverec slouží k povolení replikací. Není-li zatržen, replikace neprobíhá.


Tlačítko otevře dialog, v němž je možné změnit jméno nebo identifikaci serveru. Měnit jméno nebo identifikaci serveru se nesmí, pokud je navázáno replikační spojení.


Z nabídky vyberte existující telefonické připojení sítě, pokud požadujete, aby se SQL server před zahájením replikace sám připojil do Internetu a po skončení přenosů opět odpojil. Pokud jste připojení trvale nebo vytáčite spojení ručně, vyberte možnost - bez telefonického spojení - .


Zadejte jméno, které je potřeba k navázání spojení s Internet providerem, který Vám poskytuje připojení do Internetu pomocí vytáčené linky.


Zadejte heslo, kterým je chráněno navázání spojení s Internet providerem, který Vám poskytuje připojení do Internetu pomocí vytáčené linky.


DIALOG REPLIKAČNÍ PRAVIDLA


V combu je seznam serverů, s nimiž již sdílíte některou aplikaci.


Tlačítko se použije pro zahájení sdílení aplikace s jiným serverem.


Tlačítko se použije pro ukončení sdílení aplikace se serverem vybraným v combu nahoře.


Stav navazování sdílení aplikace s protějším serverem (vybraným z comba nahoře). Pouze stav Aplikace se sdílí ve vztahu XYZ znamená, že server periodicky podle časového plánu odesílá (replikuje) změny v datech.


Tlačítko, kterým může správce aplikace na akceptujícím serveru odsouhlasit žádost o sdílení aplikace. Tlačítko je viditelné pouze při stavu Přišla žádost o vztah XYZ, rozhodněte.


Tlačítko, kterým může správce aplikace na akceptujícím serveru odmítnout žádost o sdílení aplikace. Tlačítko je viditelné pouze při stavu Přišla žádost o vztah XYZ, rozhodněte.


Při detekování replikačních konfliktů (příznak tabulky) mají přednost data lokální.


Při detekování replikačních konfliktů (příznak tabulky) mají přednost data přicházející.


Zde můžete změnit periodu (hodiny a minuty) replikací nastavenou v replikačním vztahu. První replikace se provedla ihned po navázání sdílení. Ovlivnit přesně dobu (nikoli interval) replikací můžete tak, že provedete replikaci ručně (z řídicího panelu nebo programem). Další replikace se provede za daný interval.

Pokud nemá probíhat automatická replikace (pouze ruční), nastavte hodnoty na nulu.


Seznam nabízí replikovatelné tabulky aplikace podle zvoleného replikačního vztahu.


Seznam nabízí jména sloupců vlevo vybrané tabulky - můžete upravit zvolený replikační vztah. Zatržením čtverce určujete, má-li se sloupec zahrnout do replikací.


Zadejte případnou logickou podmínku, která omezí záznamy vybrané tabulky účastnící se replikací.


Zatržením stanovíte, má-li se při replikaci přenášet informace o rušení záznamů.


Zvolte zda akceptujete rušení záznamů ve svých tabulkách pomocí replikačních informací z protějšího serveru.


Informace o datu a čase příští replikace na protější server.


DIALOG NAVÁZÁNÍ SPOJENÍ


Zadejte poštovní adresu protějšího serveru (zadanou v jeho dialogu Replikace) v jednom z tvarů podle typu pošty vybrané z nabídky vlevo (adresu Vám musí sdělit správce protějšího serveru).

Formáty adres jsou:

Pošta:

- Internet adresa při replikování pomocí pošty SMTP (novak@abc.cz);

- Mail602 adresa ve tvaru ID, úřad při replikování pomocí pošty Mail602 (66000003, ABC);

Direct IP:

- IP adresa a číslo portu při Direct IP replikování (194.168.1.167:5003);

Sdílený adresář:

- pouze adresář na sdíleném diskovém prostoru pro replikace v rámci lokální sítě (W:\REPL\INQUEUE).


Z comba vyberte typ poštovní adresy zadané vlevo.


DIALOG REPLIKOVAT TAM


Ze seznamu replikačních serverů zaregistrovaných na Vašem serveru vyberte ty, na něž chcete replikovat data mimo plánovaný časový rozvrh. Touto akcí změníte dobu replikací - další se automaticky provede za zadaný interval v replikačních pravidlech.


DIALOG REPLIKOVAT SEM


Ze seznamu replikačních serverů zaregistrovaných na Vašem serveru vyberte ty, jimž chcete zaslat žádost o replikaci dat mimo plánovaný časový rozvrh.


DIALOG SDÍLET APLIKACI


Ze seznamu replikačních serverů zaregistrovaných na Vašem serveru vyberte ten, s nímž chcete sdílet aplikaci.


Ze seznamu replikačních vztahů vyberte ten, podle něhož se mají nastavit replikační pravidla.


Zatrhněte, pokud se data (ve sdílené aplikaci v okamžiku navázání sdílení) nemají začít replikovat, protože jsou synchronní (stejná). Použijte tehdy, když sdílená aplikace již v iniciálním stavu obsahuje nějaká data (např. číselníky).


DIALOG SPRÁVA PEŠKU


Informace o stavu peška k vybranému záznamu. Pouze stav Mám peška dovolí editaci.


Na serveru, který má peška, jej lze pomocí označovacího čtverce podržet nebo uvolnit. Uvolněný pešek bude při nejbližší replikaci odevzdán serveru označenému jako správce pešků.


Na serveru, který nemá peška, lze tímto tlačítkem zaslat správci pešků žádost o poskytnutí peška. Správce buď peška poskytne (spolu s aktuální verzí záznamu), nebo odpoví, že nastala jedna ze dvou možností: správce peška nemá, nebo jej má a drží si jej. Na serveru, který je správcem pešků, není tlačítko aktivní, protože správce nemá koho požádat.


Tlačítko slouží k hromadnému uvolnění všech držených pešků na všech záznamech tabulky


Tlačítko uvolní drženého peška na serveru, na němž se nachází, a vyvolá replikaci záznamu spojenou s odevzdáním peška. Lze použít pouze na serveru, který je správcem pešků.


Tlačítko prohlásí za platnou tu verzi záznamu, která se nachází u správce pešků, a vytvoří si nového peška. Toto tlačítko se používá pouze v případě, že byl pešek ztracen - například při zhroucení serveru, který jej měl. Pokud by někdy v budoucnu přišel správci pešků dříve zneplatněný pešek, bude ignorován spolu s předávanými změnami v datech. Lze použít pouze na serveru, který je správcem pešků.


DIALOG PŘEJMENOVÁNÍ SERVERU


Editační pole umožňuje změnit jméno serveru, zadané při instalaci. V názvu lze použít i znaky s diakritikou, znaménka, mezeru apod. Nedoporučuje se znak tečka (.).

Případné ikony zástupců WinBase602, obsahující jako parametr jméno této aplikace, se touto cestou nezmění - nutno přepsat ručně.


Editační pole umožňuje změnit identifikaci serveru - 12 bajtové číslo reprezentované 24 znaky. Za normálních okolností není běžné měnit tuto hodnotu.

Identifikace serveru se nesmí změnit, pokud server sdílí nějakou aplikaci (v replikačním vztahu).


Řídicí panel serveru - UŽIVATELÉ

Uživatelé jsou základním subjektem práva ve WinBase602. Akce, které je možno s uživateli provádět, lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se objeví po stisku pravého tlačítka myši na objektu typu uživatel.

Vytvořit	otevře okno pro zadání parametrů nového uživatele v databázi
Modifikovat	otevře okno pro změnu parametrů uživatele, změnu hesla, vytvoření klíčů
Skupiny	otevře okno se seznamem skupin, do nichž patří uživatel
Zrušit	odstranění uživatele z databáze
Exportovat objekt	export uživatele do souboru, aby mohl být importován na jiném serveru se stejnou identifikací - důležité pro zachování platnosti digitálních podpisů na všech serverech účastnících se replikací
Importovat objekt	import uživatele z jiného serveru
Viz také:	Subjekty práv ve WinBase602
	Export a import všech uživatelů (a skupin)


Řídicí panel serveru - SKUPINY UŽIVATEL

Skupiny uživatelů jsou subjektem práva ve WinBase602. Akce, které je možno se skupinami provádět, lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se objeví po stisku pravého tlačítka myši na objektu typu skupina.

Vytvořit	vytvoří v databázi novou skupinu zadaného jména. Vytvářet skupiny může pouze správce databáze.
Uživatelé	otevře okno se seznamem uživatelů, kteří jsou členy skupiny
Zrušit	odstranění skupiny z databáze
Viz také:	Subjekty práv ve WinBase602
	Export a import všech uživatelů (a skupin)


Řídicí panel - ROLE

Role jsou subjektem práva ve WinBase602. Na rozdíl od uživatelů a skupin jsou definovány a ovlivňují práva pouze v rámci aplikace. Akce, které je možno s rolemi provádět, lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se objeví po stisku pravého tlačítka myši na objektu typu role.

Vytvořit	vytvoří v aplikaci novou roli zadaného jména
Uživatelé	otevře okno se seznamem uživatelů, kteří jsou obsazeni do vybrané role
Skupiny	otevře okno se seznamem skupin, které jsou obsazeny do vybrané role
Zrušit	odstranění role z aplikace
Viz také:	Subjekty práv ve WinBase602


Subjekty práv
Subjekty práva - uživatelé, skupiny a role

Práv může nabít uživatel, skupina uživatelů nebo role. Členy těchto okruhů nazýváme subjekty práva. Právo se vždy přiděluje určitému subjektu.

Uživatelé a skupiny uživatelů jsou definováni na serveru. Jejich existence je nezávislá na aplikacích - v každé aplikaci v jedné databázi vystupují stejní uživatele a jejich skupiny. Na rozdíl od uživatelů a skupin jsou role objekty existující uvnitř aplikace. V každé aplikaci mohou být definovány jiné role a mimo svoji aplikaci role žádný význam nemá. Smysl skupin a rolí je v tom, že uživatelé mohou nabývat práv jejich prostřednictvím: když je uživatel zařazen do některé skupiny nebo obsazen do některé role, pak získává všechna práva přidělena této skupině nebo roli. Do role lze obsadit i skupinu uživatelů: pak práva přidělena roli získají všichni uživatelé zařazeni do této skupiny.

Uživatel může tedy nabýt práv dvojím způsobem:

•	buď jsou přidělena přímo jemu (jeho vlastní práva);

•	anebo je získá prostřednictvím skupiny, do níž náleží, resp. role, kterou hraje.

Práva získaná druhým způsobem se objeví v tzv. efektivních právech, tedy výsledných právech, kterými subjekt disponuje. Vzhledem k tomu, že je jednodušší obsadit uživatele do role než mu přidělovat stovky práv, je výhodnější používat ke správě práv druhou cestu.

Po instalaci jsou na serveru vytvořeny tyto standardní subjekty: anonymní uživatel (jméno ANONYMOUS nebo prázdné, prázdné heslo), skupina EVERYBODY (každý další uživatel je automaticky členem této skupiny) a skupina DB_ADMIN (správci databáze - nastavují parametry provozu apod.). Anonymní uživatel je (prozatím) členem obou skupin, v případě víceuživatelského provozu je vhodné jej z obou vyřadit..

Každá nová aplikace obsahuje tři standardní role: ADMINISTRATOR (správce aplikace, má práva jako autor aplikace), SENIOR_USER (aktivní uživatel, může přepisovat data v tabulkách, nemůže modifikovat objekty) a JUNIOR_USER (pasivní uživatel - může pouze číst data).

Viz také:	Práva ve WinBase602
	Práva k objektům
	Práva k datům
	Popis přístupových práv
	Zabránění anonymního přístupu k serveru


Práva k objektům a datům
Práva uživatelů ve WinBase602

Každý uživatel má ke každému objektu a k datům ve WinBase602 určitou množinu práv, která určují, co smí provádět a co nesmí. Výsledná (efektivní) práva vzniknou jako součet práv uživateli přidělených a práv vyplývajících z jeho zařazení do skupin nebo do rolí v aplikaci.

Systém odmítne provést akci, k níž uživatel nemá oprávnění. Tato ochrana se vztahuje na všechny způsoby přístupu k databázi - tedy jak prostřednictvím standardního ovládacího programu, tak i z aplikačních programů vytvořených uživatelem.

Systém řízení databáze umožňuje, aby uživateli byla určitá práva poskytnuta nebo odebrána. Navíc lze stanovit, zda uživatel smí svá práva používat pouze pro sebe, nebo zda je smí poskytovat (a odebírat) i dalším uživatelům.

K nově vytvořenému objektu má veškerá práva pouze ten uživatel, který jej vytvořil, databázový správce (člen skupiny DB_ADMIN) a administrátor aplikace (člen role ADMINISTRATOR). Ostatní uživatelé mají právo tento objekt číst a použít (tj. spustit program, otevřít pohled, dotaz, menu, číst obsah tabulky). Toto právo je uživatelům přiděleno prostřednictvím práv skupiny EVERYBODY - pokud chcete všem uživatelům odebrat právo používat objekt, který jste vytvořili, stačí, když toto právo odeberete skupině EVERYBODY.

Po importu aplikace je skupina EVERYBODY obsazena do role JUNIOR_USER.

Tvůrce a administrátor smí svá práva (všechna nebo část) poskytnout jiným uživatelům.

Je nutné rozlišit přidělování práv k jednotlivým objektům od práv k datům v tabulkách. Práva se nastavují pomocí příslušných akcí na řídicím panelu.

Viz také:	Subjekty práv ve WinBase602
	Práva k objektům
	Práva k datům
	Práva k systémovým tabulkám
	Popis přístupových práv


Práva k objektům
Práva k objektům v databázi

Mezi objekty aplikace se počítají definice tabulek, návrhy pohledů, definice menu a dotazů, texty programů a další. K nim lze přidělovat tato práva:

1) právo použít objekt (tj. např. otevřít pohled nebo dotaz, spustit program);

2) právo změnit objekt (tj. např. redefinovat tabulku, změnit návrh pohledu nebo program);

3) právo poskytnout svá práva dalším uživatelům.

Právo Vytvářet objekty (vkládat záznamy do systémových tabulek) se nastavuje zvlášť.

Práva lze nastavit pro jeden vybraný objekt nebo pro množinu označených objektů v dialogovém okně, které se otevře po provedení akce Práva k objektu.

V horní části okna se volí subjekt práva, v dolní části si lze prohlédnout a případně změnit nastavení práv vybraného subjektu práv k označenému objektu aplikace. Tlačítky ve střední části můžete kontrolovat (a správce může měnit) zařazení uživatelů ve skupinách, resp. uživatelů a skupin v rolích.

Skupina označovacích čtverců Přidělená práva k objektu ukazuje, která práva má vybraný subjekt práva. Máte-li právo poskytovat práva k tomuto objektu, můžete je zde měnit. Skupina Efektivní práva ukazuje (bez možnosti editace), jaká práva k objektu reálně přísluší vybranému subjektu práv - kromě přímo přidělených práv se zde berou do úvahy i práva získaná zařazením do skupin či do rolí.

Tlačítkem Uplatnit práva můžete navržené změny v nastavení provést. Tlačítkem OK se změny provedou také, dialog se navíc zavře.

Chcete-li nastavit práva na obsah tabulky, použijte akci Správa tabulky / Práva k datům.

	Práva ve WinBase602
	Subjekty práv ve WinBase602
	Práva k datům
	Práva k systémovým tabulkám


Práva k datům
Práva k datům v databázových tabulkách

K datům v určité tabulce lze přidělovat tato (globální) práva:

1) právo číst hodnoty všech nebo některých sloupců;

2) právo měnit hodnoty všech nebo některých sloupců;

3) právo vkládat nové záznamy;

4) právo rušit záznamy;

5) právo poskytovat svá práva dalším uživatelům.

Kromě toho lze i nastavovat práva k jednotlivým záznamům tabulky.

Právo Vytvářet tabulky (vkládat záznamy do systémové tabulky TABTAB) se nastavuje zvlášť.

Označíte-li na řídicím panelu některou tabulku, lze provedením akce Správa tabulky / Práva k datům otevřít dialog pro nastavování práv k obsahu této tabulky. V takto otevřeném dialogu se nastavují pouze globální práva platná pro všechny záznamy tabulky. V horní části okna se volí subjekt práva, v dolní části si lze prohlédnout a případně změnit nastavení práv vybraného subjektu práv k označené tabulce. Tlačítky v pravé části můžete kontrolovat (a správce může měnit) zařazení uživatelů ve skupinách, resp. uživatelů a skupin v rolích.

V dolní polovině jsou tři oblasti, kde se kontrolují a nastavují práva. V první oblasti nazvané Práva k celé tabulce je trojice označovacích čtverců, které nastavují práva týkající každého záznamu jako celku - vkládání, rušení a poskytování práv. Pod nimi je seznam sloupců, u kterých lze jednotlivě nastavovat práva pro čtení a pro přepis (modifikaci). Pro ulehčení práce s hromadných nastavením jsou po straně tlačítka: Č+ znamená "vybranému subjektu nastavit právo čtení ke všem sloupcům", Č- znamená "... odebrat právo ke čtení všem sloupcům", P+ znamená " vybranému subjektu nastavit právo přepisu ke všem sloupcům" a P- znamená "...odebrat právo přepisu všem sloupcům". Stav práv je okamžitě znázorněn v seznamu před jmény sloupců. První čtverec značí právo číst, druhý právo přepisovat.

Druhá oblast se týká nastavování práv jednotlivých záznamů a je v této chvíli nepřístupná.

Třetí oblast nazvaná Efektivní práva ukazuje (již bez možnosti editace), jaká práva k tabulce reálně přísluší vybranému subjektu práv - kromě přímo přidělených práv se zde berou do úvahy i práva získaná zařazením do skupin či do rolí.

Tlačítkem Uplatnit práva můžete navržené změny v nastavení pro vybraný subjekt provést a zároveň zobrazit nový stav efektivních práv. Tlačítkem OK se změny provedou také, dialog se navíc zavře.

Viz také:	Práva ve WinBase602
	Subjekty práv ve WinBase602
	Práva k objektům
	Práva k jednotlivým záznamům tabulky
	Práva k systémovým tabulkám
	Popis přístupových práv


Práva k jednotlivým záznamům tabulky

Na možnost nastavovat práva po záznamech je nutné pamatovat již při vytváření tabulky. V dialogovém okně Vlastnosti a příznaky tabulky v návrháři tabulek je nutné zatrhnout čtverec Přidělovat práva k jednotlivým záznamům.

Práva k jednotlivým záznamům se nastavují z libovolného formuláře do tabulky. V něm vyberete zvolený záznam a stisknete klávesu F11 nebo tlačítko na liště - tím otevřete dialog pro nastavování práv, v němž bude aktivní i střední oblast označená Práva k vybranému záznamu. V ní je vidět absolutní číslo záznamu, na němž stojíte, a máte možnost změnit vybranému subjektu práv jeho práva k tomuto záznamu.

V tomto případě se ve třetí oblasti dialogu, nazvané Efektivní práva, ukazují práva k vybranému záznamu. Na tato práva se skládají globální práva k celé tabulce i práva přidělená k záznamu, a to jak práva přidělená zvolenému subjektu, tak i práva přidělená skupinám, do nichž náleží, a rolím, které hraje.

Důsledkem tohoto širokého skládání práv je, že nelze odebrat efektivní právo subjektu k záznamu, pokud:

•	toto právo má subjekt přiděleno k celé tabulce;

•	toto právo má přidělena skupina, do níž subjekt náleží (k tabulce nebo k záznamu);

•	toto právo má přidělena role, kterou subjekt hraje (k tabulce nebo k záznamu).

Skupina označovacích čtverců nazvaná Práva společná pro všechny subjekty je aktivní pro tabulky umožňující přidělování práv k jednotlivým záznamům, ať už otevřete dialog pro celou tabulku nebo pro jednotlivý záznam. Specifikuje, jaká práva se automaticky přidělí skupině EVERYBODY pro každý nově vložený záznam. Nastavení v těchto čtvercích je nezávislé na subjektu zvoleném v horní části dialogu.

Viz také:	Práva ve WinBase602
	Subjekty práv ve WinBase602
	Práva k datům


Práva k systémovým tabulkám

Automaticky přidělená práva

K systémové tabulce tabulek (TABTAB) a tabulce objektů (OBJTAB) jsou implicitně přidělena skupině EVERYBODY tato práva:

•	globální právo číst všechny sloupce kromě definice;

•	právo vkládat nové záznamy.

K systémové tabulce uživatelů a skupin (USERTAB) jsou přidělena tato práva:

•	globální právo číst všechny sloupce;

•	právo vkládat nové záznamy.

Po vytvoření nového uživatele (tabulka USERTAB) získá tento uživatel právo editovat svůj popis, a naopak toto právo ztratí jeho tvůrce.

Výjimečné postavení má tabulka klíčů, k níž nemá právo editace ani správce databáze.

Omezení práv (zakázání vytváření objektů)

Právo vytvářet nové objekty mají ti uživatelé, kteří mají právo vkládat záznamy do systémových tabulek, v nichž jsou tyto objekty uloženy.

Tabulky jsou uloženy v tabulce TABTAB, uživatelé v tabulce USERTAB, aplikace a ostatní objekty (např. formuláře, programy) v tabulce OBJTAB. Standardně má právo vkládat záznamy do těchto tabulek skupina EVERYBODY. Toto právo lze této skupině odebrat a přidělit ho pouze těm uživatelům nebo jejich skupinám, kteří jsou oprávnění importovat, vytvářet nebo modifikovat databázové aplikace resp. zakládat nové uživatele.

Chcete-li nastavit tato práva, pak:

1. otevřete na řídicím panelu ve složce Systém položku Systémové tabulky a označte zvolenou tabulku;

2. z kontextového popup menu nebo pomocí tlačítka Správa tabulky proveďte akci Práva k datům;

3. v dialogu odeberte nebo přidělte právo vkládat objekty.

Viz také:	Práva ve WinBase602
	Subjekty práv ve WinBase602


Přihlášení se uživatele

Každý, kdo chce pracovat s WinBase602, se musí předem přihlásit. Smyslem přihlášení se je sdělit WinBase602 jméno uživatele a heslo. Na základě toho uživatel získá práva určitým způsobem pracovat s obsahem databáze.

Do horního pole vyplňte (nebo vyberte z comba) své uživatelské jméno, do spodního svoje heslo. Během psaní hesla se místo každého znaku objeví na obrazovce hvězdička. Nakonec stiskněte tlačítko Login. Zvolíte-li jméno ANONYMOUS (nebo ponecháte-li pole prázdné), můžete se bez hesla přihlásit jako anonymní uživatel. Budete mít tolik práv, kolik pro tento případ určil správce databáze.

Viz také:	Subjekty práv ve WinBase602


DIALOG VLASTNOSTI UŽIVATELE


Zavře tento dialog.


Jméno, s nímž se bude uživatel přihlašovat k serveru. Max. délka je 31 znak. Nutno vyplnit.


Nepovinné křestní jméno uživatele. Slouží (spolu s příjmením a iniciálkou) k identifikaci uživatele v digitálních podpisech.


Nepovinná iniciálka případného druhého jména uživatele. Slouží (spolu s jménem, příjmením) k identifikaci uživatele v digitálních podpisech.


Nepovinné příjmení uživatele. Slouží (spolu s jménem a iniciálkou) k identifikaci uživatele v digitálních podpisech.


Nepovinné upřesnění jména uživatele. Slouží (spolu s jménem) k lepší identifikaci uživatele.


Při koloběhu dokumentů mezi replikujícími servery je nutné pro uživatele stanovit jeden server jako server domovský. V ostatních případech není nutné zadávat.


Označení uživatele jako certifikační autority. Může změnit pouze jiná certifikační autorita.


Tlačítko umožní zadat nové heslo. Je aktivní pouze tehdy, modifikuje-li uživatel sama sebe. Změnit heslo uživateli nemůže ani správce databáze.


Tlačítko umožní uživateli vytvořit si dvojici klíčů - soukromý a veřejný, použitelné pro digitální podepisování. Zároveň umožní certifikační autoritě certifikovat tyto klíče (prohlásit a označit je za platné).


Zapište nové heslo, které budete zadávat při přihlašování. Minimální délka se nastavuje v bezpečnostních parametrech serveru. Heslo může být případně i prázdné.


Zadejte nové heslo ještě jednou, aby se vyloučily případné překlepy.


DIALOG Stav klíče


Udává stav certifikace (tj. digitálního podpisu) klíčů uživatele (vč. jeho důležitých parametrů). Pouze stav Platný certifikát označuje platnost klíčů, ostatní případy znamenají neplatnost klíčů a nemožnost podepisovat dokumenty (záznamy).


Datum, do kdy certifikace platí. Po této době je nutno klíče nechat znovu certifikovat.


Datum, kdy byly klíče certifikovány.


Tlačítko umožní uživateli vytvořit si svoji dvojici klíčů - soukromý, který se uloží na disketu v mechanice A:\ a veřejný, který bude uložen databázi. Po vytvoření klíčů musí uživatel požádat certifikační autoritu o certifikování klíčů, jinak je nelze používat.


Tlačítko slouží pro certifikování klíčů uživatele certifikační autoritou - většinou není totožný s uživatelem, který si klíče generoval. Tlačítko je aktivní, je-li přihlášený uživatel certifikační autoritou.


Otevře informační okno se znázorněnou hierarchií certifikačních autorit až k nejvyšší certifikační autoritě.


DIALOG Certifikace


Do tohoto pole může certifikátor zapsat datum, do kdy bude platit jeho certifikace.


Tlačítkem zapíšete do pole vlevo současné datum a čas. Použije se tehdy, došlo-li ke zcizení soukromého klíče a hrozí nebezpečí zneužití digitálního podpisu uživatele. Certifikace nebude dále platná z důvodu vypršení lhůty platnosti.


Tlačítkem zahájíte certifikaci klíčů daného uživatele. Budete vyzváni, abyste vložili do mechaniky A:\ disketu se svým soukromým klíčem. Pokud certifikace proběhne, okno se zavře a změní se stav certifikace v předchozím okně.


DIALOG Práva k datům


Skupina složek sloužící k výběru typu subjektu, pro nějž se nastavují práva. Má-li být subjektem některý uživatel, zvolte tuto možnost.


Skupina složek sloužící k výběru typu subjektu, pro nějž se nastavují práva. Má-li být subjektem některá skupina uživatelů, zvolte tuto možnost.


Skupina složek sloužící k výběru typu subjektu, pro nějž se nastavují práva. Má-li být subjektem některá role, zvolte tuto možnost.


V combu se objevují všechny subjekty práva typu zvoleného přepínačem vlevo. Pro vybraný subjekt lze nastavit práva.


Dvojice tlačítek, umožňující editovat zařazení uživatelů a skupin do rolí a uživatelů do skupin. Některé akce jsou povoleny pouze správci databáze nebo aplikace.


Dvojice tlačítek, umožňující editovat zařazení uživatelů a skupin do rolí a uživatelů do skupin. Některé akce jsou povoleny pouze správci databáze nebo aplikace.


Právo vybraného subjektu vkládat záznamy do tabulky.


Právo vybraného subjektu rušit záznamy v tabulce.


Právo vybraného subjektu poskytnout svá práva k celé tabulce dalším subjektům.


Seznam sloupců, u kterých lze jednotlivě nastavovat práva pro čtení a pro přepis (zaškrtáváním čtverců vlevo).


Pomocné tlačítko, které všem sloupcům tabulky pro označený subjekt nastaví právo pro čtení.


Pomocné tlačítko, které všem sloupcům tabulky pro označený subjekt odebere právo pro čtení.


Pomocné tlačítko, které všem sloupcům tabulky pro označený subjekt nastaví právo pro přepis.


Pomocné tlačítko, které všem sloupcům tabulky pro označený subjekt odebere právo pro přepis.


Právo vybraného subjektu zrušit tento jeden vybraný záznam.


Právo vybraného subjektu poskytnout svá práva k tomuto jednomu vybranému záznamu dalším subjektům.


Seznam sloupců záznamu, u kterých lze jednotlivě nastavovat práva pro čtení a pro přepis (zaškrtáváním čtverců vlevo).


Pomocné tlačítko, které všem sloupcům vybraného záznamu nastaví právo pro čtení pro označený subjekt.


Pomocné tlačítko, které všem sloupcům vybraného záznamu odebere právo pro čtení pro označený subjekt.


Pomocné tlačítko, které všem sloupcům vybraného záznamu nastaví právo pro přepis pro označený subjekt.


Pomocné tlačítko, které všem sloupcům vybraného záznamu odebere právo pro přepis pro označený subjekt.


Efektivní právo označeného subjektu vkládat záznamy vztahující se k tabulce nebo k vybranému záznamu.


Efektivní právo označeného subjektu rušit záznamy vztahující se k tabulce nebo k vybranému záznamu.


Efektivní právo označeného subjektu poskytnout svá práva vztahující se k tabulce nebo k vybranému záznamu.


Seznam sloupců, u kterých lze jednotlivě zkontrolovat efektivní práva pro čtení a pro přepis.


Skupina EVERYBODY získá právo číst každý vložený záznam při používání záznamových práv.


Skupina EVERYBODY získá právo přepisovat každý vložený záznam při používání záznamových práv.


Skupina EVERYBODY získá právo poskytnout svá práva pro každý vložený záznam při používání záznamových práv.


Tlačítko uplatní nastavená práva a zavře dialog.


Tlačítko uplatní práva a umožní pokračovat v nastavování.


Tlačítko zavře dialog bez uplatnění nastavených změn. Po uplatnění práv (tlačítkem vlevo) již pouze zavře dialog.


Absolutní číslo záznamu, jemuž nastavujete práva. Složky této části jsou aktivní, pokud tabulka má nastaven vhodný příznak a dialog je otevřen z pohledu klávesou F11 nebo tlačítkem na liště.


Skupina složek vztahující se k nastavování práv platících pro všechny záznamy tabulky.


Skupina složek vztahující se k nastavování práv jednotlivých záznamů. Složky této části jsou aktivní, pokud tabulka má nastaven vhodný příznak a dialog je otevřen z pohledu klávesou F11.


Skupina složek ukazující (bez možnosti editace) efektivní práva označeného subjektu k tabulce (při otevření dialogu akcí z řídicího panelu) nebo efektivní práva k vybranému záznamu (při otevření dialogu z pohledu klávesou F11 a vhodném definování tabulky). Efektivní práva jsou součtem práv uživatele a případných práv plynoucích ze zařazení uživatele do skupiny nebo do role.


Skupina složek umožňující skupině EVERYBODY přidělit právo číst, přepisovat a poskytovat právo ke všem nově vkládaným záznamům. Složky této části jsou aktivní, pokud tabulka má nastaven vhodný příznak a dialog je otevřen z pohledu klávesou F11 nebo tlačítkem na liště.

Nezapomínejte však, že záznamová práva se přičítají k právům globálním, má-li někdo povoleno číst celou tabulku, nelze mu zakázat číst jednotlivý záznam.


DIALOG Práva k objektu


Skupina ukazuje, jaká práva má označený subjekt práva k vybranému objektu aplikace. Práva je možné měnit (máte-li na to právo).


Právo označeného subjektu práva zrušit vybraný objekt.


Právo označeného subjektu práva poskytnout svá práva k vybranému objektu.


Právo označeného subjektu práva používat vybraný objekt.


Právo označeného subjektu práva modifikovat vybraný objekt.


Skupina ukazuje, jaká efektivní práva má označený subjekt práva k vybranému objektu aplikace. Práva není možné měnit. Efektivní práva jsou součtem práv uživatele a případných práv plynoucích ze zařazení uživatele do skupiny nebo do role.


Efektivní právo označeného subjektu práva zrušit vybraný objekt.


Efektivní právo označeného subjektu práva poskytnout svá práva k vybranému objektu.


Efektivní právo označeného subjektu práva používat vybraný objekt.


Efektivní právo označeného subjektu práva modifikovat vybraný objekt.


DIALOGY Vztahy mezi uživateli, skupinami a rolemi


V seznamu skupin uživatelů jsou křížkem označeny ty skupiny, jejichž členem je vybraný uživatel. Správce databáze (člen skupiny DB_ADMIN) může zařazení do skupin změnit.

Viz - Subjekty práv


V seznamu uživatelů jsou křížkem označeni ti, kteří patří do vybrané skupiny. Správce databáze (člen skupiny DB_ADMIN) může zařazení do skupin změnit.

Viz - Subjekty práv


V seznamu skupin uživatelů jsou křížkem označeny ty skupiny, které jsou obsazeny do vybrané role. Správce databáze (člen skupiny DB_ADMIN) a správce aplikace (obsazený do role ADMINISTRATOR) může obsazení do rolí změnit.

Viz - Subjekty práv


V seznamu uživatelů jsou křížkem označeni ti, kteří jsou obsazeni do vybrané role. Správce databáze (člen skupiny DB_ADMIN) a správce aplikace (obsazený do role ADMINISTRATOR) může obsazení do rolí změnit.

Viz - Subjekty práv


V seznamu rolí jsou křížkem označeni ty role, do kterých je obsazen vybraný uživatel. Správce databáze (člen skupiny DB_ADMIN) a správce aplikace (obsazený do role ADMINISTRATOR) může obsazení do rolí změnit.

Viz - Subjekty práv


V seznamu rolí jsou křížkem označeni ty role, do kterých je obsazena vybraná skupina uživatelů. Správce databáze (člen skupiny DB_ADMIN) a správce aplikace (obsazený do role ADMINISTRATOR) může obsazení do rolí změnit.

Viz - Subjekty práv


Tlačítkem lze otevřít okno se seznamem těch subjektů, které jsou vybrané (označené křížkem). Používá se tehdy, když pro velký počet uživatelů v seznamu je původní zobrazení nepřehledné.


dialog Právo vytvářet objekty


Označovací čtverec říká, zda-li může vybraný subjekt práv vkládat záznamy do systémových tabulek TABTAB, OBJTAB a USERTAB. Standardně má toto právo skupina EVERYBODY. Odznačením můžete toto právo odebrat (máte-li k tomu právo).

Explicitní odebrání práva uživateli ještě nemusí mít za následek zakázání vkládání - pokud uživatel je členem skupiny, která toto právo má, jeho efektivní právo se nezmění.


Označovací čtverec říká, plyne-li Vám z příslušnosti do nějaké skupiny právo vkládat záznamy do systémových tabulek (nebo toto právo máte přiděleno explicitně). Nelze editovat - pokud chcete změnit, odeberte právo subjektu práv přímo nebo jej vyřaďte ze skupiny.


Databázové tabulky ve WinBase602

Data, která spravuje WinBase602, jsou obsažena v tzv. tabulkách. Každá tabulka je soustavou záznamů. Například tabulka zaměstnanců obsahuje pro každého zaměstnance jeho záznam, tabulka faktur má v každém záznamu údaje o jedné faktuře.

Každý záznam je tvořen tzv. sloupci (dříve atributy). Sloupec vždy obsahuje jeden údaj. Například záznam o zaměstnanci může mít sloupce jméno, příjmení, funkce, plat; záznam o faktuře sloupce dodavatel, příjemce, datum, částka atd. Všechny záznamy patřící do stejné tabulky mají stejné sloupce a tedy stejnou strukturu.

Navrhnout databázovou tabulku znamená v první řadě popsat její sloupce. Každý sloupec má svoje jméno a typ. Typ sloupce určuje, co smí být hodnotou sloupce, neboli co lze do sloupce zapsat.

Sloupec ve WinBase602 může mít i více než jednu hodnotu - v takovém případě mluvíme o tzv. multiatributu. V závislosti na způsobu definice multiatributu může být maximální počet těchto hodnot omezen nebo může být prakticky neomezený.

Rychlost hledání v tabulce a rychlost třídění záznamů výrazně ovlivňují indexy k tabulce. Vztahy mezi relačními tabulkami pomáhá udržovat referenční integrita.

Tabulky se navrhují a upravují ve vývojovém prostředí pomocí interaktivního návrháře tabulek nebo pomocí příkazů SQL CREATE TABLE a ALTER TABLE.

Viz také:	Řídicí panel - tabulky
	Návrhování a změna tabulek ve vývojovém prostředí


Řídicí panel - TABULKY

Veškerá data spravovaná WinBase602 jsou uložena v tzv. tabulkách. Základní operace, které uživatel může s tabulkami provádět, lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se otevře po stisku pravého tlačítka myši na objektu typu tabulka.

Otevřít	otevře na obrazovce okno (standardní formulář) umožňující vidět data z označené tabulky po záznamech na řádcích. Lze vkládat nová data, přepisovat data, listovat v datech a vyhledávat data. Tento způsob práce s daty je vhodný pouze tehdy, pokud tabulka má jen málo sloupců. Pro pohodlnější práci s obsahem tabulky je lepší si navrhnout formulář.
Vytvořit	vytvoření nové tabulky probíhá tak, že se přenesete do prostředí pro návrh tabulek, popíšete strukturu tabulky a případné její indexy a další vlastnosti a nakonec přidělíte tabulce jméno. Tím vznikne nová tabulka. Viz definování tabulek.
Modifikovat	přenesete do prostředí pro návrh tabulek. Tam budete mít možnost změnit strukturu označené tabulky, nebo její indexy a další vlastnosti a případně popsat, jak se ze staré verze tabulky mají přenést data do nové. Viz definování tabulek.
Statistika	pro označenou tabulku se určí počet platných, zrušených a uvolněných záznamů. Viz stav záznamu.
Zrušit	zrušení označené databázové tabulky. Zrušením tabulky jsou nevratně zničena všechna data, která v tabulce byla obsažena.
Duplikovat	vytvoření přesné kopie označené tabulky. Data se nepřenesou.
Připojit	možnost připojení tabulky z jiné aplikace; viz Připojení objektu.
Exportovat objekt	export definice tabulky do souboru
Importovat objekt	import definice tabulky ze souboru
Ukázat SQL	možnost prohlédnout (nikoliv editovat) si textovou definici tabulky (SQL příkaz CREATE TABLE).
Práva k objektu	nastavení objektových práv (práva k definici tabulky, nikoliv k datům)
Správa tabulky	nabídne další akce pro správu a údržbu tabulky
	Uvolnit zrušené záznamy - záznamy označené jako zrušené se změní na uvolněné; přístup k nim je definitivně znemožněn
	Opravit indexy - veškeré indexy označených tabulek budou přebudovány
	Vymazat historii - umožní u tabulek obsahujících sledovací atributy typu Historie vymazat staré hodnoty, které Historie archivuje
	Práva k datům - umožní nastavit práva k datům označených tabulek pro různé subjekty.
	Zkompaktnit - provede "setřesení" záznamů tak, aby v tabulce nebyly zrušené a uvolněné záznamy. Pořadí záznamu nemusí být zachováno. Akce se nesmí provést do tabulky, do níž vedou ukazatele.
Export dat	otevře obecný návrhář Přenosu dat s přednastavenými údaji pro export dat z tabulky do souboru
Import dat	otevře obecný návrhář Přenosu dat s přednastavenými údaji pro import dat ze souboru do označené tabulky.


Navrhování a změna tabulek ve vývojovém prostředí
Návrhování a změna tabulek ve vývojovém prostředí

K interaktivnímu vytváření a modifikování databázových tabulek slouží prostředí návrháře tabulek. Druhou cestou je použití příkazů jazyka SQL CREATE TABLE, ALTER TABLE nebo DROP TABLE.

Návrhář tabulek se skládá z části pro zápis jmen a typů sloupců v levé části a sady upřesňujících a informačních polí v části pravé.

Část pro zadávání sloupců má dva sloupečky: Jméno sloupce, kam se zapisuje nanejvýš desetiznakové jméno sloupce a Typ sloupce, kde se volí z nabídkového comba typ sloupce.

Všechna pole v pravé části se týkají vždy jednoho sloupce vybraného v levé části. Shora dolů jsou to tato pole:

Needitovatelné pole Stav sloupce nabývá těchto hodnot:

Nový - stav po přidání nového sloupce do návrhu. Upozorňuje, že sloupec ještě není součástí tabulky.

Nezměněný - stav možný pouze při modifikaci tabulky. Informuje, že se sloupcem nebyla provedena dosud žádná změna.

Změněný - uživatel provedl změnu v názvu nebo typu sloupce. Do pole Hodnota je vhodné zapsat, jaká data se mají do změněného sloupce přenést.

Zrušený - uživatel tento sloupec zrušil. Řádek se sloupcem  je šedý, neaktivní.

Pole Hodnota se použije pouze při modifikaci tabulky. Zapíše se do něj výraz, popisující, co se má přenést do pozměněného sloupce. Většinu standardních konverzí návrhář rozpozná a zapíše do pole sám. U přenosů složitějších je nutné vysvětlení uživatele.

U nezměněných sloupců je v poli Hodnota šedý nápis <Nezměněna>.

Třetí editační combo se objevuje jen za určitých podmínek:

- je-li aktuální sloupec typu řetězec nebo BINARY má pole název Délka řetězce a zapisuje se do něj maximální počet znaků, které se budou moci vložit do sloupce.

- je-li aktuální sloupec typ POINTER či BIPTR, vybere se v combu Cílová tabulka tabulka, do níž ukazatel směřuje.

Má-li sloupec z levé stany sloužit jako multiatribut, zaškrtněte označovací čtverec Multiatribut. Odstraněním zaškrtnutí změníte multiatribut na běžný sloupec.

Pomocí polí Rezervace a Lze překročit? určíte, pro kolik hodnot multiatributu bude pevně rezervováno místo, a zda bude možné tento počet překročit. Políčka jsou aktivní pouze tehdy, je-li zaškrtnut čtverec Multiatribut.

Pole Smí mít prázdnou hodnotu? se odznačí tehdy, chcete-li zakázat možnost vložit záznam, který by neměl v tomto sloupci nic zapsáno. Je rozumné zkombinovat tuto vlastnost s implicitní hodnotou.

Do pole Implicitní hodnota se zadává hodnota, která se má objevit v každém novém záznamu. Hodnota musí být téhož typu jako sloupec. Od verze 6.0 je povoleno používat obecné výrazy (v kontextu serveru, nikoliv klienta). Časté je použití hodnoty sekvence pro generování unikátních čísel.

Pro řetězcové sloupce existuje speciální implicitní hodnota. Použijete-li hodnotu USER (bez uvozovek), do sloupce se zapíše vždy jméno uživatele, který záznam vložil.

Pro typ BINARY existuje implicitní hodnota USER - do sloupce se vloží ID uživatele, který záznam vložil.

Pro typ Integer existuje speciální hodnota UNIQUE, která zajistí, že do tohoto sloupce se při vložení záznamu zapíše jedinečná hodnota. Tento mechanismus funguje pouze tehdy, pokud do tohoto sloupce nebudete nikdy nic explicitně zapisovat. V opačném případě se může stát, že systém zapíše do nového záznamu stejnou hodnotu, jakou jste ručně zapsali do jiného záznamu. Jiný způsob vkládání unikátních hodnot nabízí Sekvence.

Ke každému sloupci můžete vytvořit index. Z nabídky comba označeného Index si vyberte jeden z typů:

Unikátní index - hodnoty v indexu se nesmí opakovat;

Primární klíč - speciální unikátní index, může být pouze jeden v tabulce;

Neunikátní index - hodnoty se smějí libovolně opakovat.

Podmínkou v poli Integritní omezení můžete určit rozmezí hodnot, které se smějí do sloupce vložit.

K dispozici je podrobnější nápověda k těmto tématům:

Definování sloupců a jejich parametrů	Databázové tabulky
Přehled datových typů	Indexy k tabulce
Multiatributy	Integritní omezení hodnot sloupců
Sledovací atributy	Referenční integrita tabulek
Sekvence	Příznaky tabulky


Definování sloupců tabulek

Každý sloupec tabulky je popsán několika údaji:

•	jménem, viz jména sloupců,

•	typem, viz typy sloupců,

•	délkou tj. počtem znaků, jde-li o sloupec typu řetězec znaků (typy String, CSString a CSIString) nebo Binary,

•	označením, jedná-li se o multiatribut),

•	jménem cílové tabulky, jde-li o sloupec typu ukazatel (Pointer nebo Biptr).

Na pořadí sloupců v definici záleží pouze v případě sledovacích atributů. Sloupec zrušíte z definice tabulky tak, že z menu vyberete položku Editace / Zrušit řádek. Sloupec vložíte mezi dva existující sloupce tak, na tom sloupci, před nějž chcete vkládat, vyberete z menu položku Editace / Vložit řádek.

Pro ukončení definice tabulky vyberte z menu položku Návrh / Vytvořit.

Poznámka: při návrhu zvažujte budoucí využití tabulky - v případě přístupu čistě přes SQL (ODBC) používejte nadstandardní rysy tabulek (multiatributy, sledovací sloupce, ukazatele) s vědomím, že SQL jim ve některých případech nerozumí.

Viz také:	Databázové tabulky
	Návrhování a změna tabulek ve vývojovém prostředí


Indexy k databázovým tabulkám

Index je datová struktura, která podstatně urychluje:

•	hledání záznamů v tabulce;

•	uspořádávání záznamů v tabulce;

•	operace JOIN nad tabulkami (relační propojení tabulek);

•	použití subpohledu do relačně přivázaných záznamů.

Každý index zachycuje uspořádání všech záznamů v tabulce podle obecného výrazu, který obsahuje jeden nebo více sloupců. Je možno definovat index jako jedinečný, tzn., že nebude povoleno zapsat jeho duplicitní hodnotu.

Použití indexů je zcela automatické. Programátor aplikace může však při vytváření dotazů určit, aby se použil index jiný, vhodnější. O použitém indexu v dotazu (pevném) referuje pomocné okno, které se pro označený dotaz otevře stiskem tlačítka Optimalizace na řídicím panelu - podrobnosti.

V případě nekorektního ukončení serveru mohou být indexy v nekonzistentním stavu - k opravě indexů slouží akce na řídicím panelu pro označené tabulky Opravit indexy, nebo posloupnost příkazů vnitřního jazyka Enable_index:

Enable_index(FALSE);

Enable_index(TRUE);

V současné verzi je povoleno maximálně 24 indexů k jedné tabulce.

Indexy se v návrháři tabulek (tj. interaktivně) definují dvojím způsobem:

1) Jednoduchý index, jehož klíč tvoří jeden samotný sloupec, můžete vytvořit již při definování tohoto sloupce. V pravé dolní části návrháře vyberete z comba nazvaného Index odpovídající druh indexu.

2) Složitější indexy se popisují ve zvláštním okně, které v prostředí pro návrh tabulek otevřete tak, že z menu Vlastnosti vyberete položku Indexy. Pokud tuto akci provedete podruhé, okno s indexy se zavře.

Kromě toho lze indexy definovat také pomocí příkazů jazyka SQL CREATE INDEX nebo CREATE TABLE a ALTER TABLE.

Viz také:	Databázové tabulky
	Návrhování a změna tabulek ve vývojovém prostředí
	Definování složitějších indexů


Popis indexů k tabulce

Složitější indexy se popisují ve zvláštním okně, které v prostředí pro návrh tabulek otevřete tak, že z menu Vlastnosti vyberete položku Indexy. Pokud tuto akci provedete podruhé, okno s indexy se zavře.

Pro přidání nového indexu stiskněte klávesu Insert. Objeví se dialogové okno, které Vám pomůže s jeho sestavením. V seznamu označte sloupec, který má být v indexu. Podle směru třídění stiskněte jedno z dvou tlačítek Přidat sloupec. Má-li být v indexu více sloupců, opakujte tuto akci. Stiskem tlačítka Hotovo přenesete sloupce do indexového okna, kde můžete definici indexu (je-li potřeba) dále editovat.

Přidáte-li nové indexy k tabulce nebo změníte-li existující indexy, pak počítejte při opouštění tabulky s časovou prodlevou nutnou na vybudování indexů.

Viz také:	Databázové tabulky
	Návrhování a změna tabulek ve vývojovém prostředí
	Indexy k databázovým tabulkám


Popis integritních omezení k tabulce

Integritní omezení slouží k stanovení určitého rozmezí hodnot, kterých může hodnota některých sloupců nabývat.

Integritní omezení v návrhu tabulky se definuje dvojím způsobem:

1) jednoduchá omezení pro jeden konkrétní sloupec můžete vytvořit již při definování tohoto sloupce. V pravé dolní části návrháře zapíšete do pole Integritní omezení podmínku pro daný sloupec. Příklad: chcete-li, aby nešlo do pole Osobní číslo zapsat číslo záporné, zadejte podmínku

OS_CISLO > 0

2) složitější integritní omezení se popisují ve zvláštním okně, které v prostředí pro návrh tabulek otevřete tak, že z menu Vlastnosti vyberete položku Integritní omezení. Pokud tuto akci provedete podruhé, okno s omezeními se zavře.

Pro přidání dalšího integritního omezení, stiskněte klávesu Insert. Do seznamu se přidá další řádek. Vyplníte nepovinné Jméno omezení a Podmínku. Pamatujte, že podmínka se vyhodnocuje na serveru (tedy neví nic o funkcích vnitřního jazyka, natož u funkcích uživatelských, naopak lze použít funkci (rutinu) uloženou na serveru nebo funkce definované na serveru).

Příklad: datum zaplacení nesmí být menší než datum vystavení faktury

DAT_ZAPL > DAT_VYST

Integritní omezení se definuje v interaktivním prostředí návrháře tabulek nebo pomocí příkazů jazyka SQL CREATE TABLE a ALTER TABLE.

Viz také:	Databázové tabulky
	Návrhování a změna tabulek ve vývojovém prostředí


Pravidla referenční integrity tabulek
Referenční integrita tabulek ve WinBase602

Referenční integrita je interní nástroj, který pomáhá udržovat pořádek a konzistenci v relačně propojených tabulkách.

Integrita dat se vždy definuje pro dvě tabulky:

Tabulka, v níž definujete referenční integritu, se nazývá podřízená tabulka. Hodnota některého jejího sloupce má mít hodnotu z druhé nadřízené tabulky (číselníku). Při správném definování referenční integrity bude program za Vás hlídat dvě pravidla:

 1) Přidáváte-li záznam do podřízené tabulky (resp. přepisujete-li hodnotu sloupce definovaného v referenční integritě), musí hodnotě tohoto sloupce odpovídat hodnota sloupce v nadřízené tabulce podle definice.

 2) Smazání hodnoty sloupce (zrušením záznamu nebo přepsáním hodnoty) v nadřízené tabulce bude povoleno jen tehdy, není-li v podřízené tabulce ani jeden záznam se stejnou hodnotou sloupce, pro nějž je definována referenční integrita. Toto pravidlo lze změkčit dodatečnou reakcí na změnu či na smazání.

Referenční integrita se definuje v interaktivním prostředí návrháře tabulek nebo pomocí příkazů jazyka SQL CREATE TABLE a ALTER TABLE.

Viz také:	Databázové tabulky
	Návrhování a změna tabulek ve vývojovém prostředí
	Definování referenční integrity ve vývojovém prostředí


Definování referenční integrity tabulek
Definování referenční integrity tabulek ve vývojovém prostředí

Referenční integrita se vždy definuje v tabulce podřízené. V návrháři podřízené tabulky vyberte z menu Vlastnosti položku Referenční integrita. Otevře se okno s již definovanými integritami v této tabulce.

Pro definování další referenční integrity stiskněte klávesu Insert. Objeví se dialogové okno pro nové pravidlo referenční integrity.

V seznamu Nadřízená tabulka na levé straně označíte tabulku. V combu Vzdálený sloupec se objeví seznam unikátních indexů z nadřízené tabulky - z nich vyberete ten index, který přísluší sloupci, jehož hodnoty tvoří číselník pro místní sloupec. Není-li unikátní index dosud vytvořen, musíte opustit návrhář podřízené tabulky a změnit návrh tabulky nadřízené. Teprve potom lze referenční integritu definovat.

 v combu Místní sloupec vyberete ten sloupec, jehož hodnoty referenční integrita hlídá. Pokud není dosud v indexu, opusťte návrh referenční integrity, vytvořte index a znovu definujte referenční integritu.

Po stisku tlačítka OK se definice nové referenční integrity přenese do původního okna. V něm lze navíc nastavit reakci na zrušení záznamu v nadřazené tabulce (Akce při zrušení) nebo reakci na změnu hodnoty klíče v nadřízené tabulce (Akce při změně).

Nabízejí se následující možnosti reakce:

•	Odvolat akci - editační akce porušující referenční integritu se nezdaří.

•	Dosadit NULL - v připojených záznamech podřízené tabulky se do sloupců, které podřízený záznam propojují s nadřízeným záznamem, zapíše hodnota NULL;

•	Dosadit implicitní - v připojených záznamech podřízené tabulky se do sloupců, které podřízený záznam propojují s nadřízeným záznamem, zapíše implicitní hodnota určena v definici tabulky;

•	Kaskádní změna - změna provedena v nadřízené tabulce se provede i na připojených záznamech podřízené tabulky: při zrušení nadřazeného záznamu se zruší všechny k němu připojené podřízené záznamy, při změně hodnot propojovacího klíče se stejná změna provede i na klíčích v podřízených záznamech.

Při provádění akcí referenční integrity se nekontrolují práva k provádění změn v podřízené tabulce. Akce se provede, pokud klient má právo provést změnu, která akci vyvolává, v nadřazené tabulce.

Viz také:	Databázové tabulky ve WinBase602
	Návrhování a změna tabulek ve vývojovém prostředí
	Referenční integrita ve WinBase602


Jména sloupců tabulek

Každý sloupec tabulky má svoje jméno neboli svůj identifikátor. Vždy, když chcete s tímto sloupcem pracovat, odkážete na něj jeho jménem - například pokud jej uvádíte v popisu složky pohledu nebo pokud s ním manipulujete v programu..

Pro jména sloupců platí tato omezující pravidla:

•	jméno má nejvýše 31 znak.

•	v tabulce nesmí být dva stejně pojmenované sloupce.

•	jméno nesmí být stejné jako klíčové slovo nebo předdefinovaný identifikátor vnitřního programovacího jazyka. Pokud byste takové jméno v definici tabulky použili, WinBase602 Vás na ně upozorní.

V různých tabulkách mohou být stejně pojmenované sloupce, sloupce mohou mít stejná jména jako tabulky, pohledy, programy atd. Nadměrné používání stejných jmen však snižuje přehlednost systému.

Jinou podstatnou vlastností každého sloupce je jeho typ.

Viz také:	Databázové tabulky
	Návrhování a změna tabulek ve vývojovém prostředí
	Typy sloupců tabulek


Typy sloupců databázových tabulek

Každý sloupec má svůj pevně daný typ. Typ určuje, jaká jaké hodnoty smí sloupec mít. Zatímco hodnoty sloupců se zpravidla často mění, typ zůstává stejný a k jeho změně je nutná reorganizace tabulky.

Typ každého sloupce se zadává při definování tabulky. Ve WinBase602 jsou k dispozici tyto typy:

Typ	Česky	Rozsah a poznámky	Délka
Boolean	Ano-Ne	typ pro údaje typu ANO - NE. Má pouze dvě hodnoty, a to TRUE a FALSE. TRUE lze alternativně zadat jako ANO, FALSE lze zadat jako NE.	1
Char	Znak	jeden znak (jakýkoli). Pokud potřebujete více znaků, použijte některý z typů String.	1
Short	Malé celé číslo	-32767 do 32767	2
Integer	Velké celé číslo	-2147483647 až 2147483647	4
Money	Peníze	příbližně od -1.4 biliónu do 1.4 biliónu, dvě des. místa	6
Real	Reálné číslo	kladně nebo záporné reálné číslo v rozsahu absolutních hodnot 1.7e-308 až 1.7e308 nebo nula	8
String	Řetězec	řetězec znaků (jisté předem omezené délky maximálně však 254); tyto řetězce se uspořádávají lexikograficky podle interního kódu svých znaků. Nadefinovanou délku řetězce není možné překročit - označovací čtverec Překročení se týká počtu hodnot, nikoliv délky řetězce!	zvol.
CSString	Český řetězec	řetězec znaků (jisté předem omezené délky maximálně však 254); tyto řetězce se uspořádávají lexikograficky podle pořadí písmen v češtině a slovenštině, velká písmena jsou před malými.	zvol.
CSIString	Český řetězec	řetězec znaků (jisté předem omezené délky maximálně však 254); tyto řetězce se uspořádávají lexikograficky podle pořadí písmen v češtině a slovenštině, mezi velkými a malými písmeny se nerozlišuje.	zvol.
Binary	Binární data	sloupec, do něhož lze programově vkládat veškeré znaky (i s kódy nižšími než 32), jedná se tedy o zobecnění řetězce	zvol.
Date	Datum	datum - den, měsíc a rok - od počátku letopočtu	4
Time	Čas	čas v rozsahu jednoho dne, tedy hodiny, minuty, sekundy a tisíciny sekundy; 0:0:0.000 až 23:59:59.999	4
Timestamp	Datum a čas	datum a čas v jednom sloupci s přesností na vteřiny, použitelný pro data od 1900 až do asi 2037.	4
Raster	Obrázek	obrázek ve formátu BMP, PCX, TIFF, GIF, JPG nebo WPG	prom.
Text	Text	Libovolný text předem nedefinované délky	prom.
Pointer	Ukazatel	Odkaz na libovolný záznam určené tabulky,	4
Biptr	Obousměrný ukazatel	Odkaz do jisté určené tabulky (v níž musí být sloupec typu obousměrný ukazatel směřující zpět). Oba ukazatele se pak mění synchronně, čímž vzniká obousměrné propojení.	4
Autor	Autorizace	Sledovací atribut obsahující 12bajtové binární ID autora poslední změny hodnoty jistého sledovaného sloupce.	12
Datumovka	Datumovka	Sledovací atribut obsahující datum a čas poslední změny jistého sledovaného sloupce.	4
Historie	Historie	Sledovací atribut obsahující minulé hodnoty jistého sledovaného sloupce příp. i jména autorů a časy jednotlivých provedených změn.	prom.
OLE, Nospec	OLE	Nedefinovaný typ proměnné velikosti. Nejčastější použití je pro data vytvořená technologií OLE.	prom.
Podpis	Podpis	speciální sloupec pro ukládání stavu digitálních podpisů.	prom.

Posledních sedm typů nemá ekvivalent v jazyce SQL.

Řetězce a binární řetězec mají pevně zadanou délku, která nelze překročit.

Sloupce typu Text, Raster, OLE, Podpis a Historie jsou proměnné délky. To znamená, že množství místa, které v databázi zabírají, se bude dynamicky měnit v závislosti na jejich hodnotě.

Viz také:	Databázové tabulky
	Návrhování a změna tabulek ve vývojovém prostředí
	Datové typy SQL


Sledovací atributy

Kromě normálních sloupců, jejichž hodnoty mění uživatel databáze, mohou být součástí databázové tabulky také tzv. sledovací atributy. Hodnoty sledovacích atributů mění pouze WinBase602, uživatel do nich nemůže zasáhnout. Účelem sledovacích atributů je sledovat změny hodnot určitého sledovaného sloupce.

Každý sledovací atribut sleduje ten sloupec, za nimž je uveden v definici tabulky. Pokaždé, když uživatel (nebo jeho program) změní hodnotu sledovaného sloupce, WinBase602 automaticky změní hodnotu sledovacího atributu.

Sledovací atribut Autorizace obsahuje 12 bajtové binární ID uživatele, který provedl poslední změnu; ve formulářích a při čtení hodnoty ve vnitřním jazyce dostanete vždy již přeložené logovací jméno uživatele.

Sledovací atribut Datumovka obsahuje datum a čas poslední změny hodnoty sledovaného sloupce.

Sledovací atribut Historie obsahuje minulé hodnoty sledovaného sloupce. Se změnami sledovaného sloupce se historie neustále zvětšuje. Správce databáze může historii občas zmenšit - nechat zapomenout její určenou část.

Pokud je v definici tabulky mezi sledovaným sloupcem a sledovacím atributem typu Historie atribut typu Autorizace nebo Datumovka, pak se do historie zahrnou i autoři a časy změn.

Sledovat nelze sloupce proměnné velikosti, sloupce typu ukazatel a multiatributy.

Pokud definice tabulky začíná sledovacími atributy Autorizace nebo Datumovka, pak se do nich budou zaznamenávat změny hodnot všech sloupců. Sledovací atribut typu Historie nesmí být uveden před všemi normálními sloupci.

Viz také:	Databázové tabulky
	Návrhování a změna tabulek ve vývojovém prostředí
	Typy sloupců (atributů)


Multiatributy

Sloupec databázové tabulky může být definován jako multiatribut. Multiatribut může mít v jednom okamžiku více než jednu hodnotu, čímž se liší od normálního sloupce, který má v každém okamžiku právě jednu hodnotu.

Při definování multiatributu musíte označit čtverec Multiatribut. Poté se zpřístupní dvě pole:

•	Do pole Počet hodnot zadáte, pro kolik hodnot multiatributu se má v každém záznamu v tabulce rezervovat místo.

•	Čtvercem Překročení vyznačíte, zda zadaný počet hodnot bude smět být překročen. Pokud ano, pak počet hodnot není v praxi omezen (je omezen počtem 65535).

Pokud povolíte překročení pevně rezervovaného počtu hodnot, pak ve sloupci počet hodnot smí být i 0.

Multiatributy se nedají použít v indexech. Sledovací atributy nemohou být multiatributy.

Hodnoty multiatributu mohou být v pohledech obsaženy v samostatných složkách nebo mohou být zpřístupněny všechny společně v jednom okně sloužícím tomuto účelu.

Upozornění:

Nepoužívejte multiatributy, pokud s tabulkou budete pracovat pomocí jazyka SQL - v tomto jazyku není pro multiatribut odpovídající reprezentace.

Viz také:	Databázové tabulky
	Návrhování a změna tabulek ve vývojovém prostředí
	Typy sloupců


Import dat do WinBase602

Importem dat se rozumí přenos dat obsažených v souboru do tabulky WinBase602. WinBase602 je schopna číst soubory v těchto formátech:

•	interní formát WinBase602 (používá se hlavně pro archivační účely a pro přenos dat mezi instalacemi WinBase602); jako jediný formát přenáší vše, tj. i hodnoty multiatributů, sledovacích atributů a ukazatelů;

•	textové formáty;

•	formát DBF ;

•	formát libovolného ODBC zdroje dat;

Textové formáty obsahující data mohou mít dvě podoby:

- buď jsou hodnoty jednotlivých sloupců ve sloupcích pod sebou, záznamy jsou na řádkách. Na první řádce jsou uvedena jména sloupců, do nichž se obsah sloupce bude zapisovat.

- nebo je to zobecněný formát CSV (Comma Separated Values) - hodnoty oddělené určitým oddělovačem.

Import ve formátu DBF lze použít, pokud se nepřenášejí memo pole. Načtení memo pole do sloupce typu Text je možné pouze pro formáty FoxPro 2 nebo dBase IV.

Pro import z ODBC tabulky musíte mít předem vytvořeno ODBC spojení (jako objekt aplikace). Návrhář přenosu pak dovolí vybrat tabulku a přenést její obsah do WinBase602.

Import dat se provádí v prostředí návrháře přenosů dat. Pokud se importuje do existující tabulky, označte tuto tabulku na řídicím panelu a proveďte akci Import dat. Otevře se návrhář přenosů s přednastavenými hodnotami cílového zdroje - tabulkou WinBase602. Doplňte zdrojový soubor (typ a jméno) a případně upravte popis přenosu, který se automaticky vygeneruje. Zde můžete některé hodnoty vynechat, některé změnit apod. Navržený import si můžete uložit pro další použití.

Rychlejší než import dat do každé tabulky je import aplikace jeden celku.

Viz také:	Databázové tabulky
	Návrhování a změna tabulek ve vývojovém prostředí
	Import aplikace
	Návrhář přenosu dat


Export dat z WinBase602

Export dat se provádí v prostředí návrháře přenosů dat. Označte tabulku na řídicím panelu a proveďte akci Export dat. Otevře se návrhář přenosů s přednastavenými hodnotami zdrojové tabulky WinBase602. Doplňte cílový soubor (typ a jméno) a případně upravte popis přenosu, který se automaticky vygeneruje. Zde můžete některé sloupce vynechat, některé změnit apod. Navržený import si můžete uložit pro další použití.

Ve formátu dBase IV nebo FoxPro 2 se neexportují sloupce typu ukazatel (Pointer a Biptr), Time a OLE, ani multiatributy a sledovací atributy. Při exportu tabulky obsahující sloupce typu Text nebo Raster  vznikne navíc také MEMO-soubor se stejným jménem.

V textových formátech se neexportují sloupce typu ukazatel (Pointer a Biptr), sloupce typů proměnné velikosti, ani multiatributy a sledovací atributy.

Aplikaci lze exportovat jako jeden celek. Data se exportují ve vnitřním formátu.

Viz také:	Databázové tabulky
	Návrhování a změna tabulek ve vývojovém prostředí
	Export aplikace
	Návrhář přenosu dat


Vlastnosti a příznaky tabulky

Ke každé tabulce lze přidat podle potřeby další příznaky a vlastnosti, které významně ovlivní chování tabulky.

Nezaznamenávat změny do journalu - změny provedené v tabulce s tímto příznakem se nebudou zapisovat do journalu aktualizací (o journalu více v kapitole o správě systému v manuálu k SQL serveru).

Přidělovat práva k jednotlivým záznamům - příznak se použije, je-li potřebné, aby jednotlivé záznamy byly chráněny systémem práv. V takovéto tabulce bude smět záznam přepsat pouze jeho autor, správce a ti, jimž byla přidělena práva.

Umožnit koloběh dokumentů - je-li v aplikaci počítáno s koloběhem dokumentů (záznamů této tabulky), zatrhněte tento příznak.

Umožnit replikaci změn - příznak povolující, aby se obsah tabulky replikoval mezi databázovými servery. Zatržením čtverce se zpřístupní mnoho dalších dílčích nastavení:

Vytvořit universální klíč pro replikaci - nutná podmínka pro zahájení replikace - vytvoření unikátního klíče pro replikované záznamy.

Bránit vzniku ozvěn - je možné bránit tomu, aby změna přenesená při replikaci na server nezpůsobila zpětný přenos téhož obsahu na původní server.

Předávat editačního peška - pro každý záznam se zavede tzv. pešek, který umožní editaci tohoto záznamu. Bez peška nebude editace povolena. Peška si je možno vyžádat od serveru označeného jako správce pešků. Koncepce pešků zabrání vzniku situace, že na dvou serverech se edituje tentýž záznam.

Detekovat replikační konflikty - při replikaci se rozpozná situace, kdy přichází změna do záznamu, který byl mezitím změněn.

Viz také:	Databázové tabulky
	Návrhování a změna tabulek ve vývojovém prostředí


Změny provedené v tabulce s tímto příznakem se nebudou zapisovat do journalu aktualizací.


Příznak se použije, je-li potřebné, aby jednotlivé záznamy byly chráněny systémem práv. V takovéto tabulce bude smět záznam přepsat pouze jeho autor, správce a ti, jimž byla přidělena práva.


Je-li v aplikaci počítáno s koloběhem dokumentů (tj. záznamů této tabulky), zatrhněte tento příznak.


Příznak povolující, aby se obsah tabulky replikoval mezi databázovými servery. Není-li zapnut, obsah tabulky se nepřenáší. Zatržením čtverce se zpřístupní mnoho dalších dílčích nastavení:


Příznak přidá do tabulky skrytý sloupec sloužící jako unikátní klíč. Jeho hodnoty se automaticky přidělují při vkládání záznamů a jsou unikátní i mezi servery. Není-li příznak zapnut, používá se pro identifikaci záznamů během replikování primární klíč (ten musí existovat). Pokud by se do takové tabulky vkládaly záznamy na různých serverech, musí aplikace sama zajistit, že nenastane duplicita hodnot v primárním klíči.


Příznak přidá do tabulky dodatečnou informaci, která zamezí posílání téže změny mezi servery tam a zpět. Není důvod příznak zapínat, pokud se budou data replikovat pouze jedním směrem. Není-li příznak zapnut při obousměrném replikování, vzroste objem komunikace mezi servery na dvojnásobek, ale nedojde z tohoto titulu k žádným chybám.


Příznak zajistí, že jeden záznam bude možno editovat v jednom okamžiku na nejvýše jednom serveru. Tím je zamezeno vzniku více verzí tohoto záznamu.


Příznak zajistí, že se při replikaci rozpozná situace, kdy přichází změna do záznamu, který byl mezitím změněn. Detekování replikačních konfliktů funguje pouze tehdy, pokud v grafu replikací mezi servery neexistují cykly.


Pohledy ve WinBase602 (formuláře, sestavy, štítky, grafy)

Pohled je jedním ze základních pojmů WinBase602. Je to nástroj, který dovoluje specifikovat, jak má vypadat okno na obrazovce, jehož prostřednictvím budete vkládat, upravovat a vyhledávat údaje, nebo jak má vypadat sestava, kterou vytvoříte na tiskárně.

Podle významu a určení lze pohledy ve WinBase602 rozdělit do čtyř základních typů:

•	formuláře - [image], [image] nejčastější typ pohledu, slouží k zobrazení obsahu tabulky nebo dotazu, k jeho editaci, vkládání apod. Lze i vytisknou, výsledek ale obvykle nebývá dobrý, protože formulář není pro tisk navrhován. Okno formuláře obsahuje pouze tři oblasti - hlavičku v horní části okna, patičku v dolní a mezi nimi datovou oblast, kde se zobrazují data. Formuláře lze navrhovat obecné i standardní (tabulkový vzhled).

•	sestavy - [image] speciálně navržený pohled, který se používá pro tisk; sestava ve své definici obsahuje členění do skupin, agregační funkce a další rysy, které se uplatňují pouze při tisku. Sestavu nelze otevřít na obrazovce a pracovat jako s formulářem (editace dat).

•	štítky - [image] speciální druh sestavy navržené pro tisk štítků nebo jmenovek - odlišuje se mj. možností tisknout více záznamů (štítků) vedle sebe. WinBase602 umožňuje vytvářet štítky libovolných rozměrů a parametrů, nejběžněji používané typy má však již předdefinovány.

•	grafy - [image] speciální pohled, obsahující pouze graf vložený z programu MagicGraf pomocí OLE.

Data, která se v pohledu objeví, pocházejí

•	z určené tabulky,

•	z dotazu, který z jedné nebo více tabulek vybere vhodné záznamy resp. kombinace záznamů,

Kromě nich lze v pohledu manipulovat s obsahem proměnných definovaných v programu, který pohled využívá - jde o tzv. proměnné projektu. Pohled může také pracovat pouze s proměnnými projektu - pak nevyužívá žádnou tabulku ani dotaz a má jediný záznam.

Viz také:	Řídicí panel
	Řídicí panel - pohledy
	Práce s formulářem na obrazovce
	Tisk sestav
	Více o grafech
	Návrh a vytváření pohledů - úvod
	Složky (elementy) pohledů


Řídicí panel - POHLEDY

Pohled je nástroj, který nám umožňuje vidět, zpracovávat resp. tisknout určená data v určené formě: pohled si vytvoříte pokaždé, když chcete naplnit svoji představu o tom, jak mají data na obrazovce nebo na papíře vypadat. Pohledy se dělí na formuláře (pro vstup, editaci a prohlížení dat), sestavy a štítky (pro tisk přehledů) a grafy. Základní akce, které je možno s pohledy provádět, lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se otevře po stisku pravého tlačítka myši na objektu typu pohled.

Otevřít	otevře na obrazovce navržený formulář (nebo graf) vybraný ze středního seznamu. Lze vkládat nová data, přepisovat je, listovat a vyhledávat data. Je to základní způsob práce s daty ve WinBase602. Sestavy nelze otevřít.
Vytvořit	založení nového pohledu – spustí se průvodce návrhem pohledu
Modifikovat	zavolá prostředí pro návrh pohledů (rozlišené podle typu pohledu) a umožní změnit definici existujícího pohledu
Vytisknout	tisk označeného pohledu (většinou sestavy)
Zrušit	zrušení označeného objektu. Zrušením pohledu nejsou nijak dotčena data v tabulkách, do nichž pohled směřoval.
Duplikovat	vytvoření přesné kopie označeného objektu.
Připojit	možnost připojení pohledu z jiné aplikace; viz Připojení objektu.
Exportovat objekt	export textové definice objektu do souboru
Importovat objekt	import definice objektu ze souboru
Editovat text	prohlížení či úpravy pohledu v jeho textové podobě
Práva k objektu	nastavení objektových práv
Náhled tisku	tisk preview na obrazovce
Redir pohled	přesměrování formuláře na některý dotaz (změna zdroje dat) a jeho otevření
Redir sestava	přesměrování sestavy na některý dotaz a její vytištění


Práce s formulářem na obrazovce

Okno formuláře má tyto hlavní částí:

Rám okna, který dovoluje měnit rozměry a polohu okna způsobem běžným v Windows. Na rámu jsou v pravém horním rohu tlačítka pro roztažení a zmenšení okna, v levém horním rohu tlačítko systémového menu. Systémové menu můžete otevřít stiskem tohoto tlačítka myší nebo kombinací kláves Alt mezera a pak šipka doprava.

Táhlo u pravého rámu okna, které dovoluje se pohybovat mezi záznamy ve formuláři nahoru a dolů. Pokud stisknete tlačítko myši pod nebo nad táhlem, posunete se o jednu stránku dopředu nebo dozadu. Pokud stisknete tlačítko myši na šipce pod nebo nad táhlem, posunete se o jeden záznam dopředu nebo dozadu. Táhlo není v těch formulářích, které vedou do proměnných projektu. POZOR: v některých formulářích poloha táhla nevyjadřuje poměr počtu záznamů před a za běžnou pozicí, protože WinBase602 dosud neví, kolik záznamů bude formulář obsahovat. Správnou polohu táhla je možno zajistit při návrhu.

Řada ovládacích tlačítek, z nichž některá mohou být neviditelná. Tato tlačítka se objevují pouze tehdy, pokud to požaduje návrh formuláře, proto v některých formulářích nebudou.

Záhlaví a pata okna, specifikovanou v návrhu formuláře.

Jeden nebo více záznamů, podle návrhu formuláře. V záznamech vidíte složky formuláře. Stiskem myši na tlačítkách, označovacích čtvercích a na některých hodnotových složkách vyvoláte akci zadanou návrhem formuláře.

Pro práci s formulářem na obrazovce jsou podstatné tyto informace:

 Složky formuláře;

 Ovládací tlačítka;

 Systémové menu okna;

 Význam a funkce kláves;

 Vkládání záznamů;


Tlačítka na ovládací liště formuláře

Pracovní lišta při otevřeném formuláři má tyto podoby:

Základní sestava tlačítek je následující:

V režimu kladení dotazu se tlačítka změní na

Zobrazení výsledku dotazu

Je-li otevřen vázací formulář, na liště přibude ještě jedno tlačítko:

 Význam tlačítek zleva doprava je:

- vystřihnout text do schránky;

- zkopírovat text do schránky;

- vlepit text ze schránky;

- skok na první záznam;

- skok o stránku dozadu;

- skok o jeden záznam dozadu;

- skok o jeden záznam dopředu;

- skok o stránku dopředu;

- skok na poslední záznam;

- položení dotazu v jazyce QBE;

- zadání uspořádání záznamů;

- konec zadávání dotazu nebo uspořádání nebo zrušení dotazu a uspořádání;

- zrušení běžného záznamu;

- zrušení všech záznamů;

- tisk formuláře;

- otevření okna se složkami multiatributu;

- otevření okna pro zamykání a aktualizaci formuláře;

- otevření okna pro export záznamů z formuláře;

- otevření okna pro nastavení práv k datům

- otevření okna pro manipulaci s peškem (je vidět pouze, je-li nastaven v příznacích tabulky)

Při otevřeném vázacím formuláři přibude

- odvázání zrušených záznamů ve vázacím formuláři.

Existují však klávesy a položky systémového menu, které mají stejný význam jako tato tlačítka.


Význam a funkce kláves ve formuláři

Během práce s formulářem můžete použít těchto kláves:

šipky nahoru a dolů- přechody mezi složkami záznamu nebo mezi záznamy, listování ve složce typu seznam nebo combo;

Home - skok na první složku v záznamu;

End - skok na poslední složku záznamu;

Ctrl+Home - skok na první záznam ve formuláři;

Ctrl+End - skok na poslední záznam ve formuláři (může to být prázdný tzv. fiktivní záznam);

Page Up - skok o stránku zpět;

Page Down - skok o stránku dopředu;

Ctrl+Page Up - skok o jeden záznam zpět;

Ctrl+Page Down - skok o jeden záznam dopředu;

Ins - vložení nového záznamu do tabulky;

Tab - přechod na následující složku záznamu;

Shift+Tab - přechod na předcházející složku záznamu;

F2 - ve standardním formuláři přepnutí do editačního režimu;

mezera - stisk vybraného tlačítka ve formuláři nebo označení čtverce či přepínače;

Alt+šipka dolů - rozevření combo pole

Del - vymazání hodnoty multiatributu ze složky typu seznam

Ctrl+F4 - uzavření okna s formulářem;

Ctrl+F3 - zadání uspořádání záznamů;

Ctrl+F2 - zadání dotazu v jazyce QBE;

Shift+F2 - zrušení zadaného dotazu nebo uspořádání;

F3 - konec zadávání dotazu nebo uspořádání;

F5 - otevření okna pro zamykání a aktualizaci záznamů

F6 - přechod mezi super- a subformulářem

F7 - otevření okna se složkami multiatributu;

Shift+F7 - zrušení všech záznamů ve formuláři;

F8 - přivázání nebo odvázání záznamu.

Shift+F8 - zrušení vybraného záznamu ve formuláři;

F11 - otevření dialogu pro nastavování práv tabulky

Shift+F11 - otevření dialogu pro manipulaci s peškem (je-li nastaveno v parametrech tabulky)


Systémové menu formuláře

Během práce s formulářem vyvoláte jeho systémové menu pomocí tlačítka v levém horním rohu rámu nebo stiskem kláves Alt mezera a šipka doprava. Systémové menu nabízí tyto akce:

Normální, poloha, velikost, minimální, maximální - standardní složky systémového menu se stejným významem, jako v každém jiném okně pod Windows;

Zavřít - zavření okna;

QBE dotaz - zadání dotazu v jazyce QBE;

Uspořádání - zadání uspořádání záznamů;

Zrušit dotaz - zrušení zadaného dotazu a uspořádání;

Dotaz / pořadí zadáno - konec zadávání dotazu nebo uspořádání;

Tisk - tisk formuláře;

Multiatribut - otevření okna se složkami multiatributu;

Zamykání - otevření okna pro zamykání a aktualizaci záznamů

V návrhu formuláře lze stanovit, aby systémové menu obsahovalo pouze standardní položky systémového menu okna Windows.


Formulář s hodnotami multiatributu

V okně vidíte jednotlivé hodnoty multiatributu. Hodnoty jsou v levém sloupci očíslovány svými indexy.

Pokud jste toto okno otevřeli nad editační složkou formuláře, pak tyto hodnoty můžete editovat.

Maximální přípustný počet hodnot multiatributu je dán definicí tabulky. Je-li v definici tohoto sloupce označen čtverec Lze překročit?, pak počet hodnot může být až 65534.


Historie hodnoty atributu - Autor
Historie hodnoty sloupce - Autor

Okno obsahuje historii hodnot sledovaného sloupce. Starší hodnoty jsou výše, novější níže. Vždy první hodnota je prázdná - na počátku byla hodnota NONE.

Vybraná složka obsahuje uživatelské jméno toho, kdo hodnotu uvedenou na této řádce zapsal do databáze.


Historie hodnoty atributu - Datum a čas zápisu
Historie hodnoty sloupce - Datum a čas zápisu

Okno obsahuje historii hodnot sledovaného atributu. Starší hodnoty jsou výše, novější níže.

Vybraná složka obsahuje datum a čas, kdy byla do databáze zapsána hodnota uvedená na této řádce.


Historie hodnoty atributu
Historie hodnoty sloupce

Okno obsahuje historii hodnot sledovaného sloupce. Starší hodnoty jsou výše, novější níže.

Správce databáze má možnost historické hodnoty omezit na určitý počet nebo k určitému datu - viz Omezení historie.


Vázání záznamů
Přivazování záznamů

Mezi záznamy v databázových tabulkách mohou existovat vazby vytvořené pomocí ukazatelů. Sloupec typu ukazatel v jednom záznamu může ukazovat na jiný záznam ve stejné nebo v jiné tabulce. Multiatribut typu ukazatel může ukazovat na množinu záznamů.

Vytváření těchto vazeb nazýváme přivazováním záznamů , jejich rušení odvazováním záznamů. Přivazování a odvazování není ničím jiným než zapisováním vhodných hodnot do sloupců typu ukazatel.

Vytváření ukazatelových vazeb neboli editace hodnot ukazatelů se děje ve formulářích  prostřednictvím tzv. vázacích formulářů.


Vázací formulář

Vázací formulář je uživatelem navržený formulář do tabulky nebo dotazu, který obsahuje sloupec typu ukazatel. Od normálního formuláře se liší pouze tlačítkem v levé části návrhu. Tlačítko má tři podoby:

 - přivázaný záznam;

 - odvázaný (nepřivázaný záznam);

 - tlačítko ve fiktivním záznamu nebo při kladení dotazu.

Vázací formulář se otevírá většinou tlačítkem, které dá pokyn k provedení akce Otevření vázacího formuláře.

Při automatickém návrhu formuláře se pro sloupec typu ukazatel vygeneruje složka tlačítko s akcí Otevření vázacího formuláře. Do parametrů stačí doplnit jméno vázacího formuláře nebo ponechat nastavený standardní formulář.

Jsou-li ukazatele nebo obousměrné ukazatele multiatributy, pak ve vázacím formuláři lze současně vybrat víc záznamů (zapnout více než jeden přepínač). Na informační lince je v tomto případě) znázorněn údaj o počtu přivázaných záznamů. Chcete-li později zobrazit pouze přivázané záznamy, máte možnost položit speciální dotaz.

Vázací formulář uzavřete stejně jako každý jiný formulář. Dokud je vázací formulář otevřen, nelze pracovat s obsahem formuláře, z něhož byl vázací formulář otevřen.


Okno pro zadání dotazu QBE
Zadání QBE dotazu

Po stisku ovládacího tlačítka [image] nebo kláves Ctrl+F2 nebo po vybrání položky QBE dotaz ze systémového menu se otevře okno pro zadání dotazu QBE (Query By Example). V něm můžete zadat podmínky na hodnoty složek záznamů, které určí, zda se záznam má ve formuláři objevit.

Podmínky vyplníte do těch složek, kterých se týkají. V dotazu je nyní 10 záznamů, v každém z nich může být skupina podmínek. K tomu, aby záznam byl vybrán, musí splnit všechny podmínky v alespoň jedné ze skupin, tzn. podmínky v jednom záznamu jsou spojeny logickou spojkou AND a skupiny podmínek v různých záznamech jsou spojeny spojkou OR.

Podmínkou je buď hodnota (a pak se obsah složky musí této hodnotě rovnat) nebo relační znaménko a hodnota (pak obsah složky musí být v příslušné relaci s uvedenou hodnotou). Lze použít tato relační znaménka:

=	rovno

<	menší než

<=	menší nebo rovno

>	větší než

>=	větší nebo rovno

<>	nerovno

.=	má prefix (pouze pro řetězce znaků)

.=.	obsahuje řetězec (pouze pro řetězce znaků)

 ~	podobá se řetězci (pouze pro řetězce znaků)

Chcete-li položit více podmínek jedné složce platících současně (např. PLAT > 5000 a PLAT < 7000), oddělíte podmínky čárkou.

Po zadání dotazu stiskněte ovládací tlačítko [image] nebo klávesu F3, anebo ze systémového menu formuláře vyberte položku Dotaz / pořadí zadáno.

Pokud chcete dotaz zrušit, pak stiskněte ovládací tlačítko [image] nebo klávesu Shift+F2, anebo ze systémového menu formuláře vyberte položku Zrušit dotaz.

Pokud do složky typu Text zapíšete jakýkoli řetězec, budou se hledat texty, které tento řetězec obsahují. Znaménko .=. v takovém případě nepoužívejte.

Při zadávání podmínek je možno také zatrhávat označovací čtverce, přepínače nebo si vybírat z combo-polí.

Pomocí složky seznam ve formuláři a dotazovacího jazyka QBE lze položit dotaz na to, zda multiatribut obsahuje určitou hodnotu. Při pokládání dotazu lze totiž do složky seznam přímo psát. Napíšete-li do ní nějakou hodnotu, pak se vyberou ty záznamy, které zadanou hodnotu v multiatributu obsahují. Hodnotu zapište do složky bez jakéhokoli relačního znaménka. Tento zápis odpovídá použití operátoru .. (např. v dotazu).

Ve vázacím formuláři je možno také vybrat pouze přivázané záznamy k multiukazateli - viz formulář s přivázanými záznamy.

Téma vybírání záznamů obsahují též stránka Dotazová pole .


Formulář s přivázanými záznamy

V otevřeném vázacím formuláři, máte možnost zobrazit pouze ty záznamy, které jsou přivázané.

Chcete-li toho dosáhnout, pak při otevřeném vázacím formuláři postupujte takto:

1) přejděte do zadávání dotazu QBE (stiskněte ovládací tlačítko [image] nebo klávesu Ctrl+F2, anebo ze systémového menu formuláře vyberte položku QBE Dotaz).

2) stiskněte myší v kterémkoli záznamu přivazovací tlačítko [image].

Vyplníte-li do dotazového okna nějaké další omezující podmínky, budou se ignorovat.


Okno pro zadání pořadí záznamů ve formuláři
Zadání uspořádání záznamů ve formuláři

Po stisku ovládacího tlačítka [image] nebo klávesy Ctrl+F3 nebo po vybrání položky Uspořádání ze systémového menu se otevře okno pro zadání uspořádání záznamů.V něm můžete zadat, jak mají být uspořádány záznamy ve formuláři. Do té složky formuláře, podle níž se mají záznamy uspořádat, zapište 1 resp. 1 DESC podle toho, zda požadujete vzestupné nebo sestupné uspořádání.

Pokud se záznamy, které v takto vyznačené složce mají stejnou hodnotu, mají uspořádat podle hodnoty jiné složky, pak do ní zapište 2 nebo 2 DESC. Podobně můžete postupovat dále až po 8.

Po vyznačení uspořádání stiskněte ovládací tlačítko [image] nebo klávesu F3, anebo ze systémového menu formuláře vyberte položku Dotaz / pořadí zadáno.

Pokud chcete uspořádání zrušit, pak stiskněte ovládací tlačítko [image] nebo klávesu Shift+F2, anebo ze systémového menu formuláře vyberte položku Zrušit dotaz.

Pro setřídění standardního formuláře podle jednoho atributu stačí dvojitě kliknout na záhlaví tohoto sloupce. Zrušit uspořádání provedete opět tlačítkem [image] jako v předchozím případě.


Vkládání záznamů

Vložit nový záznam do formuláře lze dvěma způsoby:

 pomocí klávesy Insert;

 prostřednictvím tzv. fiktivního záznamu.

Obě tyto možnosti lze ve vlastním formuláři blokovat nezávisle na sobě pomocí vlastností formuláře.

Přidání záznamu do formuláře vždy odpovídá přidání záznamu do jedné tabulky. Nové záznamy nelze proto přidávat do formulářů, které vznikly relačním spojením z více tabulek. Nevadí ovšem, pokud ve formuláři jsou složky získané pomocí ukazatelů z jiných tabulek.


Složková a záznamová synchronizace

Pokud při práci s formulářem přepisujete data, která jsou v něm obsažena, pak se tyto změny promítají do obsahu databáze. Existují dvě možnosti, kdy k tomuto promítnutí může dojít:

a) tehdy, když ukončíte editaci složky formuláře, např. stiskem klávesy Enter nebo přechodem na jinou složku (tzv. složková synchronizace);

b) tehdy, když opustíte záznam, v němž jste provedli změny (tzv. záznamová synchronizace).

Starší verze WinBase602 umožňovaly pouze složkovou synchronizaci. Výhodou záznamové synchronizace je, že změny prováděné v záznamu se chápou jako jeden celek, a lze je buď všechny odvolat anebo na nich provést integritní testy, a pak je potvrdit. Pokud změněný záznam nelze zaznamenat do databáze (například kvůli zámku jiného klienta), lze všechny změny provedené ve složkách záznamu hromadně odvolat stiskem kombinace kláves Shift+Esc. Jinak nelze záznam opustit.

Práva pro přepis záznamu se za jistých okolností mohou kontrolovat při záznamové synchronizaci již při zápisu do složky formuláře.

Způsob synchronizace se nastavuje v návrháři formuláře v okně Seznamu vlastností.


Vložení záznamu pomocí klávesu Insert
Vkládání záznamů pomocí klávesy Insert

Chování formuláře při vložení záznamu stiskem klávesy Insert se řídí následujícími zásadami.

A) klávesu Insert je stisknuta v době, kdy je uživatel na normálním záznamu:

1) pokud jsou ve vybraném záznamu přepsány některé hodnoty, změny jsou zapsány do databáze;

2) pokud ve formuláři není fiktivní záznam, vytvoří se dočasný fiktivní záznam;

3) do fiktivního záznamu se zapíší implicitní hodnoty definované v návrhu formuláře;

4) pokud jde o subformulář relačně propojený rovností hodnot dvou atributů, pak se do spojovacího atributu ve fiktivním záznamu zapíše hodnota ze spojovacího atributu v nadřazeném formuláři;

5) fiktivní záznam se stane vybraným záznamem a je možno pokračovat v zapisování hodnot do něj.

Při záznamové synchronizaci se nový záznam se vloží do databáze až tehdy, když se fiktivní záznam pokusíte opustit nebo zavřete formulář. To má několik důsledku:

a) je-li ve formuláři nastaven příznak Potvrzovat změny v záznamu, pak lze vložení záznamu odvolat a do databáze se nezapíše nic;

b) integritní omezení definovaná ve formuláři se po stisku klávesy Insert prověří pouze pro ty složky formuláře, do nichž se zapisuje implicitní hodnota, ostatní integritní omezení se prověří až při opouštění záznamu;

c) integritní omezení definovaná v tabulce se prověří až při opouštění záznamu;

d) vložení záznamu do relačně propojeného subformuláře způsobí jeho automatické provázání s nadřazeným záznamem.

Pokud formulář nemá mít fiktivní záznam, pak po vložení záznamu do databáze se nový fiktivní záznam neobjeví.

B) klávesa Insert je stisknuta na fiktivním záznamu:

1) pokud do fiktivního záznamu dosud nebylo nic zapsáno, pak se naplní implicitními hodnotami, ale do databáze se zatím nezapisuje (reakce je stejná, jako na normálních záznamech);

2) pokud do fiktivního záznamu již bylo cokoli zapsáno, pak se celý jeho obsah zapíše do databáze a fiktivní záznam se tím stane normálním záznamem.

C) klávesu Insert je stisknuta ve formuláři určeném pouze pro vstup dat:

1) jeho obsah vloží do databáze a formulář se naplní implicitními hodnotami sloužícími pro zadání dalšího záznamu.

Stisk klávesy Insert vyvolá chybové hlášení na obrazovce v těch formulářích, které vedou do dotazu vzniklého relačním spojením dvou nebo více tabulek. Do takových formulářů se záznamy vkládat nedají. Vkládání pomocí klávesy Insert lze zakázat v parametrech formuláře.


Fiktivní záznam

Formulář, který otevřete na obrazovce, obsahuje za všemi svými záznamy jeden fiktivní prázdný záznam. Výjimkou jsou ty formuláře, které mají v parametrech definováno, aby fiktivní záznam nezobrazovaly. Ve standardním formuláři je fiktivní záznam označen přeškrtnutým záhlavím řádku.

Zapisujete-li hodnoty do fiktivního záznamu, pak se tento záznam vloží do databáze:

a) při složkové synchronizaci po zapsání první složky;

b) při záznamové synchronizaci až po opuštění fiktivního záznamu.

K fiktivnímu záznamu nelze přivazovat žádné záznamy. Proto pokud všechny složky záznamu ve formuláři jsou typu ukazatel, nový záznam tímto způsobem vložit nelze.

Fiktivní záznam není automaticky v těch formulářích, které vedou do dotazu vzniklého relačním spojením dvou nebo více tabulek. Do takových formulářů se záznamy vkládat nedají.


Volba tiskárny

Ve WinBase602 je možné zvolit jednu instalovanou tiskárnu jako implicitní. Tato tiskárna se bude nabízet jako výchozí v dialozích pro tisk. Tiskárnu lze vybrat pomocí hlavního menu WinBase602, submenu  Nástroje / Parametry , položka Tiskárna : Volba.

Pro volbu tiskárny se otevře standardní dialogové okno Windows. Volit lze pouze mezi těmi tiskárnami, které byly instalovány ve Windows.Pokud nezvolíte žádnou tiskárnu, použije se ta které je zvolena jako implicitní tiskárna Windows.


Výstup sestavy na obrazovku - Preview

Výstup sestavy na obrazovku (tzv. preview ) - na rozdíl od otevření formuláře na obrazovce - má za úkol poskytnout co nejpřesnější informaci o formátu sestavy na tiskárně. Proto bude jeho obsah rozlámán do řádek i do stránek stejně, jako na tiskárně.

Vzhledem k rozdílům v rozlišovací schopnosti obrazovky a tiskárny musí přitom docházet ke zmenšování nebo zvětšování použitých fontů. Ne všechny fonty se však dají plynule zvětšovat a zmenšovat.

Zkušební tisk na obrazovce se objeví ve speciálním okně s vlastním menu a lištou s tlačítky.

Lišta nabízí nejjednodušší způsob ovládání. Ovládací prvky mají jasný význam:

- zavření okna zkušebního tisku

- skok na začátek sestavy (na stránku č.1)

- přechod na předchozí stránku

- přechod na následující stránku

- skok na konec sestavy (na poslední stránku)

- vytištění aktuální stránky

- vytištění celé sestavy

- combo sloužící ke změně velikosti obrázku stránky

- nápověda

Přechod po stránkách

Příkazy menu Přechod i odpovídající tlačítka na liště slouží k posunu v rámci tiskové sestavy. Odpovídající klávesové povely jsou PgDn a PgUp pro posun po stránkách, resp. Ctrl+Home a Ctrl+End pro skok na začátek či konec.

Velikost stránky sestavy

Stránka sestavy se při otevření preview vždy vykreslí ve zvětšení 100%. Je-li správně nastaven parametr Velikost obrazu v globálních parametrech WinBase602, bude při tisku na stránku formátu A4 na obrazovce rámeček okolo stránky 21 cm široký.

Preview umožňuje velikost stránky měnit. Combo na liště obsahuje některé přednastavené velikosti, pokud nestačí, je možno zapsat velikost zvětšení v procentech (zmenšení) vlastní. Combo obsahuje také dvě speciální položky Šířka stránky a Celá stránka. Zvětšení na šířku stránky je takové, při němž se horizontální rozměr stránky přizpůsobí velikosti okna. Zobrazení celé stránky zmenší rozměr stránky tak, aby se objevila v okně celá.

Pro rychlé zvětšování a zmenšování stránky v preview slouží také klávesy + a - na numerické části klávesnice.


Výstup sestavy do souboru

Výstup sestavy do textového souboru je jedním ze způsobů, jak z WinBase602 exportovat data. Použije se např. v situaci, kdy není nutný grafický tisk nebo kdy výstup vyžaduje dodatečnou editaci. Upozorňujeme, že smysluplný výstup do souboru poskytnou pouze speciálně navržené sestavy, rozhodně nemá smysl se pokoušet posílat do souboru každý formulář.

Při výstupu do souboru je ztracena informace o fontech použitých v sestavě, o barvě písma a pozadí, a částečně se změní prostorové rozvržení údajů. Proto není rozumné posílat sestavu do souboru, později se pokoušet tento soubor tisknout a očekávat podobný výsledek jako od přímého výstupu na tiskárnu.

Již při návrhu sestavy, která bude používána pro výstup do souboru, je vhodné použít pro tuto příležitost předdefinovaný rastr.

Pokud sestavu vytisknete do již existujícího souboru, můžete původní obsah přepsat nebo nový text přidat na konec.


Tisk sestavy

Tisku sestavy předchází vyplnění parametrů ve standardním dialogovém okně.

Tiskárna - z nabídky instalovaných tiskáren vyberte jednu. Pod názvem jsou zobrazeny některé údaje o vybrané tiskárně.

Rozsah stránek - sestava může mít více stránek a není nutno je tisknout všechny najednou. Lze zadat, od které do které stránky se má tisknout. Stránky se číslují od jedné.

Rozsah záznamů - není nutno tisknout vždy všechny záznamy, je možno specifikovat interval pořadových čísel záznamů, které mají být zahrnuty do sestavy. Záznamy se číslují od nuly. Pokud tedy chcete vytisknout pouze prvních sto záznamů, zadejte interval od 0 do 99.

Počet kopií - zadejte číslicí počet kopií sestavy. Při preview se počet kopií neuplatní.

Snášet kopie - je-li čtverec zatržen, budou se kopie tisknout po stránkách, tj. nejprve N kusů první stránky (N je počet kopií), potom N kusů druhé stránky atd. Není-li zatržen, vytiskne se N krát celá sestava najednou. První způsob je značně rychlejší, umožňují ho však pouze některé tiskárny (hlavně laserové). Pokud tiskárna snášení kopií neumožňuje, je označovací čtverec neaktivní. Při tisku štítků s kopií se před kopií neodstránkuje.

Výstup:

 a) na tiskárnu - viz Průběh tisku

 b) na obrazovku - viz Preview

 c) do souboru - viz Výstup do souboru ;


Formát stránky;sestava:formát stránky
Formát stránky - popis dialogu

V dialogovém okně se nastavuje formát stránky, na níž se bude tisknout.

Papír - vyberte z nabídky formát papíru, pro nějž je sestava navržena. Lze použít i Uživatelem definovaný formát papíru.

Orientace - rozhodněte, má-li se tisknout na výšku nebo na šířku papíru.

Okraje - zadejte, jaké okraje má mít sestava navíc k okrajům daným vlastnostmi tiskárny. Okraje jsou vyznačeny na obrázku v horní části.


Průběh tištění sestavy

Tisk pod operačním systémem Windows probíhá ve třech krocích: nejprve WinBase602 generuje popis stránek a předává je Windows. Pak Windows připravují popis tisku pro specifickou tiskárnu. Nakonec se data posílají tiskárně a tisknou se. První z těchto kroků je nejrychlejší, druhý je velmi pomalý, rychlost třetího záleží na použité tiskárně - na síťové tiskárně může trvat i minuty.

Během první a druhé fáze je na obrazovce informační okno, které poskytuje údaje o počtu zpracovaných stránek a dovoluje uživateli zrušit tisk. Vlastní posílání dat tiskárně řídí složka Windows nazvaná Správce tisku. Na něj se obracejte, pokud potřebujete pozastavit tisk, nebo jej obnovit např. po vložení dalšího papíru do tiskárny.


Zamykání záznamů ve formuláři
Zamykání záznamů z formuláře

Stiskem ovládacího tlačítka [image] nebo klávesy F5 ve formuláři vyvoláte dialogové okno, které Vám dovoluje umístit nebo odstranit zámky na záznamy ve formuláři. Zamknutý záznam nemůže jiný uživatel přepsat.

K dispozici jsou tyto možnosti:

Nezamčeno nic - odstraníte zámky, které jste dříve umístili;

Zamčen běžný záznam pro čtení - zámek se umisťuje na aktuální záznam, kde je kurzor; při přechodu na jiný záznam se starý záznam odemkne a nový záznam zamkne;

Zamčeny všechny záznamy pro čtení - zámek je umístěn na tabulku nebo na všechny tabulky, z nichž vzniknul dotaz

Při umísťování zámků mějte na paměti potřeby ostatních uživatelů v síti. Zamčení všech záznamů ve formuláři používejte jen v dobře odůvodněných případech.

Stejné dialogové okno obsahuje také dvě tlačítka, která Vám umožní synchronizovat obsah formuláře se změnami, prováděnými ostatními uživateli v síti. Tlačítkem Aktualizovat obsah načtete do všech záznamů ve formuláři aktuální hodnoty. Tlačítkem Aktualizovat záznamy navíc ověříte, zda některé záznamy nebyly zrušeny nebo zda mezi ně nebyly vloženy záznamy nové - po stisku tohoto tlačítka se na obrazovce mohou objevit i jiné záznamy, nejen nové hodnoty v původních záznamech. Toto tlačítko má význam používat pouze ve formulářích  vedoucích do tabulky, nikoliv do dotazu! Formulář vedoucí do dotazu lze aktualizovat pouze zavřením a novým otevřením dotazu!

Obecně o zámcích - [image] Zámky a zamykání


Zámky a zamykání

Zamykání záznamů nebo objektů slouží k omezení práce jiných uživatelů se stejným záznamem či objektem

Existují dva druhy zámků:

Zámek pro ČTENÍ (angl. read lock) - umístíte-li na záznam tento zámek, pak žádný jiný uživatel nemůže přepsat žádný sloupec v tomto záznamu.

Zámek pro PŘEPIS (angl. write lock) - umístíte-li na záznam tento zámek, pak žádný jiný uživatel nemůže nejen přepisovat hodnoty atributů, ale ani Vám zabránit v přepisu hodnot atributů tohoto záznamu.

Na stejném záznamu smí současně být libovolný počet zámků pro čtení od různých uživatelů, anebo jediný zámek pro přepis a žádný zámek (pro čtení ani pro přepis) žádného jiného uživatele. Pokud se pokusíte umístit zámek, který tomuto pravidlu odporuje, nepodaří se Vám to. Z prostředí formuláře je možno umisťovat pouze zámky pro čtení - viz Zamykání záznamů z formuláře. Zámky pro přepis umisťuje příslušná funkce programovacího jazyka - např. Write_lock_record.

WinBase602 automaticky umístí zámky v těchto případech:

1) pokud spustíte editor na sloupec typu Text, bude záznam zamčen zámkem pro přepis;

2) pokud otevřete vázací formulář, bude výchozí záznam zamčen zámkem pro přepis;

3) pokud kopírujete obrázek nebo OLE objekt, bude záznam po dobu této operace zamčen zámkem pro přepis, pokud se kopíruje do databáze, nebo zámkem pro čtení, pokud se kopíruje z ní.

Nelze-li požadovaný zámek umístit, akce se neprovede. Například se nepodaří spustit textový editor na text, který již edituje někdo jiný. Po dokončení akce je zámek automaticky odstraněn.


OLE

Pod zkratkou OLE (Object Linking and Embedding) se skrývá mechanismus, který dovoluje různým programům pracujícím pod Windows sdílet svá data.

Programu, který pracuje s hodnotou OLE složky, se říká OLE server. Program, který pouze zobrazuje OLE objekt, nazýváme OLE kontejner. WinBase602 může sloužit jako OLE server - do cizího prostředí (např. textového editoru) lze umístit objekt typu Pohled WinBase602 a v něm aktivovat plnohodnotné prostředí formuláře WinBase602, stejně dobře jako OLE kontejner - do atributu typu OLE umisťovat data ze zcela odlišných typů programů (např. formátované texty, videoklipy, vektorové obrázky aj). Takovéto hodnoty se ukládají do atributů typu OLE dvojím způsobem:

1) jako vložené (angl. embedded) objekty, které jsou uložené v databázi (databáze zde slouží jako prostor pro uložení, veškeré operace provádí jiný program);

2) jako připojené (angl. linked) objekty, které jsou uloženy v samostatném souboru a v databázi je jen odkaz na něj.


WinBase602 jako OLE server

Chcete-li umístit do cizího dokumentu Pohled WinBase602, můžete postupovat několika cestami:

1) v cizím OLE kontejneru zvolte položku menu Edit Insert Object (nebo ekvivalent) a z nabídky OLE serverů zvolte Pohled WinBase602. Poté projdete dialogem pro výběr formuláře; pokud budete vytvářet nový formulář, otevře se návrhář pohledů, použijete-li jako vzor formulář již vytvořený, vloží se ihned do kontejneru.

2a) Na řídicím panelu aplikace označte daný formulář (tabulku) a stiskněte Ctrl+C. Tím se objekt umístí do schránky. V cizím OLE kontejneru vyberte položku menu Edit Paste Special (nebo ekvivalent) a z nabídky formátů ve schránce vyberte Pohled WinBase602.

2b) Máte-li velké monitory, můžete využít elegantnější metody Drag & Drop: chytněte myší formulář z řídicího panelu a pusťte ho nad OLE kontejnerem. V obou případech vznikne vložený objekt.

Vložíte-li nebo připojíte-li do cizích dokumentů formuláře z WinBase602, pak tento OLE objekt poskytuje následující specifické akce:

Aktivovat - spustit OLE server WinBase602 v prostředí cizího kontejneru (tzv. in-place aktivace) a otevřít daný formulář. Je povolena veškerá práce s formulářem jako při běžném provozu.

Dvojí kliknutí na objekt provede tuto akci - je to akce primární. Neumí-li OLE kontejner in-place aktivaci, provede se akce Otevřít.

Otevřít - spustit OLE server WinBase602 v samostatném okně a otevřít daný formulář.

Modifikovat - spustit OLE server WinBase602 v samostatném okně a otevřít návrhář daného formuláře. Změny provedené v návrhu se neprojeví v původním formuláři v databázi - objekt je vložený (embedded), nikoliv připojený (linked).

Při in-place aktivaci se nahradí ovládací lišta cizího programu ovládací lištou WinBase602 a do menu programu přibude nápověda WinBase602.

Pokud z formuláře aktivovaného in-place otevřete textový editor, okno s historii nebo s hodnotami multiatributu, otevřou se jako modální okna.

viz také :  OLE


WinBase602 jako OLE kontejner

Při otevření tabulky nebo standardního formuláře se na místě OLE atributu objeví pouze nápis <OLE>. Vlastní obsah OLE objektu uvidíte až v obecném formuláři. V OLE složce bude buď grafické znázornění OLE objektu (například tehdy, jde-li o obrázek nebo graf), nebo pouze ikonu (například při záznamu zvuku). Způsob zobrazení lze volit z různých možností.

S různými OLE objekty lze provádět různé akce. Některé z nich jsou společné pro všechny druhy serverů (např. vložení, smazání apod), jiné jsou pro daný server specifické. Specifických akcí není mnoho, obvykle jedna až dvě. Například u obrázků nebo textů je specifickou akcí spuštění serveru pro jejich editaci. U záznamů zvuku nebo videoclipů jsou specifickými akcemi přehrání záznamu a editace záznamu. U programu je specifickou akcí jeho spuštění. Od verze 3.01 WinBase602 lze spouštět OLE servery, které to dokáží, v tzv. in-place režimu.

Je-li specifických akcí více, pak jedna z nich je označena jako primární. Je-li specifická akce pouze jedna, pak je také označována jako primární akce. Primární akci provedete tak, že na OLE složce dvakrát kliknete.

Všechny akce, které lze s OLE objektem vykonat (jak společné tak i specifické), se dají vyvolat pomocí menu, které otevřete stiskem pravého tlačítka myši na OLE složce obecného formuláře.

viz také :  OLE


Výběr formuláře pro nový OLE objekt

Při vytváření nového OLE objektu typu Pohled WinBase602 máte na výběr dvě možnosti:

1) Použít jako vzor některý formulář již dříve vytvořený ve vývojovém prostředí WinBase602 - v dialogovém okně označte aplikaci a formulář, který má být vzorem a stiskněte tlačítko Použít vybraný;

2) Vytvořit formulář zcela nový - označte pouze aplikaci a stiskněte tlačítko Vytvořit nový.

V obou případech vznikne v kontejneru vložený objekt.

viz také :  OLE


OLE - nový objekt

A) vložený objekt:

Po vybrání položky menu Nový objekt se nabídne seznam všech OLE serverů registrovaných na počítači. Z nich si vyberte ten, který chcete použít. Tlačítkem OK se příslušný OLE server spustí.

Poté v serveru vytvoříte objekt (např. namalujete obrázek, napíšete text, nahrajete zvukový záznam). Když v serveru objekt uložíte, zapíše se do databáze, a po opuštění serveru objekt (nebo jeho symbol) uvidíte ve formuláři.

B) připojený objekt:

Přepněte přepínač do polohy Ze souboru. Zadejte, nebo z nabídky souborů vyberte zdrojový soubor. Zaškrtněte označovací čtverec Propojení.

Pokud chcete, aby prezentační složkou vašeho objektu byla ikona, zaškrtněte čtverec Zobrazit jako ikonu. V pravém dolním rohu dialogu se objeví implicitní ikona. Pokud se vám nelíbí, můžete si z nabídky, která se objeví po stisku tlačítka Změnit ikonu, vybrat jinou.

viz také :  OLE


OLE - propojení

V tomto dialogovém okně naleznete informace o druhu připojeného objektu, o souboru, v němž je objekt uložen a o tom, která část tohoto souboru je připojena.

Přepínačem Aktualizace: Automaticky / Ručně můžete zvolit, zda se při editaci připojeného objektu má provádět automatická průběžná aktualizace jeho obrázku v databázi, nebo zda aktualizace má proběhnout až když v tomto dialogovém okně stisknete tlačítko Aktualizovat. Význam má hlavně pro obrázky (např. z programu Paintbrush).

Tlačítkem Změnit zdroj můžete zadat jiný soubor, který bude připojen místo dosavadního souboru. Stisknutí tohoto tlačítka vyvolá dialogové okno podobné dialogu Otevřít soubor, které umožní standardním postupem vybrat nový zdrojový soubor.

Tlačítkem Otevřít zdroj spustíte OLE server se zdrojovým dokumentem.

Tlačítko OK dialogové okno uzavírá.

viz také :  OLE


OLE - popis menu

Všechny akce (jak společné tak i specifické) se dají vyvolat pomocí menu, které otevřete stiskem pravého tlačítka myši na složce.

Vystřihnout - přenesení objektu z vybrané složky do schránky. Po provedení této akce bude složka prázdná. Původní obsah složky lze pak přenést ze schránky do jiné složky pomocí akce Vlepit nebo Vlepit propojení.

Zkopírovat - vytvoření kopie objektu z vybrané složky ve schránce. Obsah složky se touto akcí nezmění, lze jej však přenést ze schránky do jiné složky pomocí akce Vlepit nebo Vlepit propojení.

Vlepit - zkopírování objektu ze schránky do vybrané složky. Touto operací vznikne objekt vložený do databáze (nikoli připojený). Položka je aktivní, pokud jsou splněny dvě podmínky: ve schránce je vhodný objekt a složka umí přijmout vložený objekt tohoto druhu.

Vlepit jako - zkopírování objektu ze schránky do vybrané složky s možností výběru typu objektu a možností vytvoření propojení; viz OLE - vlepit nový objekt.

Zrušit - smazání objektu nacházejícího se ve vybrané složce. Je-li obsahem složky propojení, pak se smaže pouze toto propojení, nikoli externí soubor, v němž se objekt nachází.

Nový objekt - vytvoření nového vloženého nebo propojeného objektu; viz OLE - nový objekt.

Propojení - otevření dialogového okna, v němž naleznete informace o druhu připojeného objektu, o souboru, v němž je objekt uložen a o tom, která část tohoto souboru je připojena.

Je aktivní pouze pro ty složky, které obsahují vložený objekt. Viz OLE - propojení.

Poslední položka menu má tuto podobu:

Objekt typu <jméno_objektu>

Akce, které server nabízí jsou pak obsaženy v submenu. Za oddělovačem v submenu je navíc položka 	Zkonvertovat - viz OLE - konverze objektu.

viz také :  OLE


OLE - Změna ikony OLE objektu

V dialogu můžete zvolit ikonu a její popis OLE serveru. Ikona se objeví ve složce OLE formuláře místo prezentačních dat serveru.

Rámeček Ikona slouží k výběru vhodné ikony. Pokud program nenabízí žádnou vhodnou, můžete si zvolit ikonu z jiného souboru. V okně vidíte všechny ikony, které vybraný soubor nabízí. Jedna ikona je vždy označena jako ikona implicitní pro daný program.

V poli Nápis můžete změnit popis, který se objeví pod ikonou.

Tohoto způsobu zobrazování OLE objektů se využívá tam, kde nezáleží na vzhledu prezentačních dat OLE objektu nebo když se data natahují příliš dlouho.

viz také :  OLE


OLE - vlepení nového objektu s možností propojení

Jsou-li ve schránce Windows data v OLE formátu, je aktivní položka menu Vlepit jako. Příkaz otevře standardní dialogové okno, v němž si můžete vybrat jeden z nabízených formátů daného objektu, případně, povoluje-li to OLE server, zvolit mezi objektem připojeným a vloženým.

viz také :  OLE


OLE - konverze objektu

Některé OLE servery umožňují změnit typ objektu na typ jiný, neboli provést konverzi objektu. V praxi se tato akce používá převážně při přechodu ze staré verze OLE serveru na verzi jinou.

viz také :  OLE


Export dat z formuláře

V průběhu běžné práce s formulářem je často třeba vyčlenit některé záznamy ať pro účely archivní, pro přenos do jiného formuláře apod.

Uživatel má sice možnost pomocí příkazu Export dat z hlavního menu vyexportovat data z tabulek a dotazů, ale pouze všechny záznamy najednou. Pokud chce přenést pouze některé, musel by si pro tyto záznamy vytvořit speciální dotaz, který by je obsahoval (a neobsahoval žádné jiné), nehledě nato, že je možné chtít vybrat záznamy bez logické souvislosti popsatelné definicí dotazu.

Pro tyto případy WinBase602 disponuje možností, jak exportu vybraných záznamů dosáhnout. Na ovládací liště stiskněte tlačítko [image]. Otevře se dialogové okno umožňující přenosy dat.

Pokračování:  Exportní dialog


Exportní dialog

Máte-li v úmyslu přenášet záznamy z formuláře, musíte nejprve určit, kterých záznamů se má přenos týkat. Dialog nabízí tři možnosti:

a) Běžný záznam - záznam, na němž právě stojíte;

b) Všechny záznamy - použijí se všechny záznamy z tabulky nebo dotazu, do něhož formulář vede;

c) Označené záznamy - přenesou se pouze záznamy explicitně označené uživatelem. Nejsou-li žádné záznamy označené, položka je neaktivní. Záznamy se označují ve speciálním režimu, do něhož se dostanete po stisku tlačítka Zahájit označování.

Označování záznamů

Po stisku tlačítka Zahájit označování se okno přenosu zavře. Formulář, v němž budete vybírat záznamy, se rozšířil o dvoustavová tlačítka ve své levé části. Tlačítka se přepínají kliknutím myši nebo klávesou F8. Máte-li všechny potřebné záznamy označené, stiskněte znovu tlačítko [image]. Objeví se opět okno přenosu, tentokrát s přednastavenou možností Označené záznamy.

Dále dialog nabízí tři možnosti, KAM přenést vybrané záznamy.

a) Export do souboru - export vybraných záznamů do souboru ve formátu nastaveném pomocí comba Formát..

b) Zkopírovat do schránky - vybrané záznamy se zkopírují do schránky. Záznamy ve schránce můžete později vlepit do téhož formuláře nebo do formuláře jiného, který vede do stejných dat.

Jsou-li ve schránce Windows data z WinBase602, je v dialogu aktivní přepínač Vlepit záznamy ze schránky. Použijete-li tuto volbu, do formuláře se vloží nové záznamy a naplní se hodnotami ze schránky. Pro vlepení platí stejná pravidla jako při běžném vložení záznamu (kontroluje se duplicita, integritní omezení apod.)

Viz také:  Export dat z formuláře


Označení záznamů ve standardním formuláři

Ve standardním formuláři je vybraný záznam označen v záhlaví řádku jedním ze tří symbolů informujících o jeho momentálním stavu:

- [image] znamená, že je záznam vybrán, na obrazovce je totéž, co v databázi;

- [image] informuje, je záznam na obrazovce byl přepsán a změny dosud nebyly zapsány do databáze;

- [image] říká, že v některé složce záznamu právě probíhá editace.

Je-li záhlaví záznamu přeškrtnuto, pak jde o fiktivní záznam, tedy záznam, který dosud není zapsán do databáze.


Grafy ve WinBase602

V soustavě objektů WinBase602 tvoří grafy jeden z druhů pohledů. Graf je alternativní způsobem, jak reprezentovat data z tabulky nebo odpovědi na dotaz. Podobně jako ostatní formuláře, se graf dá tisknout, dá se i použít jako relačně propojený subformulář ve formulářích jiných.

Při každém překreslení se v grafu objeví aktuální hodnoty. Pokud byste chtěli získat graf pevný, nepropojený na data, vytvořte ho jako vložený objekt do složky typu OLE obecného formuláře.

Návrh grafu je jednodušší než návrh formulářů. Probíhá současně ve dvou prostředích: ve WinBase602 v grafovém serveru MagicGraf602. Na straně WinBase602 jde zejména o výběr sloupců, jejichž hodnoty budou v grafu znázorněny. V grafovém serveru se zvolí typ grafu, souřadná soustava, nastaví se popisky a případně i mnohé další parametry.

Během návrhu grafu budete volit mezi nabídkou akcí WinBase602 a MagicGraf602 soustředěných v jediném menu návrháře, lišty s tlačítky má každá aplikace vlastní.

Při exportu návrhu grafu vzniknou dva soubory *.VWD s definicí formuláře a *.GRF s definicí grafu. Při importu objektu se zvolí soubor *. VWD, soubor s grafem se nalezne automaticky.


Editor textů

Editor slouží ve WinBase602 více účelům:

•	editace hodnot sloupců typu Text, tedy textů v tabulkách;

•	psaní programů ve vnitřním programovacím jazyce;

•	psaní uložených procedur a triggerů;

•	zasahování do textové podoby návrhu pohledů, dotazů a menu;

•	k prohlížení definic tabulek v jazyce SQL;

•	k psaní událostních procedur pro ActiveX controly vložené do formulářů..

Pokračování:	Vlastnosti editoru
	Ovládání editoru z klávesnice
	Lišta s tlačítky
	Řídící menu editoru


Vlastnosti editoru
Vlastnosti editoru textů

Editor textů ve WinBase602 je implementován o okně s mnoha přepínatelnými záložkami. Na každé záložce může být zobrazena definice jednoho objektu (libovolného typu, který lze zobrazit nebo upravovat editorem).

Každá záložka si pamatuje provedené editační změny, takže je možné se pomocí příkazu Odvolat (Undo) vrátit do stavu před editací. Pomocí příkazu Zopakovat (Redo) je možné odvolat odvolané úpravy.

V text v editoru se barevně odlišují komentáře, příkazy jazyka apod. Toto syntaktické vybarvování respektuje druh textu (např. rozpozná SQL příkazy v textu programu a barevně je odliší).

V editoru lze volit mezi vkládáním textu nebo přepisováním (rozlišeno tvarem kurzoru). Při psaní programů se nové řádky automaticky odsouvají na pozici začátku předchozího řádku. Do textu lze vkládat záložky (bookmarks) a přecházet mezi nimi. V textu lze vyhledávat řetězec nebo nahrazovat řetězec jiným. Klávesové ovládání bylo uzpůsobeno zvyklostem Windows.

Při editaci sloupců typu Text editor může zalamovat řádky a přeformátovávat odstavce.

Některé parametry editoru si můžete přednastavit pomocí příkazu Parametry z menu Nástroje vývojového prostředí. Tyto hodnoty se zapíší do INI souboru a tudíž se zachovají i pro další spuštění.

Viz také:	Ovládání editoru z klávesnice
	Lišta s tlačítky
	Řídící menu editoru


Ovládání editoru z klávesnice
Ovládání textového editoru z klávesnice

Během editace můžete používat tyto klávesy:

 šipky - posun kurzoru všemi směry;

 Ctrl+"šipka vpravo" - skok na začátek dalšího slova;

 Ctrl+"šipka vlevo" - skok na začátek běžného nebo předcházejícího slova;

 Home - skok na začátek řádky;

 End - skok na konec řádky;

 Page Up - posun o stránku nahoru;

 Page Down - posun o stránku dolů;

 Ctrl+Page Up - skok na začátek textu;

 Ctrl+Page Down - skok na konec textu;

 Insert - přechod mezi vkládacím a přepisovacím režimem

 Delete - smazání znaku; na konci řádku způsobí připojení dalšího řádku na konec řádku  aktuálního; smazání označeného bloku;

 Ctrl+Delete - smazání do konce slova;

 Ctrl+Y (Ctrl Shift L) - smazání celé řádky;

 Backspace - zrušení znaku vlevo, pokud neexistuje, spojení řádky s předchozí řádkou; smazání označeného bloku;

 Alt+Backspace (Ctrl+Z) – odvolání poslední změny (Undo);

 Alt+Shift+Backspace (Ctrl+W) – odvolání posledního odvolání změny (Redo);

 Ctrl+A - označení celého textu jako blok;

 Ctrl+X - vystřihnutí bloku do schránky;

 Ctrl+C - zkopírování bloku do schránky;

 Ctrl+V - vlepení obsahu schránky na pozici kurzoru;

 Enter - ukončení řádky v místě, kde je kurzor, a přechod na začátek další řádky; editujete-li sloupec typu Text, pak klávesa Enter ukončí odstavec; smazání označeného bloku;

 Ctrl+B - přeformátování odstavce od řádky, na níž je kurzor (pouze při editaci sloupce typu Text);

 TAB - posun kurzoru vpravo na pozici dělitelnou čtyřmi; odsazení označeného bloku o jeden znak vpravo;

 Shift+TAB - odsazení označeného bloku o jeden znak vlevo;

 Ctrl+K, R - čtení diskového souboru na místo, kde je kurzor;

 Ctrl+K, W - zápis označeného bloku do diskového souboru;

 Ctrl+F - vyhledání řetězce v textu;

 Ctrl+H - nahrazení řetězce v textu;

 F3 (Ctrl+L)- zopakování posledního vyhledávání nebo nahrazování;

 Ctrl+S  - zápis textu do databáze;

 Ctrl+Shift+S - zápis textu do databáze pod jiným jménem;

 Ctrl+P - vytištění textu;

 Ctrl+F4 - ukončení práce s editorem jako celek, zavření okna editoru;

 Ctrl+F12 - umístí / odstraní na aktuální řádek záložku (bookmark);

 F12 - přesun v textu na další záložku;

 Shift+F12 - přesun v textu na předchozí záložku;

 Ctrl+Shift+F12 - smazání všech záložek;

 F2 (F9) – vložit / zrušit bod zastavení (breakpoint)

 F7 – přeložit program (pohled, dotaz, proceduru apod);

 F5 – spustit program (otevřít formulář, otevřít dotaz apod.) ;

Blok textu můžete tak, že podržíte klávesu Shift a přesunete kurzor na opačný konec bloku. Blok se přitom průběžně vybarvuje.

Na informační lince jste průběžně informováni o pozici kurzoru v textu.


Lišta editoru
Lišta s tlačítky editoru

Pracovní lišta editoru se liší podle toho, jaký objekt se edituje.

Pro program obsahuje lišta tato tlačítka

Význam tlačítek:

- vystřihnout označený text do schránky

- zkopírovat označený text do schránky

- vlepit text ze schránky do okna editoru na pozici kurzoru

- odvolat poslední editační akci (Undo)

- odvolat odvolání poslední eidtační akce (Redo)

- uložit definici do databáze

- zavřít editor

- vytisknout obsah editoru

- najít řetězec

- nahradit řetězec jiným řetězcem

- pokračovat v hledání

- přeložit program

- spustit program

- přeložit program z includu

- spustit program z includu

- zapnout ladicí běh programu

- vložit na pozici kurzoru permanentní bod zastavení;

Pro textovou editaci pohledu, menu nebo dotazu vypadá lišta takto:

Odlišnosti:

- poslední tlačítko provede překlad objektu (syntaktická kontrola);

Pro editaci uložené procedury a triggeru vypadá lišta takto:

Odlišnosti:

- poslední tlačítko zapíná ladění procedury nebo triggeru;

Lišta editoru pro editaci obsahu sloupce typu Text vypadá takto:

Odlišnosti:

- poslední tlačítko provede zarovnání odstavce.

Probíhá-li ladění programu nebo ladění uložené procedury, lišta se změní a nabídne příslušné akce.


Hlavní menu textového editoru

Hlavní menu obsahuje ve svých submenu tyto položky: (v různých situacích mohou některá submenu chybět)

Text

Uložit - zapíše text v aktuální záložce do databáze.

Uložit jako - zapíše text v aktuální záložce do databáze; předtím se zeptá na jméno;

Uložit vše - zapíše text ve všech záložkách do databáze;

Font - umožní zvolit font pro zobrazení textu v aktuální záložce;

Tisk - umožní vytisknout text z aktuální záložky;

Zavřít - ukončí práci textového editoru; pokud editovaný text na některé záložce nebyl dosud uložen nebo byl od posledního uložení změněn, nabídne se Vám možnost uložit text;

Editace

Odvolat - text bude vrácen do stavu před poslední editační akcí;

Zopakovat - text bude vrácen do stavu před poslední akcí Odvolat;

Vystřihnout - vezme označený blok textu a přenese jej do schránky. Blok touto operací z textu zmizí.

Zkopírovat - zkopíruje označený blok textu do schránky.

Vlepit - na místo, kde je právě kurzor, vloží obsah schránky.

Smazat - smaže označený blok textu

Schovat/Ukázat - Zneviditelní nebo zviditelní označený blok textu.

Označit vše - Označí celý text jako blok.

Uložit blok - uloží označený blok textu do souboru na disku.

Uložit blok ASCII - uloží označený blok textu do souboru na disku. Přitom z textu odstraní informace o hranicích odstavců. Každá řádka bude ukončena dvojicí znaků CR LF.

Přečíst - přečte obsah zadaného diskového souboru a uloží jej do textu na místo, kde je právě kurzor.

Záložky - submenu umožní vkládat (a rušit) na pozici kurzoru záložky, k nimž je možné se později vracet; výhodné pro rychlejší orientaci v delších textech (programech);

Turbo ovládání - přepínač mezi ovládáním editoru ve stylu Turbo editorů nebo ve stylu Windows.

Hledání

Najít - vyhledávání řetězce v textu.

Nahradit - nahrazování řetězce v textu.

Zopakovat akci - zopakuje naposled prováděné vyhledávání nebo nahrazování řetězce v textu.

Hledat ve všech objektech - otevře dialog pro vyhledávání řetězce ve všech objektech aplikace;

Test (textová editace objektu)

Překlad - přeloží objekt (pohled, dotaz, menu, proceduru, trigger)

Otevřít - otevře formulář nebo odpověď do dotazu

Formát (pouze editace Textu)

Přehazování slov - je-li tato položka označena, pak slova, která se nevejdou na řádku, jsou automaticky přesunuta na začátek další řádky. Tím, že jste k vytvoření této nové řádky nepoužili klávesu Enter, budou obě řádky patřit do stejného odstavce, který může být později přeformátován.

Zarovnávání okraje - je-li tato položka označena, pak se každá napsaná řádka automaticky zarovnává vpravo. Mezi slova se k tomuto účelu vkládají mezery. Tuto vlastnost je vhodné používat pouze tehdy, pokud v pohledu nebo v sestavě se tento text nebude automaticky přeformátovávat.

Přeformátování - přeformátuje odstavec od řádky, na níž je kurzor, do jeho konce.

Překlad/Běh (pouze u programů)

Překlad - přeloží text v editoru, čímž zkontroluje jeho syntaxi. Překládat lze programy ve vnitřním jazyce, definice menu, pohledů a dotazů. Dojde-li při překladu k chybě, pak se objeví informační okno a po jeho odstranění se kurzor přesune na místo, kde byla objevena chyba.

Běh - Běh lze spustit pouze pro programy ve vnitřním jazyce. Pokud program nebyl dosud přeložen nebo byl od posledního překladu změněn, před během se přeloží. Dojde-li k chybě při překladu, běh se nespustí. Po zahájení běhu okno editoru zůstane na obrazovce, takže může částečně zastínit akce vyvolané běžícím programem, proto doporučujeme přemístit okno editoru stranou.

Překlad, běh startovního programu - umožní spustit či přeložit hlavní program (označený jako startovní objekt) v době, kdy je editován includ.

Ladící režim -  přepne klienta do tzv. ladícího režimu; v němž se programy po spuštění zastaví na první výkonné řádce zdrojového textu a umožní využívat příkazy debuggeru - viz debugger

 	Bod zastavení - tímto příkazem vložíte na aktuální řádek editovaného programu bod zastavení (breakpoint). Na tomto řádku se program spuštěný v ladícím režimu zastaví. Bod zastavení vložený do editoru v době, kdy ještě neběží debugger, zůstává v textu i po spuštění a zastavení debuggeru.

Sloupce

 	Příkaz otevře plovoucí okno se seznamem tabulek a dotazů a jejich sloupců. Je to pomůcka pro vývojáře, aby nemuseli přepínat do řídicího panelu pro zjišťování struktury tabulek.


DIALOG SLOUPCE


V seznamu níže budou vypsány tabulky aktuální aplikace.


V seznamu níže budou vypsány pevné dotazy (objekty aplikace) aktuální aplikace.


V seznamu jsou vypsány tabulky nebo pevné dotazy aktuální aplikace.


V seznamu jsou vypsány jednotlivé sloupce vybrané tabulky nebo dotazu ze seznamu výše. Pomocí Ctrl+C můžete jména sloupců přenést do editoru programu. Typ sloupce je vyznačen pod seznamem.


Typ sloupce vybraného ze seznamu výše.


Programy ve vnitřním jazyce - úvod

Jádrem samostatné aplikace může být program vytvořený ve vnitřním programovacím jazyce WinBase602 nebo v jazyce externím. Vnitřní programovací jazyk je velmi podobný jazyku Pascal a je obohacen o konstrukce usnadňující manipulaci s obsahem databáze. Obsahuje také řadu standardních procedur a funkcí pro práci s formuláři, tištění sestav, otevírání dotazů, zobrazení menu atd.

Textu programu v podobě, v jaké jej vytvoří programátor, říkáme zdrojový program.

Zdrojový program je objektem uloženým pod svým jménem ve WinBase602 v rámci některé aplikace a lze s ním pracovat z řídicího panelu.

Aby zdrojový program mohl být proveden počítačem, musí být napřed přeložen překladačem. Překladač zpracuje zdrojový program a vyrobí přeložený program neboli kód. Po překladu lze spustit běh programu. Během překladu může dojít k chybám při překladu (někdy se jim také ne zcela přesně říká syntaktické chyby). Dojde-li k takové chybě ve WinBase602, je překlad ukončen, aniž by vznikl přeložený program, a tudíž nelze program spustit. Příčinou chyb při překladu je zpravidla to, že zdrojový program není napsán podle pravidel programovacího jazyka.

Při běhu programu může dojít k řadě situací, kdy není jasné, jak by měl výpočet smysluplně pokračovat. Příkladem je třeba dělení nulou, vyčerpání dostupné operační paměti nebo pokus pracovat s neexistujícím záznamem v databázi. Takovým situacím říkáme běhové chyby.

Myšlenkové chyby v návrhu aplikace se mohou projevit jak běhovými chybami, tak i jejím nežádoucím chováním. Nalezení a odstranění takových chyb usnadňuje ladící systém (debugger). Umožňuje provozovat aplikaci v ladícím režimu a přitom například krokovat program nebo prohlížet si hodnoty proměnných.

Programy, vytvořené ve WinBase602, mohou hrát dvě role:

•	Program může být proveden, mohou být tedy vykonány akce popsané v programu.

•	Program se může stát projektem, tedy může poskytovat objekty, která jsou v něm deklarovány, formulářům, menu a SQL příkazům.

Běžící program je vždy současně projektem. Jako projekt lze nastavit i program, který právě neběží.

Ke spuštění programu je nutno mít právo číst program. K editaci je nutno mít právo přepsat program. Pokud program zrovna edituje některý jiný uživatel v síti počítačů, nelze jej otevřít pro editaci, avšak bude nabídnuta možnost otevřít jej pouze pro čtení.

Pokud dva programy současně pracují se stejnými daty, pak by měly zajistit svůj přístup k nim pomocí zámků nebo pomocí vhodné úrovně izolace transakcí.

Editovat velmi dlouhé programy je nepohodlné. Proto je vhodné je rozdělit do několika samostatně uložených částí a ty editovat nezávisle na sobě. Jedna část pak tvoří hlavní program, zatímco ostatní jsou do ní při překladu includovány. Každou část (include) založíte z řídícího panelu aplikace jako nový program. Do hlavního programu vložíte direktivy odkazující na ostatní části. Tyto direktivy zajistí, že při překladu hlavního programu se do něj vloží ostatní části - každá na to místo, kde je na ní odkaz.

Na úplný začátek každé části, která se vkládá do jiného programu (bude includem), napište klíčové slovo

INCLUDE

a pak pokračujte normálním textem programu. Toto slovo je nezbytné ke správnému označení objektu na řídicím panelu, ke správnému otevírání projektu, a také zamezuje překladu částí při exportu aplikace.

Pokud na řídicím panelu poklepete na jméno části programu, pak se rozdíl od samostatných programů nespustí, ale otevře se na ní editor. Pokoušet se překládat nebo spouštět části, které nejsou hlavním programem, nemá smysl. Při ladění a při lokalizování chyb v programu WinBase602 otevírá okna s textem jednotlivých částí podle potřeby. Pokud změníte některou z includovaných částí programu a spustíte běh hlavního pro-gramu, pak WinBase602 tuto situaci rozpozná a hlavní program znovu přeloží.

Mnoho jednodušších akcí a činností není nutné programovat přímo ve zdrojovém textu - ve WinBase602 je pro různé situace mnoho desítek připravených standardních akcí a značnou část programového ošetřování práce s formuláři lze nahradit programováním objektovým - voláním vlastností a metod formulářů a jejich složek.


Řídicí panel - PROGRAMY

Program ve vnitřním programovacím jazyce je posloupnost příkazů jazyka WinBase602. Základní akce, které je možno s programy provádět, lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se objeví po stisku pravého tlačítka myši na objektu typu program.

Spustit	program, označený ve středním seznamu okna, se spustí.
Vytvořit	vytvoření nového zdrojového programu; otevře se textový editor, v němž program budete psát.
Modifikovat	přenesete do prostředí editoru. Tam budete mít možnost upravovat a doplňovat označený program.
Nastavit projekt	uvedení databáze do takového stavu, kdy formuláře a sestavy mohou využívat proměnné, funkce a procedury označeného programu. Je-li v aplikaci pouze jeden program, projekt se nastavuje automaticky při otevření aplikace.
Zrušit	zrušení označeného programu.
Duplikovat	vytvoření přesné kopie označeného programu.
Připojit	možnost připojení programu z jiné aplikace; viz Připojení objektu.
Exportovat objekt	export zdrojového textu programu do souboru
Importovat objekt	import zdrojového textu programu ze souboru
Editovat text	otevře se editor s textem programu
Práva k objektu	nastavení objektových práv
Ladit	otevře editor a spustí ladicí překlad a běh programu
Překlad a běh	otevře editor a spustí normální překlad a běh


Vnitřní programovací jazyk

Programovací jazyk WinBase602 je  strukturovaný programovací jazyk velmi podobný Pascalu. Hlavní odlišnosti od Pascalu spočívají v:

- přidání prostředků pro komunikaci s databází;

- přidání prostředků pro snadné vytváření uživatelského interface a spolupráci s Windows;

- vypuštění některých rysů, které by našly jen malé uplatnění při programování databázových aplikací.

Nové schopnosti jazyka mají většinou podobu nových standardních funkcí a procedur. Jen v nečetných případech je rozšířena i syntaxe jazyka.

Zde uvedená pravidla platí pro vnitřní programovací jazyk. Do programů je možné vkládat také příkazy jazyka SQL, pro nějž platí pravidla poněkud odlišná. Nejvýznamnější rozdíly jsou v prioritě operátorů, ve jménech typů, v zápisu data a času.

Nápověda obsahuje informace k těmto tématům:

 Programy - úvod

 Lexikální symboly jazyka

 Typy jazyka - přehled

 Deklarace - přehled

 Struktura programu ve vnitřním jazyce

 Výrazy a operátory

 Příkazy

 Standardní konstanty

 Kompilační direktivy a makra

 Encyklopedie funkcí a procedur


Příkazy vnitřního programovacího jazyka

Ve vnitřním programovacím jazyce jsou k dispozici tyto příkazy:

 přiřazovací příkaz;

 složený příkaz (BEGIN - END);

 cyklus REPEAT - UNTIL;

  cyklus WHILE - DO;

 cyklus FOR;

 podmíněný příkaz IF;

 příkaz CASE;

 volání procedury;

 příkaz WITH;

 příkaz HALT;

 příkaz RETURN.

Viz také:

 Vnitřní programovací jazyk

 Programy


Přiřazovací příkaz (vnitřní jazyk)
Přiřazovací příkaz

Přiřazovací příkaz ve vnitřním programovacím jazyce má tento tvar:

proměnná_nebo_sloupec := výraz

Tento příkaz nejprve zjistí, o kterou proměnnou resp. který sloupec jde, pak vypočte hodnotu výrazu a nakonec přiřadí hodnotu výrazu do proměnné resp. do sloupce.

Přiřazení lze vždy provést, pokud proměnná resp. sloupec a výraz jsou stejného typu. Mimo to lze také přiřazovat:

- libovolně navzájem hodnoty typů Short, Integer a Money do proměnných resp. sloupců těchto typů (při konverzi typu Money na celé číslo se odřízne desetinná část, nezaokrouhluje se);

- typ Short, Integer a Money do typu Real (nikoli naopak);

- hodnoty ukazatelů do typu Integer a naopak;

- všechny řetězce znaků navzájem (typy String, CSString a CSIString);

- hodnotu typu Char do řetězce znaků;

- řetězec znaků do sloupce proměnné velikosti (typu Text) a naopak. Na straně sloupce musí být tzv. dvojindex, který určuje, s jakou oblastí sloupce se pracuje - první číslo označuje počáteční pozici v textu (číslováno od nuly), druhé číslo udává počet bajtů - příklad: prvních 100 bajtů přiřadit do stringu

(retezec := Tab[0].Pozn[0,100]).

Pokud s ohledem na typy nelze přiřazení provést přímo, je nutno použít některou ze standardních konverzních procedur (nebo napsat konverzní proceduru vlastní).

Pokud při přiřazení je na jedné straně beztypová proměnná, pak na druhé straně musí být hodnota resp. proměnná nestrukturovaného typu nebo typu řetězec znaků, popřípadě také beztypová proměnná. Při přiřazení se provede vhodná konverze typu. Pokud se konverze nedá provést (např. konverze řetězce ”ABC” na Integer), pak se přiřadí hodnota NONE.

Při přiřazování hodnot databázových sloupců může dojít k chybě - např. tehdy, pokud přiřazením překračujete rozsah přístupových práv. V závislosti na tom, zda chyby jsou "maskovány" pomocí procedury Err_mask, dojde buď k ukončení běhu programu, anebo běh pokračuje a výskyt chyby lze zjistit pomocí funkce Signalize.

Viz také:

 Programy

 Vnitřní programovací jazyk

 Příkazy vnitřního jazyka


Volání procedury a funkce (vnitřní jazyk)
Volání procedury a funkce

Procedury a funkce se ve vnitřním programovacím jazyce volají zápisem ve tvaru:

identifikátor_procedury_nebo_funkce ( parametr, parametr, ... parametr)

Parametry musí po řadě odpovídat formálním parametrům uvedeným v deklaraci procedury resp. funkce. Pokud se předávají odkazem, pak skutečným parametrem musí být proměnná téhož typu, jako formální parametr. Pokud se předávají hodnotou, pak skutečným parametrem smí být výraz, jehož hodnota se dá přiřadit do formálního parametru podle pravidel pro přiřazování.

Volání procedury je příkazem. Volání funkce lze použít buď jako příkaz (pak se hodnota funkce ignoruje) nebo jako operand ve výrazu.

Příklad:

funkce (z aplikace Knihovna) je deklarována takto:

function BookTest(who : short) : boolean;

{**************************************}

// ověří, nemá-li rušený čtenář vypůjčené nějaké knihy (z proc DeleteReader)

var

  ct : cursor;

  ss : string[100];

  cntt : integer;

begin

  BookTest := true;

  ss := 'select * from KNIHY where (VYRAZENA = false) and (KDO = '+Int2str(who)+')';

  if not Open_sql_cursor(ct,ss) then begin

    Rec_cnt(ct, cntt);

    if cntt = 0 then BookTest := false;

    Close_cursor(ct);

  end else Signalize;

end;

Funkce se volá z programu např. takto:

...

if BookTest(lidi[rec].cislo) then Info_box('Nelze','Tento čtenář dosud nevrátil všechny knihy!!')

    else begin

...

Viz také:

 Programy

 Vnitřní programovací jazyk


Složený příkaz a tělo bloku (vnitřní jazyk)
Složený příkaz a tělo bloku

Složený příkaz ve vnitřním programovacím jazyce má tento tvar:

begin

  příkaz; příkaz; ... příkaz

end

Provedení složeného příkazu znamená postupné provedení všech příkazů mezi begin a end.

Složený příkaz lze v programu použít všude tak, kde má být příkaz. Mimo to složený příkaz tvoří tělo každého bloku, tedy tělo procedury, funkce a hlavního programu.

Viz také:

 Programy

 Vnitřní programovací jazyk

 Příkazy vnitřního jazyka


Cyklus REPEAT - UNTIL (vnitřní jazyk)
Cyklus REPEAT - UNTIL

Cyklus REPEAT - UNTIL je příkazem vnitřního programovacího jazyka a má tento tvar:

repeat

 příkaz; příkaz; ... příkaz

until výraz_typu_Boolean

Při provádění tohoto příkazu se cyklicky opakuje postupné provedení všech příkazů uvedených mezi repeat a until a vyhodnocení výrazu typu Boolean, který tvoří podmínku ukončení cyklu. Má-li tento výraz hodnotu TRUE, pak provádění cyklu končí, jinak se provedení všech příkazů a vyhodnocení výrazu opakuje.

Příkazy obsažené v cyklu se tedy při provádění cyklu REPEAT - UNTIL provedou nejméně jednou.

Příklad:

View_open("*POHL1");

repeat Peek_message until not View_state("*POHL1");

Viz také:

 Programy

 Vnitřní programovací jazyk

 Příkazy vnitřního jazyka


Cyklus WHILE (vnitřní jazyk)
Cyklus WHILE

Cyklus WHILE je příkazem vnitřního programovacího jazyka a má tento tvar:

while výraz_typu_Boolean do

  příkaz

Při provádění tohoto příkazu se nejprve vyhodnotí výraz typu Boolean, který tvoří podmínku cyklu. Pokud má tento výraz hodnotu FALSE, provádění cyklu tím končí. Jinak se provede příkaz obsažený v cyklu a pokračuje se opakovaným vyhodnocením výrazu.

Není-li podmínka cyklu splněna při vstupu do cyklu, příkaz obsažený v cyklu se tedy neprovede ani jednou.

Příklad:

Open_view("*POHL1", no_redir,0,0,0,id_p);

while (id_p <> 0) do Peek_message ;

Viz také:

 Programy

 Vnitřní programovací jazyk

 Příkazy vnitřního jazyka


Podmíněný příkaz IF (vnitřní jazyk)
Podmíněný příkaz

Podmíněný příkaz je příkazem vnitřního programovacího jazyka a má jeden z těchto tvarů:

if výraz_typu_Boolean then příkaz1

nebo

if výraz_typu_Boolean then příkaz1 else příkaz2

Při provádění podmíněného příkazu se nejprve vyhodnotí výraz typu Boolean. Pokud má hodnotu TRUE, pak se následně provede příkaz1. Pokud má hodnotu FALSE, provede se příkaz2 resp. neprovede se žádný příkaz, pokud příkaz2 není uveden.

Při vnořování podmíněných příkazů do sebe je nutno pamatovat na to, že příkaz ve tvaru:

if v1 then if v2 then p1 else p2

se provede jako kdyby byl zapsán:

if v1 then

   begin if v2 then p1 else p2 end

a nikoli:

if v1 then

   begin if v2 then p1 end

else p2

Příklad:

if idc=0 then Open_view('*Superlid',no_redir,0,0,0,idc)

  else Pick_window(idc);

Viz také:

 Programy

 Vnitřní programovací jazyk

 Příkazy vnitřního jazyka


Příkaz CASE (vnitřní jazyk)
Příkaz CASE

Příkaz CASE slouží k rozvětvení programu do mnoha větví na základě celočíselné hodnoty. Má tento tvar:

case výraz of

  konstanta, ... konstanta : příkaz;

  konstanta, ... konstanta : příkaz;

  ...

  else : příkaz;

end;

Větev začínající slovem else se může vyskytnout na libovolném místě mezi ostatními větvemi, ale nejvýše jednou. Její výskyt není povinný. Každá konstanta smí být v příkazu CASE použita nejvýše jednou.

Při provádění příkazu CASE se nejprve vyhodnotí výraz. Jeho hodnota se porovná s uvedenými konstantami. Pokud se některá konstanta rovná hodnotě výrazu, pak se provede příkaz následující na touto konstantou. Pokud žádná konstanta nemá stejnou hodnotu jako výraz, pak má-li příkaz větev ELSE, provede se příkaz v této větvi, pokud větev else schází, neprovede se nic.

Příklad

var

  i : integer;

  str : string[1];

  b : Boolean;

begin

  b := true;

  repeat

    b := Input_box("cislo",str,1);

    i := str2int(str);

    if b then

      case i of

        1    : Info_box("","JEDNA");

        2,3  : Info_box("","DVA a TRI");

        else : Info_box("","else");

      end;

  until not b;

end.

Viz také:

 Programy

 Vnitřní programovací jazyk

 Příkazy vnitřního jazyka


Cyklus FOR (vnitřní jazyk)
Cyklus FOR

Cyklus FOR je příkazem vnitřního programovacího jazyka a má jeden z těchto tvarů:

for řídící_proměnná := výraz1 to výraz2

   do příkaz

for řídící_proměnná := výraz1 downto výraz2

   do příkaz

Při provádění cyklu se nejprve přiřadí řídící proměnné hodnota výrazu1. Pak se ověří podmínka cyklu: Cyklus končí, pokud v tvaru s to je hodnota řídící proměnné větší než hodnota výrazu2, resp. pokud v tvaru s downto je hodnota řídící proměnné menší než hodnota výrazu2. V opačném případě se provede příkaz obsažený v cyklu a hodnota řídící proměnné se zvětší (to) resp. zmenší (downto) o jedničku. Pokračuje se novým testováním podmínky cyklu.

Řídící proměnná i oba výrazy musí být typu Integer. Počet opakování cyklu je roven rozdílu hodnot obou výrazů plus jedna. Je-li ve tvaru s to výraz1 menší než výraz2, resp. je-li ve tvaru s downto vyraz1 větší než výraz2, pak se příkaz obsažený v cyklu neprovede ani jednou.

Příklad:

if not Rec_cnt(MailMerge, pocetmm) then begin

  for i := 0 to pocetmm-1 do begin	//cyklus přes všechny záznamy z dotazu

    Set_status_text('Zapisuji do tabulky kontaktů...');

    Set_status_nums(i,pocetmm);

    Start_transaction;

      reck := Insert(Tschuzky); Signalize;

      if reck <> -1 then begin

         cis := MailMerge[i].cislo;

         ...

Viz také:

 Programy

 Vnitřní programovací jazyk

 Příkazy vnitřního jazyka


Příkaz WITH

Příkaz WITH má ve vnitřním programovacím jazyce tento tvar:

with tabulka_nebo_kurzor [ číslo_záznamu ]

   do příkaz

Provedením příkazu WITH způsobí vyhodnocení čísla záznamu a provedení příkazu, který je v něm obsažen. Ve vnitřním příkazu mohou být použity identifikátory sloupců výše uvedené tabulky resp. kurzoru - tyto identifikátory pak označují sloupce záznamu, jehož číslo je uvedeno v hranatých závorkách.

Jsou-li A a B sloupce tabulky TAB a REC číslo záznamu této tabulky, pak místo:

TAB[REC].A := 2 * TAB[REC].B;

lze psát:

with TAB[REC] do A := 2 * B;

Příkaz WITH tedy umožňuje zkrátit zápis přístupu k sloupci v programu a navíc (nepatrně) zrychluje běh programu.

Viz také:

 Programy

 Vnitřní programovací jazyk

 Příkazy vnitřního jazyka


Příkaz RETURN (vnitřní jazyk)
Příkaz RETURN

Příkaz RETURN má ve vnitřním programovacím jazyce tvar:

return celočíselný_výraz

Příkaz RETURN při svém provedení předá programu zprávu, jejíž číslo se rovná hodnotě výrazu uvedeného v příkazu. Tato hodnota musí ležet v rozmezí 1001 až 60000 nebo -1.

Příkaz RETURN byl určen přednostně pro použití v návrzích formulářů pro zadání akce, která se provede např. po stisku tlačítka, resp. v návrzích menu pro akce, které se provedou po vybrání položky menu. V novějších verzích WinBase602 se spíše používá ekvivalentní standardní akce Zaslat programu zprávu.

Vygenerovanou zprávu může program získat voláním funkce Get_ext_message.

Viz také:

 Programy

 Vnitřní programovací jazyk

 Příkazy vnitřního jazyka


Příkaz HALT

Příkaz HALT způsobí ukončení běhu programu (nebo vnořeného programu). Zapíše se prostě:

Halt

Příklad:

...

if not TestPrav then Halt;

Viz také:

 Programy

 Vnitřní programovací jazyk

 Příkazy vnitřního jazyka


Systémové dotazy - použití

Systémové informační dotazy jsou předdefinované dotazy, jejich položením lze získat informace o objektech na serveru a o stavu serveru. Tyto dotazy se dají použít (jako všchny ostatní dotazy) v klauzuli FROM v jiných dotazech, a díky tomu lze pomocí podmínek zadaných v klauzuli WHERE vybrat ty systémové informace, které jsou zapotřebí.

Data umístěná v systémových informačních dotazech jsou určena pouze ke čtení, nelze je přepisovat ani k nim nic přidávat. Nelze tedy například modifikovat sloupce tabulek zápisem do dotazu vracejícího informace o sloupcích.

Jména systémových informačních dotazů začínají _IV_. V současnosti jsou definovány tyto dotazy:

_IV_LOGGED_USERS - přehled klientů připojených na server a dalších vláken - podrobnosti;

_IV_TABLE_COLUMNS - přehled sloupců tabulek v aplikacích databáze - podrobnosti;

_IV_MAIL_PROFS - přehled poštovních profilů - podrobnosti;

V příštích verzích serveru se i v existujících dotazech mohou objevit nové sloupce.


Systémový dotaz _IV_LOGGED_USERS
Systémový informační dotaz _IV_LOGGED_USERS

Odpověď na systémový dotaz _IV_LOGGED_USERS obsahuje jeden řádek pro každé klientské vlákno na serveru. V odpovědi jsou tyto sloupce:

Login_name	CHAR(31)	jméno, pod nimž je uživatel přihlášen
Client_number	INT	interní číslo klienta, stejné jako vrací funkce Client_number
Sel_schema_name	CHAR(31)	jméno otevřené aplikace (schématu)
State	INT	stav provádění požadavku klienta - viz níže
Connection	INT	způsob připojení klienta na server (0 přímo, 1 TCP/IP, 2 IPX/SPC, 3 NetBEUI)
Net_address	CHAR(30)	síťová adresa klienta (prázdná pro klienty s přímým přístupem)
Detached	BOOLEAN	příznak, že jde o samostatné vlákno (spuštěné příkazem CALL DETACHED)
Worker_thread	BOOLEAN	příznak, že jde o pracovní vlákno, které neobsluhuje klientský požadavek, případně samostatné vlákno
Own_connection	BOOLEAN	příznak, že jde o vlánko klienta kladoucího tento informační dotaz
Transaction_open	BOOLEAN	příznak, že vlákno má otevřenou transakci
Isolation_level	INT	stupeň izolace transakcí nastavený pro klienta (0 read uncommitted, 1 read committed, 2 repeatable read, 3 serializable)
Sql_options	INT	parametry SQL nastavené pro klienta pomocí funkce Set_sql_option
Lock_waiting_timeout	INT	délka čekání na zámky blokované jinými klienty, v desetinách sekundy, nebo -1, pokud se čeká neomezeně dlouho

Hodnoty ve sloupci State mají tento význam:

0	vlákno se provádí
1	vlákno čeká na zámek na stránce
2	vlákno čeká na uvolnění stránky v diskové cache
3	vlákno čeká na zámek na záznamu
4	vlákno čeká na příchod dalšího požadavku od klienta
5	vlánko odesílá odpověď na požadavek
6	vlákno přijímá nový požadavek od klienta
7	vlákno se ukončuje
8	vlákno čeká na semaforu (ve funkci Wait_for_semaphore)
9	vlákno čeká ve funkci Sleep

Příklad:

Vypsat uživatele, kteří jsou přihlášeni do aplikace Majetek:

SELECT Login_name

FROM  _iv_logged_users

WHERE sel_schema_name = "Majetek"

Viz také:	Systémové dotazy - úvod


Systémový dotaz _IV_MAIL_PROFS
Systémový informační dotaz _IV_MAIL_PROFS

Odpověď na systémový dotaz _IV_MAIL_PROFS obsahuje jeden řádek pro každý vytvořený poštovní profil na tom počítači, kde je spušten server (bez ohledu na operační systém). Poštovní profily vytvořené u klienta (a využívané z vnitřního programovacího jazyka) takto zjistit nelze.

V odpovědi jsou tyto sloupce:

Profile_name	CHAR(63)	jméno profilu, pro implicitní profil je prázdný řetězec
Mail_type	INT	typ pošty (1=Mail602, 2=MAPI, 4=SMTP/POP3 - viz MailGetType)
Smtp_server	CHAR(63)	jméno SMTP serveru
My_address	CHAR(63)	poštovní adresa přo odesílání
Pop3_server	CHAR(63)	jméno POP3 serveru
User_name	CHAR(63)	jméno uživatele poštovní schránky
Dial_connecion	CHAR(254)	jméno telefonického připojení
Dial_user	CHAR(254)	jméno uživatele telefonického připojení
Prof_602_mapi	CHAR(63)	jméno profilu Mail602 nebo profilu pošty MAPI
Path	CHAR(254)	seznam adresářů, odkud lze odesílat soubory

Příklad:

Vypsat profily SMTP uložené u serveru

SELECT Profile_name

FROM  _iv_mail_profs

WHERE mail_type=4

Viz také:	Systémové dotazy - úvod
	Poštovní profily ve WinBase602


Systémový dotaz _IV_TABLE_COLUMNS
Systémový informační dotaz _IV_TABLE_COLUMNS

Odpověď na systémový dotaz _IV_TABLE_COLUMNS obsahuje jeden řádek pro každý sloupec každé tabulky na serveru. Sloupec DELETED není uváděn. Skryté sloupce (sloupce začínající _W5_)uváděny jsou.

V odpovědi jsou tyto sloupce:

Schema_name	CHAR(31)	jméno schématu (aplikace), do něhož tabulka patří
Table_name	CHAR (31)	jméno tabulky, v niž je sloupec obsažen
Column_name	CHAR(31)	jméno sloupce
Ordinal_position	INT	pořadové číslo sloupce v tabulce (číslováno od 1)
Data_type	INT	typ sloupce - popis níže
Length	INT	maximální délka hodnoty ve sloupci, definováno pro znakové a binární řetězce
Precision	INT	počet desetinných míst, pokud je pevný
Default_value	CHAR(50)	implicitní hodnota definovaná pro sloupec
Is_nullable	BOOLEAN	příznak, zda sloupec smí mít hodnotu NULL
Value_count	INT	počet předalokovaných hodnot pro sloupec
Expandable	BOOLEAN	příznak, že počet hodnot ve sloupci může být vyšší než počet předalokovaných hodnot

Sloupec Data_type nabývá následujících hodnot:

1	Boolean
2	Char
3	Short
4	Integer
5	Money
6	Real
7	String
8	CSString
9	CSIString
10	Binary
11	Date
12	Time
13	Timestamp
14	Pointer
15	Bipointer
16	sledovaci atribut: Autorizace
17	sledovaci atribut: Datumovka
18	sledovaci atribut: Historie
19	Raster
20	Text
21	Nospec (OLE)
22	Signature

Pokud Value_count je různé od jedné nebo pokud Expandable má hodnotu TRUE, pak sloupec je multiatribut.

Odpověď na tento dotaz může být značně rozsáhlá, proto doporučujeme ji omezit vhodným podmínkami na jméno schématu a jméno tabulky v klauzuli WHERE.

Příklad:

zjistit jména sloupců z tabulky Moznosti v aplikace Anketa:

SELECT Column_name, Data_type

FROM  _iv_table_columns

WHERE schema_name = "Anketa2"  AND table_name = "Moznosti"

Viz také:	Systémové dotazy - úvod
	Datové typy WinBase602


Systémové tabulky - použití

V systému jsou různé služební tabulky v nichž jsou uloženy definice všech tabulek, definice všech objektů, definovaní uživatelé a další důležité údaje.

Nedoporučujeme pracovat přímo s těmito tabulkami. Pro vytváření resp. mazání objektů používejte vývojové prostředí nebo příslušné funkce jazyka nebo SQL příkazy.

V určitých konkrétních případech však lze některé systémové tabulky použít.

OBJTAB	tabulka objektů všech aplikací (pohledy, dotazy role apod.) - pro čtení i zápis
TABTAB	tabulka tabulek všech aplikací - pouze pro čtení
USERTAB	tabulka uživatelů a skupin - pouze pro čtení

Některé sloupce systémových tabulek, které lze použít

Jméno	OBJTAB	TABTAB	USERTAB	Typ	Význam
TAB_NAME	--	ano	--	CSIString délky 31 znaků	jméno tabulky
OBJ_NAME	ano	--	--	CSIString délky 31 znaků	jméno objektu
LOGNAME	--	--	ano	CSIString délky 31 znaků	jméno uživatele nebo skupiny
CATEGORY	ano	ano	ano	Char	kategorie objektu
APL_UUID	ano	ano	--	Binary délky 12 znaků	identifikace aplikace
USR_UUID	--	--	ano	Binary délky 12 znaků	identifikace uživatele (skupiny)
DEFIN	ano	ano	--	Nospec (OLE)	textová definice objektu

Příklad: zjistit jména uživatelů databáze

Řešení: položte dotaz

SELECT logname

FROM Usertab

WHERE (Usertab.category=chr(CATEG_USER))

Příklad: vybrat objekty patřící aplikaci "APLIKACE1"

Řešení: položte postupně dva dotazy

SELECT T2.obj_name,Ord(T2.category)

FROM Objtab T1, Objtab T2

WHERE T1.apl_uuid=T2.apl_uuid

 AND (T1.obj_name="APLIKACE1" AND Ord(T1.category)=CATEG_APPL)

a

SELECT Tabtab.tab_name

FROM Objtab, Tabtab

WHERE Objtab. apl_uuid =Tabtab. apl_uuid

 AND (Objtab.obj_name="APLIKACE1" AND Ord(Objtab.category)=CATEG_APPL)

Příklad: zjistit ID přihlášeného uživatele

Řešení:

jmeno := Who_am_I;

if jmeno = "" then jmeno := "ANONYMOUS";

if Find_object(jmeno,CATEG_USER, usernum) then Signalize;

userid := Usertab[usernum].usr_uuid;

Příklad: načíst do aplikace obrázek

Řešení:

procedure CopyFile(tb:ttablenum; rec, atr, index, handle:integer; recode:integer);

external "WBPREZEN.DLL" name "old_copy_from_file";

function Open(var filename:string; par : integer) : integer;

external "KERNEL32" name "_lopen";

function CloseF(par : integer) : integer;

external "KERNEL32" name "_lclose";

table

  OBJTAB;

const

  def_atr = 6;   // WinBase od verze 5.0

//  def_atr = 3;   // WinBase do verze 5.0

var

  hfile : integer;

  ss : string[200];

  objnum : short;

begin

  ss := "*.bmp";

  if select_file(0,ss) then begin

    hfile := Open(ss,0);

    if not Find_object("newpicture",CATEG_PICT,objnum) then

     if Delete(objtab,objnum) then Signalize;

    if Insert_object("newpict2",CATEG_PICT,objnum) then Signalize else begin

       CopyFile(Objtab,objnum,def_atr,-1,hfile,0);

       Relist_objects;

    end;

    CloseF(hfile);

  end;

end.

Viz také:

 Programy

 Vnitřní programovací jazyk


Popis typu pole (ARRAY)
Popis typu pole

Popis typu pole má ve vnitřním programovacím jazyce tento tvar:

array [ dolní_mez .. horní_mez ] of typ_složek

array [ dolní_mez .. horní_mez ] of array [ dolní_mez .. horní_mez ] of typ_složek

Dolní mez a horní mez jsou konstanty typu Integer, přičemž dolní mez nesmí být větší než horní mez. Rozsah mezí určuje, jaké hodnoty indexu lze použít při indexování proměnné tohoto typu. Typ složek je identifikátorem nebo popisem libovolného typu kromě typu file a cursor.

Příklad

var

  pole1 : array[1..10] of short;

  pole2 : array[1..10] of array[1..10] of short;

begin

  pole[1] := 1;

  pole[1][1] := 2;

  ...

end.

Viz také:

 Typy jazyka - přehled

 Programy

 Vnitřní programovací jazyk


Popis typu záznam (RECORD)
Popis typu záznam

Popis typu záznam má ve vnitřním programovacím jazyce tento tvar:

record

  skupina; skupina; ... skupina

end

kde skupina má tento tvar:

identifikátor, ... identifikátor : typ

Identifikátory ve skupinách označují složky záznamu - každé dva identifikátory složky v rámci jednoho typu záznam se musí navzájem lišit. Typ je buď identifikátorem typu nebo popisem typu a smí to být libovolný typ kromě typů file a cursor.

Proměnná typu záznam nesmí zabírat více paměti než 64 KB.

Příklad

type rec = record

datum : date;

obs : array[1..28] of boolean;

kdo : array[1..28] of string[16];

co : array[1..28] of string[30];

end;

Viz také:

 Typy jazyka - přehled

 Programy

 Vnitřní programovací jazyk


Typ soubor (FILE)
Typ soubor

Typ soubor se ve vnitřním programovacím jazyce označuje klíčovým slovem:

file

Lze pracovat pouze s textovými soubory, proto se typ složek souboru nespecifikuje.

Příklad:

var

 f : file;

procedure Zapis(ss : string[50]);

begin

 Reset(f,"C:\wb602\test.txt");

 Seek(f,FileLength(f));

 WriteLn(f,ss," ",Now);

 Close(f);

end;

begin

 ...

 Zapis("Provedeno OK");

 ...

end.

Viz také:

 Typy jazyka - přehled

 Programy

 Vnitřní programovací jazyk


Typ jazyka řetězec znaků
Typy řetězec znaků

Typy řetězec znaků se ve vnitřním programovacím jazyce popisují takto:

String [ délka ]

Csstring [ délka ]

Csistring [ délka ]

Řetězce těchto tří typů se neliší svými hodnotami, ale pouze tím, jak se mezi sebou porovnávají.

Csstring - tyto řetězce se uspořádávají lexikograficky podle pořadí písmen v češtině a slovenštině, velká písmena jsou před malými.

Csistring - tyto řetězce se uspořádávají lexikograficky podle pořadí písmen v češtině a slovenštině, mezi velkými a malými písmeny se nerozlišuje.

Délka je celočíselná konstanta označující maximální počet znaků řetězce. Pouze však některé funkce (Strinsert apod.) umí pracovat s řetězci delšími než 255 znaků. Také operátor + pro spojování řetězců ořezává řetězce na 255 znaků.

Každý řetězec má na svém konci omezovací znak s hodnotou 0. Pro tento znak se při deklaraci řetězce rezervuje místo automaticky. Pokud budete řetězec indexovat a pracovat s jeho jednotlivými znaky (jako s polem znaků), index prvního znaku je 1 (na rozdíl od Pascalu není znak a indexem 0 definován). Poslední index je o 1 větší než zadaná délka, ale do znaku s tímto indexem není dovoleno zapsat nic jiného než omezovací znak, tedy hodnotu Chr(0).

Viz také:

 Typy jazyka - přehled

 Programy

 Vnitřní programovací jazyk


Typ jazyka binární řetězec
Typ binární řetězec

Ve vnitřním programovacím jazyce lze používat typ pro pole bajtů

Binary [ délka ]

a indexovat jej od 1. Prvky binárních polí jsou typu Char a pro jejich konverzi na a z typu Integer lze použít funkce Ord a Chr.

Viz také:

 Typy jazyka - přehled

 Programy

 Vnitřní programovací jazyk


Nespecifikovaný typ

Ve WinBase602 existuje zvláštní předdefinovaný tzv. nespecifikovaný typ označený identifikátorem Untyped. Slouží k operacím s objekty, jejichž typ není při překladu programu znám.

Deklarujete-li proměnnou nespecifikovaného typu (říkáme ji také beztypová proměnná), pak může nabývat hodnot všech nestrukturovaných typů a typů řetězec znaků. Beztypová proměnná je například parametrem funkce C_Max, která hledá v databázových záznamech maximální hodnotu sloupce a vrací ji, aniž by v programu musel být znám její typ.

Příklad použití:

var

  unt : untyped;

...

if C_max(Tfirma,'cislo','',unt) then Signalize;

else begin

  poslCislo := unt;

...

Viz také:

 Typy jazyka - přehled

 Programy

 Vnitřní programovací jazyk


Jednoduché typy jazyka

Integer	Hodnotami typu Integer jsou celá čísla v rozsahu hodnot od -2147483647 do 2147483647. Hodnota typu Integer zabírá 4 bajty paměti.
Short	Hodnotami typu Short jsou celá čísla v rozsahu od -32767 do 32767. Hodnota zabírá pouze 2 bajty paměti, typ Short tedy umožňuje ušetřit polovinu operační paměti při práci s malými celými čísly.
Money	Typ Money má hodnoty se dvěma desetinnými místy. Jeho rozsah hodnot je od - 1.4*10^12 do 1.4*10^12. Hodnota zabírá 6 bajtů.
Char	Hodnotami typu Char jsou znaky. Hodnota typu Char zabírá 1 bajt.
Boolean	Typ Boolean má pouze dvě hodnoty, a to TRUE a FALSE (nepočítáme-li "nedefinovanou'' hodnotu NONEBOOLEAN). Hodnota zabírá jeden bajt.
Date	Hodnotou typu Date je datum. Tato hodnota zabírá 4 bajty. Datum musí být po začátku našeho letopočtu.
Time	Hodnotou typu Time je čas. Tato hodnota zabírá 4 bajty. Čas se měří s přesností na tisíciny sekundy.
Timestamp	Hodnotou typu Timestamp je datum a čas. Tato hodnota zabírá 4 bajty. Čas udává s přesností na sekundy. Rozsah je cca 1900 - 2040
Real	Typ Real zahrnuje reálná čísla v rozsahu absolutních hodnot přibližně 1.7E-308 až 1.7E308, kladná i záporná. Přesnost výpočtů je přibližně 15 desetinných míst. Hodnota zabírá 8 bajtů paměti.
trecnum	Typ trecnum slouží pro absolutní čísla záznamů a je totožný s typem Integer
tobjnum	Typ se používá pro čísla objektů a je totožný s typem Short
Tcateg	Typ se používá pro určení kategorie objektu (jednou z konstant CATEG_...) a je totožný s typem Short
window_id	Typ window_id se používá pro identifikace oken a je totožný s typem Short v 16 bitových Windows, s typem Integer ve 32 bit. Windows.

Viz také:

 Typy jazyka - přehled

 Programy

 Vnitřní programovací jazyk


Typy programovacího jazyka - přehled
Typy programovacího jazyka

Mezi standardní typy vnitřního programovacího jazyka patří:

 Jednoduché typy pevné délky (Integer, Real, Date apod.)

 Typ řetězec znaků (String)

 Typ binární řetězec (Binary)

 Typ pole (Array)

 Typ záznam (Record)

 Typ textový soubor(File)

 Nespecifikovaný typ (Untyped)

 Speciální typ formulář (Form) - objektové programování

Viz také

 Deklarace vlastních typů

 Programy

 Objektové programování formulářů


Deklarace procedury ve vnitřním jazyce
Deklarace procedury

Procedura se ve vnitřním programovacím jazyce deklaruje zápisem ve tvaru:

procedure identifikátor

   (skupina_par; ... skupina_par);

blok;

kde skupina_par je skupina parametrů ve tvaru:

identifikátor, ... identifikátor : identifikátor_typu

nebo

var identifikátor, ... identifikátor : identifikátor_typu

V prvním případě se parametry předávají hodnotou, v druhém referencí (odkazem). Databázové sloupce nelze předávat referencí. Blok procedury je tvořen případnými deklaracemi konstant, typů a proměnných a tělem procedury, kterým je složený příkaz.

Příklad:

procedure ReCard(idx : window_id; rec : integer);

{*************************************}

// znovuzařazení dříve vyřazené knihy zpět

var

  cx : cursor;

  trec : integer;

begin

  if YesNo_box('Otázka','Opravdu si přejete znovu zařadit knihu mezi ostatní?') then

    if Get_fcursor(idx,cx,nil) then

      if not Translate(cx,rec,0,trec) then begin

         Knihy[trec].vyrazena := false;

         Knihy[trec].dat_vyr := nonedate;

         Reset_view(id_vyr,-1,reset_deletions+reset_cursor);

         if idk > 0 then Reset_view(idk,-1,reset_deletions+reset_cursor);

      end;

end;

Viz také:

 Vnitřní programovací jazyk

 Programy

 Deklarace v programech

 Přehled typů


Deklarace funkce ve vnitřním jazyce
Deklarace funkce

Funkce se ve vnitřním programovacím jazyce deklaruje zápisem ve tvaru:

function identifikátor

  (skupina_par; ... skupina_par) : typ;

blok;

kde skupina_par je skupina parametrů ve tvaru:

identifikátor, ... identifikátor : identifikátor_typu

nebo

var identifikátor, ... identifikátor : identifikátor_typu

V prvním případě se parametry předávají hodnotou, v druhém referencí (odkazem). Databázové sloupce nelze předávat referencí. Blok funkce je tvořen případnými deklaracemi konstant, typů a proměnných a tělem funkce, kterým je složený příkaz.

Typ funkce musí být buď nestrukturovaný, nebo typ řetězec znaků.

Příklady:

function Rand : real;

{**************************************}

// vrátí pseudonáhodné číslo

const

  c1 = 13849;

  c2 = 27181;

  c3 = 65536;

begin

    seed := (c1+(c2*seed)) mod c3;

    Rand := seed/c3;

end;

function Exists(kod:string[8];var cisloVTab:integer) : boolean;

{**************************************}

// zjistí, existuje-li kniha s kodem kod

// jestliže ano, vrátí v cisloVTab cislo záznamu z tabulky Knihy

var

  ck : cursor;

  podm2 : string[100];

  pocet : integer;

begin

  podm2 := "select * from KNIHY where (VYRAZENA = false) and (KOD="""+kod+""")";

  if Open_sql_cursor(ck,podm2) then Exit;

  Rec_cnt(ck,pocet);        // zjistí počet

  if pocet = 1 then begin   // to je ta pravá

    Translate(ck,0,0,cisloVTab);

    Exists := true              {OK}

  end

  else begin                // dva a víc nemůže nastat

    Info_box("Upozornění","Zadaný kód nebyl nalezen!");

    b := true;

    Exists := false;

  end;

  Close_cursor(ck);

end;

Viz také:

 Vnitřní programovací jazyk

 Programy

 Deklarace v programech

 Přehled typů


Deklarace proměnných ve vnitřním jazyce
Deklarace proměnných

Deklarace proměnných má ve vnitřním programovacím jazyce tvar:

var identifikátor, ... identifikátor : typ;

   ...

   identifikátor, ... identifikátor : typ;

Typem může být buď identifikátor, nebo popis typu.

Příklad:

const

  MAX = 3000;

var

  f : file;

  retezec : string[MAX];

  delka : short;

Viz také:

 Vnitřní programovací jazyk

 Programy

 Deklarace v programech

 Přehled typů


Definice typů ve vnitřním jazyce
Definice typů

Definice typů má ve vnitřním programovacím jazyce tento tvar:

type identifikátor = popis_typu;

     ...

     identifikátor = popis_typu;

Definice typu označí typ specifikovaný popisem typu identifikátorem.

Popisem typu může být např. popis typu pole, popis typu záznam, popis typu soubor, popis typu řetězec znaků nebo popis jednoduchých typů.

Příklad:

type

  pole = array[1..4] of integer;

  rec = record

    datum : date;

    obs : array[1..28] of boolean;

    kdo : array[1..28] of string[16];

    co : array[1..28] of string[30];

  end;

var

  c : cursor rec;

  souradnice : pole;

Viz také:

 Vnitřní programovací jazyk

 Programy

 Deklarace v programech

 Přehled typů


Definice konstant ve vnitřním jazyce
Deklarace konstant

Definice konstant má ve vnitřním programovacím jazyce tento tvar:

const identifikátor = konstanta;

       ...

      identifikátor = konstanta;

Definicí konstanty se zavádí identifikátor, který označuje stejnou hodnotu, jako konstanta uvedená v definici. Lze definovat pouze konstanty typu Integer, Real, Money, Date, Time a Char.

Příklad:

const

// Konstanty označující zprávy z menu:

  MN_TEMPLATE = 1001;

  MN_EDIPARS  = 1002;

  MN_UNVERS   = 1003;

  MN_INF_PARS = 1004;

  MN_INSTTEST = 1005;

  MN_EXIT     = 1006;

// Interní limity:

  MAX_SEL_RECS = 200;

  MAX_TABLES   = 50;

Viz také:

 Vnitřní programovací jazyk

 Programy

 Deklarace v programech

 Přehled typů


Deklarace tabulky ve vnitřním jazyce
Deklarace tabulky

Tabulka se v programu deklaruje takto:

table jméno_tabulky;

Jméno tabulky musí být stejné, pod jakým je tabulka uložena v databázi. S tabulkami, které v programu nejsou takto deklarovány, lze pracovat pouze prostřednictvím kurzorů.

Příklad:

table

  Lidi, Knihy, Rezervace, Obory, `Parametry programu`;

cursor

  Vyrazene, `Rezerv Dat`;

Viz také:

 Vnitřní programovací jazyk

 Programy

 Deklarace v programech


Deklarace kurzoru ve vnitřním jazyce
Deklarace kurzoru

Kurzory lze v programu deklarovat dvojím způsobem:

Pevný kurzor, tj. kurzor, jehož definice je uložena v databázi, se deklaruje zápisem:

cursor jméno_kurzoru;

Proměnný kurzor, tedy kurzor, jehož definice bude vytvořena až při běhu programu,

se deklaruje zápisem:

var identifikátor : cursor popis_typu_záznam;

Při otevření proměnného kurzoru je nutno zadat stejné složky kurzoru, jaké jsou uvedeny v popisu typu záznam. Popis typu záznam lze v deklaraci kurzoru vynechat, pak ale jeho složky jsou beztypové (častější případ).

Příklad:

cursor

  Vyrazene, Rezerv_Dat;

var

  c_pom : cursor;

Viz také:

 Vnitřní programovací jazyk

 Programy

 Deklarace v programech

 Přehled typů


Deklarace externích procedur a funkcí ve vnitřním jazyce
Deklarace externích procedur a funkcí

Vnitřní programovací jazyk WinBase602 umožňuje volat i procedury a funkce implementované v externích knihovnách typu DLL. Lze volat pouze ty procedury a funkce, které vyhovují volací konvenci stdcall (v jazyce C musí být označeny klíčovým slovem _stdcall, v Borland Pascalu stdcall) a musí mít tzv. C-linkage, tedy musí být exportovány bez informace o typech parametrů (v jazyce C++ musí být označeny extern "C").

Všechny takovéto procedury a funkce musí být v programu před místem svého prvního použití deklarovány. Deklarace má jeden z těchto dvou tvarů:

hlavička procedury nebo funkce;

EXTERNAL 'jméno_knihovny'

hlavička procedury nebo funkce;

EXTERNAL  'jméno_knihovny'   NAME  ' jméno_funkce_v_knihovně';

Pokud je jméno funkce v programu a v knihovně stejné, použijete první, zkrácený tvar, jsou-li různé, použijete druhý tvar. V praxi je nutno jméno funkce v knihovně uvádět pouze tehdy, pokud je delší než 14 znaků nebo pokud ve svém programu již máte stejně pojmenovaný objekt.

Pokud jméno dynamické knihovny uvedete bez přípony, předpokládá se přípona DLL. Upozorňujeme, že některé knihovny mají přípony jiné než DLL a je nutno je uvést.

Deklarace nejpoužívanějších funkcí z Windows API jsou obsaženy v souboru WINAPI32.PGM. Tento soubor naleznete po instalaci WinBase602 ve stejném adresáři, jako její programy, a můžete jej importovat do své aplikace a poté includovat do programu.

Příklad:

FUNCTION GetDlgItem (Handle : window_id; ItemID : Integer) : window_id;

EXTERNAL "USER32.DLL";

Viz také:

 Vnitřní programovací jazyk

 Programy

 Deklarace v programech

 Přehled typů


Deklarace v programech vnitřního jazyka
Deklarace v programech

Program ve vnitřním jazyce může obsahovat tyto deklarace:

 Deklarace konstant

 Deklarace typů

 Deklarace proměnných

 Deklarace procedur

 Deklarace funkcí

 Deklarace externích procedur a funkcí

 Deklarace tabulek

 Deklarace kurzorů

Deklarace je možno uvádět v libovolném pořadí. Každý identifikátor musí být deklarován dřív, než je poprvé použit.

Deklarace konstant, typů a proměnných mohou být i lokální uvnitř procedury nebo funkce.

Viz také:

 Programy

 Vnitřní programovací jazyk


Výrazy a operátory (vnitřní jazyk)
Výrazy a operátory vnitřního jazyka

Výrazy se ve vnitřním programovacím jazyce vytvářejí spojováním operandů pomocí operátorů a kulatých závorek ( a ). Každý operátor se dá použít pouze pro operandy určitých typů a určuje, jaký bude typ výsledku. Jsou k dispozici tyto operátory:

+, -, *, /  pro sčítání, odečítání, násobení a dělení. Operandy mohou být libovolné kombinace typů Short, Integer a Real, při tom pokud některý operand je typu Real nebo pokud se použije operátor /, pak výsledek je typu Real, jinak je výsledek typu Integer.

div a mod jsou operátory pro výpočet celočíselného podílu resp. zbytku po dělení. Oba operandy musí být celočíselné (tedy typu Short nebo Integer), výsledek je typu Integer. Pozor, nelze dělit nulou!

or, and a not jsou operandy pracující s logickými operandy, tedy s typem Boolean. Výsledek je téhož typu. Operátory počítají po řadě disjunkci, konjunkci a negaci.

Relační operátory < (menší než), <= (menší nebo rovno), > (větší než), >= (větší nebo rovno), = (rovno), <> (nerovno) mají výsledek typu Boolean. Jejich pomocí lze porovnávat čísla typu Integer, Short, Real a Money v libovolných kombinacích. Lze také spolu porovnávat ukazatele, hodnoty typu Char, Boolean a v libovolných kombinacích String, CSString a CSIString.

Pro porovnávání řetězců lze také použít relačních operátorů .= (má prefix), .=. (obsahuje v sobě) a ~ (podobá se, liší se pouze diakritikou, velikostí písmen a mezerami).

Operátory +, -, *, / se dají také použít pro operand(y) typu Money. Pokud je jedním z operandů hodnota typu Real nebo pokud se použije operátor /, je výsledek typu Real, jinak je typu Money. Není dovoleno násobit a dělit dva operandy typu Money.

Operátor + se dá použít též ke spojování řetězců do celkové délky 255 znaků.

K hodnotě typu Date nebo Time lze přičíst nebo odečíst celé číslo. Výsledek je stejného typu, jako první operand, hodnota druhého operandu se v těchto operacích chápe jako počet dní resp. počet tisícin sekundy. Dvě hodnoty typu Date nebo Time lze od sebe odečíst. Výsledkem je celé číslo vyjadřující počet dnů resp. tisícin sekundy mezi hodnotami obou operandů.

K hodnotě typu Timestamp lze přičíst nebo odečíst celé číslo ve významu počtu sekund. Výsledkem je stále hodnota typu Timestamp. Dvě hodnoty Timestamp lze od sebe odečíst - výsledkem je celé číslo vyjadřující počet sekund mezi oběma hodnotami.

Viz také:

 Vyhodnocování a priorita výrazů

 Výraz typu Boolean

 Podmíněný výraz

 Programy

 Vnitřní programovací jazyk

 Přehled typů


Vyhodnocování výrazů a priorita operátorů (vnitřní jazyk)
Vyhodnocování výrazů a priorita operátorů

Výraz se vyhodnocuje v pořadí daném těmito kritérii (seřazeno od nejvýznamnějšího):

1. Struktura výrazu vyjádřena uzávorkováním

2. Priorita operátorů

3. Zleva doprava

4. Nepotřebná hodnota se nevyhodnocuje (má-li první operand operace and hodnotu FALSE nebo má-li první operand operace or hodnotu TRUE, druhý operand se nevyhodnotí).

Priorita operátorů je:

1. NOT

2. *, /, AND, DIV, MOD

3. +, -, OR

4. <, <=, >, >=, =, <>, .=, .=., ~

Pozor!!

Vzhledem k tomu, že operace and a or mají vyšší prioritu než relace rovnosti a nerovnosti, nelze ve výrazech jako:

(A < 5) and (B >= 17)

vynechat žádné závorky!

Pozor!!

Nezaměňujte prioritu operátorů vnitřního jazyka s prioritou operátorů v SQL, která je odlišná!

Viz také:

 Programy

 Výrazy a operátory

 Vnitřní programovací jazyk


Výraz typu Boolean (podmínka) - vnitřní jazyk
Výraz typu Boolean

Výraz typu Boolean je speciálním případem výrazu. Používá se všude tak, kde dle syntaxe vnitřního programovacího jazyka má být podmínka, tedy např.:

•	v příkazech REPEAT - UNTIL, WHILE - DO, IF- THEN;

•	jako podmínka viditelnosti nebo podmínka aktivity složky pohledu, jako integritní omezení ve formuláři , dále při definování položek menu.

Hodnota výrazu musí být typu Boolean. Takovouto hodnotu mají:

•	konstanty FALSE a TRUE;

•	všechny proměnné a sloupce typu Boolean;

•	výsledky operací OR, AND a NOT;

•	výsledky relací   <,  <=,  >,  >=,  =,  <>,  .=,  .=.,  ~;

•	hodnoty funkcí typu Boolean, ať už definovaných uživatelem nebo standardních (např. funkce Odd).

Výraz typu Boolean se vyhodnocuje dle všeobecně platných priorit operátorů. Vzhledem k tomu, že operace AND a OR mají vyšší prioritu než relace rovnosti a nerovnosti, nelze ve výrazech jako:

(A < 5) and (B >= 17)

vynechat žádné závorky!

Viz také:

 Programy

 Vnitřní programovací jazyk


Struktura programu ve vnitřním jazyce

Program ve vnitřním jazyce se skládá z deklarační části a těla.

Deklarační část je posloupnost deklarací konstant, typů, proměnných, tabulek, kurzorů, procedur a funkcí uvedených v libovolném pořadí. Tělo je složeným příkazem a je ukončeno tečkou. Za touto tečkou již nesmí nic následovat

V procedurách a funkcích lze deklarovat jejich lokální konstanty, typy a proměnné, ale nelze v nich deklarovat tabulky, kurzory ani (na rozdíl od Pascalu) lokální procedury a funkce.

Mezi kterýmikoliv dvěma symboly programu lze umístit komentář. Komentář začíná levou složenou závorkou ( { ) a končí pravou složenou závorkou ( } ). Komentář může být také označen dvěma lomítky ( // ) - vše, co se nachází od lomítek do konce řádku, je komentář.

Pokračování:	Deklarace
	Složený příkaz.
Viz také	Programy
	Vnitřní programovací jazyk


Kompilační direktivy a makra

Do programu ve vnitřním programovacím jazyce lze vkládat tzv. direktivy, které umožňují překládání pouze vybraných částí programu, definování a rozvíjení maker, vkládání jednoho programu do druhého nebo snadné zařazování SQL příkazů do programu.

Direktivy se zapisují (stejně jako v jazyce C) na zvláštní řádku ve tvaru:

#jméno_direktivy parametry

přičemž znak # musí být na začátku řádky - v prvním sloupci.

Alternativně lze direktivy zapisovat také způsobem používaným v jazyce Delphi, a to na začátku komentáře takto:

{$jméno_direktivy parametry ... }

Pokud nejde o direktivy define nebo sql, pak případný text, následující za direktivou uvnitř komentářových závorek, se ignoruje. Jména direktiv lze psát velkými i malými písmeny.

Oblasti, kde lze direktiv využít:

 Podmíněný překlad (#if, #else, #endif, #define,...)

 Definice maker (#define)

 Vložení programu do programu (#include)

 Vložení příkazů SQL do programu (#sql, #sqlbegin, #sqlend)

Viz také:

 Programy

 Vnitřní programovací jazyk


Podmíněný překlad

Podmíněný překlad znamená, že některé části programu uzavřené mezi direktivami, se překládají pouze při splnění určitých podmínek. Podmíněný překlad se využívá tehdy, když je potřeba mít v jednom zdrojovém programu více variant chování. Direktivy řídící podmíněný překlad vytvářejí v programu takového struktury:

#if podmínka1

... sekce A ...

#elif podmínka2

... sekce B ...

#else

... sekce C ...

#endif

Ze sekcí programu umístěných mezi direktivami se přeloží pouze (nebo nejvýše) jedna, přičemž každá sekce může být tvořena libovolným počtem řádek programu. Je-li splněna podmínka1, přeloží se sekce A. Pokud podmínka1 není splněna a je splněna podmínka2, přeloží se sekce B. Jinak se přeloží sekce C. Direktiva elif a následující sekce B se může opakovat libovolný počet krát, přeloží se sekce následující za první splněnou podmínkou. Direktivy elif a else a za nimi následující sekce B resp. C se nemusí použít vůbec. Není-li použita direktiva else, pak není-li splněna žádná podmínka, nepřeloží se žádná sekce.

Podmínka smí mít jeden ze tří tvarů:

•	celé číslo - podmínka je splněna, pokud má nenulovou hodnotu;

•	řetězec znaků - podmínka je splněna, pokud je neprázdný;

•	dvojice celých čísel nebo dvojice řetězců spojena operátorem = nebo <> - podmínka je splněna, pokud obě hodnoty jsou si rovny resp. nerovny.

V podmínce se smějí vyskytovat také identifikátory definované direktivou define.

Příklad:

//#define STATUS "DEMO"

#define STATUS "VYVOJ"

#if STATUS = "VYVOJ"

  Info_box("","vývoj");

#elif STATUS = "DEMO"

  Info_box("","demo");

#else

  Info_box("","norm");

#endif

Kromě direktivy if lze pro zahájení podmíněného překladu použít také direktivy:

#ifdef ident - podmínka je splněna, pokud je ident definován direktivou define,

#ifndef ident - podmínka je splněna, pokud ident není definován direktivou define.

Konstrukce podmíněného překladu lze do sebe libovolně zanořovat bez omezení hloubky.

Příklad:

Procedure Výpočet;

begin

#ifdef LADĚNÍ

  Info_box("Ladění", "Začátek procedury Výpočet");

#endif

.....

Řádek obsahující volání procedury Info_box se přeloží pouze tehdy, pokud je dříve v programu uvedena direktiva

#define LADĚNÍ

Viz také:	Kompilační direktivy a makra


Definice maker

Pomocí direktivy define lze definovat makra, tedy specifikovat, že se v programu má určitý identifikátor nahrazovat jinými symboly. Direktiva ve tvaru:

#define ident rozvoj_makra

způsobí, že od tohoto místa v programu se všechny výskyty identifikátoru ident nahradí rozvojem makra, což je posloupnost libovolných symbolů.

Definovat lze také makro s parametry ve tvaru:

#define ident(par1, par2, ...)  rozvoj_makra

V tomto případě se makro volá s parametry takto:

ident(sp1, sp2, ...)

a toto volání se nahradí rozvojem makra, v němž se každý výskyt par1 nahradí sp1, výskyt par2 nahradí sp2 atd. Při volání makra je nutno uvést stejný počet parametrů, jako v definici makra.

V makrech se nerozlišuje mezi velkými a malými písmeny. Makra bez parametrů se používají zejména pří řízení podmíněného překladu. Pro označování konstantních hodnot je vhodnější používat místo nich deklarace konstant. Makra s parametry zjednodušují zápis opakujících se programových konstrukcí.

Definici makra lze kdykoli změnit tak, že se použije nová direktiva #define pro stejný identifikátor. Definici lze zrušit pomocí direktivy:

#undef ident

Příklad:

Budiž definováno makro:

#define CHYBA(text) begin Info_box("Nastala chyba", text);  halt end

Pokud v textu programu použijete zápis:

if i<0 then CHYBA("Nepřípustná vstupní hodnota");

přeloží se jako zápis:

if i<0 then begin Info_box("Nastala chyba", "Nepřípustná vstupní hodnota");  halt end;

Předdefinovaná makra

Ve vnitřním programovacím jazyce jsou předdefinována tato makra:

_WINBASE602_ - hodnotou je řetězec obsahující číslo verze klienta WinBase602, v současné verzi je to "6.0". Ve dřívějších verzích není makro použitelné, nelze tedy rozlišovat verze nižší než 6.0! V budoucích verzích však bude možné pomocí této direktivy překládat program pro různé verze WinBase602.

_LANGUAGE_ - hodnotou je řetězec znaků obsahující název zvoleného jazyka (jak jste si zvolili); pokud aplikace není vícejazyčná nebo pokud není zvolen žádný jazyk, pak je to prázdný řetězec

Příklad:

#if _LANGUAGE_ = "english"

PrepocetNaPalce;

#elif _LANGUAGE_ = "cestina"

PrepocetNaMetry;

#endif

Viz také:	Kompilační direktivy a makra


Vložení programu do programu

Direktiva include umožňuje, aby se na určité místo programu vložil text uložený v databázi v samostatném objektu. Direktiva se zapisuje:

#include jméno_programu

nebo zkráceně:

#i jméno_programu

Příklad:

#i I_deklarace

je totéž co

{$I I_deklarace}

Viz také:	Kompilační direktivy a makra
	Include


Vložení příkazů SQL do programu

Pro vložení jednořádkového SQL příkazu do programu slouží direktiva sql. Zapisuje se takto:

#sql příkazy v jazyce SQL

Příklad:

#sql CALL ZrusitReservaci(:<limitRez)

nebo místo

if YesNo_box("Varování",syesno) then begin

   sdel := "DELETE FROM Registr WHERE cislo="+Int2str(cisadr);

   if SQL_execute(sdel) then Signalize;

lze psát

if YesNo_box("Varování",syesno) then begin

#sql DELETE FROM Registr WHERE cislo=:<cisadr

Pokud chcete zadat příkazy na více řádkách, použijte direktivy sqlbegin a sqlend takto:

#sqlbegin

příkazySQL

......

příkazy SQL

#sqlend

Takto zadané příkazy SQL se provedou stejně, jako kdyby byly uvedeny jako parametr funkce SQL_execute. Zadáte-li více příkazů v jedné direktivě, všechny se provedou v jedné transakci. Informaci o případné chybě při jejich provádění lze zobrazit v okně pomocí funkce Signalize.

Příklad:

#sqlbegin

 BEGIN ATOMIC "

   DECLARE i INT;

   SET i = 1;

   WHILE i <= 10 DO

    INSERT INTO Tab3 (cislo) VALUES (i);

    SET i = i + 1;

   END WHILE;

 END

#sqlend

Viz také:	Kompilační direktivy a makra
	SQL ve vnitřním programovacím jazyce


Konstanty označující hodnoty NONE
Konstanty označující hodnotu NONE

Pokud proměnná nebo databázový sloupec mají hodnotu NONE (v SQL NULL), pak se v textové podobě na obrazovce nebo v sestavě objevují jako prázdné pole.

Hodnotu NONE ve formuláři můžete zapsat tak, že smažete obsah složky.

Ve vnitřním programovacím jazyce se hodnota NONE zapíše v závislosti na typu jedním z těchto standardních identifikátorů konstant:

NONEBOOLEAN  (typ Boolean)

NONECHAR  (typ Char)

NONESHORT  (typ Short)

NONEINTEGER  (typ Integer)

NONEMONEY  (typ Money)

NONEREAL  (typ Real)

NONEDATE  (typ Date)

NONETIME  (typ Time)

NONETIMESTAMP  (typ Timestamp)

NONEPTR  (typy ukazatel: Pointer a Biptr)

Pro řetězce znaků se NONE zapíše jako prázdný řetězec (dvě uvozovky za sebou).

Viz také:

 Vnitřní programovací jazyk

 Přehled typů


Standardní konstanty vnitřního jazyka
Standardní konstanty vnitřního programovacího jazyka

Ve vnitřním programovacím jazyce jsou předdefinovány tyto konstanty:

FALSE a TRUE: hodnoty typu Boolean;

NO_REDIR: konstanta, která při otevírání formuláře nebo tisku sestavy nahrazuje kurzor, pokud se neprovádí přesměrování pohledu (zachová se zdroj dat z definice);

NIL: konstanta, která může nahradit parametr předávaný referencí u některých standardních procedur;

NO_MOVE, NO_EDIT, NO_DELETE, NO_INSERT, COUNT_RECS, DEL_RECS, AUTO_CURSOR, MODAL_VIEW, QUERY_VIEW, PARENT_CURSOR, MODELESS_VIEW: konstanty, které lze předat jako parametr flags při otevírání formuláře - viz Parametry otevření formuláře.

RESET_VISIBILITY, RESET_CONTROLS, RESET_DELETIONS, RESET_CACHE, RESET_CURSOR, RESET_SYNCHRO: konstanty specifikující rozsah činnosti procedury Reset_view.

NONE...: označení "prázdné" hodnoty, viz konstanty NONE.

CATEG_TABLE, CATEG_VIEW, CATEG_CURSOR, CATEG_MENU, CATEG_PGMSRC, CATEG_PGMEXE, CATEG_USER, CATEG_APPL, CATEG_PICT, CATEG_GROUP, CATEG_ROLE, CATEG_CONNECTION, CATEG_RELATION, CATEG_DRAWING, CATEG_GRAPH, CATEG_REPLREL, CATEG_PROC, CATEG_TRIGGER, CATEG_WWW, CATEG_SEQ, IS_LINK: kategorie objektů aplikace.

CATEG_USER, CATEG_GROUP, CATEG_SERVER (replikační server) a CATEG_KEY (klíč): kategorie objektů databáze.

RIGHT_READ, RIGHT_WRITE, RIGHT_INSERT, RIGHT_DEL, RIGHT_GRANT: konstanty určující jednotlivá práva.

OPER_GET, OPER_GETEFF, OPER_SET - typ operace užívané ve funkcích GetSet_next_user, GetSet_privils, GetSet_group_role, GetSet_fil_size

VT_NAME, VT_UUID, VT_OBJNUM - způsob identifikace uživatele ve funkci GetSet_next_user

Viz také:

 Vnitřní programovací jazyk


Příznaky otevření formuláře

Při otevírání formuláře pomocí funkcí Open_view, Select_records nebo Bind_records lze mu předat jako parametr flags některé z níže uvedených předdefinovaných konstant. Konstanty ovlivňují chování otevřeného formuláře - přičtou se k hodnotám zadaným již při návrhu. Pokud zadáváte více než jednu z těchto konstant, spojte je operátorem plus (+) - konstanty mají celočíselné hodnoty. Pokud nechcete zadat žádnou, hodnota parametru flags bude 0 (formulář se otevře tak, jak byl navržen).

Hodnotu těchto parametrů lze v otevřeném formuláři zjistit pomocí funkce Get_fcursor nebo změnit pomocí funkce Set_fcursor.

NO_EDIT - znemožňuje editaci ve formuláři;

NO_INSERT - znemožňuje vkládání nových záznamů do formuláře;

NO_DELETE - znemožňuje rušení záznamů ve formuláři;

NO_MOVE - znemožňuje přechody mezi záznamu ve formuláři;

AUTO_CURSOR - způsobí, že po uzavření formuláře bude automaticky uzavřen kurzor, na nějž je formulář přesměrován (pomocí parametru base).

DEL_RECS - způsobí, že ve formuláři do tabulky budou i zrušené záznamy z tabulky a ve formuláři do kurzoru budou i záznamy, které byly zrušeny za dobu práce s kurzorem, a jejich složky budou přepsány slovem Zrušeno.

COUNT_RECS - zajistí, že WinBase602 ihned po otevření formuláře spočte jeho záznamy a díky tomu bude schopna správně umístit táhlo na jeho pravém okraji a označení pozice aktuálního záznamu;

MODAL_VIEW - otevře formulář jako modální okno, všechna ostatní okna WinBase602 včetně lišty s tlačítky jsou blokována až do uzavření tohoto formuláře;

QUERY_VIEW - otevře speciálně navržený formulář sloužící k zadání QBE dotazu;

PARENT_CURSOR formulář použije kurzor (zdroj dat) formuláře, předaného jako parametr parent a nastaví se při otevření na stejný záznam. Při změně pozice v jednom formuláři se synchronně změní pozice i ve formuláři druhém. Mezi oběma formuláři lze přecházet.

MODELESS_VIEW - formulář se otevře jako tzv. popup okno. Může ležet i mimo hranice hlavního okna aplikace. Nachází se vždy nad všemi nemodálními okny. Dá se využít např. jako plovoucí panel obsahující ovládací tlačítka. Na rozdíl od modálního okna je možné se mezi popup oknem a ostatními okny přepínat.

Viz také:

 Programy

 Vnitřní programovací jazyk

 Objektové programování formulářů


Číselník chyb WinBase602

Provádění každé databázové operace může být buď úspěšné, nebo neúspěšné. Neúspěšné provádění nazýváme chybou. Kromě chyb může server při provádění některých operací ohlásit také varování.

Chyby jsou očíslovány. Číslo chyby vypovídá o příčině. Výskyt a číslo chyby při provádění poslední operace (databázové, chyby vrstvy formulářů a menu se takto zjistit nedají) lze zjistit zavoláním funkce Sz_error nebo získat slovní popis chyby zavoláním funkce Signalize.

V tabulce je uvedeno: jméno chyby, číslo, kterou vrací funkce Sz_error a popis chyby.

NO_ERROR	0	operace proběhla bez chyby
NOT_ANSWERED	255	operace dosud není provedena
BAD_MODIF	128	záznam v parametru access u funkcí Read a Write udává neproveditelný krok - ve vnitřním jazyce se projevuje při práci s multiatrubuty a sloupci proměnné velikosti jako s normálními sloupci nebo naopak.
NO_RIGHT	129	uživatel nemá dostatek práv na provedení operace
BAD_ELEM_NUM	130	chybné číslo sloupce - může se např. objevit, když formuláři vyvtvořenému do zdroje dat vnutíme proměnný kurzor s jinými sloupci apod.
OUT_OF_TABLE	131	číslo záznamu zadané ve funkci pro čtení nebo zápis je mimo rozsah záznamů v tabulce nebo kurzoru
TABLE_FULL	132	interní chyba - neměla by nastat
CURSOR_MISUSE	133	chybné číslo kurzoru - pokus o použití cizího nebo zavřeného kurzoru - častá chyba při nesprávném zavírání kurzorů v programu
BAD_OPCODE	134	chybný kód služby - interní chyba
CANNOT_APPEND	135	pokoušíte se vložit záznam do kurzoru, u něhož to není možné (např. vytvořený JOINem)
NOT_LOCKED	136	nelze vložit zámek (zamknout) na daný záznam, nejspíš proto, že s objektem někdo pracuje
NOT_A_POINTER	137	sloupec není databázový ukazatel, nelze přejít pomocí ^
INDEX_OUT_OF_RANGE	138	zadaný index multiatributu je mimo rozsah daný definicí tabulky
NOT_A_RECORD	139	interní chyba
EMPTY	140	nelze obnovit záznam pomocí Undelete
	141	rezervováno
BAD_PASSWORD	142	chybné heslo při přihlašování
PTR_TO_DELETED	143	databázový ukazatel ukazuje na zrušený záznam
NIL_PTR	144	databázový ukazatel nikam neukazuje
OUT_OF_KERNEL_MEMORY	145	vyčerpána operační paměť
	146	rezervováno
IS_DELETED	147	zápis do zrušeného záznamu
BAD_CURDEF	148	chyba v definici kurzoru
OBJECT_NOT_FOUND	149	objekt v aplikaci nenalezen
OUT_OF_APPL_MEMORY	150	vyčerpání paměti na straně aplikace
BAD_DATA_SIZE	151	chybná délka zapisovaných dat
UNREADABLE_BLOCK	152	nečitelný diskový blok - interní chyba
DEMO_VERSION	153	pracujete s demonstrační verzí, maximální počet záznamů v tabulce je 200 - zastaralé
OUT_OF_BLOCKS	154	vyčerpáno místo na disku, vážná chyba, která může poškodit databázový soubor.
REQUEST_BREAKED	155	operace zrušena uživatelem
OS_FILE_ERROR	157	chyba při práci se souborem, nelze otevřít nebo vytvořit nebo je špatně zadaná cesta apod.
INCOMPATIBLE_VERSION	158	nekompatibilita verzí klienta a serveru
REJECTED_BY_KERNEL	159	jádro odmítá splnit požadavek (např. proto, že uživatel není přihlášen)
MUST_NOT_BE_NULL	160	pokus o zapsání hodnoty NONE (NULL) do slupce, který to nemá povoleno
NO_BITAB	161	tabulka, do níž vede obousměrný ukazatel, neobsahuje ukazatel zpět
NO_MY_RIGHT	162	uživatel poskytuje práva, která nemá
TABLE_DAMAGED	168	definice tabulky je vážně poškozená
CANNOT_LOCK_KERNEL	169	nelze uzamknout server pro provedení operace, na server jsou připojení uživatelé
DEADLOCK	171	deadlock, vzájemné zablokování klientů
KEY_DUPLICITY	172	duplicita klíčů v jedinečném indexu
BAD_VERSION	173	nesouhlasí číslo verze klienta a serveru
CHECK_CONSTRAIN	174	porušeno integritní omezení v tabulce
REFERENTIAL_CONSTRAIN	175	porušena referenční integrita mezi tabulkami
UNPROPER_TYPE	176	typ sloupce (např. OLE) není vhodný pro agregační funkci
OUTER_JOIN_TOO_COMPLEX	177	příliš složité vnější relační propojení
REQUEST_NESTING	178	vnoření požadavku klienta na server
CANNOT_FOR_ODBC	179	operace není vhodná pro ODBC kurzor
ERROR_IN_FUNCTION_ARG	180	chyba v argumentu funkce
ODBC_CURSOR_NOT_OPEN	181	zadaný ODBC kurzor není otevřen
DRIVER_NOT_CAPABLE	182	ODBC driver není schopen požadované operace
TOO_COMPLEX_TRANS	183	příliš složitá transakce
INTERNAL_SIGNAL	184	interní signál (nejde o chybu)
PRIV_KEY_NOT_FOUND	185	soukromý klíč nenalezen
NO_WRITE_TOKEN	186	nemám přepisovacího peška
WAITING_FOR_ACKN	187	čekám na potvrzení předchozí replikace
REPL_BLOCKED	188	replikace dosud nebyla odblokována protější stranou
BAD_TOKEN_STATE	189	pešek je v nepřípustném stavu
BAD_TABLE_PROPERTIES	190	tabulka nemá potřebné vlastnosti
INDEX_DAMAGED	191	index je poškozen
PASSWORD_EXPIRED	192	vypršela platnost hesla, nutno zadat nové
NO_KEY_FOUND	193	nelze podepisovat, protože nemáte certifikovaný klíč
DIFFERENT_KEY	194	nelze podepsat, použili jste nesprávný klíč
ASSERTION_FAILED	195	interní chyba
SQ_INVALID_CURSOR_STATE	196	neplatný stav kurzoru
SQ_SAVEPOINT_INVAL_SPEC	197	neplatné označení savepointu
SQ_SAVEPOINT_TOO_MANY	198	překročen limit na počet savepointů
SQ_TRANS_STATE_ACTIVE	199	transakce je již zahájena
SQ_INVAL_TRANS_TERM	200	nedovolené ukončení transakce v atomickém příkazu
SQ_TRANS_STATE_RDONLY	201	tato transakce nesmí modifikovat data
SQ_NUM_VAL_OUT_OF_RANGE	202	číselná hodnota mimo povolený rozsah
SQ_INV_CHAR_VAL_FOR_CAST	203	nepřípustný znak znemožňuje konverzi typu
SQ_STRING_DATA_RIGHT_TRU	204	řetězec znaků je příliš dlouhý, seříznut zprava
SQ_DIVISION_BY_ZERO	205	dělení nulou v SQL příkazu
SQ_CARDINALITY_VIOLATION	206	odpověď obsahuje jiný počet záznamů než jeden
SQ_INVALID_ESCAPE_CHAR	207	chyba v určení znaku ESCAPE
SQ_CASE_NOT_FOUND_STMT	208	SQL příkaz CASE neobsahuje vhodnou větev
SQ_UNHANDLED_USER_EXCEPT	209	uživatelem definovaná výjimka není ošetřena
SQ_RESIGNAL_HND_NOT_ACT	210	příkaz RESIGNAL použit mimo ošetření výjimky
SQ_EXT_ROUT_NOT_AVAIL	211	externí rutina nebo knihovna nebyla nalezena
SQ_NO_RETURN_IN_FNC	212	v SQL funkci nebyl proveden příkaz RETURN
COLUMN_NOT_EDITABLE	213	pokoušíte se přepsat sloupec dotazu, který je tvořen výrazem a není tedy editovatelný
SQ_TRIGGERED_ACTION	214	chyba v akci spuštěné triggerem
REPLICATION_NOT_RUNNING	215	replikace není zapnuta
REPL_MAIL_ERROR	216	obecná chyba elektronické pošty při replikování
SQ_INVALID_CURSOR_NAME	217	kurzor tohoto jména neexistuje
ROLE_FROM_DIFF_APPL	218	pokoušíte se nastavovat práva k rolím z jiné aplikace (může nastat při sdílení back-endu nebo front-endu)
SEQUENCE_EXHAUSTED	219	sekvence dosáhla maximální hodnoty a není zapnuto cyklování
NO_CURRENT_VAL	220	CURVAL bylo provedeno před NEXTVAL, není k dispozici
NO_WWW_LICENCE	221	není zakoupená Internetová licence pro WWW přístup
NO_MORE_INTRANET_LICS	222	málo intranet licencí, další klient odmítnut
LIBRARY_ACCESS_DISABLED	223	volána externí funkce z nepovoleného adresáře
LIBRARY_NOT_FOUND	224	externí DLL nebyla nalezena

Chyby začínající SQ_ - viz Chyby v SQL

Čísla chyb větší než 500 znamenají chyby při používání poštovních funkcí.

Čísla chyb větší než 1000 znamenají chyby při překladu (programu, SQL příkazu apod.). Při překladu SQL příkazu (za běhu programu) se chyby zjišťují funkcí Signalize (Sz_error), v ostatních případech se vysvětlující text k chybě promítne současně s nalezením.

Čísla chyb větší než 2200 znamenají běhové chyby. Při chybě v SQL příkazu (za běhu programu) se chyba zjišťuje funkcí Signalize (Sz_error), v ostatních případech se vysvětlující text k chybě promítne současně s výskytem.

Viz také:

 Programy


Chyby při překladu

Čísla chyb v rozmezí 1000 až 2000 znamenají chyby při překladu (programu, SQL příkazu apod.). Při překladu SQL příkazu (za běhu programu) se chyby zjišťují funkcí Signalize (Sz_error), v ostatních případech se vysvětlující text k chybě promítne současně s nalezením (v editoru při překladu programu, v návrháři dotazů při testu apod.).

V tabulce je uvedeno vždy číslo chyby a její popis:

1003	Neuzavřený komentář

1004	Řetězec znaků přesahuje řádku (zřejmě chybí ukončovací uvozovky)

1005	Řetězec znaků je příliš dlouhý

1006	Očekávám typ

1007	Očekávám levou hranatou závorku ( [ )

1008	Očekávám pravou hranatou závorku ( ] )

1009	Očekávám operátor dvě tečky (výběr z multiatributu)

1010	Očekávám celé číslo

1011	Očekávám 'of'

1012	Chyba v mezích pole

1013	Pole je příliš velké

1014	Očekávám identifikátor

1015	Očekávám rovnítko

1016	Nepřípustný znak v textu programu

1017	Očekávám čárku

1018	Očekávám středník nebo 'end'

1019	Očekávám středník

1020	Očekávám deklaraci nebo 'begin'

1021	Podprogramy nelze vnořovat

1022	Očekávám levou závorku

1023	Očekávám pravou závorku

1024	Očekávám dvojtečku

1025	Identifikátor označuje nepřípustný objekt

1026	Výraz musí být typu Boolean

1027	Očekávám 'do'

1028	Očekávám ':='

1029	Očekávám číslo

1030	Musí být celočíselného typu

1031	Nepřípustná operace

1032	Typy nejsou kompatibilní

1033	Peníze nelze navzájem násobit

1034	Není typu záznam

1035	Není to ukazatel

1036	Není typu pole

1037	Identifikátor není deklarován

1038	Očekávám identifikátor složky záznamu

1039	Index musí být celočíselného typu

1040	Očekávám 'then'

1041	Očekávám čárku nebo dvojtečku

1042	Příliš mnoho parametrů

1043	Očekávám tečku

1044	Číslo je příliš velké

1045	Očekávám příkaz

1046	Příliš rozsáhlé proměnné

1047	Příliš velká proměnná

1048	Chyba na konci

1049	Identifikátor deklarován dvakrát

1050	Funkce musí vracet jednoduchý typ nebo řetězec

1051	Chyba ve výstupu kódu - není dost paměti?

1052	Chyba na konci

1053	Vnořený přístup do databáze

1054	Chybná délka

1055	Chybný index

1056	Typ není strukturovaný

1057	Pohled neexistuje

1058	Chyba při čtení definice z databáze

1059	Není dost paměti

1060	Očekávám 'to' nebo 'downto'

1061	Nedefinovaný sloupec

1062	Očekávám faktor

1063	Dotaz neexistuje

1064	Nepřípustný argument agregační funkce

1065	Chyba v konstantě typu TIME

1066	Chyba v konstantě typu DATE

1067	Chybné databázové přiřazení

1068	Není to sloupec proměnné velikosti

1069	Tabulka neexistuje

1070	Chybný argument příkazu ACTION

1071	Očekávám obrácené lomítko

1072	Očekávám klíčové slovo UNTIL

1073	Nesprávný projekt

1074	Očekávám klíčové slovo END

1075	Nespecifická chyba v definici pohledu

1076	Očekávám řetězec znaků

1077	Nespecifická chyba

1078	Číslo mimo povolený rozsah

1079	Příliš složitý pohled

1080	Očekávám klíčové slovo definice

1081	Špatný identifikátor

1082	Chybné pořadí skupin

1083	Příliš mnoho složek pohledu

1084	Očekávám složku pohledu

1085	Chyba v definici dotazu

1086	Příliš mnoho složek menu

1087	Include neexistuje

1088	Příliš mnoho vnořených include

1089	Duplicita identifikací složek pohledu

1091	Příliš mnoho sloupců

1092	Příliš mnoho indexů k tabulce

1093	Není definován žádný sloupec

1094	Pro tento typ sloupce nelze použít [ ]

1095	Dva sloupce se jmenují stejně

1096	Index má příliš mnoho částí, maximum je 8

1097	V indexu je sloupec nepřípustného typu nebo multiatribut

1098	Klíč indexu je příliš dlouhý

1099	Chyba v syntaxi definice tabulky resp. indexu

1100	Index je příliš složitý

1101	Příliš mnoho tabulek v dotazu

1102	V dotazu chybí FROM

1103	Očekávám jméno tabulky

1104	Chyba v syntaxi dotazu

1105	Chyba v predikátu

1106	Očekávám SELECT

1107	Očekávám FROM nebo čárku

1108	Klauzule WHERE ani GROUP BY nesmí obsahovat agregovanou funkci

1109	Nelze vnořovat agregované funkce

1110	Hvězdičku lze použít pouze ve funkci COUNT(*)

1111	Chybná syntaxe dotazu v jazyce SQL

1112	Po BETWEEN očekávám slovo AND

1113	Očekávám OUTER

1114	Očekávám JOIN

1115	Chyba v klauzuli FROM

1116	Po ORDER resp. GROUP očekávám slovo BY

1117	Chybné jméno typu

1118	Syntaktická chyba v popisu tabulky

1119	Po PRIMARY resp. FOREIGN očekávám slovo KEY

1120	Struktura kurzoru není známa

1121	Očekávám REFERENCES

1122	Sloupec nenalezen

1123	Po DOUBLE očekávám slovo PRECISION

1124	Po NOT očekávám slovo NULL

1125	Toto není příkaz jazyka SQL

1126	Očekávám TO

1127	Očekávám ON

1128	Očekávám INTO

1129	Očekávám VALUES

1130	Argument agregované funkce je nepřípustného typu

1131	Očekávám SET

1132	Kurzor není editovatelný nebo vznikl z více tabulek. Nelze rušit záznamy.

1133	Kurzor není editovatelný. Nelze modifikovat jeho obsah

1134	Uvedeno příliš mnoho hodnot v příkazu INSERT

1135	Dotazy spojené UNION mají nekompatibilní klauzule SELECT

1136	Dotazy spojené UNION mají příliš rozdílné klauzule SELECT

1137	Neplatné číslo pozice v klauzuli ORDER BY

1138	Agregované funkce nelze použít v ORDER BY, nahraďte jménem sloupce (AS)

1139	Očekávám UPDATE

1140	Tento kurzor není editovatelný

1141	Cílová tabulka neobsahuje vhodný index

1142	Duplicita jmen sloupců v popisu tabulky

1143	Tabulka nemůže mít dva primární klíče

1144	Očekávám INDEX

1145	Očekávám AS

1146	Ke sloupci nemáte právo čtení

1147	Tabulka neobsahuje vhodný index

1148	Chyba v příkazu SELECT ve složce combo

1149	Podprogram je příliš velký

1150	Kurzor není editovatelný nebo vznikl z více tabulek. Nelze do něj vkládat.

1151	Chyba v implicitní hodnotě sloupce

1152	Nemáte právo přepisovat tento sloupec

1153	Rekurze v definici kurzoru

1154	Chybný znak v binárním literálu

1155	Funkce má předsunutou deklaraci (FORWARD), ale není později deklarovaná

1156	Není deklarován typ, na nějž se používá ukazatel

Viz také:

 Programy

 Číselník chyb WinBase602


Běhové chyby

Čísla chyb větší než 2200 znamenají běhové chyby. Při chybě v SQL příkazu (výjimečně, za běhu programu) se chyba zjišťuje funkcí Signalize (Sz_error), v ostatních případech se vysvětlující text k chybě promítne současně s výskytem.

2200	Nedefinovaná instrukce (poškozený kód)

2201	Přetečení zásobníku (příliš složitý výraz)

2202	Funkce nenalezena v DLL

2203	DLL knihovna nebyla nalezena

2206	Přechod pres ukazatel s hodnotou NIL

2208	Sloupec neexistuje

2209	Vyčerpána běhová paměť

2210	Aritmetická chyba

2211	Přerušeno klávesou Ctrl+Break

2212 	Objekt neexistuje

2213	Vyčerpána dynamicky alokovaná paměť

2214	Nemáte právo spustit program

2216	Nelze konvertovat beztypovou hodnotu

2217	Překročení mezí pole

Viz také:

 Programy

 Číselník chyb WinBase602


Seznam varování

Význam varování pro programátory není velký. Varování signalizuje, že některá speciální operace byla provedena za nezvyklých podmínek. Varování samo o sobě není chybou, operaci lze považovat za úspěšně provedenou. Číslo varování vrací funkce Sz_warning.

V následující tabulce je uvedeno: jméno varování, číslo, kterou vrací funkce Sz_warning a popis varování.

NO_WARNING	0	bez chyby a bez varování
WAS_IN_TRANS	1	operace provedena uvnitř transakce
NOT_IN_TRANS	2	operace provedena mimo transakci
ERROR_IN_CONSTRS	3
IS_NOT_DEL	4	záznam není zrušený
ERROR_IN_DEFVAL	5
IS_DEL	8	záznam je zrušený
IS_EMPTY	16	záznam je prázdný
NO_BIPTR	32
INDEX_OOR	64	index mimo počet hodnot multiatributu
DUPL_KEY	96	duplicita klíčů při vytváření jedinečného indexu
IS_ERROR	128	nastala chyba, varování se nehlásí
Viz také:

 Programy

 Číselník chyb WinBase602


Konstanty kategorií objektů

Tyto konstanty označují jednotlivé kategorie objektů WinBase602. Jsou to konstanty (typu Integer):

CATEG_TABLE	tabulka	0
CATEG_VIEW	pohled (formulář, sestava, štítek)	2
CATEG_CURSOR	kurzor (dotaz)	3
CATEG_MENU	menu	6
CATEG_PGMSRC	zdrojový program	4
CATEG_PGMEXE	přeložený program	5
CATEG_APPL	aplikace	7
CATEG_PICT	obrázek	8
CATEG_ROLE	role v aplikaci	10
CATEG_CONNECTION	ODBC napojení	11
CATEG_RELATION	relace	12
CATEG_DRAWING	schéma	13
CATEG_GRAPH	graf	14
CATEG_REPLREL	replikační vztah	15
CATEG_PROC	uložená procedura	16
CATEG_TRIGGER	trigger	17
CATEG_WWW	WWW objekt	18
CATEG_SEQ	sekvence	20
IS_LINK	příznak spojovacího objektu	128
CATEG_USER	uživatel	1
CATEG_GROUP	skupina uživatelů	9
CATEG_SERVER	replikační server	26

Tyto konstanty se používají v programovacím jazyce jako parametry funkcí Find_object, Insert_object, Set_object_rights, Get_object_rights.

POZOR! Sloupec CATEGORY v systémových tabulkách je typu Char, proto při porovnávání nezapomeňte provést konverzi funkcemi Ord nebo Chr.

Příklad:

 SELECT logname

 FROM USERTAB

 WHERE (Usertab.category=Chr(CATEG_USER))

Viz také:

 Programy


Popis přístupových práv

Platí od verze 5.0

Hodnota aktuálního nastavení práv se zapisuje do struktury o délce 65 bajtů. Práva jsou vyjádřena jednotlivými bity tak, že hodnota 1 značí přítomnost práva a 0 absenci práva. První bajt má význam pouze při specifikování práv tabulky jako celku. Obsahuje údaje týkající se všech záznamů a všech sloupců. V dalších 64 bajtech jsou specifikována práva pro jednotlivé sloupce. Lze je zadat jak na úrovni celé tabulky, tak i pro určitý záznam.

Globální práva

Jednotlivé bity prvního bajtu mají tento význam:

označení	hodnota	význam	pozn.
RIGHT_READ	1	právo číst data v celé tabulce	#
RIGHT_WRITE	2	právo přepisovat data v celé tabulce	#
RIGHT_INSERT	4	právo přidávat nové záznamy do tabulky
RIGHT_DEL	8	právo rušit záznamy v tabulce
RIGHT_GRANT	128	právo poskytovat (vlastní) práva
RIGHT_NEW_READ	16	poskytnout právo číst k novým záznamům	*
RIGHT_NEW_WRITE	32	poskytnout právo přepisovat k novým záz.	*
RIGHT_NEW_DEL	64	poskytnout právo zrušit záznam k novým záz.	*
Práva označená křížkem (#) lze používat pro nastavení pouze do verze 4.32, pro zjištění i ve verzi 5.0. Od verze 5.0 je nutné právo číst a přepisovat celou tabulku nahradit právem číst a přepisovat jednotlivé sloupce.

Práva označená hvězdičkou (*) se týkají záznamů (tabulky se záznamovými právy), které budou v budoucnu vloženy do tabulky. Pro každý vložený záznam bude skupině EVERYBODY na základě nastavení těchto bitů přiděleno právo číst všechny sloupce, přepisovat všechny sloupce resp. zrušit tento záznam. Má smysl je přidělovat pouze skupině EVERYBODY funkcí GetSet_privils.

Práva ke sloupcům tabulky

Bity dalších (druhého atd.) bajtů v zápisu práv vyjadřují právo číst resp. přepisovat jednotlivé záznamy. Právo číst sloupec s číslem A je vyjádřeno X-tým bitem v N-tém bajtu a právo přepisovat Y-tým bitem v N-tém bajtu, přičemž platí:

N = (A-1) div 4 + 2

X = 2 * ((A-1) mod 4) + 1

Y = X + 1

Sloupce jsou číslovány od 1, bajty jsou číslovány od 1, bity bajtu jsou číslovány od 1. První čtyři sloupce tabulky jsou popsány ve druhém bajtu, další čtyři ve třetím atd.

POZOR! Při zjišťování čísla sloupce nezapomeňte na případné (skryté) systémové sloupce tabulky, které jsou umístěny před normálními sloupce!

Nepředpokládáme nastavování práv k sloupcům za běhu aplikací. Je-li to přesto nutné, uvažujte o možnosti práva nastavit podle již existujících práv, případně interaktivně pomocí funkce Edit_privils.

Práva k obsahu tabulky se přidělují pomocí funkce GetSet_privils. Alternativní cestou je použití SQL příkazu GRANT.

Důležité: Při zjišťování a nastavováné práv k definici objektů funkcí GetSet_privils je nutné brát do úvahy práva ke sloupcům systémové tabulky Tabtab a Objtab, obsahujícím definici (a další údaje). Pro definice objektů neplatí, že v prvních dvou bitech prvního bajtu struktury jsou globální práva. Při zjišťování čtěte bity patřící 6. sloupci tabulky (3. a 4. bit třetího bajtu struktury), při zapisování je nutné nastavit 5. a 6. bit druhého bajtu a 3. až 6. bit třetího bajtu.

Viz také:	Práva ve WinBase602
	Subjekty práv ve WinBase602
	Programy ve vnitřním jazyce - úvod


Tabulky a kurzory jako parametry procedur a funkcí

Při programování WinBase602 je nutno věnovat mimořádnou pozornost tomu, jak se standardním funkcím předávají tabulky a kurzory. V této oblasti může dojít k řadě chyb, protože:

- některé funkce vyžadují kurzor, některé tabulku, a jiné akceptují kurzor i tabulku;

- některé funkce vyžadují předání otevřeného kurzoru, jiné uzavřeného kurzoru, některé pracují s pevným kurzorem, jiné s proměnným.

Informace o tom, co smí být parametrem které funkce, jsou obsaženy nejen v jejím popisu, ale také v typech parametrů.

Ve WinBase602 je možno použít tyto parametry:

•	parametr typu ttablenum

•	parametr typu tcursnum

•	parametr typu tcurstab

•	parametr typu cursor

Viz také:

 Programy

 Vnitřní programovací jazyk


Parametr typu ttablenum

Je-li typ formálního parametru ttablenum, pak skutečným parametrem smí být číslo tabulky obecně získané funkcí Find_object. Ve vnitřním programovacím jazyce je častější předat jako parametr identifikátor tabulky deklarované v programu (tento identifikátor je shodný se jménem, pod nimž je tabulka uložena v databázi - viz příklad).

Parametr tohoto typu mají procedury a funkce: Free_deleted, Compact_table,  Get_data_rights, Set_data_rights, Restore_table, Save_table, Undelete, Enable_index, Edit_privils, GetSet_privils a Uninst_table.

Příklad:

table

  Pokusná;

begin

  if Free_deleted(Pokusná) then Signalize;

...

Viz také:

 Vnitřní programovací jazyk

 Tabulky a kurzory jako parametry


Parametr typu tcursnum

Je-li typ formálního parametru tcursnum, pak skutečným parametrem je otevřený kurzor, tedy pevný kurzor dříve otevřený funkcí Open_cursor (v ext. jazycích funkcí Open_cursor) nebo proměnný kurzor dříve otevřený voláním funkce Open_sql_cursor, Open_sql_parts (v ext. jazycích Open_cursor_direct) nebo získaný z formuláře funkcí Get_fcursor nebo ODBC kurzor otevřený pomocí ODBC_open_cursor.

Vstupní parametr tohoto typu mají procedury a funkce: Close_cursor, Open_view, Select_records, Bind_records, Set_fcursor, Translate, Super_recnum, Add_record, Restrict_cursor (v ext. jazyce Open_subcursor) a Restore_cursor. Poslední dvě z těchto funkcí předaný kurzor pozmění

Výstupní parametr tohoto typu má funkce Get_fcursor.

Některé funkce připouštějí, aby skutečným parametrem tohoto typu byla konstanta NO_REDIR(-1).

Příklad:

var

  cx : cursor;

begin

...

if Get_fcursor(idk,cx,nil) then  // získat číslo otevřeného kurzoru

    if Get_view_pos(idk,irec,erec) then

      Open_view('*EDIT_K',cx,modal_view,-irec,0,id_ek) // použít číslo

...

Viz také:

 Vnitřní programovací jazyk

 Tabulky a kurzory jako parametry


Parametr typu tcurstab

Formální parametr tohoto typu tcurstab připouští stejné skutečné parametry jako formální parametry ttablenum a tcursnum dohromady. Smějí to být tedy deklarované tabulky, čísla tabulek a otevřené deklarované pevné i proměnné kurzory.

Takový parametr mohou mít funkce Append, Insert, Rec_cnt, Delete, Delete_all_records, Data_export, Token_control, GetSet_next_user, všechny funkce, které zamykají a odemykají záznamy a tabulky (Read_lock_record apod.), kurzorové agregační funkce (C_Max apod.) a funkce Look_up.

V externích jazycích se tento typ předává všem funkcím pro čtení (Read,  Read_ind, Read_ind_cnt, Read_var, Read_len a Read_record) a zápis (Write, Write_ind, Write_ind_cnt, Write_var, Write_len a Write_record). Dále Attribute_info, Enum_attributes .

Příklad:

table

  Pokusná;

var

  cx : cursor;

  ...

begin

  rec := Insert(Pokusná);

...

if not Open_sql_cursor(cx,"select * from Pomocná where dat <Today-7") then

  Delete_all_records(cx);

Viz také:

 Vnitřní programovací jazyk

 Tabulky a kurzory jako parametry


Parametr typu cursor

Je-li typ formálního parametru cursor, pak skutečným parametrem smí být kurzor deklarovaný v programu, který není dosud otevřen. Může jít jak o pevný, tak i o proměnný kurzor.

Parametr tohoto typu mají funkce Open_cursor, Open_sql_cursor, Open_sql_parts, Get_fcursor a ODBC_open_cursor.

Po úspěšném provedení kterékoli z těchto funkcí se kurzor, deklarovaný v programu, stane otevřeným kurzorem, a může být předáván jako parametr typu tcursnum.

Příklad:

var

 cpom : cursor;

begin

...

spom := 'SELECT pocet,cis_fakt FROM Pol_prac WHERE cis_fakt='''+fa+'''';

  if Open_sql_cursor(cpom, spom) then Signalize

  else begin

    Rec_cnt(cpom, poct);

...

Viz také:

 Vnitřní programovací jazyk

 Tabulky a kurzory jako parametry


Automaticky generované zprávy

Během práce uživatele s formulářem je automaticky generována řada zpráv. Program na ně může, ale nemusí reagovat.

Každá taková zpráva nese dvojí informaci: handle okna formuláře, kterého se týká, a označení události, k níž ve formuláři došlo.

Označení události je dáno tabulkou:

číslo	událost
1	formulář byl otevřen
2	formulář byl uzavřen
3	uživatel přešel na nový záznam
4	uživatel změnil obsah složky
5	vybraný záznam se překresluje
6	celý formulář se překresluje
7	formulář přechází k subkurzoru
8	formulář se vrací k superkurzoru
9	otevřen závislý formulář
10	uzavřen závislý formulář
11	otevřen textový editor
12	uzavřen textový editor
13	otevřeno okno pro prohlížení obrázku
14	uzavřeno okno pro prohlížení obrázku
Příklad použití: Chce-li program zachytit okamžik, kdy uživatel změní obsah některé složky ve formuláři  ID, pak analyzuje docházející zprávy takto:

Get_ext_message(msg, handle, nil);

IF (handle = ID) AND (msg = 4)

  THEN ...  { reakce na změnu obsahu složky }

ELSE ...    { zpracování ostatních zpráv }

Viz také:

 Programy


Režim řízený událostmi

Interakce uživatele s aplikací nejsou přímo řízeny během programu, ale naopak běh programu se podřizuje akcím uživatele. Uživatel si může vybrat, se kterým objektem přístupným na obrazovce se rozhodne komunikovat, a tím udává směr činnosti aplikace.

Akce uživatele vyvolávají v systému tzv. události . Typický aplikační program pak má ve svém jádru cyklus, v němž čeká na událost, a jakmile nastane, provede v závislosti na její povaze určité akce. Pak čeká na další událost a tak dále až do skončení aplikace.

Do pracovního režimu řízeného událostmi aplikace přechází tak, že vstoupí do cyklu, v němž volá funkci Get_ext_message nebo Peek_message a reaguje na zprávy, které od uživatele prostřednictvím funkce Get_ext_message obdrží. Tyto zprávy mohou vznikat různým způsobem:

  1)  provedením standardní akce Zaslat programu zprávu;

  2)  provedením příkazu jazyka Return;

  3)  provedením akce ve formuláři , která automaticky generuje notifikační zprávu;

  4)  stiskem klávesy, které je přiřazena zpráva pomocí funkce Register_key.

Každá zpráva (kromě automaticky generovaných) je označena číslem v rozsahu od 1001 do 60000 nebo číslem -1. Zpráva s číslem -1 má vyhrazený význam - je to žádost o ukončení aplikace. Tato zpráva sice běžící aplikaci sama neukončí, ale způsobí, že funkce Get_ext_message po jejím přijetí vrátí hodnotu FALSE, na níž může program reagovat ukončením své činnosti.

Čísla zpráv v rozsahu od 0 do 1000 a větší než 60000 jsou rezervována pro WinBase602 a není dovoleno jich používat.

Pokud aplikace chce v určitém okamžiku dát uživateli možnost, aby pracoval s formulářem či formuláři otevřenými na obrazovce, musí zavolat funkci Get_ext_message resp. Get_message nebo Peek_message a volat ji v cyklu opakovaně po dobu, po kterou má mít iniciativu uživatel manipulující s formulářem.

Viz také:

 Programy


Podmíněný výraz

Vnitřní jazyk WinBase602 obsahuje také tzv. podmíněný výraz převzatý z jazyka C. Podmíněný výraz má tento tvar:

   výraz_1 ? výraz_2 : výraz_3

kde výraz_1 je nepodmíněný výraz typu Boolean a výraz_2 je nepodmíněný výraz stejného typu jako výraz_3. Přitom výraz_3 může být i podmíněný.

Při vyhodnocování podmíněného výrazu se nejprve vyhodnotí výraz_1. Pokud má hodnotu TRUE, vyhodnotí se dále výraz_2, jinak se vyhodnotí výraz_3. Ten z nich, který se vyhodnotil, udává zároveň hodnotu celého podmíněného výrazu.

Příklad:

1) hodnotová složka pohledu:

(druh=1 ? "odeslané" : druh=2 ? "došlé" : "neznámý původ")

2) zapsání absolutního hodnoty čísla x

Absx := (x<0 ? -x : x)

Viz také:

 Programy

 Vnitřní programovací jazyk

 Výrazy

 Výrazy typu Boolean


Spojování řetězců (vnitřní jazyk)
Spojování řetězců pomocí +

Řetězce se v programovacím jazyce dají spojovat pomocí operátoru +. Výsledný řetězec bude mít maximální délku 255 znaků. POZOR! Pokud je součet délek spojovaných řetězců větší, bude jeho konec přesahující délku 255 znaků odříznut! (častá chyba)

Ekvivalentní příkaz jazyka je Strcat.

Pro spojování řetězců do výsledného řetězce delšího než 255 znaků použijte funkci Strinsert.

POZOR: Standardním procedurám a funkcím se parametr typu řetězec znaků předává zásadně odkazem. Proto nelze jako skutečný parametr použít výraz obsahující dva řetězce spojené operátorem +. Místo toho je nutno oba řetězce napřed spojit do třetího řetězce a ten pak předat jako parametr.

V jazyce SQL se řetězce spojují pomocí operátoru ||.

Příklad:

with TAB[1] do

str := (MUŽ ? "narozen" : "narozena") + date2str(DAT_NAR,1);

Info_box("informace", str);

Viz také:

 Vnitřní programovací jazyk


Symbol označující běžný formulář

V příkazech obsažených v definici formuláře (např. akce vyvolávaná stiskem tlačítka, integritní omezení, akce při chybě) a v procedurách volaných z formuláře (méně často ze sestavy) lze použít zvláštní symbol !! označující tento pohled. Symbol !! je typu Window_id a jeho hodnotou je identifikace pohledu, z něhož je zavolán příkaz, v němž je symbol obsažen.

Díky tomu lze tlačítku ve formuláři přiřadit např. příkaz:

Reset_view(!!, -1, RESET_CONTROLS+RESET_CACHE);


Includované části programů

Kdekoliv v textu hlavního programu můžete použít zápis

{$I jméno programu}.

nebo

#include jméno_programu

nebo zkráceně:

#i jméno_programu

Pokud existuje v aplikaci program tohoto jména, vloží se do hlavního programu na pozici určenou první složenou závorkou. Objekt typu program, který se vkládá do jiného programu, nazýváme includovaný program. Je zřejmé, že program určený k includování nemůže pracovat samostatně - smí obsahovat pouze deklarace a podprogramy hlavního programu.

Include slouží k zpřehlednění delších programů a k prolomení bariéry 64 KB zdrojového textu.

Pokud začíná includovaný program slovem INCLUDE, nepřekládá se při exportu aplikace.

Viz také:

  Vložení programu do programu (#include)


Symboly vnitřního programovacího jazyka
Lexikální symboly vnitřního programovacího jazyka

Na nejnižší syntaktické úrovni jazyka jsou tzv. lexikální symboly (elementy). Symboly lze rozdělit na několik druhů:

 Klíčová slova

 Identifikátory

 Čísla (včetně data a času)

 Znakové konstanty

 Binární konstanty

 Řetězce znaků

 Speciální symboly

 Oddělovače

Viz také:

 Programy

 Vnitřní programovací jazyk


Klíčová slova (vnitřní jazyk)
Klíčová slova vnitřního jazyka

Klíčová slova jsou symboly s předem daným významem, který nemůže být v programu nijak změněn.

Klíčovými slovy jsou:

AND	ARRAY	BEGIN	CASE
CONST	CSISTRING	CSSTRING	CURSOR
DIV	DO	DOWNTO	ELSE
END	FILE	FOR	FUNCTION
HALT	IF	INCLUDE	MOD
NOT	OF	OR	PROCEDURE
RECORD	REPEAT	RETURN	STRING
TABLE	THEN	TO	TYPE
UNTIL	VAR	WHILE	WITH

Klíčová slova lze psát jak malými tak i velkými písmeny resp. oba druhy písmen kombinovat. Velikost písmen nemá na význam vliv.

Viz také:

 Vnitřní programovací jazyk

 Lexikální symboly vnitřního programovacího jazyka


Identifikátory (vnitřní jazyk)
Identifikátory

Identifikátory se tvoří z písmen, číslic a znaku _ (podtržítko), přičemž musí začínat písmenem. Identifikátory se musí lišit od klíčových slov.

Identifikátory jsou například:

ALFA

Cena_zboží

NováCena

ODDĚLENÍ_56

AF17

Pozor !

V identifikátorech se bere v úvahu pouze prvních 14 znaků. Proto dva identifikátory, které se shodují v prvních 14 znacích, budou považovány za stejné. V identifikátorech se nerozlišuje mezi velkými a malými písmeny. Proto:

NOVÁ_CENA_ZBOŽÍ

nová_cena_zboží

Nová_Cena_Zbož

Nová_cena_zboží_v_listopadu

 jsou různé způsoby zápisu téhož identifikátoru!

Viz také:

 Vnitřní programovací jazyk

 Lexikální symboly vnitřního programovacího jazyka


Čísla (vnitřní jazyk)
Čísla

Celá čísla

Celá čísla se zapisují jako posloupnosti číslic, přičemž před zápornými čísly se píše znak - (minus).

Celá čísla musí ležet v rozsahu:

 -2147483647 až 2147483647

Všechna celá čísla se dají přiřadit proměnné (nebo sloupci) typu Integer. Proměnné nebo sloupci typu Short se dají přiřadit pouze celá čísla z rozsahu:

 -32767 až 32767

Ve specifickém kontextu v programu může být vyžadován menší rozsah hodnot celých čísel.

Reálná čísla

Reálná čísla se skládají z celé části a buď desetinné části za desetinnou tečkou (nikoli čárkou!), nebo desítkového exponentu, případně obojího. Před desítkovým exponentem se uvede písmeno E a případně i znaménko + resp. -.

Správně zapsaná reálná čísla jsou tedy např.:

 1.0

-538.045

 0.02

 56.871E-12

 7e5

Reálná čísla se dají přiřadit proměnné nebo sloupci typu Real.

Částky peněz

Čísla vyjadřující peněžní obnosy (jinými slovy: konstanty typu Money) zapisujeme se znakem $ mezi celou a desetinnou částí, tedy např. 120$ nebo 120$50. Kompilátor pak explicitně pozná, že se jedná o typ MONEY a nikoli typ INTEGER nebo REAL.

Zápisy peněžních částek se dají přiřazovat proměnným a sloupcům typu MONEY. Vzhledem ke konverzím typů se těmto proměnným dají také přiřazovat hodnoty zadané celým nebo reálným číslem.

Zápis data

Číselné konstanty vyjadřující datum, tedy hodnoty typu DATE, se zapisují v programu stejně jako při vkládání hodnot do databáze prostřednictvím formuláře.

Datum se tedy zapisuje ve formátu:

den.měsíc.rok

Příklad:

27.4.1962

Druhá tečka a rok se mohou vynechat, pak se míní běžný rok. Zápis roku se nesmí zkracovat, rok 96 není totéž co 1996. Celý zápis musí být na jedné řádce, uvnitř zápisu se nesmějí vyskytnout žádné mezery.

Zápis času

Čas, tedy konstanta typu TIME, se zapisuje stejně jako při vkládání hodnot do databáze prostřednictvím formuláře.

Čas se tedy zapisuje ve formátu:

hodiny:minuty:sekundy.tisíciny_sekundy

Příklad:

 17:48:56.908

přičemž tisíciny sekundy resp. i sekundy se smějí vynechat spolu s tečkou resp. dvojtečkou před nimi. Celý zápis musí být na jedné řádce, uvnitř zápisu se nesmějí vyskytnout žádné mezery.

Zápis timestampu

Hodnoty typu TIMESTAMP se zapisuje stejně jako při vkládání hodnoty do tabulky prostřednictvím formuláře. Zapisuje se ve formátu:

den.měsíc.rok hodiny:minuty:sekundy nebo

den.měsíc.rok hodiny:minuty

Příklad:

 27.4.1962 17:48:56

Viz také:

 Vnitřní programovací jazyk

 Lexikální symboly vnitřního programovacího jazyka


Znakové konstanty (vnitřní jazyk)
Znakové konstanty

Jednotlivé znaky (hodnoty typu Char) v textu programu se zapisují v apostrofech.

Příklad:

Znak A zapíšete jako: 'A'.

Znak ' (apostrof) zapíšete jako 4 apostrofy za sebou: ''''.

Viz také:

 Vnitřní programovací jazyk

 Lexikální symboly vnitřního programovacího jazyka


Binární konstanty (vnitřní jazyk)
Binární konstanty

Konstantní hodnota typu Binary se zapisuje v hexadecimální notaci v apostrofech předcházených znakem X, tedy ve tvaru:

X'hexadecimální_zápis'

Příklad:

X'52A50F8C' je zápis binární hodnoty délky 4 bajty.

Viz také:

 Vnitřní programovací jazyk

 Lexikální symboly vnitřního programovacího jazyka


Řetězce znaků (vnitřní jazyk - symbol jazyka)
Řetězce znaků

Řetězcem znaků je libovolná posloupnost znaků začínající a končící apostrofem nebo uvozovkou. Uvnitř řetězce smějí být libovolné znaky. Pokud mají být apostrof nebo uvozovka obsaženy v řetězci, musí se napsat zdvojeně.

Řetězec znaků smí obsahovat i jediný znak. Takový řetězec však musí být omezen uvozovkami, aby se dal odlišit od znakové konstanty.

Příklady:

"To je řetězec"

'Reader''s Digest'

""

Syntaxe zápisu řetězce znaků byla dále rozšířena o možnost zapisovat znaky pomocí jejich ASCII-kódu podobným způsobem, jako v Turbo Pascalu. Potřebujete-li mezi znaky '>>' a '<<' v řetězci zapsat znaky s kódy 14 a 232 (dekadicky), napíšete řetězec takto:

'>>'#14#232'<<'

Takto můžete vložit libovolný počet speciálních znaků na libovolné místo řetězce s výjimkou jeho začátku. Na začátku řetězce musí být apostrof nebo uvozovka, proto, chcete-li začít speciálním znakem, předřaďte mu prázdný řetězec např. takto:

''#14'Tento řetězec začíná znakem, jehož kód je 14'

Jedno z možných využití je rozdělení řetězce v Info_boxu do více řádků:

Info_box('','první řádek'#10'druhý řádek');

nebo

str := Date2str(today, 1)+''#10+Time2str(Now, 1);

Info_box('Datum a čas', str);

V tomto druhém příkladu lze použít i funkci Chr:

str := Date2str(today, 1)+Chr(10)+Time2str(Now, 1);

Info_box('Datum a čas', str);

Pokud se řetězec nevejde na jednu řádku, je možno ho na konci této řádky ukončit apostrofem nebo uvozovkou a na začátku další řádky apostrofem nebo uvozovkou pokračovat. Překladač obě takové části řetězce spojí.

'Tento řetězec zde '

'nekončí, nýbrž pokračuje.'

Při skládání SQL dotazů obsahujících řetězce dochází k hromadění uvozovek (apostrofů), např. přiřazení

kod :="AA-99";

podm := "select * from KNIHY where KOD="""+kod+"""";

do řetězce přiřadí hodnotu  >   select * from KNIHY where kod="AA-99"    <

Viz také:

 Vnitřní programovací jazyk

 Lexikální symboly vnitřního programovacího jazyka


Speciální symboly jazyka

Speciálními symboly jsou jednotlivé znaky a tyto dvojice (trojice) znaků:

:=	<=	<>	>=	.=	.=.	..	!!	@@	##

Mimo to existují dvojznaky, které lze použít jako ekvivalenty některých speciálních symbolů nebo klíčových slov:

!= je ekvivalentní <>

== je ekvivalentní =

|| je ekvivalentní OR

&& je ekvivalentní AND

! je ekvivalentní NOT

/* je ekvivalentní {

*/ je ekvivalentní }

Viz také:

 Vnitřní programovací jazyk

 Lexikální symboly vnitřního programovacího jazyka


Oddělovače (vnitřní jazyk)
Oddělovače

Jediným významem oddělovačů je to, že od sebe oddělují ostatní symboly. Oddělovači jsou mezery, hranice řádek a komentáře.

Komentáře začínají znakem { a končí znakem }. Uvnitř komentáře smějí být libovolné znaky kromě znaku }. Komentář smí také začínat dvojznakem // a pak končí na konci řádky.

Mezi kterékoliv dva symboly v programu lze vložit libovolný počet libovolných oddělovačů. Dovnitř symbolů se nesmějí vkládat žádné oddělovače. Nejméně jedním oddělovačem je nutno navzájem oddělit identifikátory a čísla, pokud spolu sousedí.

Viz také:

 Vnitřní programovací jazyk

 Lexikální symboly vnitřního programovacího jazyka


Práce s délkou sloupce proměnné velikosti
Práce s délkou hodnoty sloupce proměnné velikosti

Na aktuální délku (počet bajtů) sloupce proměnné velikosti lze odkázat v programu tak, že za jméno sloupce se připojí symbol #. Délka sloupce je vždy typu Integer.

Příklad:

V tabulce Tab1 je sloupec Popis typu Text. Příkaz

delka := Tab1[cis].popis#;

přečte délku tohoto sloupce v záznamu cis, příkaz

Tab1[cis].popis# := 2048;

změní délku (velikost) tohoto sloupce v záznamu cis.

Viz také:

 Vnitřní programovací jazyk


Práce s multiatributy

S celými multiatributy najednou se nedají provádět téměř žádné operace (výjimkou je standardní funkce Bind_records, která může mít multiatribut jako parametr). Proto se za specifikací multiatributu uvádí, se kterou složkou multiatributu chcete zacházet. K tomuto účelu za přístup k multiatributu připojíte index v hranatých závorkách. Složky multiatributu se indexují vždy od nuly.

Příklad:

Je-li v tabulce Tab1 multiatribut Pole, pak na jeho sedmou složku v záznamu číslo cis odkážeme zápisem:

Tab1[cis].Pole[6]

Při odkazu na neexistující složku multiatributu (zadáte-li index větší nebo roven počtu složek) reakce závisí na okolnostech:

· čtete-li neexistující hodnotu složky, pak obdržíte hodnotu NONE příslušného typu a server vydá varování, které můžete zjistit funkcí Sz_warning;

· zapisujete-li do neexistující složky, pak je složka vytvořena nebo, pokud definice tabulky vytvoření této složky nepřipouští, dojde k běhové chybě.

Na počet složek multiatributu odkážete tak, že za jméno multiatributu připojíme místo indexu symbol #. Tím získáme proměnnou typu Short, která obsahuje aktuální počet složek multiatributu. Zápisem do této proměnné lze počet složek zmenšit, nikoli však zvětšit. Nové složky multiatributu vznikají pouze zápisem nových hodnot.

Příklad:

Tab1[cis].Pole# := 0;

zruší všechny složky multiatributu.

Měnit počet složek multiatributu nelze v proměnném kurzoru, jehož struktura není v programu popsána. Při překladu programu pak totiž nelze zjistit, zda znak # označuje počet složek multiatributu nebo délku sloupce proměnné velikosti.

Viz také:

 Vnitřní programovací jazyk


Kostra aplikace v externím jazyce

Každá aplikace v externím jazyce komunikující se serverem přímo (nikoliv přes ODBC apod.) musí mít následující strukturu (funkce se musí volat v tomto pořadí):

1. alokace kontextové proměnné cd funkcí cdp_alloc, není-li alokována staticky;

2. volání cdp_init - inicializace kontextové proměnné;

3. vytvoření hlavního okna (nebylo-li otevřeno dříve) a inicializace okenního prostředí;

4. volání link_kernel - volba serveru a připojení;

5. volání interf_init - inicializace připojení;

6. volání Login - přihlášení se na server, pracuje-li se neanonymně;

7. volání Set_application - volba aplikace

[8. volání Open_project - otevření projektu, je-li potřeba;]

... vlastní aplikace ...

n-3.volání Logout - odhlášení od serveru;

n-2. volání interf_close - odpojení od serveru;

n-1.dealokace cd, není-li alokována staticky;

n. zavření hlavního okna aplikace.

Příklad pro Delphi:

uses winbase;

var my_cd:cd_t;  //Kontextova promenna klienta, identifikuje klienta pri

                 //komunikaci se serverem

    logged:boolean;  //klient je uspesne prihlaseny

    err:integer;

procedure TForm1.FormCreate(Sender: TObject);

begin

  cdp_init(@my_cd);            //inicializace kontext. promenne klienta

  err:=link_kernel('test',sw_minimize);//propijeni klienta k serveru test

                //server test musi byt zaregistrovany (instalace wb602)

  err:=interf_init(@my_cd,0);  //vlastni inicializace pripojeni

  logged:=not login('','');    //prihlaseni se k serveru

  Set_application('test');     //nastaveni aktivni aplikace

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

  Interf_close;  //ukonceni prace a odhlaseni od WinBase, ukonceni spojeni

end;


Kontextová proměnná klienta

Každý klient, který se chce připojit na databázový server WinBase602, musí mít speciální proměnnou pro průběžné uložení informací o kontextu komunikace. Tuto proměnnou označujeme jménem cd a je typu cd_t. Kontextová proměnná se předává jako parametr do řady funkcí a procedur - předává se ukazatel cdp typu cdp_t, který na ní ukazuje.

Každý klient musí ve svém programu:

1. Vytvořit proměnnou cd typu cd_t buď tak, že ji staticky deklaruje, nebo tak, že ji dynamicky alokuje, nejlépe voláním funkce cdp_alloc.

2. Inicializovat tuto proměnnou voláním funkce cdp_init. Tuto akci je nezbytně nutné provést před voláním ostatních funkcí využívajících kontextovou proměnnou.

3. Předávat tuto proměnnou funkci interf_init a případně i dalším funkcím (například funkcím začínajícím prefixem cd_).

4. Byla-li proměnná cd alokována pomocí cdp_alloc, dealokovat tuto proměnnou po odpojení se od serveru voláním funkce cdp_free.

Alokujete-li proměnnou cd ve vlastní správě paměti, můžete zjistit její potřebnou velikost voláním funkce cdp_size.


Funkce s prefixem cd_

Klientský program v externím jazyce má k dispozici dvě sady funkcí pro komunikaci se serverem. Funkce, začínající prefixem cd_ mají oproti funkcím z druhé sady jeden parametr navíc - prvním parametrem je kontextová proměnná cd resp. ukazatel na ni cdp.

Klient se může současně připojit na více serverů nebo si vytvořit vícenásobné spojení na stejný server. V takovém případě musí mít více kontextových proměnných a musí tuto proměnnou předávat jako první parametr do funkcí serveru, musí tedy používat funkce s prefixem cd_. Více paralelních spojení klienta na server však znemožňuje používat nástroje uživatelského rozhraní zabudované do WinBase602. Jde o náročnou techniku a doporučujeme se jí spíše vyhýbat.

Funkce s prefixem cd_ je třeba používat také tehdy, pokud spojení na server vytvoří jedno vlákno a používá je jiné.

Za normálních provozních podmínek je použití obou sad funkcí ekvivalentní, funkce s prefixem cd_ jsou nepatrně efektivnější.

Novější funkce (zhruba od verze 5.0) mají již často pouze jedinou variantu - s prvním parametrem cdp. Tyto funkce pak nemají prefix cd_.


Číselník chyb při spouštění nebo připojování k serveru z ext. jazyka
Chyby při spouštění nebo připojování se k serveru z externího jazyka

Funkce link_kernel a interf_init vracejí následující hodnoty. Okno s popisem chyby lze vyvolat funkcí Kernel_error_box.

Tato čísla chyb se mohou také objevit v podrobném logu WinBase602 Internet Klienta, pokud se nemůže připojit k běžícímu serveru.

Mnohé chyby nižších čísel popisují stavy, které již v 32-bitové verzi nemohou nastat.

KSE_OK	0	bez chyby
KSE_WINDOWS	1	zahlcené Windows
KSE_INSTAL_PRESENT	2	pracuje program WBINSTAL
KSE_ZALOHA_PRESENT	3	pracuje program ZALOHA
KSE_WINEXEC	4	nelze spustit WBADMIN
KSE_NO_MEMORY	5	není dost paměti
KSE_NO_CONFIG	6	nenalezen konfigurační soubor WB.CNF
KSE_NO_FIL	7	jméno serveru není registrováno
KSE_DAMAGED	8	databáze je vážně poškozena
KSE_NO_ACCESS	9	zahlceno databázové jádro
KSE_SERVER_CLOSED	10	server zamčen
KSE_BAD_VERSION	11	chybná verze serveru
KSE_NETWORK_INIT	12	nedaří se inicializovat síť
KSE_QUIT	13	nevybrán žádný server
KSE_NOSERVER	14	nenalezen žádny server
KSE_CONNECTION	15	nenavázáno spojení se serverem
KSE_NOTASK	16	nelze vytvořit další instanci
KSE_WBNETMEM	17	nelze spustit program WBNETMEM
KSE_MAXCLIENTS	18	překročen maximální počet klientů
KSE_SPXNOTINSTALLED	19	použité IPX nepodporuje SPX, pravděpodobně IPXODI /A
KSE_MAXCONNECTION	20	překročen počet relací (connections) SPX, nastavte v shell.cfg
KSE_MAXSESSION	21	vyčerpány relace (sessions) NetBIOSu
KSE_MAXNCB	22	vyčerpány řídící bloky NetBIOSu
KSE_DBASE_OPEN	23	databáze je již otevřena jiným serverem
KSE_SERVER_NAME_USED	24	v síti již běží databázový server stejného jména
KSE_START_THREAD	25	nelze spustit další vlákno
KSE_SYNCHRO_OBJ	26	nelze vytvořit synchronizační objekt
KSE_MAPPING	27	nelze mapovat paměťový soubor
KSE_CREATE_THREAD	28	nelze vytvořit vlákno pro obsluhu klienta
KSE_TIMEOUT	29	přímo dostupný server neodpovídá
KSE_NO_WINSOCK	30	knihovna winsock.dll není instalována
KSE_WINSOCK_ERROR	31	chyba při práci se socketem
KSE_SERVER_NOT_KNOWN	32	jméno serveru není registrováno
KSE_SERVER_PATH_NOT_SPECIF	33;	cesta k databázi serveru není registrována
KSE_NETBIOS_NAME	34	nemohu přidat jméno pro NetBIOS
KSE_FWNOTFOUND	35	nenalezen firewall
KSE_FWCOMM	36	nelze komunikovat s firewallem
KSE_FWDENIED	37	firewall odmítl vytvořit propojeni
KSE_BAD_PASSWORD	38	chyba hesla k databázovému souboru
KSE_ESCAPED	39	upuštěno od startu serveru
KSE_NO_IPX	40	protokol IPX není k dispozici
KSE_EXPIRED	41	skončila použitelnost produktu
KSE_CANNOT_CREATE_FIL	42	nelze vytvořit databázový soubor
KSE_CANNOT_OPEN_FIL	43	nelze otevřít databázový soubor
KSE_CANNOT_OPEN_TRANS	44	nelze otevřít transakční soubor
KSE_IP_FILTER	45	IP filtr blokuje přístup


Dotazy - úvod

Dotazy jsou nástrojem, který dovede z jedné nebo více tabulek (nikoli však tabulek připojených do aplikace přes ODBC) vybrat data podle zadaných podmínek, seskupit a vypočítat agregované hodnoty a výsledné záznamy vhodně uspořádat. Jako odpověď na dotaz vznikne fiktivní tabulka (kurzor), se kterou lze pracovat podobně jako s tabulkou.

Více o dotazech naleznete v části nápovědy věnované jazyku SQL.

Definice pevných dotazů jsou uloženy v databázi (na rozdíl od dotazů proměnných, vytvořených až za běhu programu). Mezistupeň mezi dotazy pevnými a proměnnými tvoří tzv. dotazy dynamické - jedná se o pevné dotazy, které mají v určitém místě definice odkaz na hodnotu proměnné (globální) vnitřního jazyka. Tyto dotazy lze s výhodou využívat např. jako zdroj dat pro combo ve formuláři, které se má naplnit až podle akcí uživatele za dobu otevření formuláře.

Dotazy tvoří samostatnou kategorii objektů a patří do back-endové části aplikace.

Pevné dotazy se vytvářejí v interaktivním prostředí návrháře dotazů. Pevný dotaz se dá použít jako zdroj dat pro přenos dat nebo pro formulář či sestavu. Dotaz lze modifikovat i v jeho textové podobě pomocí vnitřního textového editoru.

Práce s dotazy (otevření, vytvoření apod.) se ovládá z řídicího panelu aplikace.

Pokračování:	Návrhář dotazů
	Syntaxe dotazu
Viz také:	Řídicí panel
	Proměnné vnitřního jazyka v dynamických dotazech


Řídicí panel - DOTAZY

Dotaz jsou objekt aplikace, který z tabulek vybírá data a uspořádává výsledek. Základní operace, které je možno s dotazy provádět, lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se objeví po stisku pravého tlačítka na objektu typu dotaz.

Otevřít	otevření standardního formuláře do odpovědi na označený dotaz
Vytvořit	vytvoření nového dotazu – otevře se návrhář dotazů nebo editor textu
Modifikovat	přenesete do prostředí interaktivního návrháře dotazů
Zrušit	zrušení označeného dotazu. Data ve výchozích tabulkách zůstávají nedotčena.
Editovat SQL	otevře se editor pro textovou úpravu definice dotazu.
Duplikovat	vytvoření přesné kopie označeného dotazu.
Připojit	možnost připojení dotazu z jiné aplikace; viz Připojení objektu.
Exportovat objekt	export definice dotazu do souboru
Importovat objekt	import definice dotazu ze souboru
Export dat	export obsahu odpovědi na dotaz pomocí obecného návrháře přenosu dat
Práva k objektu	nastavení objektových práv
Optimalizace	popis způsobu optimalizace dotazu


Optimalizace dotazu
Optimalizace dotazů

OPTIMALIZACE DOTAZU je nalézání takového postupu vyhodnocení dotazu, který zabere co nejméně času a dalších zdrojů na serveru.

Optimalizace dotazu je úkolem serveru. Server disponuje řadou algoritmů pro úpravu dotazu tak, aby se dal rychleji vyhodnotit. V některých případech se však může stát, že se serveru nepodaří najít optimální postup - například proto, že nemá potřebné informace o míře selektivity různých omezujících podmínek.

Autor dotazu může v těchto případech serveru napovědět, jakým způsobem má dotaz vyhodnocovat. Pro kteroukoli tabulku použitou v dotazu může určit, který její index se má použít k výběru záznamů.

Tuto informaci lze zapsat pouze do textové podoby dotazu. Za jméno tabulky v klauzuli FROM se napíše klíčové slovo INDEX a jméno indexu. Optimalizátor dotazu pak bude ignorovat všechny ostatní indexy k tabulce, a použije-li nějaký, pak pouze ten, který je určen.

Informace o postupu vyhodnocení dotazu

Postup, který server použije při vyhodnocování dotazu, lze vypsat pomocí tlačítka Optimalizace na řídicím panelu. Detailní struktura tohoto zápisu vykračuje za rámec znalostí uživatele WinBase602. Pozornost je třeba věnovat zejména těmto údajům umístěným za jmény tabulek:

tabulka accessed by index n - k vyhledání vhodných záznamů v tabulce se využívá index s uvedeným pořadovým číslem (v pořadí dle návrhu tabulky, od nuly);

tabulka exhaustive satisfying conditions podmínka - k vyhledání vhodných záznamů v tabulce se projdou všechny její záznamy a vyberou se ty, které vyhovují zada-né podmínce;

tabulka exhaustive - použijí se všechny záznamy z tabulky.

Ruční optimalizace dotazu směřuje k tomu, aby:

•	co nejvíce tabulek bylo procházeno pomocí indexu;

•	přitom se využíval index, který vybere co nejmenší množství záznamů;

•	procházejí-li se všechny záznamy v některé tabulce, aby byly filtrovány podmínkou.

Pokračování:	Návrhář dotazů
	Dotazy
	Syntaxe dotazu


Textová definice dotazu v návrháři
Textová definice dotazu v návrháři dotazů

Textový zápis dotazu tvoří dotazový výraz SELECT z jazyka SQL: Textový zápis je alternativním způsobem vytváření a modifikace pevných dotazů v aplikaci.

Pomocí interaktivního návrháře dotazů lze vytvořit pouze základní typy dotazů, nelze vytvořit dotazy se subdotazy,  s UNION, EXCEPT nebo INTERSECT apod. Tyto složitější dotazy se musí vytvářet pomocí textového editoru.


Návrhář dotazů

Dotazy, jejichž definice je (nebo má být) uložena v databázi, se tvoří a modifikují v prostředí návrháře dotazů. Do návrháře se lze dostat tak, že na řídicím panelu vyberete Dotazy a stisknete tlačítko Modifikovat (je-li označen dotaz v seznamu) nebo Vytvořit. Ti uživatelé, kterým připadá jednodušší psát definici dotazu přímo v textové podobě (tj. zapsat příkaz SELECT z SQL), použijí tlačítko Editovat text pro modifikaci nebo v prostředí návrháře zvolí položku menu Text / Editovat.

Po stisku tlačítka Vytvořit se otevře okno pro výběr objektů, v němž vyberete tabulku nebo dotaz, která bude použita v dotazu v části FROM. Je možné také přímo přejít do prostředí textového editoru.

Okno návrháře dotazů je rozděleno na čtyři části. V každé části se definuje jedna základní klauzule výrazu SELECT z jazyka SQL. Přechod mezi částmi se provádí klávesou F6 (v části FROM klávesa F6 znamená přechod mezi tabulkami) nebo kliknutím na některé části.

Návrhář je tvořen z upravených standardních formulářů, ve kterých nelze měnit šířku sloupců ani přehazovat sloupce, nicméně ostatní ovládání je shodné s běžným standardním formulářem. Pro rychlé vkládání údajů do formuláře slouží metoda Drag & Drop. Je potřeba uchopit (drag) jméno sloupce v seznamu (stisknutím levého tlačítka myši), přesunout na nové místo a upustit (drop). To, že je sloupec schopen být přenášet touto metodou indikuje změna myšího kurzoru na podlouhlý obdélník.

Nad oblastí, kam není povoleno vkládat, má kurzor tvar zákazové značky, zatímco nad oblastí, kam je možno vložit sloupec, se kurzor opět změní na obdélník.

Při vybrání sloupce z tabulky v části FROM se na stavový řádek vypíše jeho typ.

Pomocí dvou označovacích čtverců lze upravit výslednou podobu dotazu:

•	Vybrat rozdílné - ve výsledné odpovědi se objeví pouze rozdílné záznamy

•	Insensitive - změny provedené v odpovědi na dotaz (přepsání dat) se neprojeví v tabulkách (dotazech), z nichž dotaz vzniknul.

Pokračování:

menu návrháře	část FROM
lišta návrháře	část SELECT
	část WHERE
textová editace	část ORDER BY


Menu návrháře dotazů

Menu, které přísluší k prostředí návrháře dotazů, obsahuje tyto položky:

Návrh

Uložit - uložení definice do databáze;

Test syntaxe - kontrola správného zápisu definice;

Odpověď - otevření standardního formuláře do odpovědi na rozpracovaný dotaz;

Jméno sloupce - změna jména sloupce

Skupiny - otevře okno pro dodefinování skupin v dotazu

Podmínka na skupiny - otevře okno pro definování podmínky na skupiny

Konec návrhu - ukončení práce v prostředí návrháře.

SQL-příkaz

Ukázat- vypsání definice dotazu jako příkazu SELECT z SQL, zápis není editovatelný.

Editovat - otevře se textový editor, v němž je možno přímo napsat definici příkazu SELECT;

Tabulky

Přidat - přidání tabulku do návrhu dotazu, týká se části FROM dotazu;

Alias - možnost změnit alias (alternativní jméno) tabulky - viz Změna aliasu

Odebrat - odstranění označené tabulky z návrhu dotazu (nikoli z databáze ! ).

Propojení

Propojit tabulky - ručně vytvořit relační propojení dvou tabulek;

Zrušit propojení - zrušit relační vazbu od označeného sloupce.

Druh propojení - otevře okno s nabídkou vnitřního nebo vnějšího propojení

Pokračování:	Návrhář dotazů
	Dotazy
	Syntaxe dotazu


Ovládací lišta návrháře dotazů

Ovládací lišta návrháře dotazů obsahuje tato tlačítka:

Význam jednotlivých tlačítek (zleva):

- Vystřihnout text do schránky

- Zkopírovat text do schránky

- Vlepit obsah schránky do editačního pole;

- Uložit návrh databáze;

- Ukončit práci v prostředí návrháře;

- Test syntaxe dotazu;

- Otevření standardního formuláře do odpovědi na definovaný dotaz z prostředí návrháře;

- Vypsání textové definice dotazu v jazyce SQL;

- Přidat tabulku do části FROM dotazu;

- Odebrat tabulku z části FROM dotazu;

- Dodefinovat skupiny;

- Definovat podmínku na skupiny.

Pokračování:	Návrhář dotazů
	Dotazy
	Definice dotazu


Výběr tabulek pro dotaz pomocí návrháře
Výběr tabulek do části FROM dotazu pomocí návrháře

V této části návrháře se vybírají tabulky pro část FROM dotazu, tj. tabulky, jež jsou zdrojem dat pro definovaný dotaz. První tabulka je vybrána již od otevření návrháře a další tabulky lze přidávat. Každá tabulka symbolizována složkou typu seznam v pravé horní části obrazovky. Vodorovný scroll bar umožňuje prohlížení a práci i s tabulkami, které se na obrazovku nevejdou.

Přidání tabulky se provede tlačítkem [image] nebo vybráním položky menu Tabulky / Přidat. V obou případech se otevře okno s nabídkou tabulek a dotazů aktuální aplikace, z nichž jednu (jeden) označíte a tlačítkem Vybráno přenesete do návrháře dotazu.

Chcete-li nějakou tabulku z definice odstranit, je nutno ji nejprve označit a poté stisknout na liště tlačítko [image] nebo vybrat položku z menu Tabulky / Odebrat. V obou případech označená tabulka zmizí z návrháře.

V každém seznamu jsou vypsány všechna jména sloupců příslušné tabulky. Na prvním místě je navíc výraz 'ALIAS.*', který nahrazuje všechny sloupce tabulky.

V této části návrháře je též možno vytvářet relační propojení, které jinak obsahem patří do částí WHERE.

Pokračování:

Aliasy	část SELECT
Relační propojení	část WHERE
	část ORDER BY


Relační propojení tabulek pomocí návrháře dotazů

Relační databáze umožňují provedení operace JOIN (neboli spojení, propojení) dvou tabulek (dvou aliasů v případě jedné tabulky). V obou tabulkách je sloupec stejného typu, který slouží jako relační klíč. Operací JOIN se vytvoří nová fiktivní tabulka, jejíž záznamy budou složeny z sloupců obou tabulek a hodnoty se budou lišit podle druhu spojení.

Při nejčastějším případu - vnitřní propojení na rovnost se propojují ty záznamy, které mají v relačním klíči stejnou hodnotu (např. ZAMĚSTNAN.ODDĚLENÍ = ODDĚLENÍ.ČÍSLO). Toto propojení se vytvoří velice elegantně pomocí Drag & Drop. V seznamu příslušející první tabulce uchopíte sloupec, který tvoří relační klíč a pustíte ho nad sloupcem (relačním klíčem) z druhé tabulky. Propojení se znázorní čarou spojující jména obou sloupců mezi okraji seznamu. Při listování seznamem se současně s příslušným sloupcem posouvá i začátek čáry.

Bez myši je propojení trochu komplikovanější. V první tabulce označte zvýrazněním příslušný sloupec a v menu zvolte položku Propojení / Propojit sloupce. Nyní označte sloupec z druhé tabulky a zvolte tutéž položku menu podruhé. Propojení bude znázorněno opět čarou.

Opačným krokem je zrušit propojení. Provádí se ve dvou krocích. Nejprve je nutno vybrat propojení, které chcete zrušit. Myší kliknete na čáru symbolizující příslušné propojení. Čára se zvýrazní (ztloustne). Zrušení provede položka menu Propojení / Zrušit propojení.

Bez myši je i rušení složitější. Zvýrazněte sloupec, z něhož vede pouze jedno propojení. Vyberte položku menu Propojení / Zrušit propojení. Čára tohoto propojení se zvýrazní. Druhým vybráním téže položky propojení zmizí.

WinBase602 nabízí i tzv. vnější propojení - použijete tehdy, chcete-li, aby v odpovědi byl zastoupen každý záznam jedné z tabulek nejméně jednou, a to i tehdy, když se v druhé tabulce nenajde žádný záznam, s nímž by se dal propojit. Scházející hodnoty sloupců z druhé tabulky budou v odpovědi nahrazeny hodnotami NONE.

Propojení je v návrháři znázorněno šipkou, která vede z tabulky, z níž se berou všechny záznamy do tabulky, která doplní buď odpovídající hodnoty nebo NONE.

Vnější propojení vytvoříte z propojení vnitřního tím, že po zvýraznění spojovací čáry vyberete položku menu Propojení / Druh propojení nebo stisknete na čáře pravé tlačítko myši - viz Druh propojení

Pokračování:	Návrhář dotazů
	Syntaxe dotazu


Výběr sloupců do části SELECT dotazu pomocí návrháře

V levé horní části návrháře dotazů je standardní formulář obsahující dva sloupec nadepsané Agr a Sloupec. Jména sloupců tabulek se zapisují do formuláře z klávesnice běžným způsobem. Jednodušším a příjemnějším způsobem je použití myši a metody Drag & Drop. Stiskněte levé tlačítko myši na jménu sloupce v seznamu příslušné tabulky. Kurzor myši se změní. Nyní bez uvolnění tlačítka myš přesuňte nad část pro zadávání sloupců a na vhodné pozici uvolněte tlačítko.

Velice častým případem je, že chcete v dotazu použít všechny sloupce z tabulky (odpovídá části SELECT *). Pro tento případ je na první pozici v seznamu tabulky uveden výraz tabulka.*, který můžete přenést do části pro výběr sloupců stejným způsobem jako jednotlivé sloupce.

Chcete-li v dotazu použít agregační funkci (AVG, SUM, MAX, MIN, COUNT), zapište nebo přeneste její argument do sloupce Sloupec a z comba ve sloupci Agr vyberte vhodnou funkci. Symbol {G} u seznamu funkcí znamená, že podle výrazu ve sloupci Sloupec se budou vytvářet skupiny a agregační funkce se budou vztahovat k těmto skupinám. Při definování dotazů s agregačními funkcemi přes skupiny platí důležité pravidlo: sloupec v pravé části oblasti SELECT musí být buď parametr agregační funkce nebo se přes něj seskupuje.

Pokračování:

část FROM	okno GROUP BY
část WHERE	okno HAVING
část ORDER BY


Vytvoření podmínky WHERE dotazu pomocí návrháře
Vytvoření výběrové podmínky WHERE dotazu pomocí návrháře

Levá dolní část návrháře dotazů slouží k definování podmínek pro výběr záznamů. Podmínky se zapisují do standardního formuláře, který obsahuje šest sloupečků. Do sloupečku označeného Sloupec zapište nebo vložte pomocí Drag & Drop jméno sloupce, jehož se bude podmínka týkat. Ve sloupečku Vztah vyberte z nabídky operátorů jeden vhodný o do sloupečku Omezující výraz zapište výraz nebo hodnotu, ke které podmínku vztahujete. Má-li podmínka pro tento sloupec další část, která je s první částí spojena logickou spojkou AND, zapište ji do dalších dvou sloupečků (např. DATUM > 1.1.1993 AND DATUM < 1.2.1993 zapíšete do sloupečků DATUM | > | 1.1.1993 | < | 1.2.1993 | ).

Vytvoříte-li na druhém řádku druhou podmínku, zpřístupní se nabídka logických spojek, spojujících oba řádky. Vyberte z nabídky A nebo NEBO.

Chcete-li v dotazu vybrat všechny ty záznamy které nevyhovují podmínkám v části WHERE, zaškrtněte čtverec Vybrat komplement.

Nabídka obsahuje tyto operátory:

=	rovno

<	menší než

<=	menší nebo rovno

>	větší než

>=	větší nebo rovno

<>	nerovno

.=	má prefix (pouze pro řetězce znaků)

.=.	obsahuje řetězec (pouze pro řetězce znaků)

 ~	podobá se řetězci (pouze pro řetězce znaků)

..	multiatribut obsahuje (nelze použít na multiukazatele)

IS 	predikát IS ( IS NULL, IS TRUE, IS FALSE, IS UNKNOWN )

IN	predikát IN ( IN (výraz1,výraz2,...) )

Do části WHERE patří ještě podmínky mezi dvěma sloupci - relační propojení. Tato propojení se vytváří přímo mezi tabulkami, nikoliv tedy v části WHERE (kde pro to ani není místo). Na tyto podmínky se nevztahuje volba Vybrat komplement.

Pokračování:

Relační propojení	část FROM
	část SELECT
	část ORDER BY


Setřídění dotazu (ORDER BY) pomocí návrháře

V pravé dolní části návrháře dotazů se popisuje část definice dotazu ORDER BY, neboli výčet až osmi výrazů, podle kterých bude odpověď na dotaz setříděna. Nejčastějším příkladem je samotný sloupec, ve složitějších případech může být pro třídění definován výraz.

Tato část je tvořena standardním formulářem, který má pevné rozměry: 8 řádků a dva sloupečky. Do prvního sloupečku označeného Hodnota se zapisují výrazy, ve druhém označeném Sestupně se zaškrtává označovací čtverec, má-li se třídit nikoliv vzestupně (tj. od nejmenšího) ale sestupně (tj od největšího k nejmenšímu).

Výrazy je třeba zapsat z klávesnice, zapsání jména sloupce tabulky je možno si zjednodušit pomocí Drag&Drop - uchopíte myší sloupec ze seznamu a pustíte ho nad příslušnou pozici.

Chcete-li výslednou odpověď setřídit podle výrazu, zapište do formuláře jméno tohoto výrazu: pokud není předefinováno klauzulí AS, tvoří se automaticky podle typu EXPRn, SUMn apod., kde n je pořadí výskytu v odpovědi.

Pokračování:

 část FROM

 část SELECT

 část WHERE


Změna aliasu tabulky v dotazu
Změna alternativního jména (aliasu) tabulky pomocí návrháře

Alternativní jméno neboli alias se používá v odkazech na výskyt tabulky. Standardně se jako alias bere jméno tabulky, v některých případech však je vhodné alias změnit. Je-li v dotazu použita vícekrát tatáž tabulka, je změna aliasu jedné z nich nutná a program sám při druhém a dalším výskytu mění alias tím, že na konec jména přidává číslice od nuly.

Položka menu Tabulky / Alias otevře dialogové okno, v němž máte možnost alias měnit. V poli Dosavadní alias vidíte jméno, které je tabulce přiřazeno, do pole Nový alias zapište nové jméno. Jméno musí odpovídat podmínkám pro jména objektů (tj. max 31 znaků).

Tlačítkem OK provedete změnu.

Pokračování:	Návrhář dotazů
	Syntaxe dotazu


Druh propojení v návrháři dotazů

Stiskem pravého tlačítka na spojovací čáře nebo příkazem Druh propojení z menu Propojení otevřete okno s výběrem druhů propojení.

)	Normální, vnitřní propojení

)	Vnější propojení (OUTER JOIN)

)	Vnější propojení opačným směrem

)	Úplné vnější propojení (FULL OUTER JOIN)

Volíte-li vnější propojení, musíte určit jeho směr. Aby nedošlo k omylu, jsou v okně směry přímo vypsány. Vyberete jednu z možností a stisknete tlačítko OK.

Pokračování:	Návrhář dotazů
	Syntaxe dotazu
	Relační propojení v návrháři


Podmínka na skupiny (HAVING) pomocí návrháře

Ve složitých dotazech se skupinami se někdy vyžaduje omezit výslednou množinu skupin. Toto omezení (ne příliš časté) se zadává do okna otevřeného tlačítkem na liště [image] nebo příkazem Podmínka na skupiny z menu Návrh.

Sloupce, přes které se neprovádí seskupování, se v podmínce mohou vyskytnout pouze v agregačních funkcích (AVG, SUM, MAX, MIN, COUNT). Typickým použitím této podmínky je výběr pouze těch skupin, na nichž mají agregační funkce určité hodnoty.

Přítomnost definice podmínky na skupiny v dotazu indikuje slovo HAVING! v pravé horní části návrháře.

Příklad: v dotazu zjišťujete průměrnou hodnotu faktury od jednotlivých odběratelů. Chcete však omezit výslednou odpověď pouze na ty odběratele, kteří odebrali již více než jednou.

Do okna HAVING zapište podmínku   Count(cislo)>1.

Pokračování:	Návrhář dotazů
	Syntaxe dotazu


Dodefinování skupin v dotazu (GROUP BY)

Definování skupin se většinou vytvoří již při naplnění oblasti SELECT návrháře.

Stiskem tlačítka na liště [image] nebo provedením příkazu Skupiny z menu Návrh se otevře okno pro zápis definice skupin. Jsou-li již skupiny definovány z části SELECT, v editační řádce okna vidíte příslušnou definici.

Přítomnost definice skupiny v dotazu indikuje slovo GROUP! v pravé horní části návrháře.

Pokračování:	Návrhář dotazů
	Syntaxe dotazu


Změna jména sloupce dotazu pomocí návrháře
Změna jména sloupce v dotazu pomocí návrháře

Autor dotazu má možnost jména sloupců dotazu předefinovat. V oblasti SELECT označí sloupec, který se má přejmenovat a provede příkaz Jméno sloupce z menu Návrh. Do okna, které se otevře, zapíše nové jméno sloupce. Této možnosti se využívá především u dotazů, které v části SELECT mají výrazy. Jména sloupců tvořených výrazy se doplňují automaticky, např. EXPRn pro obecný výraz, SUMn pro agregační funkci SUM apod. Místo těchto nic neříkajících jmen si uživatelé mohou vytvořit jména vlastní např. PENÁLE nebo Součet_faktur.

Skutečnost, že sloupec má uživatelské jméno, signalizuje slůvko As vlevo od zápisu sloupce.

Pokračování:	Návrhář dotazů
	Syntaxe dotazu


Seznam bude zobrazovat všechny tabulky aktuální aplikace, které lze použít v klauzuli FROM dotazu.


Seznam bude zobrazovat všechny dotazy aktuální aplikace, které lze použít v klauzuli FROM dotazu.


Tlačítkem uzavřete interaktivní návrhář dotazů a přejdete do textového editoru, v němž zapíšete přímo dotaz přímo v jazyku SQL


Seznam obsahuje tabulky (mimo připojených přes ODBC) nebo dotazy z aplikace, které lze použít jako zdroj dat pro nový dotaz.


Uživatelské menu

Menu je nabídka akcí pro určitou situaci, z nichž si uživatel může vybrat. Tyto akce mohou být rozčleněny do několika úrovní. Je možné vytvářet menu dvojího druhu: základní (řádkové) menu, které je obvykle v horní části okna  a popup menu, které se vyvolává obvykle pravým tlačítkem myši na nějakém objektu..

Základní nabídka, které také říkáme hlavní menu, se zobrazuje jako jeden řádek v horní části okna (v případě popup menu jedno submenu). Skládá se z položek označených svými názvy. Položka menu může buď vyvolávat provedení určité akce, nebo může otevírat submenu, tedy nabídku akci nižší úrovně. V submenu jsou názvy položek pod sebou a platí o nich totéž, co o položkách hlavního menu: některé z nich vyvolávají akce, zatímco jiné otevírají submenu další úrovně.

Nejčastější případ použití vlastního menu je řízení akcí v rámci jedné aplikace. Menu, které navrhnete, lze použít dvojím způsobem:

•	sami si jej otevřete z řídicího panelu

•	vyvoláte jej z aplikačního programu a tím umožníte jeho uživateli, aby pomocí menu řídil běh programu.

0	Menu se navrhuje v prostředí návrháře menu, základní operace s menu se provádějí z řídicího panelu.

Pokračování:	Návrhář menu
	Vytváření menu
Viz také:	Řídicí panel aplikace - menu


Řídicí panel - MENU

0	Pro řízení aplikace si uživatel může navrhnout vlastní menu. Základní akce, které je možno s menu provádět, lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se otevře po stisku pravého tlačítka myši na objektu typu menu.

Otevřít	na obrazovce se objeví menu označené ve středním seznamu. Nové menu odstraní menu původní. Do původního stavu se vrátíte po vybrání položky Přerušit ze systémového menu hlavního okna.
Vytvořit	vytvoření nového menu probíhá tak, že se přenesete do prostředí pro návrh menu, popíšete jeho strukturu a akce při vybrání a nakonec přidělíte menu jméno.
Modifikovat	přenesete do prostředí pro návrh menu. Tam budete mít možnost změnit strukturu a činnost označeného menu.
Zrušit	zrušení označeného menu aplikace.
Duplikovat	vytvoření přesné kopie označeného menu.
Připojit	možnost připojení menu z jiné aplikace; viz Připojení objektu.
Exportovat objekt	export definice objektu do souboru
Importovat objekt	import definice objektu ze souboru
Editovat text	prohlížení či úpravy menu v jeho textové podobě - viz Syntaxe menu
Práva k objektu	nastavení objektových práv
Viz také:	Uživatelské menu aplikace


Návrhář uživatelského menu

Vytváření nového nebo úpravy stávajícího menu probíhají v interaktivním prostředí Návrháře menu.

0	Okno návrháře je rozděleno do dvou částí. Vlevo je strom, který znázorňuje strukturu menu. V něm je dobře vidět, jak jsou jednotlivá submenu zanořena do sebe. Řádky ve stromu odpovídají jednotlivým položkám menu, přičemž jedna položka má odlišnou barvu a říkáme ji vybraná. V pravé části okna je dialogové okno popisující vlastnosti vybrané položky.

1	Položky menu lze přesouvat pomocí kláves nebo myší.

Ve stromu vidíte kromě skutečných položek navrhovaného menu také tzv. fiktivní položky označené textem ...(konec). Tyto položky jsou na konci každého submenu. Ve výsledném menu se neobjeví, slouží pouze po usnadnění návrhu.

Výsledné menu se okamžitě zobrazuje na svém místě, tj. v horní části okna WinBase602 (mimo okno návrháře). V případě popup menu je na tomto místě pouze položka TestPopup, která slouží k tomu, abyste si mohli navrhované popup menu prohlédnout (jak bude vypadat, pokud bude vyvoláno standardní akcí Nabídnout popup menu)

Pokračování:	Vytváření a úprava menu
	Lišta návrháře menu
	Menu návrháře menu
Viz také:	Uživatelské menu aplikace


Lišta návrháře menu

0	Tlačítka na pracovní liště mají tento význam:

0	- vystřihnout položku menu

1	- zkopírovat položku menu

2	- vlepit položku ze schránky na aktuální pozici

3	- odvolat poslední akci

4	- vložit příkaz;

5	- vložit položku otevírající submenu;

6	- vložit oddělovač položek;

7	- zrušit položku.

8	- uložit definici menu;

9	- ukončit návrh

- test syntaxe návrhu menu;

0	Pokračování:	 Menu návrháře menu


Menu návrháře menu

0	Návrh menu se také může řídit pomocí položek menu návrháře. Nepleťte si "vývojové" menu návrháře, umístěné u okna návrháře s výsledným menu, umístěným u okna WinBase602.

Návrh

0	  Uložit - zapíše současný stav návrhu menu do databáze;

1	  Uložit jako - zapíše současný stav návrhu menu do databáze pod novým jménem;

2	  Projekt - dovolí zvolit projekt, který menu využívá. Tento projekt se nastaví při otevření menu;

3	  Test návrhu - provede syntaktickou kontrolu návrhu menu. Pokud najde v některé položce chybu, upozorní Vás na ní a nastaví se na pozici chybné položky;

4	  Konec návrhu - zavře návrhář. Pokud jste návrh menu po provedení poslední změny neuložili, budete dotázání, zda se návrh má uložit. Pokud editujete nové menu, WinBase602 Vás před uložením vyzve, abyste zadali jeho jméno.

5	Editace

6	  Odvolat změny - odvolá změny týkající se celé položky (odstranění, vložení apod.)

7	  Vystřihnout - odstraní aktuální položku z návrhu a umístí do schránky; akce se týká i všech položek ve všech submenu aktuální položky;

8	  Zkopírovat - zkopíruje aktuální položku (vč. položek submenu) do schránky

9	  Vlepit - vlepí na aktuální pozici obsah schránky

10	  Vložit příkaz - vloží příkaz na současnou pozici

11	  Vložit submenu - vloží submenu na současnou pozici

12	  Vložit oddělovač - vloží oddělovač položek na současnou pozici

13	  Odstranit položku - z návrhu odstraní aktuální položku vč. všech položek submenu

0	Pokračování: 	 Lišta návrháře menu


Vytváření menu;menu:návrh
Vytváření a úprava menu

0	Menu tvoříte tak, že v levé části vkládáte položky a v pravé editujete jejich vlastnosti. Mezi oběma částmi přecházíte nejsnáze pomocí myši nebo klávesami Enter a Esc.

1	Jakmile vložíte novou položku, zadáte v dialogovém okně v pravé části návrháře její parametry. Povinné parametry jsou:

2	Nápis - text, který se má na položce menu objevit; v nápisu můžete uvést tzv. horkou klávesu, tedy klávesu pro rychlý výběr této položky. Horkou klávesu zadáte tak, že před některý ze znaků názvu umístíte znak &. Tento znak se v menu neobjeví, ale následující znak bude podtržen, a pokud při práci s menu se klávesa s tímto znakem stiskne v kombinaci s klávesou ALT, bude položka menu vybrána.

3	Pokud je na obrazovce otevřeno menu i pohled, pak platí, že horké klávesy definované v pohledu mají přednost před horkými klávesami definovanými v menu. Doporučujeme na to myslet již při návrhu a pokud víte, že se určitý pohled bude používat současně s určitým menu, použijte v nich pokud možno odlišné horké klávesy.

4	Do názvu položky menu lze vložit dvouznakovou sekvenci \t (zpětné lomítko+t), která funguje jako tabulátor. Text následující za tímto tabulátorem bude v menu odsazen. Používá se před označením klávesové zkratky, která má stejný význam jako položka.

5	Alternativně můžete místo nápisu vybrat obrázek z aplikace (pokud v aplikaci již nějaké obrázky máte).

6	Nabídka - je možno zadat pouze pro akční položky. Pokud tuto akci nezadáte, nebude mít položka v menu žádný efekt. Pro popis akce je k dispozici nabídka akcí, která se zpřístupní tlačítkem Nabídka.

Pokračování:	Nepovinné parametry položky menu
Viz také:	Uživatelské menu aplikace
	Nabídka akcí


Nepovinné parametry položky menu

0	Mezi další parametry položek menu patří:

1	Podmínka aktivity - do pole zapište booleovský výraz, podle jehož hodnoty se rozhodne, bude-li položka "normálně" černá a aktivní nebo šedá zablokovaná;

2	Příklad:

ID_POHLED1 <> 0

0	Who_am_I = "HONZA"

1	Am_I_db_admin

0	Podmínka zatržení - do pole zapište výraz jako v předešlém případě; bude-li podmínka splněna, bude před položkou značka zatržení. Možnosti zatržení jsou:

•	standardní znak zatržení (fajfka);

•	dvojice obrázků, z nichž jeden indikuje zatržení a druhý nezatržený stav položky (zadejte pomocí dvojice comb níže);

•	černé kolečko u právě jedné položky se skupiny položek (přepínač); u všech položek této skupiny musíte vhodně formulovat podmínku (aby mohla nastat jenom jedna možnost) a zatrhnout čtverec Zatržení jako přepínač radio.

Zalomení menu - pomocí trojice přepínačů můžete předepsat, na kterém místě se má menu zalomit. Zalomíte-li hlavní menu, způsobíte zobrazení další položky na nové řádce, zalomíte-li submenu, další položky se objeví v novém sloupci. Není-li zalamování upraveno, láme se automaticky podle velikosti okna.

Vysvětlující text - do tohoto textového zapište libovolný text, který se objeví na informační (stavové) řádce WinBase602 kdykoli bude tato položka menu zvýrazněna. Použití vysvětlujících textů usnadňuje ovládání aplikací, zvláště pokud mají řadu menu s mnoha položkami. Vysvětlující text zapíšete jako posloupnost libovolných znaků, není třeba jej dávat do apostrofů nebo uvozovek.

Okna - speciální submenu, v němž se budou automaticky evidovat všechna otevřená okna typu MDI child. Toto submenu se dle konvencí Windows mělo jmenovat Okna. Platí pouze pro položky otevírající submenu.

Viz také: 	 Vytváření a úprava menu


Syntaxe definice menu

Menu se navrhuje pomocí návrháře menu. Textová podoba se zpřístupní tlačítkem Editovat text z řídicího panelu. Forma je velmi blízká popisu menu ve Windows. Má tuto strukturu:

MENU BEGIN položka, ..., položka END

kde položka je buď:

MENUITEM "text položky", příkaz

anebo

POPUP "text submenu"

BEGIN položka, ..., položka END

kde příkaz je jedno ze slov: MENUACTION, ACTIVE, CHECKED nebo INFOTEXT následované výrazem nebo příkazem zadaným v návrhu.

V textu položky nebo submenu můžete umístit znak & před písmeno, kterým se bude tato položka vybírat. Toto písmeno pak bude podtržené.

Viz také:	Návrhář menu
	Řídicí panel aplikace
	Vytváření menu


Položka menu, která po vybrání provede určitou předepsanou akci (např. Otevřít pohled).


Položka menu, která po vybrání pouze otevře menu nižší úrovně (submenu). Submenu může obsahovat příkazy nebo další submenu.


Položka menu, která slouží pouze jako oddělovač mezi položkami. Nelze ji z menu vybrat.


Budete vytvářet normální, klasické menu známé z Windows aplikací skládající se z řádku hlavních nabídek, které se mohou rozbalovat do dalších submenu atd.


Budete vytvářet tzv. popup menu, které se vyvolává obvykle kliknutím pravého tlačítka myši na nějakém objektu. Základní nabídka akcí  je uspořádána v jediném submenu.


Debugger ve WinBase602
Debugger programů ve WinBase602

Součástí vývojového prostředí WinBase602 je i ladící systém (krátce debugger) usnadňující nalezení a odstranění chyb v programech vytvořených ve vnitřním jazyce. Nezaměňujte s debuggerem uložených SQL procedur, který (i přes obdobné ovládání) je implementován zcela odlišně (debug procedur provádí server).

Zapnutí ladícího režimu

Ze submenu Překlad/Běh vyberte položku Ladící režim nebo stiskněte na ovládací liště tlačítko [image]. Obdobným způsobem lze zapnout tento režim i z prostředí řídicího panelu (menu Nástroje).

Ladící režim se také automaticky zapne při vložení permanentního bodu zastavení tlačítkem na liště [image].

Spuštění debuggeru

V ladícím režimu si ze submenu Překlad/Běh vyberte položku Běh. WinBase602 se poté pokusí program přeložit. Pokud se při překladu objeví nějaká chyba, budete na ní obvyklým způsobem upozorněni a k fázi ladění se vůbec nedostanete. Proběhne-li překlad bez chyby, je zahájen ladící běh programu. Tento běh se ovšem hned na první řádce programu zastaví. Objeví se menu debuggeru a na ovládací liště tlačítka řídící debugger. Od tohoto okamžiku máte možnost program ladit.

Během ladění programu nelze přepisovat jeho zdrojový text. Lze v něm ovšem vyhledávat řetězce stejným způsobem, jako při práci s editorem.

Je-li aktivní debugger, je na obrazovce menu a ovládací lišta debuggeru a do popředí se dostalo okno editoru, v němž vidíte barevně vyznačenou řádku programu, která se právě má provést. Laděný program je pozastaven a je možno analyzovat jeho stav.

Po zahájení ladění se běh programu zastaví na své první řádce. Nyní (a také po každém dalším zastavení) můžete volit, jak pokračovat.

Pokračování:	Ovládání debuggeru
	Práce s debuggerem
Viz také:	Ladění procedur a triggerů


Ovládání debuggeru

Debugger se ovládá pomocí menu, pomocí tlačítek na liště nebo klávesovými zkratkami.

Běh

Bod zastavení (BP)- na pozici kurzoru vloží nebo odstraní bod zastavení (breakpoint). Ekvivalentem je klávesa F2 nebo F9 nebo dvojklik na řádce programu. Řádek bude barevně označen. Viz Body zastavení.

Běh - rozběhne program buď do konce nebo do prvního bodu zastavení. Ekvivalentem je klávesa F5.

Krok přes - vykoná řádek programu, který je barevně označen. Je-li v řádku volání podprogramu, jeho příkazy se provedou, avšak debugger se na nich nezastaví. Ekvivalent  F8 nebo F10. Viz Krokování.

Krok dovnitř - vykoná řádek programu, který je barevně označen. Je-li v řádku volání podprogramu, debugger se zastaví na prvním řádku podprogramu. Ekvivalent F7 nebo F11. Viz Krokování.

Běh po kurzor - program se rozběhne od řádku, kde je debugger a skončí na řádku, na který byl umístěn kurzor. Ekvivalent F4.

Návrat z podprogramu - aktivní jen tehdy, je-li debugger právě v podprogramu. Položka slouží k doběhnutí podprogramu a zastavení debuggeru na první řádce za voláním tohoto podprogramu. Ekvivalent Ctrl+F8.

Ukončit ladění - konec režimu ladění, zároveň také ukončí běh programu. Při vnořeném běhu (např. podprogram vyvolaný stiskem tlačítka v pohledu) je položka neaktivní. Ekvivalent Shift+F5.

Data

Ukázat / Změnit - otevře okno, v němž můžete nejen zjistit hodnotu proměnné či výrazu, ale také tuto hodnotu změnit. Ekvivalent Ctrl+F5 nebo Shift+F9. Viz Prohlížení a měnění hodnot.

Přidat sledovač - přidá do okna se seznamem sledovačů novou položku. Ekvivalent Ctrl+F7. Viz Sledovače.

Okno se sledovači - otevře nebo zavře okno se seznamem sledovačů.

Podprogramy - otevře okno se seznamem podprogramů - viz Prohlížení zásobníku.

Hledání

Najít - nalezne v zdrojovém programu zadaný řetězec

Zopakovat akci - zopakuje poslední hledání řetězce

Moduly - otevře okno se seznamem modulů, z nichž se skládá zdrojový program - viz Includování textů

Pokračování:	Tlačítka na liště debuggeru
	Debugger vnitřního jazyka


Tlačítka na liště debuggeru
Tlačítka debuggeru

Je-li aktivní debugger, lišta hlavního okna se změní a objeví se tlačítka pro nejčastější akce prováděné při ladění.

Význam tlačítek včetně ekvivalentních kombinací kláves:

- běh programu (do konce nebo do prvního bodu zastavení) – F5

- krok přes podprogram - F8 (F10)

- krok dovnitř podprogramu - F7 (F11)

- návrat z podprogramu (dokončení podprogramu a zastavení po návratu) - Ctrl+F8

- běh po kurzor - F4

- vložení / odstranění bodu zastavení - F2 (F9)

- vyhodnocení výrazu, možnost změny hodnoty proměnné – Ctrl+F5 (Shift+F9)

- přidání nového sledovače - Ctrl+F7

- otevření / zavření okna se sledovači

- otevření / zavření okna se zásobníkem podprogramů

- vyhledání řetězce znaků v textu

- zopakování posledního hledání - F3


Práce s debuggerem

K dispozici je podrobná nápověda k těmto tématům:

 Krokování programu

 Body zastavení (breakpoint)

 Prohlížení a měnění hodnot proměnných (evaluate)

 Sledovače (watch)

 Prohlížení zásobníku (call stack)


Krokování programu

Krokováním se rozumí provádění programu po jedné zdrojové řádce. Pokud na řádce, kterou se zrovna chystáte provést, je volání podprogramu, pak můžete buď vstoupit dovnitř podprogramu, anebo podprogram vcelku provést a zastavit se až po návratu z něj. Při krokování lze tedy buď vstupovat dovnitř podprogramů (angl. trace into) anebo postupovat přes ně (angl. step over).

Krok přes celý podprogram provedete buď tak, že si z menu debuggeru vyberete Běh / Krok přes, nebo stisknete tlačítko [image] anebo stisknete klávesu F8 nebo F10.

Krok dovnitř podprogramu provedete tak, že si buď z menu debuggeru vyberete Běh / Krok dovnitř, nebo stisknete tlačítko [image] anebo stisknete klávesu F7 nebo F11.

Během krokování můžete sledovat, jak postupuje vpřed barevně odlišená řádka ukazující na místo, které se bude v dalším kroku provádět. Pokud je program na řádce, na níž není volání podprogramu, pak oba druhy kroků provedou tutéž akci.

Viz také:	Debugger vnitřního jazyka
	Práce s debuggerem


Body zastavení (breakpointy)
Body zastavení

Do laděného programu lze umístit tzv. bod zastavení (angl. breakpoint). Bod zastavení umístíte na některou řádku zdrojového programu. Kdykoli program při svém běhu na tuto řádku vstoupí, běh se přeruší. Poté si může např. prohlédnout hodnoty proměnných v programu a buď pokračovat v běhu programu nebo jej například krokovat.

Řádka, na níž je bod zastavení, je barevně odlišena. Bod zastavení umístíte tak, že na řádce dvakrát kliknete levým tlačítkem myši, anebo tak, že na řádku najedete kurzorem a buď z menu vyberete položku Běh / Bod zastavení nebo stisknete tlačítko [image] nebo stisknete klávesu F2 nebo F9. Pokud stejnou akci zopakujete, bod zastavení z této řádky odstraníte.

Body zastavení využijete zejména tehdy, pokud hodláte ladit pouze určitou část programu a nechcete krokovat od začátku programu až k ní. Po zahájení ladění umístíte bod zastavení na začátek této oblasti a necháte program volně běžet. Do debuggeru se opět dostanete v okamžiku, kdy program vstoupí na bod zastavení.

Kromě výše uvedených bodů zastavení. Které zmizí po ukončení ladění programu, existují i body zastavení stálé, které nezmizí ani po zavření editoru. Vkládají se tlačítkem [image] nebo klávesami F9 (F2) nikoliv při ladění, ale před laděním, z prostředí editoru. V této fázi však není možné zkontrolovat smysluplnost umístění, takže je povoleno ho vložit na kterékoliv místo bez ohledu na dobrý smysl.

Viz také:	Debugger vnitřního jazyka
	Práce s debuggerem


Prohlížení a měnění hodnot proměnných
Prohlížení a měnění hodnot proměnných - popis dialogu

Debugger umožňuje prohlédnout si hodnotu kterékoli proměnné (a to i strukturované) a případně tuto hodnotu přepsat. Tato funkce se vyvolává položkou Data / Ukázat / Změnit v menu debuggeru, nebo tlačítkem [image] anebo stiskem kláves Ctrl+F5 nebo Shift+F9. Do prvního řádku dialogového okna se přenesla proměnná, na níž stál kurzor a v okně nadepsaném Hodnota její hodnotu. Celočíselné hodnoty se vypíšou jak dekadicky, tak i hexadecimálně (např. 100 (0x64)).

Pokud chcete změnit hodnotu proměnné, novou hodnotu zapište do okénka Hodnota v dialogovém okně (případný obsah okénka předtím smažte) a stiskněte tlačítko Dosadit.

Vyčíslovat lze i hodnoty výrazů, strukturovaných proměnných a dlouhých řetězců - stačí je napsat na první řádku a stisknout tlačítko Vyhodnotit. Těmto údajům však nemůžete přiřadit novou hodnotu.

Při prohlížení hodnot strukturovaného typu (pole, record nebo řetězec>255 znaků) se obsah struktury objeví v seznamu ve spodní části. Zároveň se zaktivuje tlačítko Dovnitř, pomocí něhož lze sestoupit hlouběji do struktury, a to i opakovaně (např. pole recordů apod.). Že lze sestoupit signalizuje hvězdička místo hodnoty.

Vyhodnocením jména tabulky deklarované v programu získáte její číslo. Vyhodnocením identifikátoru kurzoru (pevného nebo proměnného) získáte jeho číslo, je-li otevřen, nebo hodnotu 0xFFFF nebo 0, není-li otevřen. Stiskem tlačítka Dovnitř můžete otevřít standardní formulář do obsahu této tabulky nebo kurzoru. Formulář se otevře v plovoucím okně, které lze na obrazovce ponechat i po zavření dialogu na vyhodnocení proměnné. Nedoporučujeme však ponechávat otevřené okno s obsahem kurzoru po zavření tohoto kurzoru - jeho další obsah by byl nedefinova-ný.

Při prohlížení si hodnot proměnných se kurzor musí nacházet v té části programu, v níž je proměnná definována. To je důležité, protože ve dvou podprogramech mohou být dvě stejně pojmenované proměnné a debugger pouze na základě polohy kurzoru pozná, kterou z nich míníte.

Tlačítkem Sledovat lze přenést prohlíženou hodnotu do okna sledovačů.

Rychlejším a v mnoha případech dostačujícím způsobem prohlížení proměnných či celých výrazů je zobrazení hodnoty v bublině (tooltipu), která se objeví po umístění kurzoru v editoru nad proměnnou či pokud výraz označíte jako blok a umístíte nad něj kurzor.

Viz také:	Debugger vnitřního jazyka
	Práce s debuggerem


Sledování hodnot proměnných
Sledovače - popis dialogu

Potřebujete-li po určitou dobu sledovat hodnotu určité proměnné nebo výrazu, debugger nabízí pro tento případ vytvořit tzv. sledovače, tj. umístit proměnnou či výraz do zvláštního okna a po každém kroku aktualizovat výpis jejich hodnot.

Sledovač vytvoříte pomocí položky menu Data / Přidat sledovač, tlačítkem [image] nebo stiskem kláves Ctrl+F7. Na obrazovce se objeví dialogové okno, v němž vyplníte identifikátor proměnné nebo výraz, který se má objevit i se svou hodnotou ve sledovači. Zadávání proměnně či výrazu lze urychlit tak, že je předem označíte jako blok nebo na nich umístíte kurzor.

Okno obsahující všechny sledovače je na obrazovce vždy v popředí (i když není aktivní). Pokud jej chcete z obrazovky odstranit nebo na obrazovku vrátit zpět, vyberte z menu debuggeru položku Data / Okno se sledovači. Zavřením a opětovným otevřením okna se sledovači se jeho obsah neztratí.

V okně se sledovači jsou čtyři tlačítka. První dvě vyžadují, abyste před jejich stiskem označili některý sledovač. Tlačítkem Modifikovat můžete změnit označený sledovač, např. místo jedné proměnné nechat sledovat jinou. Tlačítkem Odstranit odstraníte označený sledovač. Tlačítko Přidat umožňuje přidávat nový sledovač a tlačítko Zavřít zavírá okno se sledovači.

Sledovače neumožňují měnit hodnoty sledovaných proměnných.

Je-li aktivní okno se sledovači, nelze ovládat debugger klávesovými zkratkami, např. vkládat bod zastavení klávesou F2. Proto buď použijte ovládání debuggeru z menu nebo lišty, anebo klikněte do okna s laděným programem a tím deaktivujte okno se sledovači.

Viz také:	Debugger vnitřního jazyka
	Práce s debuggerem


Prohlížení zásobníku
Prohlížení zásobníku - popis dialogu

Pokud ladíte program zahrnující volání podprogramů, pak se během práce s debuggerem můžete podívat, které podprogramy jsou rozpracovány a jaké jsou hodnoty jejich parametrů. K tomu slouží položka Podprogramy v menu debuggeru.

Tato položka otevře okno obsahující jednu řádku pro každý rozpracovaný podprogram a pro hlavní program. Hlavní program je na první řádce, podprogram, v němž se právě nacházíte, na poslední. Za jménem každého podprogramu jsou uvedeny hodnoty jeho parametrů oddělené čárkami. Parametry předávané referencí (odkazem) mají před hodnotou uvedeno slovo VAR. Pokud se podprogramu předává struktura, je její hodnota nahrazena hvězdičkou.

Chcete-li vidět, na které řádce byl z hlavního programu nebo z podprogramu zavolán podprogram uvedený ve výčtu pod ním, označte jej a stiskněte tlačítko Ukázat. Kurzor se ve zdrojovém textu programu nastaví na tu řádku, na níž je přerušeno provádění označeného podprogramu.

Viz také:	Debugger vnitřního jazyka
	Práce s debuggerem


Ladění procedur uložených na serveru a triggerů

Procedury uložené na serveru a triggery se dají ladit podobným způsobem jako klientské programy ve vnitřní jazyce WinBase602, existuje však i několik rozdílů.

Při ladění spolupracují dva klienti stejného serveru - laděný klient, který volá uložené procedury nebo spouští triggery, a ladící klient, který může krokovat a sledovat aktivitu laděného klienta. Po zahájení ladění je ovládání debuggeru stejné (až na explicitně vyjmenované drobnosti) jako ovládání debuggeru programů ve vnitřním jazyce.

Pokračování:	Zahájení ladění procedur
	Vlastnosti ladění procedur
Viz také:	Debugger vnitřního jazyka


Zahájení ladění
Zahájení ladění procedur uložených na serveru a triggerů

Ladění se zahájí tak, že ladící klient umístí do procedury nebo triggeru bod zastavení a laděný klient se na něm zastaví. Postupujte takto:

•	Připojte na stejný server dva klienty a v obou otevřete stejnou aplikaci. Nehraje roli, zda oba klienti budou na stejném nebo na různých počítačích.

•	V ladícím klientovi otevřete textový editor na proceduru nebo trigger, při jejichž provádění budete chtít laděného klienta zastavit a sledovat.

•	Na ovládací liště stiskněte tlačítko [image] zapínající ladící režim. Otevře se dialog se jmény klientů, které můžete ladit. Vyberte laděného klienta.

•	Na vhodná místa do procedury nebo triggeru vložte body zastavení. Vkládat má smysl pouze na příkazy, které něco vykonávají. Pokud se ho pokusíte vložit na nevhodné místo, vloží se automaticky na první následující vyhovující řádek. Chcete-li krokovat celou proceduru, vložte bod zastavení na první BEGIN.

•	Přejděte do laděného klienta a proveďte akci, kterou chcete ladit, například zavolejte uloženou proceduru (spuštěním programu). Pokud se při jejím provádění narazí na bod zastavení, tento klient jakoby "zamrzne" a (jsou-li spuštěni oba klienti na jednom počítači) na obrazovce se objeví okno ladícího klienta.

•	V ladícím klientovi se ukáže místo, kde se laděný proces zastavil. Nyní jej můžete nechat běžet dál, krokovat, prohlížet hodnoty (včetně zobrazení hodnot proměnných v bublině) atd. Ovládání debuggeru je totožné s ovládáním debuggeru vnitřního jazyka.

Pokračování:	Vlastnosti ladění procedur


Vlastnosti ladění
Vlastnosti ladění procedur uložených na serveru a triggerů

Veškeré ladění se týká výlučně laděného klienta. Pokud se například umístí do procedury bod zastavení, pak se na něm zastaví pouze laděný klient, zatímco všichni ostatní klienti mohou provádět stejnou proceduru zcela nerušeně.

Při krokování příkazů, které jsou rozepsány na více řádků, se debugger zastavuje na první řádce, v příkazu SELECT na řádce poslední.

Při krokování příkazů INSERT, UPDATE a DELETE, které spouštějí provedení triggerů, záleží na tom, zda provedete "krok dovnitř" nebo "krok přes". "Krok dovnitř" vstoupí do triggeru, zatímco "krok přes" provede triggery neviditelně.

Ladit lze i handlery. Lze do nich umístit body zastavení nebo do nich krokovat.

Ladění uložený a procedur a triggerů může probíhat současně s laděním aplikačních programů. V takovém případě také laděný klient pracuje v ladícím režimu. V obou klientech lze krokovat příkazy, prohlížet hodnoty proměnných atd.

Výpis stacku (prohlížení zásobníku) je bez hodnot parametrů.


V seznamu je výčet klientů, kteří jsou přihlášeni k aktuálnímu serveru. Za uživatelským jménem je uveden název aplikace. Vyberte laděného klienta (klienta, který bude volat tuto proceduru) a stiskněte OK.

Viz:  Zahájení ladění procedur


Správa databáze (serveru)
Správa databáze (serveru) - úvod

1) Některé parametry a nastavení serveru, které se ukládají do registrů (není tedy třeba, aby byl server spuštěn), se nastavují programem Konfigurace WinBase602, což je samostatný program s vlastní ikonou ve skupině programů WinBase602 -viz Konfigurace. Změny se projeví při dalším spuštění serveru.

2) Parametry, nastavení a správa serveru, které se ukládají do databázového souboru (je třeba spuštěný server), se ovládají pomocí submenu Nástroje / Server. K dispozici jsou tyto akce:

•	Provozní parametry Nastavení provozních parametrů, které mají vliv na rychlost a zabezpečení databáze.

•	Opravy databáze Tato položka otevře dialogové okno, které dovoluje kontrolu a opravování struktury databáze (např. nalezení ztracených kusů diskové paměti);
K provedení posledních dvou akcí je nutné zamčení serveru. Pokud server nebyl dosud zamknut, bude zamknut při vybrání položky. Server nelze zamknout, pokud jsou na server připojení jiní uživatelé;

•	Bezpečnost - nastavení bezpečnostních parametrů serveru;

•	Přehrát journal - aktualizace databáze z journalu;

•	Vztah kopie a journalu - informace o tom, z jak staré záložní kopie lze s pomocí journalu obnovit současný stav databáze. Kopie musí být vytvořena dříve, než je datum prvního záznamu v journalu.

Tyto akce (mimo Bezpečnost) může provádět pouze správce databáze (člen skupiny DB_ADMIN). Zadávat bezpečnostní parametry by měla osoba určená do funkce Bezpečnostní autority systému.

3) Správu dat v tabulkách lze provádět též z řídicího panelu, zde je možné obnovovat nebo uvolňovat smazané záznamy, opravit indexy v tabulce, vymazat historii, nastavit práva k datům a zkompaktnit tabulku.

4) Další důležité informace o stavu serveru, přihlášených uživatelích, zámcích na záznamech apod. se dozvíte ze záložek okna Monitoru, které se otevře příkazem Nástroje / Monitor. Okno má svou vlastní kontextovou nápovědu.

Správa a nastavování parametrů serveru pomocí programu Konfigurace (či přímo zápisem do registru):

 Vytvoření nové databáze

 Registrace existující databáze

 Parametry síťové komunikace

 Rozdělení databáze do více souborů

 Zálohování a obnovování dat

 Filtrování IP adres

 Odpojování nekomunikujících klientů

 Zabránění anonymního přístupu

 Určení adresářů s DLL knihovnami pro SQL server

Činnosti správce prováděné se serverem jako celkem z menu Nástroje/Server:

 Provozní parametry serveru

 Oprava poškozené databáze

 Bezpečnostní parametry serveru

 Journal aktualizací

Činnosti správce prováděné s vybranou tabulkou (tabulkami) na řídicím panelu:

 Nastavení práv k datům

 Oprava indexů

 Obnovení smazaných záznamů

 Uvolnění smazaných záznamů

 Omezení historie

 Zkompaktnění tabulky

Viz také:

 Práva ve WinBase602


Stav databáze

Informační okno obsahující údaje o okamžitém stavu databázového serveru:

Verze serveru - číslo verze databázového jádra (může se lišit od čísla verze celého produktu);

Jméno serveru - jméno serveru, na nějž jste přihlášeni; jste-li přihlášeni na vzdálený server, je před jménem serveru hvězdička;

Připojeno uživatelů - počet uživatelů právě komunikujících s databázovým jádrem;

Počet volných clusterů - počet volných alokačních jednotek v databázovém souboru WB5.FIL;

Velikost clusteru - velikost alokační jednotky pro hrubou alokaci diskové paměti, při alokaci místa pro objekty proměnné velikosti se používá jednotka 32 krát menší;

Volných bajtů na disku - množství volného místa na disku, na němž jsou data WinBase602

Uživatelské jméno - jméno, pod nímž jste přihlášeni do WinBase602, anonymní uživatel má jméno ANONYMOUS.

Pokud údaj Volných bajtů na disku je malý ( méně než cca 100000 bajtů) je riskantní dále pracovat - vyčerpání místa na disku v průběhu rozsáhlé transakce může způsobit ztrátu dat. V případě, že máte malý disk, je možné databázový soubor rozdělit mezi více disků (Konfigurační panel, záložka Databáze a servery, tlačítko Adresáře.).

Viz také:	Správa serveru - úvod


Parametry provozu
Provozní parametry serveru WinBase602

Položka Provozní parametry v menu Nástroje/Server otevírá dialogové okno, v němž lze nastavit tyto parametry:

•	Použití journalu změn - volba, mají-li se aktualizace mají zapisovat do journalu; způsobí malé zpomalení provozu serveru;

•	Jištění transakcí - volba, zda je jištěno uzavírání transakce (dvoufázový commit); způsobí zpomalení serveru;

•	Zápis změn na disk při uzavření transakce - má-li se vynutit po každé transakci zápis na pevný disk z cache; způsobí značné zpomalení běhu serveru;

Nastavené parametry se zaznamenají do databáze a zůstanou v platnosti až do další změny.

Druhým úkolem tohoto dialogu je zvětšování databázového souboru WB5.FIL Do editačního pole lze zapsat číslo, udávající velikost FILu v diskových clusterech o velikosti 4096 bajtů. Klesne-li počet volných clusterů pod určitou hodnotu, bude při každém spuštění serveru vydána varovná hláška, doporučující změnu velikosti databázového souboru.

Tlačítka ve spodní části umožňují:

•	Zkompaktnit - maximální zmenšení velikosti datového souboru WB5.FIL při zachování dat. Po provedení je rozumné zvětšit počet volných clusterů - editační pole v tomto dialogu. Akce může trvat delší dobu. Je rozumné si před započetím udělat zálohu souboru WB5.FIL

•	Připravit pro CD-ROM - Speciální akce, která připraví databázový soubor WB5.FIL pro šíření WinBase aplikace na CD-ROMu. Po provedení akce se již nesmí server přihlásit k této databázi, dokud se neprovede CD-ROMová instalace. Tato instalace zajistí, že databázový soubor bude mít dvě části - nededitovatelnou na CD-ROMu a editovatelnou na disku.

K provedení všech těchto akcí je nutné zamknutí serveru. Pokud server nebyl dosud zamčen, bude zamčen při vybrání této položky. Parametry nelze nastavit, pokud jsou na server připojení jiní uživatelé.

Viz také:	Správa serveru - úvod
	Ochrana journalem aktualizací
	Ochrana transakcemi


Obnovení zrušených záznamů

Záznamy zrušené v pohledech nejsou stále ještě ztraceny. Tyto záznamy existují do té doby, dokud se neprovede jejich globální uvolnění. Uvolněné záznamy již NELZE bez záložní kopie obnovit.

Pokud chcete obnovit záznamy v tabulce, otevřete tuto tabulku současně se stiskem klávesy Ctrl. Na rozdíl od běžného standardního pohledu jsou v tomto pohledu také zrušené záznamy. Každý záznam začíná sloupcem typu Boolean zobrazeným jako označovací čtverec se slovem Zrušeno?. Pokud je tento čtverec zatržen, pak je záznam zrušený, pokud není zatržen, pak záznam zrušený není. Záznam lze obnovit tak, že zatržení odstraníte (např. stiskem tlačítka myši na příslušném čtverci). Pokud je označovací čtverec šedý, pak je záznam již uvolněný. Šedý čtverec nelze nijak přepsat.

Obnovovat lze i zrušené definice objektů v tabulce OBJTAB. Nelze však takto obnovit data ze zrušené tabulky. Nelze také obnovit objekty poté, co je zrušena celá aplikace!.

Viz také: 	 Správa databáze (serveru)


Uvolnění zrušených záznamů

Místo, které zabíraly záznamy zrušené uživatelem, je v každé tabulce rezervováno do té doby, dokud se všechny takové záznamy neuvolní. Provede-li se operace uvolnění, pak hodnoty sloupců proměnné délky se oddělí od pevné části záznamu (a mohou být přepsány čímkoli jiným) a pevná část se může přidělit některému nově vznikajícímu záznamu.

Uvolnění zrušených záznamů se provádí vždy na všechny záznamy z určité zvolené tabulky. Velikost této tabulky se tím zmenší o zrušené záznamy, které byly na jejím konci. Zrušené záznamy, které mají za sebou v tabulce nějaké nezrušené záznamy, vytvoří volné místo uvnitř tabulky, využitelné operací Insert.

Pro uvolnění zrušených záznamů vyberte na řídicím panelu tabulku (nebo skupinu tabulek) a proveďte akci Správa tabulky / Uvolnit zrušené záznamy. Uvolnění záznamů v tabulkách může provádět kterýkoli uživatel a lze jej provést také z kterékoli aplikace pomocí funkce Free_deleted.

K uvolnění zrušených záznamů dojde též při akci Zkompaktnění tabulky.

Viz také: 	 Správa databáze (serveru)


Oprava poškozené databáze

Při provozu databáze může dojít z různých příčin k jejímu poškození. Kupříkladu ke ztrátě malého množství (nevyužité) diskové paměti dochází pokaždé, když je server nekorektně ukončen (např. resetováním počítače za běhu).

Proto je WinBase602 vybavena nástroji, které dokážou nalézt a odstranit některé druhy chyb ve struktuře databáze.

a) Je-li zatržen čtverec Ztracené bloky nebo Ztracené kusy diskové paměti, vracejí se tyto objekty do správy volné diskové paměti.

b) Je-li zatržen čtverec Dvojí využití diskové paměti, pak pokaždé, když dva databázové objekty sdílejí stejný kus diskové paměti, každý z nich obdrží vlastní kopii. Je nutno ovšem počítat s tím, že pouze jeden z těchto objektů bude mít v této diskové paměti správná data.

c) Je-li zatržen čtverec Zničené definice tabulek, pak se z databáze odstraní ty tabulky, s nimiž nelze dělat vůbec nic. Tato akce se netýká tabulek, které pouze obsahují poškozená data.

d) Je-li zatržen čtverec Odkazy na neexistující bloky, pak se z tabulek a indexů odstraní odkazy vedoucí "do prázdna". Po této akci by měl být odblokován export poškozených tabulek a práce s nepoškozenými částmi informace.

Hledání chyb v rozsáhlé databázi i jejich opravování může být časově náročné. Na stavovém řádku klienta je proto indikován postup procházení databázového souboru ve formátu kontrolovaná_tabulka / počet_tabulek.

Ze submenu Nástroje / Server řídicího panelu vyberte položku Opravy databáze. Otevře se dialogové okno, v němž pomocí označovacích čtverců zvolíte, které druhy chyb vás zajímají. Poté stisknete tlačítko Zjistit počet chyb nebo Opravit chyby.

Tlačítkem Zjistit počet chyb zahájíte kontrolu obsahu databáze. Poté, co kontrola skončí, se vedle zatržených položek objeví počty zjištěných chyb příslušných druhů.

K provedení této akce je nutné zamčení serveru. Pokud server nebyl dosud zamčen, bude zamčen při vybrání této položky. Databázi nelze opravovat, pokud jsou na server připojení jiní uživatelé.

Viz také: 	 Správa databáze (serveru)


Oprava indexů

Nedokončení aktualizační operace může mít za následek poškození indexových souborů (může k tomu dojít, pokud se nepracuje transakčním způsobem). Pokud se zjistí, že se chyby omezují pouze na indexy, pak je lze nechat znovu vytvořit.To je podstatně rychlejší i bezpečnější akce, než obnovování obsahu databáze ze záložní kopie a její aktualizování z journalu.

Pro přebudování indexů vyberte na řídicím panelu tabulku (nebo skupinu tabulek) a proveďte akci Správa tabulky / Opravit indexy.Přebudování indexů může u větších tabulek trvat nějaký čas. o průběhu indexace jste informováni v informační řádce.

Viz také: 	 Správa databáze (serveru)


Zapomenutí historie

Při aktualizacích (přepisování hodnot) určitých sloupců se (v souladu s definicí tabulky při použití tzv. sledovacích atributů) může zapamatovat přepisovaná hodnota. Minulým hodnotám sloupců se říká historie. Rozsah této historie neustále roste, a proto je občas žádoucí její část "zapomenout''.

Do historie nelze explicitně zasahovat, existuje však jedna výjimka. Správce databáze může vyvolat "zapomenutí" části historie pro vybranou tabulku (nebo skupiny tabulek). K tomu slouží akce Správa tabulky / Vymazat historii na řídicím panelu.

Dialogové okno nabízí dvě možností, jak historii omezit:

Omezit počet záznamů na, tedy z historie každého sloupce ponechat pouze stanovený počet nejnovějších hodnot.

Zapomenout před datem, tedy dále si pamatovat pouze historii novější než určité zadané datum.

Správce zvolí jednu z možností omezení a podle toho zadá buď počet záznamů nebo datum a stiskne tlačítko OK.

Viz také: 	 Správa databáze (serveru)


Ochrana journalem

WinBase602 může pracovat tak, že se vede journal všech aktualizací. To znamená, že pro každou aktualizaci obsahu databáze se nová hodnota zapsaná do databáze zaznamenává navíc na určité vyhrazené místo. Těmto záznamům se říká journal.

Existence journalu má vliv na spolehlivost databáze pouze v kombinaci s pořizováním záložních kopií. Kopie dovoluje obnovit obsah databáze v tom stavu, v němž byl při vytvoření kopie. Na základě obsahu journalu lze pak zopakovat všechny aktualizace, které byly provedeny od pořízení kopie až do zadaného okamžiku (např. do okamžiku zhroucení databáze).

Pro journal je rezervován zvláštní soubor. Je implicitně umístěn ve stejném adresáři jako databázový soubor (pokud není v konfiguraci nastaven adresář jiný) a jmenuje se JOURNAL.FIL. Tento soubor při aktualizacích v databázi neustále roste - přidávají se do něj informace o nových a nových změnách. Po vytvoření nové záložní kopie můžete journal smazat.

K tomu, abyste stav databáze obnovený ze záložní kopie mohli pomocí journalu aktualizovat, musíte v něm mít všechny záznamy od doby, kdy byla záložní kopie vytvořena.

Pokud po vytvoření záložní kopie journal nesmažete, pak lze databázi obnovit i ze záložních kopií staršího data. Tím se zvětšuje míra zabezpečení. Ve správním centru WinBase602 lze zjistit, z jak staré záložní kopie lze s pomocí journalu obnovit současný stav databáze.

Na rozdíl od transakčního zpracování dokáže journal čelit podstatně širší třídě katastrof, ale vyžaduje složitější restauraci (restaurace není automatická). Obnovení se provede po vybrání položky menu Nástroje / Server / Přehrát journal - viz Přehrání journalu.

Viz také: 	 Správa databáze (serveru)


Přehrání journalu

Akce Přehrání journalu opakuje aktualizace zaznamenané v journalu. Přitom přeskakuje akce provedené vyloučeným uživatelem a skončí na zadaném časovém limitu nebo po projití všech záznamů v journalu.

Dialogové okno se skládá ze tří částí:

•	needitovatelného okna s časovým údajem, který odpovídá současnému stavu databáze;

•	skupiny složek Omezení časem pro časový limit aktualizace - viz Omezení času;

•	skupiny složek Vyloučení uživatele pro vynechání aktualizací některého uživatele - viz Vyloučení uživatele.

Po přehrávání se na obrazovku vypíše počet provedených aktualizací, počet chyb při provádění aktualizací a počet neprovedených akcí vyloučeného uživatele. Není-li k dispozici journal nebo nesouhlasí časové údaje journalu a kopie, vypíše se Journal neobsahuje platné záznamy.

Viz také:	Správa databáze (serveru)
	Ochrana journalem aktualizací


Omezení času při aktualizaci
Omezení času

Během aktualizace databáze se neustále opakuje tento proces:

1. z journalu se vybere nejstarší aktualizace, která je novější než stav databáze;

2. tato aktualizace se provede;

3. stav databáze se posune kupředu na okamžik, který je zapsán ve vybrané aktualizaci.

Lze zadat omezení, do jakého času má tento proces pokračovat. Databázi lze aktualizovat po krocích: lze postupně zvyšovat časový limit a přehrávat určitý interval aktualizací. Omezením času lze ve spolupráci s vyloučením určitého uživatele vynechat např. akci, která vedla ke ztrátě důležitých dat.

Do příslušných polí zadáte datum a čas, kdy se má aktualizace zastavit. Tlačítkem Zrušit omezení tuto podmínku zrušíte.

Viz také:	Správa databáze (serveru)
	Ochrana journalem aktualizací


Vyloučení uživatele z aktualizace

Z aktualizací lze vyloučit akce, které byly provedeny určitým uživatelem. Jméno tohoto uživatele lze vybrat ze seznamu v dialogovém okně. Při zadávání jména uživatele musí být databáze v takovém stavu, že vylučovaný uživatel v ní existuje.

Aktualizace s vyloučením některého uživatele může ovšem vést k chybám, pokud akce jiných uživatelů navazují na vyloučené akce, například pokud jiní uživatelé chtějí zapisovat do záznamů, které vyloučený uživatel vytvořil. Proto doporučujeme používat vyloučení pouze v krajních případech: např. K "odzrušení" zrušené tabulky apod.

Viz také:	Správa databáze (serveru)
	Ochrana journalem aktualizací


Ochrana transakcemi

Transakční způsob provozu databáze je metoda ochrany proti vzniku nekonzistencí způsobených nedokončením série navzájem souvisejících aktualizací.

Databázový server je schopen sdružovat operace do tzv. transakcí. V transakčním režimu práce jádro zaručuje, že za každých okolností se transakce provede buď celá, nebo se neprovede vůbec. To platí i tehdy, pokud uprostřed provádění transakce vypadne napájení počítače!

Uživatel má možnost v aplikačním programu prohlásit skupinu aktualizací za jednu transakci tak, že na začátku zavolá funkci Start_transaction a na konci funkci Commit. Je tím zaručeno, že pokud tyto aktualizace např. přenášejí peníze z jednoho účtu na druhý, nemůže se stát, že by se z prvního účtu odečetly, ale na druhý nepřičetly.

Pro svoje interní operace si WinBase602 definuje transakce sama, nelze je vypnout.

Při jištění transakce se používá tzv. dvoufázový commit, který zajistí konzistenci databáze i v případě, že by k výpadku došlo během provádění funkce Commit. Na rozdíl od použití transakcí jištění transakcí zapíná a vypíná správce ve správním centru WinBase602. Nic nebrání tomu, aby se transakční režim zapínal a vypínal podle okamžitých okolností. Například během importu většího množství dat, což je časově náročná operace, je rozumné transakční zpracování vypnout.

Zatímco použití transakcí snižuje počet zápisů na disk v aktualizacích a zrychluje činnost databáze, jištění transakcí vyžaduje přibližně dvojnásobek diskových operací při každé transakci oproti stavu bez jištění. Na rychlost čtení a vyhledávání nemají transakce žádný vliv.

Ve Windows je použit program typu diskové cache, který odkládá zápisy na disk na pozdější dobu, čímž značně zrychluje běh aplikace, nicméně znemožňuje programům mít kontrolu nad tím, jsou-li data zapsána na disku nebo pouze v paměti. Ve WinBase602 je proto možno transakce zapisovat přímo na disk - zapíná se v okně Parametry provozu.

Viz také:

 Správa databáze (serveru)

 Transakce v jazyce SQL


Program Konfigurace WinBase602

Součástí dodávky WinBase602 je program pro správu instalací a databází. Program je dostupný pod jménem WBINST.EXE a je spustitelný pomocí ikony s názvem Konfigurace WinBase602.  Tento program nemá vlastní menu či lištu, ze kterého by šlo vyvolat nápovědu, ale obsahuje nápovědné tlačítko v záhlaví okna, kterým můžete ukázat na libovolnou složku okna a dostat tak konkrétní nápovědu. Nejčastější akce jsou uvedeny též v přehledu Správy serveru.

Program není klietem, nespouští server (nepřipojuje se). Jeho úkolem je zapsat zadané parametry a hodnoty do registrační databáze pod klíčem HKEY_LOCAL_MACHINE/SOFTWARE/Software602/WinBase602. Odtud se parametry načítají při spouštění serveru i klienta.

Program Konfigurace se používá vždy pro ten program (klient nebo SQL server pro Windows), který se spouští na tomto počítači. Je-li server pro Windows umístěn na jiném počítači než klient, používá se tedy program Konfigurace dvakrát na dvou počítačích.

Pro SQL servery pro Novell NetWare a LINUX (tyto OS nemají registrační databázi) se obdobné parametry zapisují ručně do textového souboru WBKERNEL.INI. Program Konfigurace nemá pro tyto servery smysl.


Provozní systém (Runtime)

Provozní systém (Runtime) WinBase602 je režim provozu, který umožní spuštění připravené aplikace, nepovolí však žádné její úpravy. Šíření aplikací WinBase602 s runtime modulem nepodléhá žádné registrační ani oznamovací povinnosti vůči distributorovi. V případě aplikace pro provoz v síti je nutné zakoupit licence pro SQL server pro předpokládaný počet klientů. Od verze 6.1 lze zdarma šířit i Vývojové prostředí, tedy rozhodnutí, jakého klienta uživateli nainstalovat nezáleží na licenčních podmínkách, ale na důvěře v uživatele, že pomocí Vývojového prostředí nezpůsobí nevratné zásahy do aplikace.

Je nutné si uvědomit, že některé administrativní zásahy nejdou bez vývojového prostředí provést - např. vytvoření uživatelů a zařazení do skupin, přidělení práv (pokud to není součást programu), navázání replikací aj.

Klient se uvede do režimu Runtime, že se před instalaci zapíše do SETUP.INI klíč RTonly=1.

Příkazová řádka ikony spouštějící Runtime s aplikací musí být speciálně upravena. Při instalaci vzniknou ikony automaticky.

Instalace aplikací WinBase602

K tomu, aby aplikace mohla sama pracovat, musí na počítači proběhnout instalace provozního systému (resp. vývojového prostředí). Součástí instalace provozního systému je (na závěr) import aplikace do databáze a vytvoření ikony, která umožní její spuštění. Místo importu aplikace do nově vzniklého databázového souboru je možné též pouze zkopírovat připravený naplněný databázový soubor WB5.FIL.

Viz také:	Parametry instalace v SETUP.INI
	Vytvoření disket a instalace provozního systému
	Parametry příkazové řádky klienta


Vytvoření disket instalace provozního systému
Vytvoření instalačních disket a instalace aplikace s provozním systémem

Aplikace se šíří spolu s instalačními disketami provozního systému WinBase602 upravenými tak, že na konci instalace proběhne import aplikace do databáze.

Postup při vytváření těchto instalačních disket je následující:

1. Vytvořte kopii sady instalačních disket (z adresáře Runtime na instalačním CD WinBase602)

2. Pomoci textového editoru (například NOTEPAD) otevřete soubor SETUP.INI z první instalační diskety.

V sekci [WinBase602] na řádku začínajícím

IMPORT=

připište bezprostředně za rovnítko jméno aplikace (jméno APL souboru bez přípony), např.

IMPORT=Majetek

3. Pokud chcete provozovat klienta v režimu Runtime, doplňte další řádek Rtonly=1;

4. Upravte případné další parametry importu pomocí editace SETUP.INI - podrobnosti;

5. Vyexportovanou aplikaci umístěte na samostatnou disketu, včetně případných souborů *.HLP (nápověda), *.ICO (vlastní ikona) a .EXX (zkompilovaný program), případně upravte APL soubor.

Pokud se aplikace nevejde na jednu disketu, je možné ji rozdělit a disket více - při importu aplikace si program bude žádat další diskety. Při rozdělování aplikace na diskety musíte postupovat podle pořadí daného APL souborem (na každé disketě se musí nacházet souvislá část APL souboru).

Na první vzniklé instalační disketě se nalézá program SETUP.EXE, který instaluje provozní systém WinBase602 a umožní importovat zvolenou aplikaci.

Viz také:	Parametry instalace v SETUP.INI
	Nestandardní způsoby instalace
	Databáze umístěné na CD ROM


Nestandardní způsoby instalace

Instalace aplikace pomocí zkopírování databázového souboru WB5.FIL

V některých případech bývá pro vývojáře jednodušší při instalaci WB neprovádět import aplikace do nově vytvořeného databázového souboru, ale připravit si tento databázový soubor předem se všemi daty a pouze ho při instalaci zkopírovat.

V tomto případě použijte SETUP.INI v následující podobě:

...

[WinBase602]

Title=Instalace naší aplikace

WelcomeTitle=Vítejte

WelcomeText=Instalujete naší aplikaci Diář

TargetDir=c:\diar

AskTarget=1

ServerName=DIAR_DB

AskDb=0

ShortcutFolder=Diář 2000

AskFolder=0

ShowSummary=0

CopyFIL=1

CreateApplIconNum=1

CreateApplIcon1=diar

CreateApplIconCapt1=Diář 2000

CopyFilesNum=2

CopyFile1=diar.hlp

CopyFile1=cti_mne.txt

RunProgram=Notepad.exe

RunProgramFile=cti_mne.txt

Předem si vytvoříte databázový soubor se jménem podle ServerName a umístíte ho buď na samostatnou disketu v případě instalace z disket nebo do adresáře se SETUP.INI v případě instalace z CD; při CD instalaci přidáte ještě hodnotu AskInsert=0.

Instalace Provozního prostředí a import aplikace z CD

V případě, že aplikaci chcete šířit na CD, umístěte vyexportovanou aplikaci do podadresáře adresáře se SETUP.EXE a v parametru SETUP.INI Import= zadejte /podaresář/jméno_aplikace_bez_apl. Do SETUP.INI také přidejte AskInsert=0, pokud chcete, aby se neobjevila hláška Vložte disketu do E:\INSTALL\CDROM nebo podobně.

Instalace Klienta WinBase602

Je-li třeba nainstalovat pouze klientské prostředí WinBase602 a připojovat se k již existujícímu SQL serveru, je to možné buď přímo z originálního CD s WinBase602 nebo z instalačního programu Runtime (Provozního systému). V tomto druhém případě je nutné do SETUP.INI na první disketě přidat hodnotu ClientOnly=1.

SETUP.INI může mít následující podobu

...

[WinBase602]

TargetDir=d:\WinBase

AskTarget=1

ShortcutFolder=WinBase602 klient

AskFolder=1

ClientOnly=1

Instalace ODBC driveru WinBase602

Je-li třeba nainstalovat pouze WinBase602 ODBC driver a připojovat se z externího programu k již existujícímu SQL serveru přes ODBC rozhraní, je to možné buď přímo z originálního CD s WinBase602 nebo z instalačního programu Runtime (Provozního systému). V tomto druhém případě je nutné do SETUP.INI na první disketě přidat hodnotu ODBCOnly=1.

SETUP.INI může mít následující podobu

...

[WinBase602]

TargetDir=d:\WinBase

AskTarget=1

ShortcutFolder=WinBase602 ODBC klient

AskFolder=1

ODBCOnly=1

Viz také:	Parametry SETUP.INI
	Vytvoření instalačních disket a instalace provozního systému
	Databáze umístěné na CD ROM


Parametry instalace v souboru SETUP.INI

Soubor SETUP.INI umístěný v témže adresáři jako SETUP.EXE ovlivňuje chování instalačního programu. Vývojáři aplikací tak mohou instalaci upravit podle svých potřeb.

Měnit lze některé hodnoty v sekci [WinBase602]:

Import=jméno aplikace (jméno APL souboru aplikace bez přípony)

po instalaci WinBase602 se naimportuje aplikace; je-li instalace z disket, umístěte vyexportovanou aplikaci na samostatnou disketu, program si ji vyžádá, je-li instalace z CD, umístěte aplikaci na subadresáře a v parametru Import zadejte: subadresář\jméno_aplikace . Pokud se má importovat více než jedna aplikace, uvedou se jména aplikací za sebou oddělená znakem + (plus), bez mezer.

Po importu aplikací vzniknou ikony pro spuštění  každé naimportované aplikace. Ikony se vytvoří ve folderu zadaném v parametru ShortcutFolder.

Title=titulek instalace

WelcomeTitle=titulek úvodního dialogu

WelcomeText=začátek textu úvodního dialogu

je možné si sem umístit vlastní texty;

InstallProduct=N

lze přednastavit, jaký produkt se bude instalovat, přičemž N je 0 pro Personální Databázi, 1 pro NT SQL Server, 2 pro NLM SQL Server, 3 pro SDK, 4 pro samostatného klienta, 5 pro samostatný ODBC driver.

AskProduct=0|1

nula se použije tehdy, nemá-li instalační program zobrazit okno s dotazem na výběr produktu k instalaci; jednička, pokud se okno objevit má. Default je 1, pokud není uvedeno InstallProduct, nebo 0, pokud je uvedeno InstallProduct.

RTonly=1

je-li v SETUP.INI tento zápis, nebude se po instalaci spouštět klient jako Vývojové prostředí ale jako Provozní prostředí (RunTime), v němž je možné pouze spouštět aplikace. Ikona (zástupce) spouštějící Vývojové prostředí se v tomto případě nevytváří. Proto má použítí tohoto parametru význam jen v kombinaci s importem aplikace, který vytváří ikony pro spuštění importovaných aplikací, nebo s explicitním vytvářením ikon pomocí parametru CreateApplIcon…

TargetDir=přednastavený adresář pro instalaci

adresář, který se nabídne v dialogu pro výběr adresáře;

AskTarget=0|1

nula se použije tehdy, nemá-li instalační program zobrazit okno s dotazem na umístění instalace; použije se adresář nastavený v TargetDir. Defaultně je nastavena 1;

ServerName=přednastavené jméno serveru

jméno serveru, které se objeví v dialogu pro výběr jména serveru;

AskDb=0|1

nula se použije tehdy, nemá-li se instalační program ptát na jméno serveru; použije se jméno zadané v ServerName; databáze se vytvoří v adresáři nastaveném v TargetDir. Defaultně je nastavena 1;

ShortcutFolder=přednastavené jméno složky pro zástupce programů

jméno složky, která se objeví v dialogu pro výběr složky;

AskClientProtocol=0|1

nula se použije tehdy, nemá-li se instalační program ptát na druh síťového protokolu klienta; tato otázka se objevuje pouze při instalaci samostatného klienta nebo samostatného ODBC driveru. Pokud se při instalaci tento údaj neupřesní, bude se klient připojovat přednostně pomocí TCP/IP. Defaultně je nastavena 1;

AskFolder=0|1

nula se použije tehdy, nemá-li se instalační program ptát na jméno složky; použije se jméno zadané v ShortcutFolder. Defaultně je nastavena 1;

ShowSummary=0|1

nula se použije tehdy, nemá-li se po zadání parametrů instalace objevit okno se souhrnnou informací - použijte v případě CopyFIL=1 nebo jsou-li předchozí hodnoty Ask... rovny 0. Defaultně je nastavena 1;

NoFinishDialog=0|1

jednička se použije tehdy, nemá-li se na závěr instalace objevit okno s informací o ukončení instalace (a případném zahájení importu aplikací). Defaultně je nastavena 0;

AskInsert=0|1

nulu použijte v případě, že nechcete zobrazit okno s výzvou k vložení diskety s aplikací nebo databázovým souborem WB5.FIL. To má význam při instalaci z CD. Defaultně je nastavena 1;

CopyFIL=0|1

jednička se použije, pokud se místo importu aplikace má použít připravený databázový soubor WB5.FIL (obsahující aplikace). Při této instalaci se nevytvoří automaticky ikona spouštějící aplikaci - je nutné ji vytvořit pomocí parametru CreateApplIcon… Defaultně je nastavena 0;

CreateApplIconNum=počet ikon pro spuštění aplikace, které se budou vytvářet

použijte v případě, že chcete vytvořit ikony aplikací, které jsou obsaženy v kopírované WB5.FIL. Zadejte číslicí počet ikon (zástupců), které se vytvoří. Podle zadaného počtu ikon se následující dvojice parametrů opakuje s číslem ikony na posledním místě parametru (CreateApplIcon1, CreateApplIconCapt1, CreateApplIcon2, CreateApplIconCapt2 atd.)

CreateApplIcon1=jméno první aplikace

zadejte jméno první aplikace, pro níž se má vytvořit ikona. V ikoně (umístěné ve ShortcutFolder) se vytvoří příkazový řádek (cíl) ve tvaru TargetDir\WB602.EXE &ServerName CreateApplIcon1 /S

CreateApplIconCapt1=titulek první ikony

zadejte titulek ikony, kterou se bude spouštět aplikace

ClientOnly=0|1

jedničku použijte v případě, že chcete instalovat pouze klienta WinBase602, předpokládá se připojení na již existující (nejspíš síťový) WinBase602 SQL server. V tomto případě nezadávejte jméno aplikace k importu. Defaultně je nastavena 0. Je ekvivalentní InstallProduct=4.

ODBCOnly=0|1

jedničku použijte v případě, že chcete instalovat pouze ODBC driver WinBase602, předpokládá se přístup k datům již existujícího WinBase602 SQL serveru pomocí externího programu. V tomto případě nezadávejte jméno aplikace k importu. Defaultně je nastavena 0. Je ekvivalentní InstallProduct=5.

CopyFilesNum=počet souborů

zadejete číslicí počet souborů, které se mají při instalaci přenést - jedná se o soubory vytvořené vývojářem (např. help, DLL apod.), soubory potřebné pro WinBase se kopírují automaticky. Následující parametr se opakuje podle zadaného počtu - CopyFile1, CopyFile2 atd.

CopyFile1=jméno souboru

zadejte jméno prvního souboru, který se má přenést. Soubor musí být umístěn v témže adresáři jako je SETUP.INI. Soubor se přenese do adresáře zvoleného v TargetDir.

RunProgram=jméno programu

zadejte jméno programu, který se má spustit po skončení instalace (např. NOTEPAD.EXE).  Program se musí zadat včetně cesty, pokud není v PATH.

RunProgramParam=parametry programu

zadejte obecné parametry příkazové řádky programu z RunProgram

RunProgramFile=jméno souboru předaného jako parametr programu

zadejte jméno souboru, který tvoří parametr programu z RunProgram (např. README.TXT). Tento soubor se musí zkopírovat do TargetDir pomocí CopyFileN.

Viz také:	Nestandardní způsoby instalace
	Provozní systém (RunTime)
	Vytvoření instalačních disket a instalace provozního systému


Zatím není v SETUP.INI

LicNumText=text na stránce se zadáváním licenčního čísla

je možné si sem umístit vlastní text;

SerialNumber=licenční číslo

řetězec, který se objeví jako přednastavená hodnota v poli pro zadání licenčního čísla - platnost čísla se ověřuje, kontrolu čísla nelze obejít.

AskLicNum=0|1

nula se použije tehdy, nemá-li instalační program zobrazit okno s dotazem na licenční číslo; použije se řetězec nastavený v SerialNumber; pole Jméno a firma v tomto okně se vyplní automaticky podle hodnot zadaných při instalaci Windows. Defaultně je nastavena 1;


Definiční soubor aplikace
Definiční soubor aplikace (APL soubor)

Vnitřní formát definičního souboru aplikace není nutno znát, pokud chcete provádět pouze jednoduchý export a import. Existuje však různé případy, kdy může být užitečné zasáhnout do definičního souboru vzniklého při exportu a tak ovlivnit, co a jak se bude importovat:

•	chcete poskytnout aplikaci s programem pouze v přeloženém tvaru, nikoli ve zdrojovém tvaru;

•	chcete ovlivnit vytvoření ikony aplikace;

•	chcete provést update aplikace (import s nahrazením), tzn.potřebujete mít v APL souboru jen ty objekty, které byly změněny (a bez tabulek, aby se nepřepsala data)

Definiční soubor aplikace má podobu textového souboru, takže jej lze editovat jakýmkoli editorem, který do textu nevkládá formátovací informace (např. editorem NOTEPAD ve Windows). Každá řádka definičního souboru obsahuje zápis v některém z těchto tvarů:

Application jméno_aplikace X id_aplikace

Table jméno_tabulky  [soubor] [práva]

View jméno_pohledu  [soubor] [práva]

Cursor jméno_dotazu  [soubor] [práva]

Program jméno_programu   [soubor] [práva]

Code jméno_programu   [soubor] [práva]

Menu jméno_menu   [soubor] [práva]

Picture jméno_obrázku   [soubor] [práva]

Connect jméno_ODBC_zdroje_dat   [soubor] [práva]

Relat jméno_relace   [soubor] [práva]

Drawing jméno_schématu   [soubor] [práva]

Graph jméno_pomocného_objektu   [soubor] [práva]

Replrel jméno_replikačního_vztahu   [soubor] [práva]

Proc jméno_procedury [soubor] [práva]

Trigger jméno_triggeru [soubor] [práva]

Www jméno_WWW_objektu [soubor] [práva]

Sequen jméno_sekvence [soubor] [práva]

Folder jméno_složky

Role jméno_role  [obsazení_do_role]

Data jméno_tabulky   [soubor] [práva]

Dataprv jméno_tabulky   [soubor] [práva]

Icon jméno_zástupce:jméno_složky  parametry_pro_WB602

Pravidla zápisu

Řádka začínající APPLICATION musí být uvedena jako první a nesmí se opakovat. Udává jméno a identifikaci importované aplikace. Pokud aplikace tohoto jména nebo stejné identifikace již na cílovém počítači existuje, bude uživatel při importu požádán o zadání nového jména a bude vytvořena nová identifikace (takto importovanou instanci aplikace však nebude možno sdílet pomocí replikací).

Řádka začínající ROLE vytvoří v aplikaci roli zadaného jména. Pokud se exportují i práva uživatelů a skupin a jejich obsazení do rolí, na řádce jsou dále vyjmenováni uživatelé a skupiny obsazení do této role. Exportuje-li se aplikace včetně práv a zároveň bez dat v tabulkách, objeví se APL souboru řádek DATAPRV, který popisuje práva k datům této tabulky.

Řádka začínající FOLDER vytvoří v aplikaci složku zadaného jména. Vlastní informace o náležení do složky je obsažena v komentáři v definicí jednotlivých objektů.

Řádky začínající TABLE, VIEW, CURSOR, MENU, PICTURE, PROGRAM, RELAT, DRAWING, CONNECT, PROC, TRIGGER,WWW a SEQUEN importují objekt uvedený v druhém sloupci. Řádky začínající DATA importují data ve vnitřním tvaru do již existující tabulky uvedené ve druhém sloupci (tabulka může být importována na některé z předchozích řádek).

Startovní objekt aplikace (program, menu nebo pohled) je označen hvězdičkou (*) na začátku své řádky.

Položky odpovídající objektům připojeným do aplikace z jiných aplikací WinBase602 (nikoli tabulkám připojeným přes ODBC) jsou označeny znakem plus (+) na začátku řádky. Po importu budou tyto objekty opět připojené, proto je nutno také importovat aplikace, v nichž existují.

Položky označené znakem tečka (.) budou importovány v zašifrované podobě.

Soubor

Na řádcích popisujících import objektu nebo dat může být uvedeno jméno souboru, v němž se definice objektu nebo data nacházejí. Soubor se hledá ve stejném adresáři, v němž je definiční soubor aplikace. Pokud jméno souboru není uvedeno, hledá se soubor se jménem vytvořeným takto:

•	vezme se prvních osm znaků jména objektu, odstraní se diakritika a nealfanumerické znaky se nahradí znakem _ (podtržítko);

•	připojí se přípona dle kategorie objektu, např.: TDF (definice tabulky), VWD (pohled), CRS (dotaz), PGM (program), MNU (menu), WBP (obrázek), TDT (data ve vnitřním tvaru) apod.

Při exportu se jméno souboru zapíše do definičního souboru pouze tehdy, pokud kvůli konfliktu se jménem jiného souboru jej bylo nutno přejmenovat.

Práva

Práva k objektu jsou na řádce specifikována pouze pokud to uživatel vyžaduje, a zahrnují buď pouze práva rolí nebo také práva uživatelů a skupin.

Vytvoření ikony

Řádka začínající slovem ICON vytváří zástupce aplikace zadaného jména v zadané složce. Pokud dvojtečka a jméno složky chybí, zástupce se umístí do složky Aplikace602. Zástupce spouští program WB602.EXE a na příkazové řádce mu předává parametry specifikované v definičním souboru. Mezi parametry NEUVÁDĚJTE jméno aplikace, WinBase602 ho doplní sama (jméno aplikace se může při importu změnit). Úpravou řádku ICON lze také stanovit, aby se přenesl přeložený program (EXX)

Složka, do níž se umístí zástupce aplikace, může záviset na dalších okolnostech:

•	je-li import součástí instalace, závisí na parametrech instalace v SETUP.INI.

•	při samostatném importu závisí také na nastavení volitelných parametrů WinBase602 na tom počítači, kde import proběhne (volba Vytvářet / Nevytvářet ikonu aplikace).

Viz také	Úprava APL pro EXX
	Parametry instalace v SETUP.INI
	Databázová aplikace
	Export aplikace
	Import aplikace


Použití programu v přeloženém tvaru
Úprava APL pro import aplikace pouze s EXX

Zde popíšeme kroky, které musí učinit autor aplikace, pokud nechce šířit svůj program ve zdrojovém tvaru a přeje si, aby aplikace pracovala pouze s přeloženým tvarem programu.

Zdrojový tvar programu vyřadíte z importu prostě tak, že jeho řádku vypustíte z definičního souboru aplikace.

Při exportu aplikace se každý její program přeloží a zapíše do souboru s příponou EXX. Tyto soubory vzniknou ve stejném adresáři, jako definiční soubor. V definičním souboru nejsou zmíněny, protože se do databáze nebudou importovat a při každém použití se přečtou ze souboru.

Program v přeloženém tvaru se používá tak, že se na příkazové řádce spouštějící provozní systém WinBase602 uvede parametr /C následovaný cestou k souboru obsahujícímu tento program. Aby taková příkazová řádka vznikla, musíte vhodně upravit definiční soubor:

Na řádku definičního souboru začínající slovem ICON napište do sekce označené jako parametry_pro_WB602 jméno souboru s přeloženým programem a příponou EXX. Během importu aplikace se tento soubor zkopíruje do adresáře k programům WinBase602 a do příkazové řádky zástupce se doplní parametr /C, cesta a jméno souboru.

Při spuštění WinBase602 s parametrem /C se ze zadaného souboru načte a spustí program EXX. Případný startovní objekt aplikace se ignoruje.

Příklad:

Aplikace Majetek_sklady obsahuje program Maj_prog, jehož zdrojový text chce autor utajit. Exportem aplikace vznikne definiční soubor (APL soubor).  Řádka začínající ICON se upraví např. do podoby:

ICON `Majetek 99`:Majetek Maj_prog.exx

Nechť se aplikace importuje do WinBase602, která má programy v adresáři C:\WinBase, na server jménem Hlavní_server. Pokud aplikace nebude při importu uživatelem přejmenována, vznikne ve složce Majetek ikona s nápisem Majetek 99 spouštějící program WB602.EXE s parametry:

&"Hlavní_server" "Majetek_sklady" /CC:\WinBase\MAJ_PROG.EXX

První parametr udává server, na nějž se klient připojí, druhý parametr je jméno aplikace, která se otevře, třetí udává cestu k souboru obsahujícímu program v přeloženém tvaru. Tento program  se spustí.

Aplikaci, která neobsahuje zdrojové kódy programů a spouští se proto postupem uvedeným v této sekci, není možné spustit z řídicího panelu.

Viz také	Definiční soubor aplikace
	Parametry klienta na příkazové řádce


Parametry klienta na příkazové řádce
Parametry příkazové řádky klienta

Programu WB602 .EXE (vývojovému i provoznímu prostředí) lze na příkazové řádce zástupce předat některé parametry. Jsou to:

&jméno serveru - výběr serveru - podrobnosti

jméno aplikace - volba aplikace, která se automaticky otevře - podrobnosti

/S nebo /Sobjekt - spuštění aplikace - podrobnosti

/Ccesta_k_souboru_EXX - spuštění přeloženého programu - podrobnosti

/Icesta_k_souboru_APL - volba aplikace, která se při spuštění automaticky importuje, použití předpokládá uvedení & a jména serveru;

/Z - hlavní okno programu se otevře v maximalizované podobě (přes celou obrazovku);

/D - bude blokováno uzavření programu ze systémového menu (dvojím kliknutím i položkou Konec); klienta lze zavřít pouze korektním ukončením aplikace;

/L - klient se přihlásí na server jako anonymní uživatel, použití předpokládá uvedení & a jména serveru;

/B - program nebude automaticky překládat program v aplikaci - použije se pouze po podepření poškozené databáze

Žádný parametr není povinný. Pro běžný provoz vystačí ikony (zástupci) vytvoření při instalaci.

Pro spuštění aplikace s Runtimem je nutné zadat parametry:

c:\winbase\wb602.exe &jméno serveru jméno aplikace /S

nebo

c:\winbase\wb602.exe &jméno serveru jméno aplikace /Cpokus.EXX

Viz také:

 Parametry příkazové řádky serveru


Parametry serveru na příkazové řádce
Parametry příkazové řádky serveru

Programu WBSEREVR.EXE lze na příkazové řádce ikony předat některé parametry. Jsou to:

&jméno databáze - výběr z registrovaných databází

/N - program se spustí v síťovém režimu, tedy klienti se mohou připojovat ze stanic v síti

Žádný parametr není povinný. Při spuštění serveru bez parametrů se nabídne výběr z registrovaných lokálních databází, je-li registrována jediná, přihlásí se server k ní v síťovém režimu.

Viz také

 Parametry příkazové řádky klienta


Výběr serveru
Výběr serveru při spuštění klienta

V parametru příkazové řádky klienta začínajícím znakem & je možné pro rychlejší spuštění uvést jméno zaregistrovaného serveru (registrace se provádí pomocí Konfiguračního panelu).

Při hledání serveru po spuštění klienta se postupuje takto:

•	pokud server tohoto jména běží na lokálním počítači, klient se připojí na něj;

•	pokud na lokálním počítači běží jiný server, klient  ho ignoruje a pokusí se najít běžící server zadaného jména v síti;

•	pokud na lokálním počítači neběží žádný server, pak:

•	pokud jméno serveru není registrováno, ohlásí se chyba;

•	pokud jméno serveru je registrováno jako lokální databáze, klient spustí server (takto spuštěný server skončí po odpojení posledního klienta);

•	pokud jméno serveru je registrováno jako síťový server, klient se pokusí najít běžící server tohoto jména v síti.

Viz také

 Parametry příkazové řádky klienta

 Parametry příkazové řádky serveru


Volba aplikace na příkazové řádce

Na příkazové řádce klienta je možno uvést za jméno serveru také jméno aplikace. Pokud je tato aplikace v databázi, pak je automaticky otevřena. Aplikace není spuštěna, i když má označený startovní objekt. Pro spuštění aplikace použijte parametr /S

Příklad: otevření aplikace

C:\WINBASE\WB602.EXE &"SERVER KNIHY" KNIHOVNA

Příklad: spuštění aplikace se startovním objektem

C:\WINBASE\WB602.EXE &"SERVER KNIHY" KNIHOVNA /S

Příklad: spuštění aplikace jiným objektem než startovním

C:\WINBASE\WB602.EXE &"SERVER KNIHY" KNIHOVNA /S"PROHLIZENI KNIH"

Viz také

 Parametry příkazové řádky klienta

 Parametry příkazové řádky serveru


Spuštění kódu programu

Na příkazové řádce klienta lze specifikovat, že se má spustit program, který je v souboru v přeloženém tvaru. Takový požadavek vyjádříte parametrem /Ccesta_k_souboru_EXX. Tento parametr se smí použít pouze v kombinaci s parametrem udávajícím jméno otevírané aplikace. Pokud aplikace obsahuje startovní objekt, ten se ignoruje.

Příklad:

v databázi spravované serverem SERVER1 je aplikace SKLAD PRAHA, která se má spustit pomocí přeloženého programu umístěného v souboru INVENTUR.EXE:

 C:\WINBASE\WB602.EXE &SERVER1 "SKLAD PRAHA" /CC:\APLIKACE\INVENTUR.EXX

Této varianty se používá tehdy, není-li (záměrně) k dispozici zdrojový text programu.

Viz také:

 Úprava APL souboru pro použití EXX

 Parametry příkazové řádky klienta

 Parametry příkazové řádky serveru


Bezpečnost serveru
Bezpečnostní parametry serveru

Ve WinBase602 lze nastavit parametry, které ovlivní míru její odolnosti proti proniknutí nepovolaných osob na server nebo čtení dat přímo z databázového souboru (položka Bezpečnost v menu Nástroje/Server).

Všechny mechanismy ochrany obsahu databáze proti přístupu neoprávněných osob se týkají přístupu k datům uloženým pod správou databázového serveru prostřednictvím některého klienta.

Mimo to je však třeba databázový soubor chránit i před přímou manipulací obcházející server. Přestože vnitřní struktura souboru je složitá a není zveřejněná, vyhledáváním klíčových frázi v tomto souboru by bylo možno zjistit některé informace uložené v databázi. Přepsáním tohoto souboru lze snadno zničit obsah databáze.

Základní ochrana databázového souboru by měla spočívat v jeho umístění do adresáře chráněného proti čtení nebo přepisu. Přístup k databázovému souboru musí mít pouze server. Klient ke své práci nepotřebuje žádná přístupová práva k databázovému souboru, svazek nebo adresář obsahující tento soubor nemusí být vůbec v síti viditelný.

Pokud ochrana databázového souboru přístupovými právy není realizovatelná nebo dostatečná, lze ji doplnit nebo částečně nahradit šifrováním obsahu tohoto souboru. Ve WinBase602 jsou implementovány tři způsoby šifrování:

•	Jednoduché a rychlé šifrování založené na pevném heslu.

•	Jednoduché a rychlé šifrování založené na heslu zvoleném uživatelem.

•	Velmi účinné, ale pomalejší šifrování založené na heslu zvoleném uživatelem.

K ztížení proniknutí nepovolaných osob (nebo naopak ke zjednodušení přístupu v síti) lze nastavit následující parametry:

•	Minimální délka uživatelského hesla - předepisuje minimální počet znaků hesla, které si smí zvolit uživatel. Větší hodnota snižuje riziko proniknutí do systému vyzkoušením všech možných krátkých slov ze slovníku.

•	Expirační doba hesla - udává počet dnů, po jejichž uplynutí bude uživatel donucen si změnit heslo. S dobou platnosti hesla se zvyšuje riziko jeho vyzrazení, proto omezení doby platnosti chrání uživatele před zneužitím jejich hesel.

•	Jméno síťového serveru, z něhož se přebírá přihlášení - je-li uvedeno jméno síťového souborového serveru, pak uživatel, který je na tento server přihlášen a má ve WinBase602 stejné jméno, bude přihlášen do WinBase602 bez udávání hesla. Tento mechanismus urychluje spouštění WinBase602 a její aplikací, ale snižuje.

Ochranu proti změnám v bezpečnostních parametrech je možné zajistit heslem.

Viz také:	Správa serveru - úvod


Zkompaktnění tabulky

Akce volaná z řídicího panelu provede "setřesení" záznamů tak, aby v tabulce nebyly zrušené a uvolněné záznamy. Pořadí záznamu nemusí být zachováno. Akce se nesmí provést do tabulky, do níž vedou ukazatele.

Nezaměňujte se zkompaktněním databáze, které se provádí z dialogu Provozní parametry serveru.

Viz také:	Správa serveru - úvod


Parametry síťové komunikace
Parametry síťové komunikace TCP/IP

Klient se dokáže po síti napojit na server pouze tehdy, pokud oba používají společný síťový protokol. Server může souběžně pracovat s více protokoly, klient pouze s jedním. Při přístupu klienta na server běžící na stejném počítači se komunikační protokoly neuplatní.

WinBase602 je schopna pod Windows pracovat s protokoly TCP/IP, IPX/SPX nebo NetBEUI, a to za předpokladu, že jsou v operačním systému instalovány. Protokol (a ostatní parametry) se nastavují programem Konfigurace. Na stránce Instalace vyberete ze seznamu tu instalaci, jejíž parametry chcete nastavit, a stisknete tlačítko Parametry. V dialogovém okně pak vyberete protokol pro klienta a jeden nebo více protokolů pro server. Volba protokolu IPX/SPX ve Windows 95 je aktivní pouze v případě, že je instalován produkt Client32 od firmy Novell.

Protokoly, podporované běžícím serverem, jsou vždy uvedeny v jeho okně.

Protokol TCP/IP

Protokol TCP/IP se nejčastěji používaným protokolem WinBase602. Umožňuje přístup klienta na server nejen v lokální síti, ale také pomocí telefonního spojení nebo po Internetu.

Každý počítač komunikující tímto protokolem, má svou IP adresu sestávající se z 4 čísel oddělených tečkami, například “194.196.210.54”. Tato adresa se nastaví ve Windows na panelu vlastností tohoto protokolu, nebo je přidělována dynamicky počítačem, který je v síti pověřen tímto úkolem (např. DHCP server). Databázový server, který poskytuje služby i mimo lokální síť, musí mít statickou IP adresu, zatímco klient může mít adresu pokaždé jinou.

Klient může ověřit funkčnost komunikace protokolem TCP/IP před připojením na server pomocí tlačítka Test spojení IP na řídicím panelu. Test spuštěný tímto tlačítkem je obdobou funkce utility PING.

Pokud chcete používat protokol TCP/IP a tento protokol je instalován kromě síťové karty také pro telefonní spojení, pak v ovládacím panelu Windows 95 v položce Internet (máte-li ji tam) musíte vypnout automatické vytáčení. Jinak by se při inicializaci protokolu ve WinBase602 začalo vytáčet číslo vašeho ISP.

Implementace protokolu TCP/IP ve Windows má občasné problémy, pokud je tento protokol připojen na více adapterů, například současně na síťový adapter a modem. Za těchto podmínek občas dochází k nesprávnému směrování paketů a klient nemůže najít databázový server. Jako východisko z nouze zpravidla pomůže odinstalování nefungujícího adaptéru (případně i protokolu) a jeho zpětné nainstalování.

Pokud je na stránce Databáze a servery programu Konfigurace zatržen označovací čtverec TCP/IP broadcast povolen, pak klient osloví při svém spuštění všechny počítače v lokálním segmentu sítě (nikoli v celém Internetu), zda na nich neběží server komunikující po TCP/IP. Pokud čtverec zatržen není, pak klient přímo osloví pouze ty servery, které jsou u něj registrovány a mají zadanou IP adresu.

Viz také:	Správa serveru - úvod


Vytvoření nové databáze

Při instalaci databázového serveru pod Windows se obvykle zároveň vytvoří nová databáze (výjimkou je případ, kdy se pod Windows převezme již existující starší databáze). Další databáze lze vytvářet podle potřeby. Vytvoření databáze znamená vytvoření databázového souboru a jeho zaregistrování.

Při vytváření nové databáze ji vždy přidělíte jméno v délce maximálně 31 znaků. Jméno se zaznamená do vytvářené databáze a nelze jej později změnit. Při práci v síti se databáze pod svým jménem nabízejí klientům a podle jména se klient připojí na server, který databázi obsluhuje.

Pod Windows jsou jméno databáze a cesta k databázovému souboru zaznamenány v registru a případné přemístění souboru do jiného adresáře vyžaduje novou registraci programem Konfigurace.

Vytvoření nové databáze pod Windows

Databáze lze vytvářet pomocí programu Konfigurace.. Na záložce Databáze a servery stiskněte tlačítko Vytvořit novou databázi, vyplňte jméno databáze a vyberte adresář, do nějž bude umístěn databázový soubor. Databázový soubor bude fyzicky vytvořen až při prvním spuštění serveru nad touto databází. Nová úspěšně vytvořená databáze je prázdná až na systémové tabulky a standardního uživatele ANONYMOUS a skupiny DB_ADMIN a EVERYBODY.

Alternativně lze novou databázi vytvořit také z řídicího panelu vývojového prostředí WinBase602.

Viz také:	Správa serveru - úvod


Registrace existující databáze

Předpokládejme, že na svém počítači máte databázi, která není zaregistrovaná (nejsou o ní údaje v Registrační databázi Windows). Není to častý případ, může nastat například tehdy, pokud databáze (soubor WB5.FIL) byla přenesena z jednoho počítače na jiný nebo pokud se poškodil registr Windows.

Databáze musí být před použitím registrována, aby na ní bylo možno spustit server. Registrace se provádí programem Konfigurace na stránce Databáze a servery. Stiskněte tlačítko Registrovat lokální databázi a v dialogu vyplňte jméno databáze (to jméno, pod nimž byla vytvořena) a plnou cestu k databázovému souboru.

Pozor! Rozlišujte registraci produktu danou zadáním licenčního čísla (registrace produktu u výrobce, která umožňuje podporu, upgrade apod.) a tuto registraci, kdy se do registru zapíší údaje o umístění databázového souboru, aby byl z klienta snadno přístupný.

Viz také:	Správa serveru - úvod


Rozdělení databáze do více souborů

Databázový soubor lze rozdělit do více částí (nejvýše čtyř). Účelem takového rozdělení může být:

•	využití menších disků bez obavy jejich přeplnění;

•	zvýšení výkonu serveru rozložením zátěže mezi více fyzických disků;

•	rozdělení databáze na nepřepisovatelnou část (vhodnou k zapsání na CD ROM) a editovatelnou část.

Každá část databázového souboru je z pohledu operačního sytému zvláštním souborem, každá se jmenuje WB5.FIL a je ve zvláštním adresáři (zpravidla na zvláštním svazku). Každá část kromě poslední má předepsanou maximální velikost – při jejím překročení data pokračují v další části.

Pod Windows se rozdělení databázového souboru a případné parametry dalších pomocných databázových souborů nastavuje ve speciálním okně, k němuž se lze dostat takto:

1. Spusťte program Konfigurace na stránce Databáze a servery.

2. Vyberete databázi v seznamu a stisknete tlačítko Adresáře.

Viz také:	Správa serveru - úvod


Zálohování a obnovování obsahu databáze

Nejjednodušší ochrana obsahu databáze spočívá v pořizování záložních kopií kompletního databázového souboru, tedy veškerého obsahu databáze. Později, vyžadují-li to okolnosti, lze databázi z kopie obnovit, tedy uvést databázi do toho stavu, v němž byla v okamžiku vytvoření kopie.

Tato ochrana má sama o sobě omezenou účinnost (záložní kopie obsahuje zčásti neaktuální data), ale získává na důležitosti v kombinaci s journalem - viz ochrana journalem

Správce databáze by měl posoudit, do jaké míry postačuje možnost obnovit po zhroucení databáze její dřívější stav. V některých oblastech nasazení není problém zopakovat aktualizace, které byly provedeny od vytvoření záložní kopie, v jiných to nepřipadá v úvahu a pořizování záložních kopií je nutno doplnit vedením journalu změn.

Záloha databáze se provádí zkopírováním (doporučujeme s komprimací) databázového souboru WB5.FIL na vhodné archivní medium (ZIP nebo JAZ disk, páska apod.). Při obnovování databáze nahradíme poškozený databázový soubor dříve pořízenou kopií.

Předpokladem k zálohování databázového souboru jsou přístupová práva k adresáři, v němž je umístěn. Tato práva může mít správce databáze nebo správce výpočetního systému.

Zálohování databázového souboru lze nastavit i automaticky - programem Konfigurace na záložce Databáze a servery. Záloha souboru FIL se pak provádí podle nastavených parametrů bez zásahu správce - buď po určité době běhu serveru nebo v pravidelných intervalech. V témže dialogu je i rozhraní pro obnovu databáze z takto vytvořené zálohy. Dialog má svou vlastní  kontextovou nápovědu.

Viz také:	Správa serveru - úvod


Filtrování IP adres klientů

WinBase602 SQL server lze nastavit tak, aby přijímal připojení klientů pouze z určitých IP adres. Nastavení IP adres dovoluje znemožnit přístup klientům z určitých stanic nebo z určitých sítí a je jedním z nástrojů, které zvyšují provozní bezpečnost SQL serveru. Toto nastavení se týká pouze klientů připojujících se s protokolem TCP/IP, nemá vliv na klienty používající protokoly NetBEUI nebo IPX/SPX ani na klienty přistupující na server přímo v rámci jednoho počítače (v prostředí Windows).

Pro provoz WB Internet Klienta a ostatních klientů běžících na stejném počítači jako server v prostředí Linuxu je nutné mezi povolenými adresami uvést 127.0.0.1 a IP adresu počítače. Pro NovellNetware a Windows toto není nutné - WB Internet klienti přistupují jako lokální klienti.

Lze zadat adresy, z nichž je povolen přístup, a adresy, z nichž je přístup zakázán. Pokud jsou specifikovány nějaké povolené adresy, pak se klient může připojit, pokud jeho adresa je mezi povolenými adresami a současně není mezi zakázanými adresami. Pokud nejsou uvedené žádné povolené adresy, pak se na server může připojit klient z libovolné adresy, která není mezi zakázanými adresami.

Adresy lze specifikovat buď jednotlivě nebo po skupinách. Skupina adres se zadá pomocí dvojice údajů tvořené adresou X a maskou M. Adresa Y patří do této skupiny, pokud se shoduje s adresou X v těch bitech, které mají v masce M hodnotu 1. Například pokud je skupina zadána adresou 192.168.2.128 a maskou 255.255.255.192, pak do ní patří adresy od 192.168.2.128 do 192.168.2.191.

Vysvětlení příkladu:

Je-li v masce hodnota 255 (binárně 11111111), musí se adresa Y shodovat ve všech bitech s adresou X, tzn. musí být ta samá hodnota.

Hodnota adresy X je 128, binárně 10000000. Hodnota masky 192 je binárně 11000000. Adresa Y se musí s X shodovat pouze v prvních dvou bitech hodnoty X, tj. může nabývat hodnot od 10000000 (128) do 10111111 (191).

Je-li v masce hodnota 0 (binárně 00000000), nemusí se adresa Y shodovat v žádném bitu s adresou X, tzn. může být libovolná hodnota.

IP adresy se specifikují na platformě Windows v registrační databázi

HKEY_LOCAL_MACHINE\SOFTWARE\Software602\WinBase602\Database

pod příslušnou databází, na ostatních platformách v souboru wbkernel.ini v sekci [Database].

Povolené adresy se zadávají jako IP_enabled_addrN, povolené skupiny adres jako IP_enabled_addrN a IP_enabled_maskN, kde N je pořadové číslo. Všechny zadané adresy a skupiny musí být očíslovány souvisle od 1. Podobně zakázané adresy se zadávají jako IP_disabled_addrN, zakázané skupiny adres jako IP_disabled_addrN a IP_disabled_maskN.

Například nastavení:

IP_enabled_addr1=192.168.1.0

IP_enabled_mask1=255.255.255.0

IP_enabled_addr2=192.168.2.128

IP_enabled_mask2=255.255.255.192

IP_enabled_addr3=192.168.3.33

IP_disabled_addr1=192.168.1.182

IP_disbled_mask1=192.168.1.254

IP_disabled_addr2=192.168.2.170

povoluje přístup z adres: 192.168.1.0 až 192.168.1.181, 192.168.1.184 až 192.168.1.255, 192.168.2.128 až 192.168.2.169, 192.168.2.171 až 192.168.2.191 a 192.168.3.33.

Nastavení:

IP_disabled_addr1=192.168.1.182

IP_disbled_mask1=192.168.1.254

povoluje přístup ze všech adres kromě 192.168.1.182 a 192.168.1.183.

Viz také:	Správa serveru - úvod


Odpojování neaktivních klientů

Na SQL serveru se mohou objevit připojení klienti, kteří již nepošlou žádné další požadavky a pouze blokují zdroje serveru. Takoví klienti vnikají v těchto případech:

•	klientský program havaroval a je nefunkční, ale jako proces dosud neskočil (je obsažen v seznamu úloh) a proto trvá jeho připojení na server;

•	klientský program běžel na stejném počítači jako server, skončil havárií, ale jelikož byl připojen přímo nelze jeho havárii detekovat;

•	klientský program byl připojen po síti, skončil havárií, ale kvůli konfiguraci parametrů sítě server nedostal zprávu o rozpadu spojení;

•	uživatel již nebude s klientským programem pracovat, ale místo ukončení jej pouze minimalizoval.

V těchto případech může být žádoucí, aby server provedl odpojení neaktivního klienta. Je-li však důvodem neaktivity klienta pouze nečinnost uživatele, pak uživatel dostane zprávu, že server ukončil obsluhu jeho klienta, a bude muset klienta ukončit.

Na serveru lze nastavit časový interval, po jehož uplynutí bude neaktivní klient automaticky odpojen. Tento interval se zadává v sekundách a specifikuje se zvlášť pro klienta, který dosud není přihlášen (neprovedl operaci Login), a zvlášť pro již přihlášené klienty.

Interval se zadává na platformě Windows v registrační databázi

HKEY_LOCAL_MACHINE\SOFTWARE\Software602\WinBase602\Database

pod příslušnou databází (hodnota je typu DWORD), na ostatních platformách v soboru wbkernel.ini v sekci [Database]. Zadat lze:

KillTimeNotLogged=sekundy - doba neaktivity nepřihlášeného klienta, po níž bude odpojen

KillTimeLogged=sekundy - doba neaktivity přihlášeného klienta, po níž bude odpojen

Pokud některý údaj má hodnotu 0 nebo klíč není vytvořen, pak odpojení se neprovede nikdy. Z technických důvodů může byt doba, po jejímž uplynutí dojde k odpojení, cca o jednu minutu delší. O odpojení klienta se objeví záznam v okně servru a (je-li veden) i v jeho logu.

Viz také:	Správa serveru - úvod


Zabránění anonymního přístupu

Na každém WinBase SQL serveru existuje anonymní uživatel, který má jako jméno i heslo prázdný řetězec. Tomuto uživateli lze odebrat veškerá práva, takže nemůže škodit, nicméně může snadno přečíst seznam uživatelů, může sledovat výpisy logu serveru, vidí názvy aplikací apod.

Z tohoto důvodu je možné od verze 6.1 zabránit anonymnímu uživateli provést cokoliv. Anonymní uživatel se sice přihlásí k serveru (to zakázat nelze), ale jakýkoliv další požadavek na server je odmítnut.

Zákaz anonymního přístupu se zadává na platformě Windows v registrační databázi

HKEY_LOCAL_MACHINE\SOFTWARE\Software602\WinBase602\Database

pod příslušnou databází (hodnota je typu DWORD), na ostatních platformách v soboru wbkernel.ini v sekci [Database]. Zadat lze:

DisableAnonymous=0|1 - jednička znamená zákaz

Viz také:	Správa serveru - úvod


Určení adresářů pro umístění knihoven DLL volaných z SQL serveru
Adresáře pro umístění knihoven DLL volaných z SQL serveru

V procedurách a triggerech prováděných na SQL serveru lze volat externí procedury implementované v DLL knihovnách. Tento mechanismus by v sobě skrýval nebezpečí pro hostitelský počítač serveru, pokud by bylo dovoleno volat procedury z libovolných knihoven - bylo by například možno pomocí API funkcí Windows mazat soubory.

Tomuto nebezpečí čelí WinBase602 SQL server 6.1 tak, že povoluje volat pouze funkce z knihoven umístěných v adresáři, v němž je instalována WinBase, a v dalších adresářích explicitně vyjmenovaných v registru.

Nastavení adresářů s DLL se zadává na platformě Windows v registrační databázi

HKEY_LOCAL_MACHINE\SOFTWARE\Software602\WinBase602\Installation

pod příslušnou instalací lze umístit hodnoty pojmenované DIR1, DIR2 atd. obsahující jména adresářů, z nichž lze využívat DLL knihovny. Jednotlivé položky musí být očíslovány souvisle od 1. Adresář, do nějž je instalována WinBase602, není třeba uvádět. Správce databáze zodpovídá za to, takto zpřístupní pouze ty adresáře, v nichž nejsou nebezpečné funkce.

Tento mechanismus se v současnosti týká pouze serveru pracujícího pod Windows.

Příklad:

Jsou povoleny pouze dva adresáře: c:\knihovny a d:\sql_support:

DIR1=c:\knihovny

DIR2=d:\sql_support

Viz také:	Správa serveru - úvod


Databáze uložené na CD ROM

WinBase602 umožňuje vytváření databází uložených na CD ROM. Tyto databáze zpřístupňují uživateli po instalaci značné množství dat, aniž by tato data musela být zkopírována na pevný disk. Podstatnou vlastností takto vytvořených databází je, je uživatel může v omezeném rozsahu obsah databáze editovat, přičemž na pevný disk se zaznamenají pouze změny v datech, nikoli celá databáze.

Stejný postup lze použít pro zřízení sdílené referenční databáze umístěné na síťovém disku bez práva zápisu.

Uživatel, který si instaluje databází z CD ROM, pracuje s databázovým souborem rozděleným do dvou částí. První část je umístěna na CD ROM, obsahuje základ dat z databáze a (přirozeně) není editovatelná. Druhá část je umístěna za uživatelově pevném disku, vznikne při instalaci databáze, a zapisují se do ní změny, které uživatel v databázi případ-ně provede. Tato část musí existovat i v případě, že uživatel nechce provádět žádné změny v databázi.

Změny, které uživatel může v databází provádět, jsou omezeny interním limitem, který není jednoduše kvantifikovatelný. Vývojářům aplikací doporučujeme, aby se řídili tímto pravidlem: Bez omezení lze zakládat nové objekty a plnit nově založené tabulky daty. Editovat obsah existujících tabulek z CD ROM by mělo být dovoleno pouze výjimečně. Doporučujeme se vyhnout editaci tabulek z CD ROM tak, že aplikace vytvoří (např. při prvním spuštění) vlastní tabulku, jejíž záznamy budou svázány vztahem 1:1 se záznamy v určité tabulce na CD ROM. Editovat se pak budou pouze záznamy v nově vytvořené tabulce.

WinBase602 musí být na uživatelově počítači buď instalována předem (normálním instalačním programem WinBase602), nebo se bude při každém spuštění číst z CD ROM. Druhý případ má tyto omezující vlastnosti:

•	WinBase602 z CD ROM se spouští pomaleji než když je instalovaná na pevném disku, úměrně rozdílu v přístupové době na obě média;

•	na počítači s nedostatkem paměti může WinBase602 z CD ROM reagovat pomaleji i za běhu;

•	použití WinBase602 z CD ROM předpokládá, že na uživatelově počítači je instalováno ODBC.

WinBase602 z CD ROM se chová jako provozní systém, umožňuje tedy pracovat s obsahem databáze, ale neumožňuje vyvíjet aplikace.

Aplikace z databáze na CD ROM se na uživatelově počítači spouští pomocí svého startovního objektu, k němuž během instalace vznikne zástupce. Aplikace může mít kód programu v externím souboru a může mít vlastní soubor nápověd. Lze vytvořit více zástupců spouštějících více různých aplikací ze stejné databáze.

Viz také:	Příprava databáze a obsahu CD ROM
	Obsah souboru SETUPDB.INI
	Instalace


Příprava databáze a obsahu CD ROM

Příprava databáze pro CD ROM

Předpokládejme, že autor má hotovou databázovou aplikaci určenou k šíření na CD ROM. Aplikace je naplněna daty.

1. V aplikaci se označí její startovní objekt.

2. Pokud ve stejném databázovém souboru jsou ještě jiné aplikace, které na CD ROM nepatří, nebo pokud se databázový soubor skládá z více než jedné části, pak:

•	aplikace se exportuje (včetně dat),

•	založí se nový databázový soubor a

•	aplikace se do něj importuje.

3. V opačném případě doporučujeme aplikaci exportovat také, za účelem zálohování dat.

4. Ve vývojovém prostředí připojeném na databázi, určenou k převedení na CD ROM, se z menu Nástroje / Server příkazem Provozní parametry otevře dialogové okno (povoleno pouze správci).

5. Pokud v databázovém souboru je mnoho volných clusterů, lze velikost souboru zmenšit stiskem tlačítka Zkompaktnit.

6. Ve stejném dialogu se databáze stiskem tlačítka Připravit pro CD ROM převede do needitovatelné podoby. Od tohoto okamžiku není dovoleno do databáze zapisovat.

7. Dialog a vývojové prostředí se uzavře a server se ukončí.

Nad stejnou databází se server nesmí více spouštět. Popsaným postupem vznikne soubor WB5.FIL určený k přenesení na CD ROM.

Příprava obsahu CD ROM

V další fázi se vytvoří adresář, který bude obsahovat vše, co má být přeneseno na CD ROM. Tento adresář může obsahovat podadresáře, aby jeho obsah byl přehlednější. Do adresáře (případně jeho podadresářů) umístíte tyto soubory:

1. Databázový soubor WB5.FIL vytvořený v předchozí fázi.

2. Soubor SETUPDB.EXE z WinBase602 SDK (tento soubor lze libovolně přejmenovat). Tento program provede na uživatelském počítači instalaci databáze.

3. Soubor SETUPDB.INI s obsahem popisujícím CD ROM a instalaci databáze u uživatele viz popis SETUPDB.INI.

4. Soubor obsahující ikonu, která se použije v zástupci vytvořeném na počítači uživatele pro spouštění databázové aplikace. (Souborů může být více, pokud se bude vytvářet více zástupců různých aplikací)

5. Soubor resp. soubory s uživatelskou nápovědou k aplikaci.

6. Případný soubor resp. soubory s přeloženým kódem těch aplikací, z nichž byl odstraněn zdrojový program.

7. Programy a knihovny WinBase602, pokud aplikace má být provozována na uživatelově počítači bez instalace WinBase602.

Takto připravený adresář se dá využít pro pokusné instalace databáze před jejím vypálením do CD ROM. Lze tak například ověřit správnost obsahu souboru SETUPDB.INI .

Viz také:	Databáze na CD ROM - úvod
	Obsah souboru SETUPDB.INI
	Instalace


Obsah SETUPDB.INI
Obsah souboru SETUPDB.INI

SETUPDB.INI je textový soubor ve formátu INI-souborů pro Windows. Tento soubor řídí činnost instalačního programu SETUPDB.EXE. Obsahuje sekce WinBase602, Shortcut1 a případné další sekce Shortcut2, Shortcut3 atd.

V sekci [WinBase602] jsou tyto údaje:

InitialMessage=text v úvodním okně

Tento údaj je nepovinný. Pokud je uveden, pak se po spuštění programu SETUPDB.EXE objeví úvodní okno obsahující zadaný text a dvě tlačítka: OK a Storno. Stisk tlačítka Storno ukončí program, stisk OK umožní pokračování instalace. Pokud údaj není zadán, k instalaci se přistoupí ihned po spuštění programu.

RegisterInstallation=adresář obsahující programy WinBase602 na CD ROM

Tento údaj je nepovinný. Pokud není uveden, pak se na uživatelském počítači bude hledat existující instalace WinBase602 aktuální verze, a pokud se nenajde, instalace skončí neú-spěšně. Adresář se uvádí bez úvodního písmene označujícího diskovou jednotu a bez následující dvojtečky.

DatabasePath=adresář obsahující databázový soubor WB5.FIL na CD ROM

Tento údaj je povinný. Adresář se uvádí bez úvodního písmene označujícího diskovou jednotu a bez následující dvojtečky.

DatabaseName=jméno databáze

Tento údaj je povinný. Pod tímto jménem se databáze zaregistruje na uživatelově počítači

PrivateDatabaseDir=plná cesta k adresáři pro editovatelnou část databázového souboru

Tento údaj je nepovinný. Umožňuje zadat umístění a jméno adresáře, který se během instalace uživateli nabídne pro umístění editovatelné části databázového souboru. Pokud není uveden, nabídne se běžný adresář.

FinalMsg=text závěrečné zprávy o úspěšné instalaci

Tento údaj je nepovinný. Není-li uveden, zobrazí se na závěr úspěšné instalace zpráva “Instalace databáze proběhla úspěšně”

Sekce [Shortcutx]

Každá sekce [Shortcutx] popisuje jednoho zástupce, který se má vytvořit na uživatelském počítači. Zástupci odpovídají aplikacím v databázovém souboru. Sekce musí být očíslo-vány sekvenčně od 1. V sekcích jsou tyto údaje:

ShortcutApplication=jméno aplikace

Tento údaj je povinný. Specifikuje jméno databázové aplikace, která se má otevřít v databázi, a jejíž startovní objekt se má spustit.

ShortcutCaption=popiska zástupce

Tento údaj je nepovinný. Specifikuje název zástupce. Pokud není zadán, bude název zástupce stejný, jako jméno aplikace.

ShortcutFolder=jméno položky v menu Start / Programy, do níž se zástupce umístí

Tento údaj je nepovinný. Specifikuje umístění vytvářeného zástupce. Může označovat existující položku, do níž se zástupce přidá, nebo novou položku, která se při instalaci vytvoří. Pokud údaj není uveden, zástupce se vytvoří v položce Database.

ShortcutIcon=cesta a jméno souboru s ikonou zástupce

Tento údaj je nepovinný. Obsahuje adresář a jméno souboru na CD ROM, v němž je soubor s ikonou zástupce. Adresář se uvádí bez úvodního písmene označujícího diskovou jednotu a bez následující dvojtečky. Pokud údaj není uveden, zástupce bude obsahovat ikonu WinBase602.

ApplicationHelp=cesta a jméno souboru s aplikační nápovědou (soubor HLP)

Tento údaj je nepovinný. Obsahuje adresář a jméno souboru na CD ROM, v němž je sou-bor s nápovědou k aplikaci. Adresář se uvádí bez úvodního písmene označujícího diskovou jednotu a bez následující dvojtečky. Je-li tento údaj uveden, soubor se zkopíruje do adresáře, v němž je instalována WinBase602, kde jej běžící aplikace najde. Jsou-li na CD ROM programy WinBase602, pak soubor s nápovědou doporučujeme umístit do stejného adresáře, aby mohl být nalezen také při práci programů z CD ROM.

ApplicationCode=cesta a jméno souboru s přeloženým kódem aplikace (soubor EXX)

Tento údaj je nepovinný. Obsahuje adresář a jméno souboru na CD ROM, v němž je sou-bor s přeloženým kódem aplikace. Adresář se uvádí bez úvodního písmene označujícího diskovou jednotu a bez následující dvojtečky. Je-li tento údaj uveden, soubor se zkopíruje do adresáře zvoleného pro editovatelnou část databázového souboru a odkaz na něj se vloží do příkazové řádky zástupce. Tento údaj se využije v případě, že autor aplikace chce utajit zdrojový text programu a odstranil jej z aplikace.

DisableLogin=1|0

Tento údaj je nepovinný. Pokud není uveden nebo pokud má hodnotu 0, uživatel se bude do databáze normálně přihlašovat svým jménem a heslem. Pokud má hodnotu 1, pak se přihlašovací dialog neobjeví a uživatel bude automaticky přihlášen jako anonymní.

Příklad obsahu souboru SETUPDB.INI:

[WinBase602]

InitialMessage=Tato instalace Vám umožní přístup k databázi motýlů na CD ROM. Chcete pokračovat?

RegisterInstallation=WBINST

DatabasePath=DATABASE

DatabaseName=CDmotyli

PrivateDatabaseDir=c:\motyli

FinalMsg=Instalace proběhla úspěšně. V menu Start najděte složku Motýli a spusťte Katalog motýlu

[Shortcut1]

ShortcutApplication=motyli

ShortcutCaption=Katalog motýlu

ShortcutFolder=Motýli

ShortcutIcon=IKONY\MOTYL.ICO

ApplicationHelp=WBINST\MOTYLI.HLP

ApplicationCode=KOD\MOTYLI.EXX

DisableLogin=1

Tento soubor zpřístupní databázi jménem CDmotyli uloženou na CD ROM v adresáři DATABASE. Vytvoří jednoho zástupce jménem Katalog motýlů umístěného v položce Motýli v menu Start / Programy. Zástupce bude mít ikonu umístěnou na CD ROM v souboru IKONY\MOTYL.ICO . Zástupce bude spouštět startovní objekt aplikace motyli, bez nutnosti přihlašovat se k databázi. Kód aplikace je v souboru MOTYLI.EXX, nápověda k aplikaci v souboru MOTYLI.HLP.

Obsah CD ROM odpovídající tomuto souboru:

Kořenový adresář:

•	SETUPDB.EXE

•	SETUPDB.INI (uvedený výše)

Subadresář WBINST:

•	programy a knihovny tvořící instalaci WinBase602, tedy: WB602.EXE, WBSERVER.EXE, WBKERNEL.DLL, WBPREZEN.DLL, WBVIEWED.DLL, WBED.DLL a INSTSERV.DLL

•	nápovědný soubor MOTYLI.HLP

Subadresář DATABASE:

•	Soubor WB5.FIL obsahující aplikaci MOTYLI vytvořený postupem popsaným výše

Subadresář IKONY:

•	Soubor MOTYL.ICO obsahující ikonu, která se použije v zástupci spouštějícím apli-kaci.

Subadresář KOD

•	Soubor MOTYLI.EXX s přeloženým kódem aplikace.

Viz také:	Databáze na CD ROM - úvod
	Příprava databáze a obsahu CD ROM
	Instalace


Postup instalace CD ROMové databáze
Postup instalace CD ROMové databáze na uživatelském počítači

Uživatel, který získá CD ROM a chce si zpřístupnit databází, postupuje takto:

Vloží CD ROM do jednotky na svém počítači.

1. Spustí program SETUPDB.EXE.

2. Během instalace zvolí adresář, v němž na jeho počítači bude umístěna editovatelná část databázového souboru. Tento soubor vznikne až při prvním spuštění databáze.

Po instalaci se v menu Start / Programy objeví v některé složce zástupce nebo zástupci sloužící ke spouštění databázových aplikací.

Pokud se databáze instaluje z CD ROM umístěného na jiném počítači v síti nebo ze síťového disku, není nutno diskovou jednotu mapovat. K CD ROM nebo disku lze přistupovat pomocí dlouhého jména ve tvaru:

\\jméno_počítače\jmého_share\adresáře\soubor,

např.:

\\NWSERVER\PUBLIC\DATABASE\SETUPDB.EXE .

Instalační program SETUPDB.EXE pracuje takto:

1. Vyhledá soubor SETUPDB.INI ve stejném adresáři, v němž se sám nachází, přečte a verifikuje jeho obsah. V případě, že chybí některý povinný údaj nebo odkazovaný soubor, program vydá chybové hlášení a skončí.

2. Pokud je uveden údaj InitialMessage, zobrazí úvodní okno a umožní uživatel volit buď ukončení instalace nebo její pokračování.

3. Požádá uživatele, aby vybral na svém počítači adresář, v němž bude umístěna editovatelná část databázového souboru. Pokud je uveden údaj PrivateDatabaseDir, pak tento adresář nabídne jako výchozí.

4. Vyhledá na uživatelském počítači instalaci aktuální verzi WinBase602, a pokud ji nenajde, zaregistruje instalaci v adresáři RegisterInstallation. Není-li tento údaj uveden, skončí s chybou. (Programy WinBase602 se v žádném případě nekopírují na počítač uživatele - budou se číst se při každém použití z CD ROM a předpokládají, že na počítači mají k dispozici instalované ODBC. Pokud je jejich provoz z CD ROM příliš pomalý nebo pokud na uživatelově počítači není instalováno ODBC, je nutno provést normální instalaci WinBase602.)

5. Zaregistruje databázi v adresáři DatabasePath a její pokračování v adresáři zvoleném uživatelem, vše pod jménem DatabaseName.

6. Pro každou sekci Shortcutx vytvoří zástupce s ikonou ShortcutIcon a textem ShortcutCaption v položce ShortcutFolder. Zástupce spouští startovní objekt aplikace ShortcutApplication. Je-li uvedeno DisableLogin=1, pak zástupce obsahuje příznak, že se má přeskočit přihlašování do databáze. Soubor s ikonou se překopíruje do adresáře zvoleného v bodě 3. Jsou-li uvedeny soubory s kódem aplikace nebo s nápovědou, zkopíruje je na odpovídající místa.

7. Pokud instalace doběhne úspěšně do konce, zobrazí se v dialogovém okně text FinalMsg nebo standardní text, není-li tento údaj uveden.

Viz také:	Databáze na CD ROM - úvod
	Příprava databáze a obsahu CD ROM
	Obsah souboru SETUPDB.INI


Bezpečnost serveru - popup dlg help


Zadejte délku (počet znaků), kterou musí mít hesla uživatelů.


Zadejte počet dnů, po jejichž uplynutí vyprší platnost hesla uživatele. Při zadání hodnoty 0 je doba neomezená.


Zapište jméno síťového serveru (NT nebo NetWare), na němž jsou definováni uživatelé sítě. Jsou-li stejní uživatelé zavedeni i ve WinBase602, nemusí se při spouštění WinBase602 přihlašovat podruhé.


Z comba vyberte uživatele, který bude figurovat ve funkci vrcholové certifikační autority, tzn. bude oprávněn certifikovat klíče uživatelů a jmenovat nižší certifikační autority.


Databázový soubor (WB5.FIL) není šifrován.


Databázový soubor (WB5.FIL) je šifrován rychlým, relativně jednoduchým algoritmem, který zabrání běžnému uživateli prohlížet soubor na disku.


Databázový soubor (WB5.FIL) je šifrován algoritmem, který je odvozen z hesla zadaného do pole vpravo. Prolomení si vyžádá značné úsilí a prostředky.


Databázový soubor (WB5.FIL) je šifrován složitým algoritmem, který je odvozen z hesla zadaného do pole vpravo. Prolomení je téměř nemožné. Použití kryptovacích algoritmů zpomaluje práci s databází.


Používáte-li šifrování s heslem, zapište do tohoto pole heslo, podle něhož se bude šifrovat. Toto heslo budete zadávat při spuštění serveru.


Bezpečnostní autorita nemusí být totožná se správcem databáze - proto je možné změny v bezpečnostních parametrech pojistit zadáním hesla. Při provedených změnách v tomto dialogu budete muset heslo zadat do tohoto pole.


Při změně bezpečnostních parametrů je možné zadat do tohoto pole heslo, kterým bezpečnostní autorita chrání nastavení. Bez znalosti tohoto hesla není možná změna parametrů.


Pole slouží k ověření správnosti nového hesla - zapsáním hesla podruhé se vyloučí případné překlepy apod.


Parametry provozu - popup dlg help


Volba, mají-li se aktualizace mají zapisovat do journalu; způsobí malé zpomalení provozu serveru - viz ochrana journalem.


Volba, zda je jištěno uzavírání transakce (dvoufázový commit); způsobí zpomalení serveru - viz transakční režim.


Volba, má-li se vynutit po každé transakci zápis na pevný disk z cache; nejbezpečnější režim, způsobí značné zpomalení běhu serveru


Pomocná hodnota udávající velikost clusteru databázového souboru v bajtech (v některých případech se nemusí rovnat velikosti clusteru disku).


Pomocná hodnota, která informuje o počtu volných clusterů v databázovém souboru. Klesne-li tato hodnota pod určitou mez, bude při každém spuštění serveru vydána varovná hláška, doporučující změnu velikosti databázového souboru.


Současná velikost databázového souboru WB5.FIL v clusterech. Zapsáním většího čísla můžete soubor zvětšit. Velikost souboru je omezena jenom velikostí disku (nebo disků, je-li soubor rozdělen do více částí).

Je-li volné místo v souboru malé, dojde při plnění databáze k dynamickému zvětšování souboru. Dojde-li v tomto případě k nekorektnímu ukončení serveru, může se část dat ztratit nebo se porušit konzistence databáze.


Vizuální indikace zaplnění databázového souboru.


Tlačítkem můžete okamžitě uplatnit navržené změny - změny se promítnou do hodnot v dialogu.


Akce Zkompaktnění databáze - maximální zmenšení velikosti datového souboru WB5.FIL při zachování dat. Po provedení je rozumné zvětšit počet volných clusterů - editbox v tomto dialogu.

Akce může trvat delší dobu. Je rozumné si před započetím udělat zálohu souboru WB5.FIL


Volné místo v databázovém souboru WB5.FIL v KB


Současná velikost souboru WB5.FIL v KB


Speciální akce, která připraví databázový soubor WB5.FIL pro šíření WinBase aplikace na CD-ROMu. Po provedení akce se již nesmí server přihlásit k této databázi, dokud se neprovede CD-ROMová instalace. Tato instalace zajistí, že databázový soubor bude mít dvě části - nededitovatelnou na CD-ROMu a editovatelnou na disku.


Opravy databáze - popup dlg help


Tlačítkem zahájíte kontrolu obsahu databáze. Poté, co kontrola skončí, se vedle zatržených položek objeví počty zjištěných chyb příslušných druhů. K provedení této akce je nutné zamčení serveru. Databázi nelze opravovat, pokud jsou na server připojení jiní uživatelé.


Tlačítkem zahájíte kontrolu obsahu a opravu databáze. Poté, co oprava skončí, se vedle zatržených položek objeví počty zjištěných a opravených chyb příslušných druhů. Před provedením opravy je doporučené provést zálohu původního databázového souboru FIL. K provedení této akce je nutné zamčení serveru. Databázi nelze opravovat, pokud jsou na server připojení jiní uživatelé.

Hledání chyb v rozsáhlé databázi i jejich opravování může být časově náročné. Na stavovém řádku klienta je proto indikován postup procházení databázového souboru ve formátu kontrolovaná_tabulka / počet_tabulek.


Tlačítko zavře toto okno.


Tato chyba ve správě paměti může nastat při nekorektním ukončení běhu serveru - její oprava nemá žádný vliv na obsah dat.


Tato chyba ve správě paměti může nastat při nekorektním ukončení běhu serveru - její oprava nemá žádný vliv na obsah dat.


Chyba nastane, když dva databázové objekty sdílejí stejný kus diskové paměti. Oprava zařídí, že každý obdrží jednu kopii, je nutno ovšem počítat s tím, že pouze jeden z těchto objektů bude mít správná data. Po opravě bude tedy n-objektů mít špatnou definici. Za normálního běhu by chyba neměla nastat.


Chyba nastane, pokud se nedá přečíst definice tabulky. Po opravě se z databáze tyto tabulky odstraní. Tato akce se netýká tabulek, které pouze obsahují poškozená data. Za normálního běhu by chyba neměla nastat.


Chyba nastane, pokud v tabulkách a indexech existují odkazy "do prázdna". Po opravě by měl být odblokován export poškozených tabulek a práce s nepoškozenými částmi informace.


Slovníček základních pojmů WinBase602

ActiveX control

agregační (souhrnné) funkce

aplikace

atribut (sloupec)

atributy proměnné velikosti

back-end

debugger

dotaz

editor

font

formulář

front-end

include

index

journal

klient databáze

koloběh dokumentů

kurzor

menu

multiatribut

NLM

objekty

obrázek

ODBC

OLE

OLE kontejner

OLE server

pohled

pohled standardní

pole

program

programovací jazyk WinBase602

projekt

provozní prostředí

přípony souborů

QBE

referenční integrita

relace

replikace

replikační vztah

role

runtime modul

sekvence

server databáze

sestava

schéma

schránka (clipboard)

skupina uživatelů

sledovací atributy

sloupec

správce databáze

SQL

subjekt práva

subpohled

superpohled

systémové tabulky

tabulka

text

transakce

trigger

TrueType

ukazatel

uložená procedura

uživatel

vývojové prostředí

WBIK

WWW objekt

záznam


ActiveX control

Speciální klient WinBase602, který se vkládá jako složka do jiných programů (nejčastěji Internet Explorer). Šíření této komponenty je zdarma.


agregační (souhrnné) funkce

Funkce COUNT, SUM, AVG, MAX a MIN, jejichž hodnoty se počítají pro skupiny záznamů a dají se použít (s malými rozdíly) v dotazech (součást back-endu) a při generování sestav (součást front-endu).


aplikace

Logický celek tvořený skupinou objektů, které spolu souvisejí (komponentami aplikace), a daty. WinBase602 je schopna vytvořit, přejmenovat, exportovat, importovat, otevřít a spustit aplikaci. Aplikace lze logicky rozdělit na část serverovou (back-end), tvořenou tabulkami (v SQL TABLE), dotazy (v SQL VIEW), uloženými procedurami a funkcemi (STORED PROCEDURE), triggery (TRIGGER) a sekvencemi (SEQUENCE) a část klientskou (front-end), tvořenou hlavně formuláři a sestavami, menu, obrázky apod. Je možné vytvářet sdílené aplikace, kdy různé front-endové aplikace využívají společný back-end nebo naopak, kdy společná front-endová aplikace používá různé back-endy.


atribut (sloupec)

Označení položky (pole, sloupce) v záznamu. Je určen svým jménem a typem. Typy sloupců jsou: logický, řetězec (více druhů), numerický (více druhů), datum a čas, ukazatele, sledovací atributy, typ text, typ obrázek, typ OLE atd.


sloupce proměnné velikosti

Sloupce typu text, obrázek, OLE a sledovací atribut Historie. Jejich velikost je dána až konkrétním obsahem.


back-end

Back-end, neboli datová základna je tvořen databázovými tabulkami a daty v nich obsaženými, triggery k těmto tabulkám, dotazy a procedurami uloženými na serveru a replikačními vztahy a sekvencemi;

Opakem (tím, "co je v aplikaci vidět" - formuláře, menu a programy) je front-end.


debugger

Prostředí pro ladění programů ve vnitřním jazyce nebo ladění procedur, funkcí a triggerů na serveru. Umožňuje krokování, sledování a měnění hodnot proměnných, sledování zásobníku a další činnosti.


dotaz

Požadavek na výběr a uspořádání dat z tabulek. Dotaz lze vytvořit a uložit jako jeden z objektů WinBase602. V otevřených pohledech lze dotaz zadat pomocí QBE.

Dotaz needitovatelný - dotaz, jehož odpověď obsahuje data vypočtená či jinak upravená (např. použitím agregačních funkcí). V needitovatelném dotazu nelze provádět změny.

Dotaz editovatelný - dotaz, jehož odpověď obsahuje pouze atributy v databázových tabulkách. Pokud v editovatelném dotazu provedete změnu, promítne se do obsahu původní tabulky.


schránka (clipboard)

Systémový nástroj, jehož pomocí je možno kopírovat či přesouvat textové a grafické údaje z různých aplikací ve Windows do jiných (např. obrázek vytvořený v programu Paintbrush lze přes clipboard načíst do atributu typu obrázek ve WinBase602). Lze využít i na kopírování a přesuny v rámci jednoho programu či jednoho okna.


editor

Prostředek pro psaní textových informací. Ve WinBase602 používaný pro editování obsahu atributu typu text, pro psaní zdrojových textů programů apod. Do textu nevkládá žádné řídící znaky (kromě CR LF).


font

Definovaná sada písma, např. Sans Serif; ve Windows lze používat dva typy fontů: bitmapové a vektorové (tzv. TrueType) fonty.


formulář

Nejobvyklejší druh pohledu, sloužící k interaktivní práci se záznamy tabulek a dotazů. Speciálními typy s odlišným chováním jsou formulář pouze pro vkládání dat, pro výběr dat apod.


front-end

Front-end neboli aplikační a prezentační část je tvořen aplikačními programy, formuláři, sestavami, menu a dalšími objekty, které souvisejí s prezentací dat, přístupem k datům a využitím dat z databáze.

Opakem (datovou základnou) je back-end.


include

Samostatný objekt typu program v aplikaci obsahující podprogramy hlavního programu; samostatně nepřeložitelný; do hlavního programu se umístí pomocí {$I jméno}.


index

a) na disku uložená datová struktura, která podstatně urychluje vyhledávání záznamů v tabulce podle hodnot určitých atributů, setřídění obsahu tabulky nebo spojování tabulek.

b) celočíselný údaj, který označuje složku pole nebo multiatributu a uvádí se zpravidla v hranatých závorkách za identifikátorem pole nebo multiatributu;


journal

Speciální datový soubor na disku (JOURNAL.FIL), který obsahuje posloupnost všech aktualizací provedených ve WinBase602. v kombinaci s vytvářením záložních kopií slouží k zajištění bezpečnosti dat.


klient databáze

Každý program komunikující s databází pomocí standardizovaných rozhraní. Základním i klienty jsou Vývojový klient - prostředí pro vývoj aplikací, Provozní klient - prostředí pro provoz hotových aplikací a ODBC driver, pomocí něhož mohou do databáze přistupovat externí programy. Mezi speciální klienty patří ActiveX control a WinBase602 Internet Klient.


koloběh dokumentů

Způsob předávání informací (dokumentu) mezi uživateli WinBase602. Uživatel po zpracování své části dokument podepíše digitálním podpisem a pošle dokument dále podle vytvořeného schématu.


kurzor

a) značka na obrazovce (obvykle blikající), která vyznačuje pozici v textu, kde se právě provádějí změny - vkládají nebo ruší znaky;

b) grafická značka na obrazovce spřažená s pohybem myši;

a) v programovacím jazyce je to fiktivní tabulka, kterou WinBase602 vytvoří jako odpověď na dotaz položený uživatelem. s obsahem kurzoru lze pracovat jako s obsahem tabulky, přitom změny prováděné v kurzoru se promítnou do tabulek, z nichž data v kurzoru pocházejí.


menu

Jeden z objektů WinBase602; nabídka akcí pro danou situaci. Pro novou aplikaci si uživatel definuje svá vlastní menu. Obvykle je umístěno v horní části okna.


multiatribut

Sloupec, jenž může obsahovat v jednom záznamu více než jednu hodnotu.


NLM (Netware Loadable Module) server

SQL server WinBase602 běžící v prostředí operačního systému Novell Netware.


objekty

Objekty aplikací ve WinBase602 jsou: tabulky, pohledy, dotazy, menu, programy, obrázky, role, relace, schémata, ODBC spojení, replikační vztahy, uložené procedury, triggery, sekvence a WWW objekty.

Ve WinBase602 jsou také objekty, které nepatří žádné aplikaci (systémové objekty). Mezi ně patří hlavně systémové tabulky, uživatelé a skupiny.


obrázek

a) atribut proměnné délky, jehož obsahem může být obrázek v grafickém formátu BMP, PCX, TIFF, GIF nebo WPG;

b) Jeden z objektů WinBase602 - obrázek v rastrovém formátu určený pro vložení do pohledů a sestav, na tlačítka nebo na lištu apod.


ODBC

Norma pro programové rozhraní databázového serveru. Umožňuje standardizovaný přístup aplikací k SQL serverům. Server poskytující ODBC přístup (např. WinBase602) tak činí pomocí tzv. ODBC driveru.

WinBase602 poskytuje oba směry ODBC spojení: libovolný ODBC klient se může napojit na WinBase602 server, naopak WinBase602 (jako klient) se může napojit na cizí ODBC server.


OLE

Mechanismus sdílení dat různými programy pod Windows 3.1, např. databáze může obsahovat zvuky, obrázky, videoclipy apod.;


OLE kontejner

Program, který využívá služeb OLE serverů a obsahuje data nebo odkazy na data patřící jiným aplikacím. WinBase602 je OLE kontejner.


OLE server

Program, který poskytuje svá data jiným programům prostřednictvím OLE, např. kreslicí program Paintbrush z Windows nebo WinBase602.


pohled

Souhrnný název pro skupinu objektů podobných vlastností - formulářů, sestav, grafů a štítků.Lze ho vytvořit nad tabulkou, nad dotazem nebo pouze nad proměnnými projektu.


pohled standardní

Jednoduchý formulář ve stylu tabulek z tabulkových kalkulátorů, rychlý při prohlížení. Používá se např. při otevření tabulky.


pole

Druh datové struktury ve vnitřním programovacím jazyce WinBase602 (a v jiných jazycích).


program

Posloupnost příkazů vnitřního programovacího jazyka WinBase602; hotový program lze zkompilovat na disk a spouštět i na jiných počítačích s pomocí tzv. provozního systému;


programovací jazyk WinBase602

Strukturovaný jazyk pro psaní aplikačních programů vycházející z Pascalu. Přeložený program je prováděn na počítači klienta, na rozdíl od jazyka SQL, jenž je prováděn na serveru.


projekt

Role, kterou hraje ve program vytvořený vnitřním programovacím jazyce WinBase602, když poskytuje své proměnné, typy, konstanty, procedury a funkce pohledům a menu.


přípony souborů

Vyexportované objekty WinBase602 mají tyto přípony:

 TDF -- definice tabulky;

 TDT -- obsah tabulky ve vnitřním formátu;

 TXT -- obsah tabulky v textovém formátu se záhlavím;

 CSV -- obsah tabulky v textovém formátu CSV;

 VWD -- definice pohledu;

 CRS -- definice kurzoru;

 PGM -- zdrojový text programu;

 MNU -- zdrojový text menu;

 GRF – definice pomocného objektu;

 WBP -- pevný obrázek v aplikaci

 REL – definice relace;

 DRW – definice schématu.

 PSM - uložené procedury

 TRG - triggery

 SEQ - sekvence

 WWW - WWW objekty

Jiné soubory, které se mohou v souvislosti s WinBase602 vyskytnout:

 EXX -- program zkompilovaný na disk;

 APL -- definiční soubor aplikace.


QBE (Query by Example)

Názorný způsob dotazování, který se používá interaktivně v pohledech pro vybrání množiny záznamů podle logických podmínek.


relace

Objekt WinBase602, definující relační vztah na rovnost mezi dvěma tabulkami. Využije se v nákresu schématu aj.


referenční integrita

Soubor pravidel zajišťující logickou integritu databáze. Vyjadřuje požadavek, aby určitý atribut určité tabulky mohl nabývat pouze těch hodnot, které má jiný atribut v některém záznamu jiné tabulky.


replikace

Způsob sdílení dat mezi několika servery - servery si mezi sebou předávají nově vložená nebo změněná data. Pro replikaci stačí běžné telefonní spojení.


replikační vztah

Objekt WinBase602, definující možný vztah mezi dvěma navzájem replikujícími servery. Volí se při navazování spojení s jiným serverem.


role

Subjekt práva (podobně jako uživatel či skupina uživatelů); zároveň je to objekt aplikace. Práva přidělená roli se přenášejí s aplikací.


provozní prostředí (runtime)

Vytvořená aplikace lze šířit s provozním prostředím (runtime systém). Toto prostředí se skládá ze serveru a provozního klienta, který umožní spuštění aplikace, nepovolí však žádné její úpravy. Provozní prostředí je zdarma.


sekvence

Sekvence je objektem sloužícím ke generování posloupnosti celočíselných hodnot, zejména unikátních klíčů. Sekvence není svázána s žádnou konkrétní tabulkou, takže se dá použít k vytváření klíčů, které budou unikátní nejen v rámci tabulky, ale i v rámci skupiny tabulek.


server databáze

Program spravující data uložená v databázi a poskytující databázové služby klientům; jeden server je schopen obsluhovat více klientů. Lokální server je server běžící na stejném počítači jako klient, vzdálený server běží na počítači jiném.

Ve WinBase602 existují servery pro různá prostředí

1) Windows server - běží na pracovní stanici pod Windows;

2) NLM server - běží na novellovském file serveru.

3) UNIX server - pro LINUX a FreeBSD


sestava

Pohled použitý pro výstup na tiskárnu. v návrhu sestavy mohou být záznamy členěny do skupin podle hodnot atributů, může se využívat i tzv. agregačních funkcí COUNT, SUM apod.


schéma

a) Klientský objekt WinBase602, který slouží k přehlednému ("grafickému") navrhování určité části aplikace.

b) SCHEMA (psáno krátce) - v jazyce SQL je synonymem pro aplikace


skupiny uživatelů

Množina uživatelů; subjekt práva zjednodušující přidělování práv. Práva přidělená skupině platí pro všechny její členy.

V každé databázi jsou standardní skupiny EVERYBODY (patří sem všichni uživatelé) a DB_ADMIN (patří sem správcové). Po instalaci je jediný standardní uživatel ANONYMOUS členem obou standardních skupin.


sledovací atributy

Speciální sloupce, které slouží k automatickému sledování změn v jiných sloupcích; autorizace sleduje kdo provedl změnu, datumovka kdy byla změna provedena a atribut historie si pamatuje předešlé hodnoty. Uživatel nemá možnost tyto údaje měnit.


správce databáze

Správce databáze je člen standardní skupina DB_ADMIN, vytvořené při instalaci; je to osoba (osoby), která se stará o provoz programu, provádí údržbu a rozhoduje o právech ostatních uživatelů.


SQL

Standardizovaný jazyk implementovaný na serveru (na rozdíl od jazyka vnitřního u klienta), který umožňuje definování struktury databáze (např. vytváření tabulek), provádění změn v obsahu databáze (vkládání a rušení záznamů, přepisování hodnot) atd. Ve WinBase602 je jazyk implementován podle normy SQL92.


subjekt práva

Subjekty práva jsou objekty databáze, jimž lze přidělovat a odebírat práva. Ve WinBase602 jsou uživatelé, skupiny a role.


subpohled

Pohled použitý jako jedna složka jiného pohledu, superpohledu; subpohled může obsahovat např. relačně připojené záznamy z jiné tabulky; lze použít ve formulářích i sestavách.


superpohled

Pohled, který obsahuje jako jednu složku subpohled; subpohled i superpohled jsou navzájem synchronizovány.


systémové tabulky

Pomocné tabulky společné všem aplikacím, do nichž server ukládá nezbytné informace (tabulka objektů v databázi, tabulka tabulek, tabulka uživatelů ad.). Není obvyklé do nich zasahovat.


tabulka

Objekt WinBase602, do něhož se ukládají data; "řádky'' tabulky tvoří záznamy, "sloupce" tabulky tvoří hodnoty atributů.


text

Sloupec proměnné délky, jehož obsahem je textové informace. Při editování hodnoty tohoto sloupce se vyvolá vestavěný editor nebo lze využít speciální složky formuláře (RFT a víceřádkový editbox).


transakce

Mechanismus zaručující, že se určitý sled operací provede buď vcelku nebo se neprovede vůbec a databáze zůstane ve stavu, v jakém byla před započetím transakce; vylučuje provedení pouze části požadavků a tím zajišťuje zachování konzistence databáze.


trigger

Trigger je nástroj, který zajišťuje automatické provedení podprogramu v jazyce SQL při vložení (INSERT TRIGGER), zrušení (DELETE TRIGGER) nebo změně záznamu (UPDATE TRIGGER) v určité tabulce. Trigger se vytváří jako objekt aplikace a je vždy svázán s konkrétní tabulkou..


TrueType

Technologie vytváření písma z jednoho vzoru použitá od Windows 3.1; tvary vzniklých písmen mají hladké okraje při všech velikostech a bez ohledu na výstupní zařízení.


ukazatel

a) Typ sloupce, umožňující přímé propojení záznamů ve dvou různých tabulkách; propojení lze realizovat jednosměrné i obousměrné ( obousměrný ukazatel);

b) speciální typ proměnné programovacího jazyka; hodnotami jsou odkazy na jiné proměnné.


uložená procedura

Posloupnost příkazů jazyka SQL, uložená jako objekt aplikace; provádí se na serveru a tím může značně urychlit vykonávání databázových operací. Klientská aplikace využívající uložených rutin pouze volá hotové procedury (přitom jim předává vstupní parametry a přebírá výstupní), místo aby posílala serveru zvláštní požadavek na provedení každého příkazu obsaženého v procedurách.

Uložené procedury a funkce v jazyce SQL se souhrnně nazývají rutiny.


uživatel

Každý, kdo pracuje s WinBase602. Uživatelé mají práva stanovená správcem databáze. V každé databázi existuje standardní anonymní uživatel, přihlašující se prázdným jménem. Tohoto uživatele jako jediného lze vyřadit ze skupiny EVERYBODY.


vývojové prostředí

Jeden ze standardních klientů sloužící k vývoji a provozu databázových aplikací.


WBIK

WinBase602 Internet Klient je speciální klient, kterého spouští webserver při požadavku od browseru. K dispozici jsou tyto druhy WBIK, lišící se použitým komunikačním protokolem CGI, FasCGI, ISAPI a LCGI.


WWW objekt

Komponenta aplikace, která slouží ke generování dynamické HTML stránky (ve spolupráci čtyř programů: WWW browser pošle požadavek, webserver si vyžádá přes WB Internet klienta od WinBase602 SQL serveru data a vygeneruje HTML odpověď).


záznam

a) prvek ("řádek") databázové tabulky; je složen z jednotlivých sloupců;

b) druh datové struktury ve vnitřním programovacím jazyce WinBase602 (a v jiných jazycích).


DIALOG Přenos dat


V tomto combu jsou uvedeny všechny možnosti, odkud lze číst data. Podle vybrané možnosti se vpravo objeví jako upřesňující složka buď tlačítko pro výběr souboru nebo combo s nabídkou objektů.


Combo upřesňuje druh zdroje dat označený vlevo. Je zde buď seznam tabulek, dotazů nebo ODBC tabulek otevřené aplikace.


Tlačítko slouží k otevření dialogu pro výběr souboru s daty; typ souboru je dán volbou v levém combu.


V tomto combu jsou uvedeny všechny možnosti, kam lze zapsat data. Podle vybrané možnosti se vpravo objeví jako upřesňující složka buď tlačítko pro výběr souboru nebo editovatelné combo s nabídkou objektů.


Editovatelné combo upřesňuje druh zdroje dat označený vlevo. Je zde buď seznam tabulek nebo ODBC tabulek otevřené aplikace. Chcete-li vytvořit novou tabulku, zapište její jméno do comba.


Označovací čtverec slouží k volbě, mají-li se indexy tabulky při importu do WinBase602 měnit postupně nebo najednou až po přenesení všech dat. V případě většího objemu dat je rychlejší budovat indexy až po importu.


Tlačítko slouží k otevření dialogu pro výběr souboru s daty; typ souboru je dán volbou v levém combu.


Toto tlačítko otevře dialog pro nastavení parametrů přenosu z textového souboru.


Toto tlačítko vytvoří iniciální popis přenosu. Struktura popisu závisí na tom, odkud a kam přenášíte.


Tlačítko vymaže dosavadní popis přenosu.


Touto složkou zadáte případnou podmínku, kterou musí splnit přenášené záznamy. Pomocí této podmínky lze filtrovat pouze záznamy exportované z tabulky ve WinBase602 nebo z odpovědi na dotaz. Není-li podmínka zadaná, přenesou se všechny záznamy.


Tlačítkem lze provést syntaktickou kontrolu popisu přenosu.


Tlačítkem zahájíte přenos podle popisu výše.


Stiskem tlačítka se definice tohoto přenosu dat uloží jako speciální typ programu pro další použití.


Tlačítko ukončí návrh popisu přenosu dat.


Detailní popis přenosu dat. Každý řádek detailního popisu říká, jak se má při přenosu zacházet s jedním sloupcem zdroje dat. Sloupce detailního popisu se mění podle vybraných zdrojových a cílových dat.


 DIALOG Textový formát


Zvolte znak, kterým jsou (resp. budou) od sebe odděleny hodnoty při vstupu (resp. výstupu) v zobecněném  formátu CSV (Comma Separated Values). Není-li vhodný znak v nabídce, zapište znak jiný. Obvykle se používá čárka.


Zvolte znak, kterým je (bude) ohraničena v souboru hodnota, která v sobě obsahuje znak sloužící k oddělování hodnot (vybraný z horní nabídky). Obvykle se používá uvozovka.


Zatržením čtverce docílíte toho, že při přenosu do textového souboru se na první řádce vytvoří záhlaví ze jmen přenášených sloupců.


Zadejte počet řádek, které se při čtení textového souboru (importu dat) přeskočí (ignorují). Obvykle se nastaví na 1.


Vyberte z nabídky (nebo si sami vytvořte) formát data v textovém souboru (D označuje den, M měsíc, C století, Y rok, DD znamená zobrazení vedoucí nuly (01), D bez nuly (1), ostatní znaky jsou oddělovače). Pokud Vám žádný formát nevyhovuje, použijte v popisu přenosu konverzní funkce Date2str, kde lze převzít obecně navržený formát ve Windows.


Vyberte z nabídky (nebo si sami vytvořte) formát času v textovém souboru (H označuje hodinu, M minutu, S sekundu, F tisíciny sekundy, ostatní znaky jsou oddělovače). Pokud Vám žádný formát nevyhovuje, použijte v popisu přenosu konverzní funkce Time2str, kde lze převzít obecně navržený formát ve Windows.


Příznak, zda se má použít semilogaritmický zápis reálných čísel (není-li zatržen, použije se desetinný tvar). Pokud potřebujete speciální tvar čísla, použijte v popisu přenosu konverzní funkci Real2str .


Příznak, má-li se za oddělovač řádků v textu brát jen znak CR místo běžného CRLF


Přenosy dat mezi dvěma zdroji

WinBase602 obsahuje univerzální nástroj na přenášení dat mezi řadou datových formátů podle popisu zadaného uživatelem nebo automaticky odvozeného ze struktury dat.

Využití

•	přenos dat z prostředí WinBase602 ven (Export dat),

•	přenos dat z jiného prostředí do tabulky WinBase602 (Import dat),

•	přenos z tabulky WinBase602 do jiné tabulky s případnými změnami hodnot,

•	úpravu tabulek a záznamů v jedné tabulce WinBase602 (Modifikace dat):

•	zkušenějším uživatelům jsou k dispozici obecné přenosy z jednoho prostředí do prostředí jiného včetně přenosů z (do) zdroje dat připojeného přes rozhraní ODBC.

Návrhář přenosu dat

Návrhář přenosu dat dovoluje nejprve popsat způsob přenosu a poté data přenést. Po doběhnutí přenosu lze buď návrh přenosu zapomenout, anebo jej lze uložit do databáze pro pozdější použití. Navržený přenos je pak uložen mezi programy a lze jej opětovně provést vyvoláním akce Spustit. Lze jej také volat z programů.

Návrhář přenosu se otevře, pokud:

•	provedete příkaz Přenosy dat z menu Nástroje; návrhář je prázdný.

•	pro vybranou tabulku provedete akci Export dat nebo Import dat; v návrháři je přednastavena vybraná tabulka jako zdrojová nebo cílová - uživatel doplní pouze druhou stranu přenosu.

•	vyberete návrh uložený v databázi a provedete akci Modifikovat; návrhář se otevře s popisem konkrétního přenosu.

Postup návrhu přenosu

Okno návrháře přenosu se skládá ze čtyř očíslovaných částí. Při návrhu se postupuje shora dolů podle následujícího popisu:

1. Stanovíte Odkud vzít data pro přenos. V levém combu nejprve vyberete druh zdroje dat a pak vpravo:

•	zvolíte buď jeden z nabízených objektů (tabulku z WinBase602 nebo z cizího zdroje dat, odpověď na dotaz),

•	nebo tlačítkem otevřete okno pro volbu vstupního souboru.

2. Stanovíte Kam zapisovat přenášená data. V levém combu nejprve vyberete druh cílového objektu a pak vpravo:

•	buď zvolíte některý nabízený objekt (existující tabulku ve WinBase602 nebo v cizím zdroji dat);

•	nebo zadáte jméno tabulky, která se má vytvořit;

•	anebo tlačítkem otevřete okno pro zadání výstupního souboru (vyberete-li exitující soubor, přenos dat jej - po dotazu - přepíše);

3. Doplníte Detailní popis přenosu jednotlivých hodnot. Tento popis se nevyplňuje, pokud přenášíte do nebo ze souboru ve vnitřním formátu WinBase602 (export / import dat ve vnitřním formátu). Automatický počáteční návrh přenosu lze vytvořit stiskem tlačítka Vytvořit popis. Obsah detailního popisu závisí na tom, odkud a kam přenášíte - viz dále.

4. Zadáte případnou podmínku, kterou musí splnit přenášené záznamy. Pomocí této podmínky lze filtrovat pouze záznamy exportované z tabulky ve WinBase602 nebo z odpovědi na dotaz. Není-li podmínka zadaná, přenesou se všechny záznamy.

Poté tlačítkem Kontrola popisu můžete provést hrubou syntaktickou kontrolu popisu a tlačítkem Přenést data zahájit vlastní přenos. Průběh přenosu lze sledovat na stavové řádce. Stiskem tlačítka Uložit popis se definice tohoto přenosu dat uloží jako speciální typ programu pro další použití.

Pokračování:	Podrobnosti přenosu dat
	Příklady přenosů dat


Přenosy dat - podrobnosti

Popišme si podrobněji obsah složek combo Odkud vzít data a Kam zapisovat.

Tabulka ve WinBase - tabulka, uložená v databázi jako komponenta aplikace.

Datový soubor v interním formátu WinBase - soubor na disku s příponou TDT - vyexportovaná data z tabulky nebo odpovědi na dotaz.

Text srovnaný do sloupců - textový formát dat uložený v souboru na disku; soubor může obsahovat na prvním řádku záhlaví a na dalších řádcích obsahuje jednotlivé hodnoty sloupců srovnané ve sloupečcích pod sebou.

Text s oddělovači údajů - textový formát dat uložený v souboru na disku; soubor může obsahovat záhlaví, na dalších řádcích jsou jednotlivé hodnoty oddělené oddělovačem (většinou čárkou).

Formát DBF - speciální, hojně používaný databázový formát souboru. Kromě své pevné standardní části uložené v souboru DBF může mít i část poznámek (MEMO polí), které se liší podle jednotlivých výrobců. WinBase602 podporuje formáty poznámek z dBASE IV a FoxPro 2.

Cizí tabulka ODBC - nejuniverzálnější způsob přenosu dat; možnost přistupovat k datům z libovolného zdroje dat, který je na Vašem počítači zpřístupněn pomocí ODBC driveru příslušné databáze.

Odpověď na dotaz - odpověď na dotaz uložený v databázi jako komponenta aplikace.

Detailní popis přenosu

Ve většině případů vyhovuje popis automaticky navržený po stisku tlačítka Vytvořit popis. Výhodou zde diskutovaného obecného popisu je možnost vynechat při přenosu některé sloupce, přejmenovat je, provést konverzi typů apod.

Každý řádek detailního popisu říká, jak se má při přenosu zacházet s jedním sloupcem zdroje dat (atributem). Sloupce detailního popisu se mění podle vybraných zdrojových a cílových dat.

V prvním sloupci zadáte hodnotu, která se má přenášet. Přenášíte-li z WinBase602, můžete zadat jméno sloupce nebo výraz. Přenášíte-li z ODBC tabulky nebo DBF souboru, zadáte jméno pole (obecně sloupce). Přenášíte-li z textového souboru, jsou v prvním sloupci pevně vyplněna čísla údajů resp. sloupců.

Pokud přenášíte data z textového souboru zarovnaného do sloupců, pak v dalším sloupci zadáte šířku sloupce ve znacích. Při stisku tlačítka Vytvořit popis návrhář vyplní automaticky tyto šířky sloupců na základě mezer mezi údaji na první řádce.

Další sloupec určuje, kam se zapíše přenášená hodnota. Při přenosu do textového souboru vyplníte pořadové číslo cílového sloupce resp. údaje. Při přenosu do existující tabulky vyberete některý z jejich sloupců. Při přenosu do dosud neexistující tabulky nebo DBF souboru zadáte jméno sloupce (pole), který se má vytvořit.

Ostatní sloupce se používají pouze tehdy, pokud se data přenášejí do souboru nebo do dosud neexistující tabulky.

Pokud výstup nesměřuje do textového souboru, v dalším sloupci zvolíte typ sloupce uvedeného vlevo. Nabídnou se typy z WinBase602, typy DBF formátu nebo typy cizího zdroje dat.

Poslední sloupec slouží k zadání délky (resp. šířky) vznikajícího sloupce zdroje dat (pole). V DBF formátu má význam u všech typů polí kromě memo, ve WinBase602 pouze u sloupce typu řetězec znaků, v cizích tabulkách v závislosti na zdroji dat. Ve sloupcovém formátu udává šířku sloupce. Ve formátu CSV se uplatní pouze pokud je nenulový, a udává maximální délku údaje.

Konverze typů

Při přenosu dat se automaticky provádí odpovídající konverze typů, s výjimkou přenosu z WinBase602 do WinBase602. Není-li možné z nějakých důvodů konverzi provést, přenese se prázdná hodnota a přenos pokračuje dál. Při přenosu dat z WinBase602 je možné konverzi explicitně předepsat použitím výrazu v prvním sloupci.

Omezení importu a exportu

Ze souboru ve vnitřním formátu WinBase602 (soubor TDT) lze číst data pouze do existující tabulky ve WinBase602. Do takového souboru (TDT) lze exportovat data pouze z tabulky ve WinBase602 nebo z odpovědi na dotaz. Mimo to jsou dovoleny všechny kombinace vstupu a výstupu.

Pokud tabulka WinBase602, do níž se cokoli přenáší (import dat), již obsahuje nějaká data, importované záznamy se připojí za ně. Týká se všech formátů.

Varianty přenosu a jejich specifika

Interní formát WinBase602

Import a export dat do (resp. z) interního formátu Vám nabízí nejjednodušší způsob, jak si vytvořit záložní kopii vybraných dat z WinBase602 nebo jak přenést data z jedné instalace WinBase602 do jiné.

Při importu musí tabulka, do níž se data zavádějí, předem existovat, a musí mít naprosto stejnou strukturu jako tabulka (resp. odpověď na dotaz), z níž byla data exportována. Proto je rozumné kromě obsahu tabulky exportovat také její definici a pak importovat oboje.

Import a export dat ve vnitřním tvaru zvládá přenos všech typů a struktur WinBase602 a zachovává i hodnoty sloupců typu Historie. Výjimkou je obsah sledovacího atributu Autorizace, který ztrácí platnost s přechodem do takové instalace WinBase602, v níž není autor změny znám.

Exportem a importem dat se nezmění absolutní čísla záznamů v tabulce. Obsahy zrušených záznamů z tabulky se neexportují. Po importu dat doporučujeme uvolnit zrušené záznamy v tabulce.

Datový soubor ve vnitřním formátu WinBase602 by měl mít příponu TDT.

Přenos z WinBase602 do WinBase602

Speciálním případem přenosu dat je přenos, kdy zdroj i cíl jsou tabulky WinBase602. Jedná se o operaci, při níž se hodnoty sloupců (a hodnoty vypočtené ze sloupců) z jisté množiny záznamů přidají do určené tabulky nebo novou tabulku vytvoří. Pro každý záznam z přenášené množiny se vezmou tytéž sloupce resp. spočtou tytéž výrazy a vyrobí se z nich jeden záznam v cílové tabulce.

Nejjednodušším příkladem použití je vytvoření kopie tabulky nebo odpovědi na dotaz v téže aplikaci. Kopie obsahuje sloupce a záznamy zdrojové tabulky specifikované v návrhu přenosu.

Modifikace dat WinBase602

Modifikací dat budeme rozumět operaci, při níž se na jistém počtu záznamů jedné tabulky nebo dotazu provedou zadané operace, které mění hodnoty sloupců těchto záznamů. Přitom se se sloupci každého vybraného záznamu provedou stejné operace.

Modifikace dat se provede, pokud vybraný zdroj i cíl je tatáž tabulka WinBase602 (resp. zdrojem je odpověď na dotaz z téže tabulky).

Textové formáty a jejich parametry

WinBase602 přímo podporuje přenos dat ve dvou textových formátech:

•	ve formátu CSV (Comma Separated Values), v němž je každý záznam na zvláštní řádce a hodnoty jednotlivých sloupců jsou odděleny zvláštním znakem, obvykle čárkou;

•	ve sloupcovém formátu, v němž je každý záznam na zvláštní řádce a hodnoty jednotlivých sloupců jsou srovnány do sloupců pevné šířky.

Pokud ve formátu CSV hodnota některého sloupce obsahuje znak, který se používá jako oddělovač hodnot, pak se celá hodnota uzavře do vhodných omezujících znaků, obvykle uvozovek. Pokud se tento omezující znak vyskytuje uvnitř zápisu hodnoty sloupce, pak se zdvojuje.

Ve sloupcovém formátu musí být data ve sloupcích oddělena mezerami, nikoli například tabulátory nebo jinými znaky. Jsou-li sloupce dat odděleny tabulátory, jedná se o variantu CSV formátu.

Pokud data exportovaná do textového formáty mají být importována zpět do WinBase602, je vhodné na první řádku umístit záhlaví obsahující jména sloupců, jimž jednotlivé hodnoty přísluší. Na základě tohoto záhlaví dokáže návrhář přenosu automaticky vytvořit vhodný popis přenosu (ve sloupcovém formátu musí být data v záhlaví oddělena alespoň jednou mezerou). První řádku obsahující záhlaví je pak třeba při importu přeskočit.

Při exportu tabulky (odpovědi na dotaz) obsahující sloupec typu Text z WinBase602 do textového souboru se oddělovače řádek obsažené v textech nahradí mezerami, aby nenarušily členění souboru do řádek po záznamech (záznam = řádek). Řádky takto vzniklého souboru (CSV) mohou mít vzhledem k možné velikosti textů značnou délku. Na import do WinBase602 nemá délka řádku vliv. U sloupcového formátu se exportuje pouze začátek textu ohraničený pozicí záhlaví.

Při exportu v textových formátech se exportují všechny sloupce kromě typu ukazatel, typů proměnné velikosti (až na Text), sledovacích atributů a multiatributů.

Pokud má exportovaný sloupec hodnotu NONE, bude ve výstupním souboru prázdný (ve variantě CSV budou dva oddělovací znaky těsně u sebe).

Přenos dat do nebo z textového formátu je popsán specifickými parametry týkajícími se členění souboru a zobrazení hodnot některých typů. Okno s těmito parametry se otevírá tlačítkem Textový formát. Lze v něm nastavit:

•	Znak, který slouží jako oddělovač polí v textovém formátu CSV - obvykle se používá čárka.

•	Znak, který bude uvozovat a ukončovat hodnotu obsahující oddělovač polí v textovém formátu CSV vybraný výše - obvykle se používá uvozovka.

•	Příznak, zda se má při tvorbě textového souboru umístit na první řádce záhlaví. Při exportu z WinBase602, cizí tabulky nebo z DBF souboru budou v záhlaví jména přenášených sloupců.

•	Počet řádek, které se při čtení textového souboru (importu dat) přeskočí (ignorují). Obvykle se nastaví na 1, pokud soubor byl vytvořen se záhlavím.

•	Formát data v textovém souboru (D označuje den, M měsíc, C století, Y rok).

•	Formát času v textovém souboru (H označuje hodinu, M minutu, S sekundu, F tisíciny sekundy).

•	Příznak, zda se má použít semilogaritmický zápis reálných čísel (není-li zatržen, použije se desetinný tvar).

•	Příznak, má-li se za oddělovač řádků v textu brát jen znak CR místo CRLF

Formát času a data

Volitelný formát času a data je potřeba popsat podrobněji. Formáty jsou popsané "maskou" skládající se ze znaků označujících části data nebo času (D označuje den, M měsíc, C století, Y rok u data, H označuje hodinu, M minutu, S sekundu, F tisíciny sekundy u času) a oddělovačů (například tečka u data, dvojtečka u času). Uživatel si pro přenos zvolí formát z nabídky nejčastějších nebo si definuje formát vlastní tím, že "masku" formátu zapíše do editovatelného comba. Formát je součástí návrhu přenosu. Pokud žádný formát nevyhovuje, použijte v popisu přenosu konverzních funkcí Date2str nebo Time2str kde lze převzít obecně navržené formáty ve Windows.

Pro čtení z textového souboru platí tyto pravidlo:

•	Přečte se vždy nanejvýš tolik číslic, kolik je za sebou stejných znaků v masce, pokud se nenarazí dříve na oddělovač. Pro import je tedy bezpečnější používat delší masky. Je-li např. datum vyjádřeno jednou nebo dvěma číslicemi, je pro jeho správné přečtení v obou případech nutno použít zápis DD.

•	Mezery na vstupu se přeskakují, ostatní znaky se přeskočí pouze tehdy, odpovídá-li jim v masce stejný znak.

•	Pro zápis do textového souboru platí pravidlo:

•	zapíše se vždy kompletní část údaje (den, hodina, apod.) a v případě nutnosti se překročí počet za sebou následujících stejných znaků v masce; je-li skupina stejných znaků v masce delší než počet znaků zapisované části údaje, doplní se zleva nulami. Proto pokud nechcete exportovat hodnoty s doplněnými nulami, je třeba v zápisu formátu používat kratší masky;

•	ostatní znaky z masky (oddělovače) se přepíšou na výstup.

Pokud nezvolíte žádnou masku formátu, použijí se masky následující:

pro čtení data:	DD.MM.CCYY

pro zápis data:	D.M.CYY

pro čtení času:	HH:MM:SS.FFF

pro zápis času:	H:M:S.FFF

Formáty DBF

Formát souboru DBF slouží k výměně dat se systémy jako dBase, FoxPro, Clipper, CodeBase apod. Data jsou v něm obsažena v jednom nebo dvou souborech - případný druhý soubor slouží k uložení hodnot tzv. memo-polí. Formát prvního souboru je (víceméně) pevný, zatímco formát druhého má mnoho variant podle cílového systému a jeho verze.

Do WinBase602 je zabudována podpora memo-formátu v dBase IV a FoxPro 2.0. Tyto formáty jsou akceptovány řadou systému. Další formáty lze z WinBase602 získat nebo do WinBase602 přenést pomocí vhodných ODBC driverů.

Konverze českých znaků při přenosu

Při přenosu dat do nebo ze souboru lze v dialogovém okně pro výběr souboru zadat způsob reprezentace českých znaků s diakritikou použitý v souboru. Při přenosu se pak provede potřebná konverze.

Vnitřní znaková sada WinBase602 je Windows EECS.

Pokračování:	Příklady přenosů dat
	Konverze typů při přenosu


Příklady použití přenosů dat

Příklad 1: Import dat z DBF souboru do nové tabulky WinBase602.

Postup:

•	Z menu Nástroje vyberte položku Přenosy dat.

•	Vyberte zdroj dat DBF soubor, pomocí tlačítka vpravo nalezněte příslušný soubor DBF.

•	Jako cíl vyberte Tabulka WinBase a do editovatelného comba vpravo napište jméno nové tabulky, která se při importu vytvoří.

•	Stiskněte tlačítko Vytvořit popis a zkontrolujte vygenerovaný návrh přenosu.

•	Tlačítkem Přenést data se přenos provede. Není důvod takovýto druh přenosu ukládat pro další použití.

Příklad 2: Export dat z odpovědi na dotaz do textového formátu.

Postup:

•	Na řídicím panelu označte daný dotaz a proveďte akci Export dat. Otevře se návrhář přenosu s přednastavenými hodnotami zdroje dat.

•	Určete cílový zdroj dat - Textový formát CSV - a pomocí tlačítka vpravo najděte nebo vytvořte nový soubor, do něhož se data zapíší.

•	Nastavte podle potřeby parametry textového přenosu tlačítkem Textový formát.

•	Stiskněte tlačítko Vytvořit popis a zkontrolujte (případně upravte) vygenerovaný návrh přenosu.

•	Tlačítkem Přenést data se přenos provede. Přenos si můžete uložit pro další použití.

Příklad 3: Vytvoření kopie tabulky včetně obsahu.

Postup:

•	Na řídicím panelu označte tabulku a proveďte akci Export dat. Otevře se návrhář přenosu s přednastavenými hodnotami zdroje dat.

•	Určete cílový zdroj dat - Tabulka WinBase - a do editovatelného comba vpravo napište jméno nové tabulky.

•	Stiskněte tlačítko Vytvořit popis a zkontrolujte (případně upravte) vygenerovaný návrh přenosu.

•	Tlačítkem Přenést data se přenos provede. Přenos si můžete uložit pro další použití, ale musíte pamatovat, že při opakovaném provedení se tabulka již nevytváří, ale obsah se vkládá do tabulky již existující.

Příklad 4: Tabulka ZAMĚSTNANCI obsahuje seznam lidí včetně jejich platu a číslo oddělení, kde pracují. Zvyšte zaměstnancům z oddělení č. 100 plat o 10%.

Postup:

•	Z menu Nástroje vyberte položku Přenosy dat.

•	Určete zdroj i cíl - Tabulka WinBase - a z comba vpravo vyberte v obou případech jméno tabulky ZAMĚSTNANCI.

•	Do sloupce Vzít hodnotu napište výraz PLAT*1.1; do sloupce Zapsat do sloupce vyberte z nabídky sloupec PLAT.

•	Do pole Přenášet pouze záznamy splňující podmínku v dolní části zapište podmínku, aby se změna provedla pouze v záznamech zaměstnanců oddělení 100. Podmínka bude vypadat ODDELENI=100.

•	Tlačítkem Přenést data se změna dat provede (není-li v popisu syntaktická chyba).

Viz také:	Přenos dat


Popis přenosu dat při hromadných operacích
Popis konverze dat při přenosu

Na popis přenosu se lze dívat jako na sérii přiřazovacích příkazů, které se mají provést pro každý záznam. Do popisu lze zadat operace, které se mají při přenosu provést.

	Bool	Char	Short	Int	Mon	Real	String	Date	Time	Ptr	Text
Boolean	OK	1	1	1	1	1	1	1	1	--	--
Char	2	OK	3	3	--	--	OK	--	--	--	--
Short	2	4	OK	OK	OK	OK	5	6	7	OK	--
Integer	2	4	OK	OK	OK	OK	5	6	7	OK	--
Money	2	--	OK	OK	OK	OK	8	--	--	--	--
Real	2	--	9	9	OK	OK	10	--	--	--	--
String	2	OK	11	11	12	13	OK	14	15	--	OK
Date	2	--	16	16	16	16	17	OK	--	--	--
Time	2	--	18	18	18	18	19	--	OK	--	--
Ptr	--	--	OK	OK	--	--	--	--	--	OK	--
Text	--	--	--	--	--	--	OK	--	--	--	OK

Tabulka popisuje možnosti konverze typu uvedeného v záhlaví řádku na typy uvedené v záhlavích sloupců. Obsah tabulky není symetrický.

Typ  Ptr je v této tabulce zkratkou za typy  Pointer a  Biptr, tedy za jednosměrné a obousměrné ukazatele. Údaje o typu  String se v plné míře vztahují i na typy  CSString a  CSIString, navíc hodnoty těchto tří typů se dají navzájem přiřazovat bez konverzí.

Značky v tabulce znamenají toto:

  OK - lze přímo přiřadit, konverze není potřebná nebo proběhne automaticky;

pomlčka - nelze jednoduše konvertovat;

  1 - použijte podmíněný výraz ve tvaru:

  	sloupec_typu_Boolean ? výraz1 : výraz2

  2 - použijte relaci ve tvaru:

sloupec = hodnota

  častý případ převodu znaků A a N na logickou hodnotu:

Ord(znak) = Ord(’A’) (=65)

  3  - konvertujte funkcí Ord;

  4  - konvertujte funkcí Chr;

  5  - konvertujte funkcí Int2str;

  6  - využijte funkci Make_date;

  7  - využijte funkcí Make_time;

  8  - konvertujte funkcí Money2str;

  9  - konvertujte funkcí Trunc nebo Round;

  10 - konvertujte funkcí Real2str;

  11 - konvertujte funkcí Str2int;

  12 - konvertujte funkcí Str2money;

  13 - konvertujte funkcí Str2real;

  14 - konvertujte funkcí Str2date;

  15 - konvertujte funkcí Str2time;

  16 - využijte funkce Day, Month, Year;

  17 - konvertujte funkcí Date2str;

  18 - využijte funkce Hours, Minutes, Seconds, Sec1000;

  19 - konvertujte funkcí Time2str.

Některé složitější konverze se dají provádět i ve dvou krocích, např. textový zápis roku ve sloupci ROK typu  String převedete na datum prvního dne v roku voláním dvou funkcí:

Make_date(1, 1, Str2int(ROK) )

Přiřazovat lze i sloupce proměnné délky a celé multiatributy najednou. Dokonce lze přiřadit i dva multiatributy proměnné velikosti.

Při přenosu záznamů ze staré tabulky do nové se nepřenášejí zrušené záznamy. Všechny záznamy, které byly před přenosem zrušené, budou po něm uvolněné. Nezrušené záznamy si přitom podrží svá čísla, a tak nebudou zpřetrhány ukazatelové vazby mezi tabulkami.

Viz také:	Přenosy dat
	Příklady přenosů dat


Řídicí panel - SCHÉMA

Schémata slouží k alternativnímu způsobu zobrazení skupiny komponent WinBase602. Základní akce, které je možno se schématy provádět, lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se objeví po stisku pravého tlačítka myši na objektu typu schéma.

Pozor! Nezaměňujte zde uváděný pojem schéma (klientská záležitost) se schematy v SQL. Schema v SQL je synonymem pro aplikace.

Otevřít	otevře se okno nákresu schématu bez možnosti úprav
Vytvořit	otevře se prázdné okno nákresu schématu v editačním režimu, pomocí pravého tlačítka myši vkládejte objekty
Modifikovat	otevře se okno nákresu schématu v editačním režimu, ovládání pomocí pravého tlačítka myši
Zrušit	zrušení označeného schématu
Duplikovat	vytvoření přesné kopie označeného schématu
Exportovat	export popisu schématu do souboru
Importovat	import popisu schématu ze souboru
Práva k objektu	nastavení objektových práv


Schéma části aplikace

Nákresy schémat aplikace slouží k přehlednému zobrazení a jednoduššímu editování komponent aplikace, které spolu souvisejí. Je možné je rozmístit po ploše okna schématu a volat akce pomocí menu, které se objeví po stisku pravého tlačítka myši,

Schéma aplikace a jeho nákres slouží ke těmto účelům:

1. ke grafickému znázornění

•	vztahů mezi objekty, zejména závislostí mezi formuláři (sub- a superformuláře, otevírání jednoho formuláře z druhého apod.), mezi WWW objekty (posloupnost HTW šablon, větvení selektoru apod.);

•	datové části aplikace – tabulek a relací mezi nimi, pevných dotazů a jejich závislosti na tabulkách;

•	formulářů a sestav společně s jejich zdroji dat;

2. k alternativnímu způsobu zobrazení částí aplikace s možností editace objektů přímo ze schématu. Při vývoji rozsáhlejších aplikací (desítky tabulek, stovky pohledů) může být nepohodlné hledat každý objekt na řídicím panelu, i když se plně využívá možností zakládat složky objektů. Uspořádání objektů na řídicím panelu nezachycuje veškeré logické vztahy mezi komponentami. WinBase602 nabízí autorům aplikací toto řešení:

•	pro jednotlivé logicky související části aplikace vytvořit složky a schémata;

•	do těchto schémat (a složek) vložit objekty patřící do příslušné části aplikace.

Oba tyto účely se v reálné aplikaci překrývají.

Viz také:	Práce se schématem
	Definování relačních vztahů
	Řídicí panel


Práce se schématem

0	Do schématu lze vkládat (a odstraňovat) tyto komponenty:

•	tabulky (zobrazí se jako seznamy),

•	dotazy, pohledy, menu, program, obrázek a schéma (zobrazí se jako malé obdélníčky se svojí ikonou vlevo)

•	pomocné objekty (obdélníček s otazníkem). Tyto komponenty mají tečkovaný rám, pokud jsou vloženy příkazem Vložit jakýkoliv objekt, nebo pevný rám, pokud jsou vloženy příkazem Vložit lokální objekt (myšleno objekt ze stejné  uživatelské složky, v níž je vytvořeno i schéma). Odstranění objektu ze schématu nezruší objekt v aplikaci.

Ve schématu se dále používají šipky, znázorňující vztahy mezi objekty. Rozlišujeme tři druhy šipek a čar:

•	spojnice tabulek, které znázorňují relační vztah na rovnost dvou sloupců.

•	spojnice (šipky) mezi závislými objekty (dotaz  tabulka, pohled  tabulka nebo dotaz, šipky mezi WWW objekty konektor  šablona atd.) - šipky jsou automaticky vygenerovány po vložení druhého objektu.

•	ručně doplněné šipky pro znázornění dalších vztahů. Šipka se vloží takto: v popup menu objektu, z něhož má šipka vést, se provede příkaz Šipka do a klikne se na objekt (ne tabulku), do níž má šipka vést. Pokud chcete tuto šipku odstranit, klikněte pravým tlačítkem na ní a proveďte příkaz Odstranit šipku z popup menu.

0	Zobrazení automaticky generovaných šipek lze vypnout (tlačítkem na liště [image]). Překreslení těchto šipek se provede tlačítkem [image].

1	Popup menu schématu:

2	Okno schématu nemá vlastní hlavní menu, veškeré příkazy se zadávají buď pomocí tlačítek na liště nebo příkazy v plovoucím popup menu okna, které se otevře po kliknutí pravým tlačítkem myši kdekoliv mimo objekt schématu.

3	Popup menu má tyto položky:

4	Vložit lokální (jakýkoliv) objekt / vložit tabulku (pohled, menu, dotaz, program, obrázek, WWW objekt) - na aktuální místo vloží jeden vybraný objekt. Lokální objekty jsou objekty z téže složky jako je schéma, jakýkoliv objekt je libovolný objekt z aplikace. Pokud ve schématu již je vložen závislý objekt, vygeneruje se automaticky šipka.

5	Vložit pomocný objekt - na aktuální místo se vloží pomocný objekt, charakterizovaný pouze jménem. Používá se, pokud chcete znázornit něco víc, než nabízí schéma (např. konkrétní proceduru, pomocí níž se otevírá z jednoho formuláře formulář druhý znázorníte pohled1  pom. objekt  pohled2).

6	Vytisknout - vytiskne nákres schématu, je možné zvolit zvětšení nebo zmenšení.

7	Uložit - uloží objekt do databáze;

8	Zobrazovat šipky - přepínač pro skrytí nebo ukázání automatických vazeb (šipek);

9	Obnovit - překreslí schéma, aby se obnovily automaticky generované šipky.

10	Popup menu komponent

11	Každá komponenta vložená do schématu má své vlastní popup menu, pomocí něhož lze pracovat s objektem podobně jako z řídicího panelu (Modifikovat, Otevřít, Nastavit práva apod.).  Dále je zde příkaz Odstranit ze schématu - objekt zmizí z nákresu, v aplikaci i nadále zůstává a Odstranit z aplikace - objekt se vymaže z aplikace. Příkazem Šipka do lze vytvářet vlastní šipky (většinou do pomocných objektů).

12	Lišta okna schématu:

13	Význam tlačítek:

 - uložit schéma do aplikace;

0	- upravit označenou relaci;

1	- vytisknout schéma v různém zvětšení;

2	- překreslit automatické vazby (šipky);

3	- skrýt / ukázat automatické vazby;

4	- odstranit ze schématu (nikoliv z aplikace!!) vyselektované objekty;

- ukončit práci se schématem.

Viz také:	Schéma části aplikace
	Definování relačních vztahů
	Složky


Relace

Definování relačních vztahů mezi tabulkami je důležitou součástí netriviálních databázových aplikací. Ve WinBase602 doporučujeme využívat relací ze dvou hlavních důvodů:

•	relace znázorněné pomocí nákresu schématu výrazně zpřehlední složitější aplikaci, umožní autorovi ujasnit si mnohé potřebné informace;

•	relace definované v aplikaci umožní provádět některé speciální akce (např. otevírání relačních pohledů), jiné akce mohou zjednodušit.

V aplikacích je možné používat relačně propojené tabulky a výhody relační algebry i bez explicitního definování relací jako objektů aplikace. Autor se pak musí vzdát výše uvedených výhod.

Viz také:	Definování relačních vztahů


Definování relačních vztahů

0	Nové relace se definují dvojím způsobem: jako objekt typu relace nebo propojením tabulek v nákresu schématu.

1	Vytvoření relačního vztahu v nákresu schématu je velice jednoduché. Uchopíte myší jméno sloupce tvořící relační klíč v první tabulce a upustíte ho nad odpovídajícím sloupcem druhé tabulky. WinBase602 za Vás provádí kontrolu typů sloupců a teprve při shodě a vhodnosti typů povolí vytvoření relace. Takto lze vytvořit relace mezi dvěma sloupci. Pro složitější relace použijte vytvoření objektu typu relace z řídicího panelu.

2	Po úspěšném provedení předchozího kroku se objeví vstupní okno pro jméno relace. Zadejte jméno, různé od všech ostatních relací v této aplikaci. Po zadání jména se vztah objeví v grafické podobě v nákresu. Existují-li v tabulkách indexy ke sloupcům , kterých se propojení týká, budou v nákresu vyznačeny. Znak 1 symbolizuje unikátní (jedinečný) index, znak hvězdička (*) index neunikátní. Je-li definována referenční integrita, je směr od podřízené k nadřízené tabulce určen šipkou.

3	Symbol každé relace se zvýrazní kliknutím myši na kosočtverec se jménem relace. Pro zvýrazněnou relaci lze tlačítkem na liště otevřít dialogové okno Správa relace.

Viz také:	Relace
	Dialog Správa relace
	Dialog Vytvoření relace
	Schéma části aplikace


Řídicí panel - RELACE

0	Komponenty typu relace slouží k vytváření a úpravě relačních vztahů mezi tabulkami. Základní akce, které je možno s relacemi provádět, lze vyvolat pomocí tlačítek v pravé části řídicího panelu nebo z nabídky, která se objeví po stisku pravého tlačítka myši na objektu typu relace.

Vytvořit	otevře dialog pro vytvoření nové relace na rovnost jednoho nebo více sloupců; vytvářet relace lze jednodušeji z prostředí schématu
Modifikovat	otevře se okno pro správu relace; vytvořená relace se již nedá změnit
Zrušit	zrušení označeného relace; relace lze rušit i ze schématu
Práva k objektu	nastavení objektových práv


Správa relace
 Správa relace - popis dialogu

Dialog Správa relace umožňuje

•	vytvořit indexy na relační klíče v obou tabulkách, aby bylo možno

•	definovat referenční integritu;

Aby bylo možno integritu definovat, musí existovat vhodné indexy - v tabulce nadřízené jedinečný index pro sloupec (nebo jedinečný složený index pro n-tici sloupců), v tabulce podřízené jakýkoli index (nebo jakýkoli složený index pro n-tici sloupců). Chybí-li některý index, tlačítky Vytvořit unikátní nebo Vytvořit neunikátní je možno indexy v příslušných tabulkách dobudovat. Existují-li již vhodné indexy, tlačítka jsou neaktivní.

Analýzou existujících indexů WinBase602 pozná, jakým směrem může být referenční integrita uplatněna a nabídne možnost ji definovat.

Změnit definici relace není možno - je-li to potřeba, relaci odstraňte a vytvořte novou. Odstranění relace z aplikace se provede z řídicího panelu.

Viz také:	Relace
	Dialog Vytvoření relace
	Definování relačních vztahů ze schématu
	Schéma části aplikace


Vytvoření relace
Vytvoření relace - popis dialogu

Pomocí tohoto dialogového okna je možné vytvořit nový objekt typu relace.

Relace mezi dvěma sloupci lze jednodušším způsobem vytvořit také ze schématu, relace mezi n-ticemi sloupců se musí vytvářet tímto dialogem.

Kromě jména relace je nutné určit dvojici tabulek (comba První a Druhá tabulka) a odpovídající sloupce (jeden až čtyři) - comba Sloupec s nabídkou jmen sloupců zvolených tabulek.

Při ukládání se provádí kontrola, jestli odpovídají typy vybraných sloupců. Pokud ne, budete upozorněni a relace se neuloží.

Viz také:	Relace
	Schéma části aplikace
	Dialog Správa relace
	Definování relačních vztahů ve schématu


ZÁLOŽKA INSTALACE


V tomto seznamu jsou uvedeny všechny instalace WinBase602 zaznamenané v registrační databázi Vašeho počítače. Do seznamu přibude nová instalace tehdy, když instalujete WinBase602 (programem SETUP.EXE) nebo když pomocí tlačítka Najít existující instalaci vyhledáte adresář s instalací WinBase602.


Toto tlačítko Vám umožní vyhledat na Vašem počítači (výjimečně na sdíleném disku jiného počítače) další instalaci WinBase602 a zaznamenat ji do registrační databáze (registrovat ji). Současně můžete vytvořit ikony zástupců programů, které tuto instalaci spouštějí.

Při normálním postupu vzniká registrace instalace a ikony při instalaci produktu.


Toto tlačítko vymaže instalaci WinBase602 označenou v seznamu vlevo. Doporučujeme opatrnost zejména při mazání síťově sdílených instalací, které mohou být využívány více uživateli. Odinstalování nesmaže obsah databáze, takže s ní lze i nadále pracovat pomocí jiné instalace vhodné verze.


Toto tlačítko dovolí nastavit komunikační protokoly a další provozní parametry pro vybranou instalaci.


ZÁLOŽKA DATABÁZE A SERVERY


V tomto seznamu jsou uvedeny všechny databáze resp. servery WinBase602 od verze 5 zaznamenané v registrační databázi Vašeho počítače. Do seznamu přibude nová položka tehdy, když vytvoříte novou databázi nebo když pomocí tlačítka Registrovat síťový server nebo Registrovat lokální databázi registrujete další databázový server (či pouze lokální databázi). Tyto servery a databáze se budou nabízet při spuštění klienta bez parametrů na příkazové řádce.


Toto tlačítko Vám umožní vytvořit novou lokální databázi spravovanou tímto serverem. Po stisku zadáte jméno databáze a adresář, v němž bude databáze umístěna.


Toto tlačítko Vám umožní zaznamenat do registrační databáze jméno již existujícího databázového serveru běžícího v síti (nejčastěji lokální, teoreticky kdekoliv v Internetu). Musíte znát jméno serveru a jeho IP adresu.


Tlačítko Vám umožní zaznamenat do registrační databáze jméno již existující lokální databáze (a dále ji spravovat tímto serverem). Musíte znát její jméno a adresář, kde se nachází databázový soubor WB5.FIL.


Toto tlačítko vyřadí jméno serveru nebo databáze z registrace. Doporučujeme používat tehdy, pokud server resp. databáze již neexistují nebo je nebudete více používat. Tato akce neruší data.


Toto tlačítko vymaže celou databázi označenou v seznamu vlevo a odstraní její jméno z registrační databáze. Vymazáním databáze neodvratně přijdete o všechna data uložená v databázi.


Tlačítko provede tzv. podepření poškozené databáze. Použijte výjimečně pouze tehdy, je-li v důsledku havárie systému databáze nepřístupná - poškozený systém práv, nelze se připojit apod. Po podepření databáze (akce se nemusí podařit, záleží na poškození) spusťte WB602.EXE s parametrem /B a pokuste se vyexportovat neporušená data z tabulek.


Pro vzdálené servery komunikující protokolem TCP/IP lze zadat jejich IP adresu nebo jméno hostitele a případně i jméno telefonického připojení sítě nebo IP adresu SOCKS firewallu, je-li mezi klientem a serverem.

Zadání IP adresy vzdáleného serveru je nezbytné, pokud se server nachází mimo lokální síť nebo pokud není povolen TCP/IP broadcast.


Je-li tento čtverec zatržen, pak síťový klient osloví při svém spuštění všechny počítače v lokální síti, zda na nich neběží server WinBase602. Pokud čtverec zatržen není, pak se předpokládá, že na příkazové řádce klienta je uvedeno jméno serveru a že pro tento server je v registrační databázi IP adresa. Klient pak přímo osloví server na této adrese. Nejsou-li výše uvedené podmínky splněny, klient server nenajde.


Tlačítko otevře dialog pro nastavení adresářů pro umístění datových souborů serveru.


Tlačítko otevře dialog pro nastavení parametrů zálohování datového souboru serveru WB5.FIL.


Tlačítko otevře dialog pro zapínání a nastavení ukládání objektů u klienta (klientská cache).


DIALOG ADRESÁŘE


Zde vidíte neměnné umístění základní části datového souboru WB5.FIL.


Zde můžete zapsat (nebo vybrat tlačítkem vpravo) adresář, v němž bude umístěna druhá část souboru WB5.FIL, jakmile základní část dosáhne hranice vymezeného prostoru.


Zde můžete zapsat (nebo vybrat tlačítkem vpravo) adresář, v němž bude umístěna třetí část souboru WB5.FIL, jakmile druhá část dosáhne hranice vymezeného prostoru.


Zde můžete zapsat (nebo vybrat tlačítkem vpravo) adresář, v němž bude umístěna čtvrtá část souboru WB5.FIL, jakmile třetí část dosáhne hranice vyhrazeného prostoru.


Tlačítko otevře dialog pro výběr adresáře pro umístění částí souboru WB5.FIL.


Zde zadejte maximální velikost, kterou může základní část souboru WB5.FIL nabýt. Při překročení se začne zapisovat do druhé části souboru WB5.FIL.


Zde zadejte maximální velikost, kterou může druhá část souboru WB5.FIL nabýt. Při překročení se začne zapisovat do třetí části souboru WB5.FIL.


Zde zadejte maximální velikost, kterou může třetí část souboru WB5.FIL nabýt. Při překročení se začne zapisovat do čtvrté části souboru WB5.FIL.


Zde můžete zapsat (nebo vybrat tlačítkem vpravo) adresář, v němž bude umístěn soubor s žurnálem aktualizací (JOURNAL.FIL). Není-li vyplněno, použije se adresář pro základní část WB5.FIL.


Tlačítko otevře dialog pro výběr adresáře pro umístění souboru JOURNAL.FIL.


Zde můžete zapsat (nebo vybrat tlačítkem vpravo) adresář, v němž bude umístěn soubor obsahující pomocná data při transakcích (TRANSACT.FIL). Není-li vyplněno, použije se adresář pro základní část WB5.FIL.


Tlačítko otevře dialog pro výběr adresáře pro umístění souboru TRANSACT.FIL


Zde můžete zapsat (nebo vybrat tlačítkem vpravo) adresář, v němž bude umístěn soubor obsahující základní hlášení serveru (čas spuštění, čas výskytu chyby apod.). Není-li adresář zadán, soubor se nevytváří.


Tlačítko otevře dialog pro výběr adresáře pro umístění souboru WBSQLLOG.TXT


ZÁLOŽKA OLE


Z této nabídky vyberte tu instalaci, která se má používat pro obsluhu pohledů, sestav a dat WinBase602 vložených nebo připojených do cizích programů. Nabízejí se instalace uvedené v seznamu na záložce Instalace. Pokud zvolíte možnost -- Neobsluhovat OLE -- , nebude možno pracovat přes OLE s pohledy, sestavami ani daty WinBase602 z jiných programů.


Z této nabídky vyberte jméno databáze resp. serveru, do nichž se umístí pohledy a sestavy WinBase602 vytvořené v cizích programech mechanismem OLE. Nabízejí se jména uvedené v seznamu na záložce Databáze a servery. Pokud zvolíte možnost -- Neurčeno --, budete při každém vytvoření pohledu nebo sestavy tázání na jméno serveru. Na aktivaci již vytvořených pohledů a sestav nemá tato volba vliv.


ZÁLOŽKA NT


Z této nabídky vyberte tu instalaci, která se má používat pod Windows NT jako trvale pracující databázová služba. Nabízejí se instalace uvedené v seznamu na záložce Instalace. Pokud zvolíte možnost -- Neposkytovat službu --, služba nebude v provozu.


Z této nabídky vyberte jméno databáze, kterou bude používat server běžící jako služba pod Windows NT.


Označovací čtverec zatrhněte, pokud chcete nainstalovat službu (service) WinBase602 FastCGI klient.


Zatržením nastavíte automatické spuštění služby WinBase602 NT Server vždy při startu Windows NT.


Ovládání služby WinBase602 NT Server (spuštění (Start) a zastavení (Stop)) - ekvivalentní s dialogem Services.


ZÁLOŽKA ODBC


V tomto seznamu jsou uvedeny všechny ODBC zdroje dat registrované na Vašem počítači. Ty z nich, které zpřístupňují data z WinBase602, mají uvedeno v druhém sloupci jméno serveru (resp. databáze) a případně v třetím sloupci jméno aplikace. Zdroje dat lze vytvářet a rušit buď tlačítky pod seznamem nebo pomocí standardní součásti Windows pro správu ODBC zdrojů dat.


Tímto tlačítkem odstraníte registraci ODBC zdroje dat označeného v seznamu nahoře. ODBC klienti poté nebudou moci čerpat data z tohoto zdroje. Vlastní data v databázích nejsou odregistrováním zdroje dat dotčena.


Tímto tlačítkem vytvoříte nový ODBC zdroj dat zpřístupňující data WinBase602. Otevře se dialogové okno, v němž zadáte (libovolné) jméno zdroje dat (např. ve tvaru WinBase602: <jméno aplikace>), jméno databáze resp. serveru a jméno jedné aplikace z této databáze.  Jménem se budete na zdroj odkazovat. Budete-li chtít přistupovat do více aplikací, vytvořte si více zdrojů dat.


Z nabídky vyberte komunikační protokol, který se má použít při přístupu na vzdálený WinBase602 server přes ODBC.


Tlačítkem se spustí standardní Windows aplikace pro správu ODBC zdrojů dat.


Tlačítkem se spustí konfigurační utilita příslušného ODBC zdroje dat.


DIALOG PARAMETRY


Protokol, který bude používat databázový klient při navazování spojení se serverem. IPX/SPX je aktivní, je-li instalován Client 32 for NetWare od firmy Novell.


Protokoly, s nimiž se na tento (na tomto počítači umístěný) server mohou připojovat síťoví klienti. IPX/SPX je aktivní, je-li instalován Client 32 for NetWare od firmy Novell.


Velikost pracovní operační paměti klienta (počet bloků velikosti 64 KB) alokované při spuštění. Hodnotu je možné zvětšit, pokud klient hlásí chyby z nedostatku paměti (při ladění rozsáhlé aplikace, při preview velké sestavy apod.). Doporučené hodnoty jsou 5-10 bloků. Od verze 6 si již klient paměť alokuje při nedostatku dynamicky.


Velikost pracovní operační paměti serveru běžícího na tomto počítači (počet bloků velikosti 64 KB) alokované při spuštění. Od verze 6 si již server paměť alokuje při nedostatku dynamicky. Hodnotu je zde možné zvětšit, pokud server často oznamuje dynamickou alokaci další paměti (při práci s mnoha souběžně otevřenými kurzory apod.).

Doporučené hodnoty jsou 20-30 bloků, na počítačích s dostatkem RAM i 30-40 bloků. Velikost pracovní paměti a její případné přibývání za provozu lze zkontrolovat v okně serveru.


Velikost pracovní paměti serveru sloužící pro databázové informace dočasně držené v operační paměti (v KB). Doporučená velikost je asi 100-200 krát velikost databázového clusteru (db cluster je v současné verzi 4 KB).


Velikost prostoru pro třídění a budování indexů na serveru (v KB). Může urychlit zaindexování tabulky nebo vyhledání záznamu. Podle velikosti RAM zvolte až 2048 KB.


Velikost prostoru pro všechna souběžně probíhající třídění a budování indexů na serveru (v KB). Podle velikosti RAM zvolte až 4096 KB.


Odstraňte zatržení čtverce, pokud chcete, aby druhý a každý další síťový klient spuštěný z téže IP adresy se MUSEL přihlašovat (logovat) jménem a heslem (a ne aby se automaticky přebíralo jméno prvního klienta). Nutné je to v případě, když přistupujete k síťovému serveru přes firewall - pak i různí klienti jsou pro server identifikováni IP adresou firewallu, nikoliv svou a tudíž druhý klient přistupující přes firewall se přihlásí jako dříve přihlášený klient první.


DIALOG PARAMETRY IP


IP adresa serveru: v tečkové notaci (např. 192.168.0.57) nebo jméno hostitele serveru (např. PUBINFO.TRADEX.CZ) překládané DNS serverem nebo uvedené v souboru HOST. V případě registrace síťového serveru se uvádí vždy, v případě registrace lokální databáze uveďte tehdy, pokud na tomto počítači bude spuštěno více serverů (s různými lokálními databázemi), současně zadejte různá čísla portů pro každý server.


Jméno telefonického připojení sítě sloužícího k dovolání se na server nebo jméno připojení na Internet, je-li server v něm. Vyberte ‘- bez telefonního spojení -’, pokud nepotřebujete telefon k připojení na server.


IP adresa tzv. SOCKS Firewall. Použije se tehdy, je-li mezi klientem a serverem instalována tento ochranný prvek. Má-li se klient na server za firewallem přihlásit, musí se uvést na příkazové řádce klienta jméno serveru - jinak se server nenalezne.


Tento čtverec zatrhněte tehdy, má-li se spojení mezi klientem a serverem navazovat přes SOCKS Firewall nacházející se mezi nimi. Není-li zatržen, nebude se IP adresa firewallu při přihlašování brát do úvahy.


V případě, že na jednom počítači budou spuštěny dva a více databázových serverů, je nutné je rozlišit (IP adresu mají společnou). Zadejte proto pro každý server odlišné číslo portu (dvě různá čísla portů se musí lišit alespoň o 4). Implicitní číslo portu je 5001, při explicitním přidělování čísel portů doporučujeme používat čísla vyšší (např. 5011, 5021 atd.).

Servery budou přístupné po protokolu TCP/IP z těch klientů, u nichž budou registrovány se správnou IP adresou a s uvedeným číslem portu.

Ze zde zadaného čísla portu se odvodí defaultní číslo portu použitého pro replikaci pomocí Direct IP (je o 2 větší).


ZÁLOŽKA LICENCE


Zadejte číslo Intranetové licence, které umožní zvýšit počet klientů, kteří se smějí současně připojit na server ze sítě.


Zadejte číslo Internetové licence, které umožní přístup do databáze z Internetu pomocí WinBase Internet Klientů (WBIK).


Zadejte registrační číslo serveru, které odstraní vypisování Neregistrováno v okně serveru. Je-li pole šedivé, je server již zaregistrován..


Tlačítkem zaznamenáte příslušnou licenci a provedete rozšíření serveru (od příštího spuštění).


Tlačítkem spustíte WWW browser na stránce elektronického obchodu firmy Software602 a.s., kde si je možno zakoupit příslušnou licenci.


Tlačítkem spustíte WWW browser na stránce bezplatné registrace produktů firmy Software602 a.s. Po vyplnění formuláře Vám bude poštou zasláno registrační číslo, které vyplníte do pole vlevo.


ZÁLOŽKA WWW objekty (dříve FastCGI)


Zadejte číslo portu, na kterém má být spuštěn WinBase602 FastCGI klient. Pole je aktivní pouze na Windows NT.


Umožní Vám změnit adresář, do kterého Internet klient vytváří protokol o své práci (logfile).


Pokud je zatržen, pak Internet klient při každém spuštění smaže obsah dnešního logfilu, logfiles z předchozích dní nebudou změněny.


Vyberte úroveň podrobnosti logfilu generovaného WinBase602 Internet klientem:

•	NONE - logfile nebude vytvářen

•	NORMAL - budou se zaznamenávat pouze chybová hlášení

•	DEBUG - bude se uchovávat podrobný protokol o práci Internet klienta.


Zadejte adresář, do kterého bude vytvářen protokol o práci WinBase602 Internet klienta. Tento adresář musí existovat.


Zadejte alias adresáře s CGI skripty. Tento alias je částí URL,

http://www.server.cz/alias/wbcgi.exe/databáze/aplikace/šablona.htw.


DIALOG ZÁLOHOVÁNÍ


Zde můžete zapsat (nebo vybrat tlačítkem vpravo) adresář, v němž bude vytvářen záložní databázový soubor. Není-li adresář zadán, soubor se nevytváří. Pamatujte na dostatečný prostor na disku!


Tlačítko otevře dialog pro výběr adresáře pro umístění záložních databázových souborů. Databázový soubor se zálohuje nezkomprimovaný.


Zadejte interval (v hodinách) zálohování. Záloha bude vytvořena za zadaný čas od spuštění serveru.


Zadejte interval (v minutách) zálohování. Záloha bude vytvořena za zadaný čas od spuštění serveru.


Zadejte počet kopií, které se mají ve zvoleném adresáři uchovávat. Starší kopie budou automaticky mazány.


Zatržení této volby znamená, že se záloha automaticky neprovádí.


Zatržení této volby znamená, že se záloha provede každých N hodin a minut podle nastavení vpravo.


Zatržení této volby znamená, že se záloha provede v době nastavené pomocí složek vpravo.


Zadejte, v kterou hodinu se má záloha provést (24 hodinový zápis).


Zadejte, v kterou minutu se má záloha provést.


Zadejte, má-li se záloha provést každý den ve stanovenou dobu nebo (případně a také) v některý den v týdnu (vyberte konkrétní den). Až čtyři vybrané údaje platí současně.


Tlačítkem provedete obnovení databázového souboru (databáze) z automatické zálohy vytvořené pomocí tohoto dialogu. Po stisku tlačítka se nabídne seznam existujících záloh s datem vytvoření, po vybrání jedné se databáze obnoví. Současný stav databáze je nahrazen, nezachová se.

Server musí být v době obnovy vypnut!


DIALOG CACHE


Umožní zapnout klientskou cache databázových objektů ze všech aplikací označeného serveru. Objekty budou ukládány ve zvoleném adresáři do jediného souboru s příponou CCH. Není-li adresář vybrán, použije se TEMP adresář Windows.

Význam klientské cache spočívá v tom, že definice objektů se čtou ze serveru pouze jednou, poté se čtou ze souboru uloženého na lokálním disku klienta. Používejte proto tuto cache v případě pomalého napojení na server, naopak v případě lokálního (nebo velmi rychlého) připojení se může provoz i zpomalit.

Používejte pro odladěné aplikace, u nichž se nepředpokládá častá změna definic objektů.


Zadejte adresář, kam se budou ukládat (do jediného souboru) definice objektů přenesené ze serveru. Zvolte rychlý lokální disk.


Tlačítko otevře dialog pro výběr adresáře pro umístění souboru s definicemi objektů. Zvolte rychlý lokální disk.


DIALOG REGISTRACE EXIST. LOKÁLNÍ DATABAZE


Zapište jméno databáze (dosud neregistrované), ke které chcete přistupovat.


Zadejte (nebo vyberte pomocí tlačítka vpravo) adresář, v němž se nachází databázový soubor WB5.FIL patřící zvolené databázi.


Tlačítko otevře dialog pro výběr adresáře s databázovým souborem WB5.FIL


DIALOG NAJIT EXIST.  INSTALACI


Zadejte (nebo vyberte pomocí tlačítka vpravo) adresář, v němž je instalována WinBase602 - většinou lokální adresář.


Tlačítko otevře dialog pro výběr adresáře, do něhož byla instalována WinBase602.


Zatrhněte, pokud chcete, aby se ke zvolené instalaci WinBase602 vytvořily ikony zástupců, obdobně jako při instalaci programem SETUP.EXE.


Z nabídky vyberte složku, v níž se mají ikony zástupců vytvořit. Má-li se vytvořit nová složka, zapište její jméno do editačního pole.


ZÁLOŽKA POŠTA


Z nabídky vyberte jeden z definovaných WinBase602 poštovních profilů (sady parametrů nutných k inicializaci pošty).


Z nabídky vyberte typ pošty - v combu se nabízí pouze ty typy, které jsou instalovány ve Windows:

•	Mail602 - instalovaná pošta Mail602

•	MAPI - instalovaná pošta, která podporuje rozhraní MAPI (např. MSExchange, Outlook)

•	SMTP/POP3 - instalovaná podpora pro TCP/IP komunikaci.

Podle vybraného typu pošty se níže nabídne množina parametrů potřebných k inicializaci.


Pomocí tlačítka můžete vytvořit nový profil; je nutné zadat nové, unikátní jméno, pomocí něhož se na něj budete odkazovat v inicializační funkci pošty.


Pomocí tlačítka můžete odstranit právě vybraný profil a všechny informace o něm. Tento profil již nebude možné používat.


Zadejte jméno nebo IP adresu SMTP serveru (např. winbase.software602.cz); nutné pouze pro odesílání pošty


Zadejte poštovní adresu, která bude v zásilkách odeslaných přes SMTP server uvedena jako adresa odesílatele (např. user_x@ winbase.software602.cz)


Zadejte jméno nebo IP adresu POP3 serveru - často bývá shodné se jménem SMTP serveru (např. winbase.software602.cz); nutné,pouze při přijímání pošty


Zadejte jméno uživatele poštovní schránky na POP3 serveru (např. user_x)


Zadejte heslo uživatele poštovní schránky na POP3 serveru; heslo bude uloženo v nečitelné podobě.


V případě, že se k Internetu připojujete vytáčenou linkou, vyberte z nabídky dříve ve Windows definované telefonní spojení. Není-li vybráno (volba -bez telefonního spojení-), předpokládá se, že v době inicializace pošty je spojení již navázáno nebo jste připojeni v rámci sítě LAN.


Zadejte jméno, které používáte k navázání dial-up napojení na Internet


Zadejte heslo, které používáte k navázání dial-up napojení na Internet


Zadejte seznam složek (adresářů), ze kterých lze odeslat soubor, oddělených středníkem. Pokud se aplikace pokusí odeslat soubor z jiné složky, než je v seznamu, bude požadavek odmítnut. Jestliže parametr není specifikován, nebo obsahuje-li prázdný řetězec, bude  možné odeslat libovolný soubor.

(např. C:\kodeslani;D:\data)


Zadejte jméno profilu vytvořeného pro poštovní systém Mail602. Tento profil již obsahuje všechny údaje potřebné k navázání spojení.


Zadejte jméno nebo ID uživatele, je nutné v případě LAN klienta; v případě NET klienta pouze tehdy, pokud má aplikace přistupovat ke schránce jiného uživatele, než který je přihlášen k poštovnímu serveru.


Zadejte heslo uživatele. Heslo bude uloženo v nečitelné podobě.


Zadejte jméno MAPI profilu, vytvořeného prostředky Windows. Tento profil již obsahuje všechny údaje potřebné k navázání spojení.


Zadejte přístupové heslo k MAPI profilu. Heslo bude uloženo v nečitelné podobě.


Ovládání návrháře standardních formulářů

Při návrhu tabulkového (standardního) formuláře se upravují pouze dvě oblasti, které jsou v návrháři naznačeny záhlavím a jedním řádkem. Sloupce návrhu přesně odpovídají sloupcům v navrženém pohledu, a to jak pořadím, tak i šířkou.

Prostředí pro návrh tabulkových formulářů umožňuje pomocí menu provádět tyto akce:

Návrh

Uložit - uloží návrh do databáze. Pokud pohled není dosud pojmenován, požádá Vás o zadání jména objektu.

Uložit jako - uloží návrh pod jiným jménem.

Přechod do návrhu ...- umožní přechod do návrháře buď použitého subpohledu nebo do návrháře zdroje dat (tabulky nebo dotazu). Po skončení práce v novém návrháři přejdete zpět do stavu, ve kterém jste návrh opouštěli.

Návrat do návrhu - pokud jste v prostředí návrháře pohledů díky přechodu z jiného návrhu, můžete se tímto příkazem vrátit zpět. Pokud návrh ukončíte, dostanete se zpět také.

Uložit jako sestavu - pohled získá příznak sestavy, platí pro něj od této chvíle omezení pro sestavy.

Test návrhu - otevře na obrazovce pohled popsaný právě editovaným návrhem. Tím získáte možnost ověřit si, jaký je výsledek návrhu, aniž byste opustili prostředí pro návrh pohledů. Pokud je v návrhu chyba, budete o ní informováni a otevře se okno, které obsahuje chybný parametr. Chyba může být způsobena také tím, že není otevřen správný projekt.

Testovací tisk - vytiskne právě vytvářený objekt, v případě formuláře jen malý význam.

Návrh lišty - otevírá zvláštní návrhář pro tvorbu uživatelské lišty (toolbaru), která se objeví na místě standardní lišty pohledu vždy při otevření tohoto formuláře - viz Návrh lišty

Konec návrhu - ukončí návrh pohledu a opustíte prostředí pro navrhování pohledů. Pokud návrh nebyl dosud uložen nebo byl od posledního uložení změněn, budete na to upozorněni a dostanete možnost návrh uložit.

Editace - manipulace se složkami pohledu

Vystřihnout, Zkopírovat, Vlepit - operace se schránkou; do schránky lze přenést jednu složku; provedením příkazu Vlepit se změní kurzor myši na tvar nové složky a kliknutím na volné místo se vloží složka.

Odstranit složku - odebrání označené složky z návrhu.

Nevkládat - po vybrání nové složky z Nabídkového panelu nebo provedení příkazu Vlepit můžete odvolat stav, že kliknutí myši vloží složku.

Vložit sloupec - vloží do návrhu další sloupec (prázdný); sloupec se objeví na poslední pozici nebo před označeným sloupcem.

Zobrazení - vypínání a zapínání okna Nabídkového panelu a okna Seznamu vlastností

Složka - vložení nové složky - viz Složky ve standardním pohledu, vkládat složky je možné i z Nabídkového panelu

Popup menu vyvolané pravým tlačítkem myši na označeném objektu)

Pokud kliknete na složce, pak se objeví menu obsahující tyto položky:

•	Zkopírovat, Vystřihnout - práce se schránkou, příkaz Vlepit je nutné použít z lišty nebo z menu;

•	Odstranit složku - označená složka bude odstraněna;

•	Font, Barva textu, Barva pozadí - otevřou se dialogová okna umožňující nastavení zvolených vlastností složky.

Ovládací lišta návrháře tabulkových formulářů obsahuje tato tlačítka:

Význam tlačítek:

- vystřihnout složku do schránky

- zkopírovat složku do schránky

- vlepit složku ze schránky

- uložit definici pohledu

- ukončit návrh

- otevřít reálný pohled podle návrhu

- vytisknout navrhovaný formulář

- vložit nový sloupec před označený sloupec

Viz také:	Vytváření pohledů
	Návrh formulářů


Změny polohy a rozměrů složky při návrhu standardního pohledu

Manipulovat můžete vždy jen s vybranou složkou pohledu. Složka se stane vybranou tak, že na ní stisknete levé tlačítko myši. Vybraná složka má kolem sebe rám. Dříve, než se složkou provedete jakoukoli akci, musíte ji napřed vybrat (myší nebo pomocí šipek a TAB).

Jediná možná úprava rozměrů tabulkového pohledu je změna šířky sloupce. Kliknutím na záhlaví sloupce (nebo kombinací Ctrl+mezerník) celý sloupec označíte. Stiskem myši u levého okraje záhlaví se změní kurzor na dvojitou šipku a bez uvolnění tlačítka myši je možno sloupec rozšiřovat. Stejný význam mají i klávesy Ctrl+Shift+šipky.

Chcete-li změnit pořadí sloupců, označte sloupec, který chcete přesunout, a stiskněte tlačítko myši na jeho záhlaví. Kurzor se změní a bez uvolnění myši je možno sloupec umístit na jiné místo.  Stejný význam mají i klávesy Ctrl+šipky.

Přidat sloupec se provede následujícím způsobem: označte celý sloupec a stiskněte klávesu Insert nebo použijte odpovídající akci z menu nebo tlačítkem [image] z lišty .

Pro přemístění složky mezi oblastmi nebo pro vytvoření kopie složky použijte příkazy pro práci se schránkou v menu Editace.

Viz také:	Návrh formulářů


Oblasti standardního formuláře

Při návrhu standardního pohledu vidíte na obrazovce okno, které odpovídá vzhledem a velikostí otevření tabulky s jedním záznamem z řídicího panelu. Návrh formuláře bude probíhat právě v tomto prostředí, oblast hlavy okna formuláře je tvořena skutečným záhlavím a datová oblast je tvořena jedním řádkem. Jiné oblasti není možné do návrhu tabulkového formuláře přidat.

Jednotlivé výskyty datové oblasti budou pod hlavou stránky seřazené pod sebou.

Viz také:	Vytváření pohledů
	Návrh formulářů


Ovládání návrháře standardních sestav

Prostředí pro návrh standardních sestav umožňuje pomocí menu provádět tyto akce:

Návrh

Uložit - uloží návrh do databáze. Pokud pohled není dosud pojmenován, požádá Vás o zadání jména objektu.

Uložit jako - uloží návrh pod jiným jménem.

Přechod do návrhu ...- umožní přechod do návrháře buď použitého subpohledu nebo do návrháře zdroje dat (tabulky nebo dotazu). Po skončení práce v novém návrháři přejdete zpět do stavu, ve kterém jste návrh opouštěli.

Návrat do návrhu - pokud jste v prostředí návrháře pohledů díky přechodu z jiného návrhu, můžete se tímto příkazem vrátit zpět. Pokud návrh ukončíte, dostanete se zpět také.

Uložit jako sestavu - pohled získá příznak sestavy, platí pro něj od této chvíle omezení pro sestavy.

Testovací tisk - vytiskne právě vytvářený objekt, v případě formuláře jen malý význam.

Přidat agregáty - automatické přidání jedné agregační (souhrnné) funkce do některé oblasti; týká se všech sloupců v pohledu - Agregáty

Konec návrhu - ukončí návrh pohledu a opustíte prostředí pro navrhování pohledů. Pokud návrh nebyl dosud uložen nebo byl od posledního uložení změněn, budete na to upozorněni a dostanete možnost návrh uložit.

Editace - manipulace se složkami pohledu

Vystřihnout, Zkopírovat, Vlepit - operace se schránkou; do schránky lze přenést jednu složku; provedením příkazu Vlepit se změní kurzor myši na tvar nové složky a kliknutím na volné místo se vloží složka.

Odstranit složku - odebrání označené složky z návrhu.

Nevkládat - po vybrání nové složky z Nabídkového panelu nebo provedení příkazu Vlepit můžete odvolat stav, že kliknutí myši vloží složku.

Vložit sloupec - vloží do návrhu další sloupec (prázdný); sloupec se objeví na poslední pozici nebo před označeným sloupcem.

Zobrazení - vypínání a zapínání okna Nabídkového panelu a okna Seznamu vlastností;

Složka - vložení nové složky - viz Složky ve standardním pohledu, vkládat složky je možné i z Nabídkového panelu

Popup menu vyvolané pravým tlačítkem myši na označeném objektu)

Pokud kliknete na složce, pak se objeví menu obsahující tyto položky:

•	Zkopírovat, Vystřihnout - práce se schránkou, příkaz Vlepit je nutné použít z lišty nebo z menu;

•	Odstranit složku - označená složka bude odstraněna;

•	Font, Barva textu, Barva pozadí - otevřou se dialogová okna umožňující nastavení zvolených vlastností složky.

Ovládací lišta návrháře tabulkových sestav obsahuje tato tlačítka:

Význam tlačítek:

- vystřihnout složku do schránky

- zkopírovat složku do schránky

- vlepit složku ze schránky

- uložit definici pohledu

- ukončit návrh

- vytisknout navrhovaný formulář

- vložit nový sloupec před označený sloupec

Viz také:	Vytváření pohledů
	Návrh sestav


Oblasti standardní sestavy

Při návrhu standardní sestavy vidíte na obrazovce okno, které má 15 řádek odpovídajících jednotlivým oblastem. Oblasti jsou rozlišeny v záhlaví řádek takto:

R = hlava sestavy - objeví se pouze jednou na začátku sestavy

r = pata sestavy - objeví se pouze jednou na konci sestavy

A až E = hlava skupiny a až e - objeví se vždy na začátku příslušné skupiny záznamů

e až a = pata skupiny e až a - objeví se vždy na konci příslušné skupiny záznamů

S = hlava stránky - objevuje se v horní části každé vytištěné stránky

s = pata stránky - objevuje se ve spodní části každé vytištěné stránky.

Viz také:	Vytváření pohledů
	Návrh sestav


Výběr složek z Nabídkového panelu (standardní zobrazení)

U pravého okraje Nabídkového panelu je sloupec tlačítek, které symbolizují jednotlivé druhy složek. V následující tabulce jsou ukázány všechny složky, které je možné používat v tabulkových formulářích a poznámka, je-li možné je použít i v sestavách. Podrobnosti o složkách získáte, pokud kliknete na obrázek  v prvním sloupci.

		Sestava
	Hodnotová složka	ANO
	Nápis	ANO
	Editační pole jednořádkové	ANO (x)
	Tlačítko	NE
	Combo překládané	ANO
	Combo editační	ANO (x)
	Označovací čtverec	ANO
	Obrázek	ANO
	Text	ANO

Složky označené Ano (x) sice lze do sestavy vložit, ale není k tomu rozumný důvod.

Viz také:	Okno Nabídkový panel
	Okno Seznam vlastností