Mapa dokumentace k 602SQL

Dokumentace k 602SQL je rozdělena do těchto částí:

Provozní dokumentace k 602SQL serveru

602SQL server obsahuje informace potřebné k uvedení serveru do provozu, k nastavení všech parametrů, kterými lze jeho provoz ovlivnit, k zabezpečení spolehlivosti provozu a k další práci administrátora serveru.

Popis jazyka SQL

Popis verze jazyka SQL implementované ve 602SQL využijí vývojáři databázových aplikací.

Pro uživatele, kteří nejsou příliš zběhlí v používání jazyka SQL, slouží tato edukativní sbírka příkladů dotazů.

Vývojové prostředí 602SQL

Vývojové prostředí je soubor nástrojů pracujících pod Windows a sloužících k vývoji databázových aplikací. Podporují vývoj datové části aplikace (tabulky, triggery, ...), programové části (programy prováděné na straně klienta i na SQL serveru) i prezentační části (formuláře, sestavy, ...).

Encyklopedie funkcí

Encyklopedie funkcí obsahuje seznam všech procedur a funkcí, které jsou vývojářům k dispozici pro programování v jazycích SQL, C/C++, Pascal/Delphi a ve vnitřním programovacím jazyce 602SQL.

Nástroje pro vytváření dynamických WWW stránek

Pro vytváření internetových aplikací nad obsahem databáze slouží sada nástrojů, které dovolují definovat dynamické webové stránky a jejich napojení na databázi. Stejnému účelu slouží PHP modul.

Speciální nástroje pro vývoj aplikací a drivery rozhraní

Zde patří nástroje pro vytváření aplikací v jazycích C/C++ nebo Pascal/Delphi a rozhraní ODBC, dbExpress, PHP a ODMA.

Dále jsou k dispozici nástroje pro digitální podepisování dat nebo pro využití elektronické pošty na straně klienta i serveru.

Přehled novinek

Přehledy novinek dovolují snadno zjistit, co nového se objevilo v aktuální a v minulých verzích 602SQL.

Seznam subsekcí:

  • Aktuální novinky, informace, FAQ
  • Novinky ve verzi 8.0
  • Novinky minulých verzí


602SQL-Úplná dokumentace

Seznam novinek v rámci verze

Na toto místo jsou doplňovány odkazy na stránky nově přidané do dokumentace. Jedná se buď o novinky, které se objevily v rámci platné verze, nebo o vysvětlující texty vztahující se k otázkám kladeným uživateli (knowledge base, FAQ).

  • Pokud provedení SQL příkazu pomocí funkce SQL_host_execute neb SQL_exec_prepared vrací hodnotu typu BLOB nebo CLOB do proměnné klienta (host variable), lze nechat dynamicky alokovat buffer pro tuto hodnotu. Viz.
  • Na řídicí konzoli doplněno kopírování vybraných řádek ze zobrazeného logu serveru do schránky.
  • Pro Linux umožněno definování nového hnízda serverů sdílejících licence bez použítí grafické řídicí konzole.
  • Doplněn systémový informační dotaz _IV_IP_ADDRESSES vracející seznam IP adres SQL serveru.
  • Funkce Get_property_value a Set_property_value lze volat i z jazyka SQL.
  • Do příkazu CREATE USER doplněna možnost zadat heslo.


Hlavní novinky ve verzi 8.0

Níže uvedené novinky platily v okamžiku uvedení verze 8.0 do prodeje. Informace, změny a doplňky objevující se během života verze 8.0 jsou zde.

Při přechodu ze starší verze věnujte pozornost otázkám kompatibility databáze a programů.

Změny týkající se klienta i serveru

Pro centralizované řízení a konfigurování 602SQL byla vytvořena nová řídicí konzole. Dá se spustit z klienta, ze serveru nebo samostatně.

Klient může ověřit identitu SQL serveru, na nějž se připojuje, a síťovou komunikaci lze zašifrovat.

Maximální délka řetězců (znakových i binárních) je zvýšena na 4090 bajtů.

Způsob uložení a porovnávání znakových řetězců je zachycen odlišným způsobem. V důsledku toho server může pracovat se znakovými řetězci v různých znakových sadách včetně UNICODE a může je třídit podle různých národních pravidel.

Digitální podpisy obsahu databáze začaly využívat certifikáty kompatibilní s X.509, zároveň však zůstává plně zachována použitelnost dosavadních klíčů a platnost podpisů.

Objekty uložené v databázi jsou identifikovány čtyřbajtovým číslem. Proto mizí dosavadní omezení na počet databázových tabulek nebo jiných objektů aplikace, které se daly umístit do jedné databáze.

Na platformě Windows lze převzít jména uživatelů z domény a poté umožnit automatické přihlášení se do 602SQL na základě dřívějšího přihlášení do domény.

Na jednom počítači lze současně provozovat více SQL serverů. Pod Windows může přitom více než jeden z nich běžet jako služba.

Doplňující informace o typu sloupce jsou popsány strukturou t_specif.

Skupina správců databáze se rozpadla na tři správcovské skupiny různého určení. Při importu uživatelů a skupin ze starších verzí se automaticky upraví zařazení do administrativních skupin. Ze standardní role Administrator se vydělila nová role Author.

Pro vybrané procedury a dotazy uložené v databázi může být nastaven administrátorský režim posilující práva při jejich provádění.

Provozní správce může dynamicky zakazovat nebo povolovat využití jednotlivých uživatelských účtů.

Konfigurování serveru bylo unifikováno a děje se pomocí nastavování hodnot jeho vlastností. Ke všem vlastnostem je možný přístup přes programové rozhraní (funkce Get_property_value a Set_property_value).

Doba čekání klienta nebo uložené procedury na uvolnění zdrojů se dá dynamicky nastavovat.

Jazyk SQL a serverová část databázových aplikací

Ve schématu lze deklarovat globální proměnné, výjimky a handlery dostupné ze všech objektů. Globální proměnné se hodí pro uchování soukromých hodnot klienta mezi samostatně prováděnými SQL příkazy a procedurami. Globální handlery slouží ke společnému ošetření chybových a výjimečných situací v celém schématu.

Při návrhu tabulky lze pro každý index stanovit, zda se do něj mají zahrnout také řádky, na nichž je hodnota klíče rovna NULL. Pro jednotlivá pravidla integrity dat uvedená v definici tabulky (vnitřní i referenční) lze určit, zda se kontrola má provádět na konci příkazu nebo až na konci transakce. Bylo zabráněno využití indexů setříděných podle národních pravidel pro vyhodnocování podmínek na prefix a bylo umožněno vytváření speciálních indexů vhodných pro optimalizaci podmínek na prefix. Déle byla zpřísněna pravidla pro použití indexů neobsahujících hodnoty NULL.

Autor aplikace může volit pravidla, podle nichž se budou spouštět UPDATE triggery, v jejichž definici je uveden seznam sloupců.

Byly vytvořeny nové systémové informační dotazy a do stávajících dotazů byly doplněny nové sloupce. Přibyly také nové systémové proměnné.

Počet částí indexu již není omezen. Lze tedy vytvářet indexy obsahující libovolný počet sloupců nebo výrazů nad sloupci tabulky.

Rozsah hodnot generovaných pomocí sekvencí se zvětšil na 64-bitové celé číslo. V důsledku toho lze mimo jiné fulltextově indexované dokumenty označovat 64-bitovými identifikátory.

Pomocí příznaků kompatibility lze zvolit, zda se uvozovky používají pro vymezení stringových literálů nebo identifikátorů. Apostrofy vymezují vždy string a obrácené apostrofy identifikátor.

Nepojmenovaným omezením v návrhu tabulky (indexům, vnitřním a vnějším integritním omezením) server přidělí automaticky vytvořená jména. Díky tomu se na všechna omezení lze odvolávat v příkazech DROP nebo ALTER.

Byly doplněny implicitní konverze mezi typem Boolean a celočíselnými typy a explicitní konverze mezi typem Boolean a znakovými řetězci.

Predikáty IS [NOT] NULL, IS [NOT] TRUE, IS [NOT] FALSE a IS [NOT] UNKNOWN se nyní mohou vyhodnocovat rychleji díky využití indexů.

Stav přidělení práv k datům lze v SQL zjišťovat pomocí nových predikátů. Vztah náležení mezi subjekty práv nastavuje funkce Set_membership a zjišťuje funkce Get_membership.

V handlerech chyb lze využívat nové diagnostické nástroje.

Funkce SQL_execute použitá v SQL může pracovat s lokálními proměnnými.

Zápisů do různých logu umožňuje uloženým procedurám funkce _sqp_log_write.

V dokumentaci byla nově zpracována část týkající se zajištění bezpečnosti provozu databáze.

Formuláře a uživatelské rozhraní aplikace

Bylo podstatně zdokonaleno hromadné ukládání změn ve formuláři. Pokud se změny provedené uživatelem ve formuláři ukládaly po záznamech, pak do verze 7 formulář zaslal serveru sérii požadavků na změnu jednotlivých složek, od verze 8 posílá pouze jeden požadavek. To má vliv také na volání INSERT a UPDATE triggerů.

Byl modernizován vzhled toolbarů.

Vývojové prostředí 602SQL

Interaktivní návrhář tabulek je zcela nový.

Pro rychlou kontrolu syntaxe všech objektů v aplikaci byl vytvořen nástroj, který zkompiluje všechny komponenty a vytvoří zprávu o výsledcích.

Informace o optimalizaci dotazu jsou lépe strukturovány a byly doplněny o profil vyhodnocování, v němž lze najít časově kritická místa.

Konzole pro testovací volání SQL procedur a funkcí byla zdokonalena. Dá se používat také přímo z textového editoru.

Panel s nabídkou jmen sloupců v prostředí textového editoru umožňuje vybrat skupinu sloupců, zkopírovat je do schránky a z ní do textu.

V návrhu tabulky lze jednotlivé sloupce opatřit komentářem.

Pro instalování 602SQL v rámci instalace jiného produktu lze využít Instalační objekt 602SQL začlenitelný do projektu v InstallShieldu 6.

Pro export aplikace je k dispozici nová funkce Export_appl_param. Při exportu se nastaví datum poslední změny každého souboru podle data změny objektu v aplikaci. Export a import aplikace zachovává nastavení příznaků určujících utajení objektu a export dat z tabulek.

Nástroje pro distribuci aplikací v zamčeném stavu byly dále propracovány.

Pro ošetření situace, kdy klient střídavě pracuje s obsahem tabulek a mění jejich strukturu, byla zavedena nová funkce Invalidate_cached_table_info.

Klientské rozhraní doplnily nové nebo rozšířené funkce Get_server_info , assign_to_thread, unassign, Insert_record_ex, Write_record_ex, Backup_database_file, Break_user, connect, disconnect, Enum_attributes_ex, Repl_apl_shared, Get_sql_option, Am_I_config_admin.

Možnosti logování byly rozšířeny o záznam volání procedury uložené na serveru, spuštění triggeru nebo provedení implicitní operace RollBack v důsledku chyby. Dále lze zachytit v logu případy, kdy server na pozadí pracuje se syntakticky chybným objektem. Formát logu může nově obsahovat také jméno otevřeného schématu a unikátní číslo session.

Přibyly nástroje pro zjišťování detailů poslední chyby.

Při editaci více objektů v okně se záložkami byla pro zavírání jednotlivých záložek doplněna zkratka Ctrl+Shift+F4 a příkaz kontextového menu. Do hlavního menu byl přidán příkaz pro zavření všech záložek.

Ostatní

Funkce Fulltext_context dovoluje nalézt kontext fráze v dokumentu. Fulltextový systém indexuje také slova začínající číslicí.

Funkce cd_SQL_host_prepare umožňuje oddělit přípravu a zpracování SQL příkazů obsahujících odkazy na proměnné klienta.

Nové verze Internet Klientů vykazují značné zrychlení při připojování k SQL serveru. Existuje nový typ Internet Klienta pro webserver Apache (mod_602sql8.dll).

Seznam subsekcí:

  • Kompatibilita verze 8.0 s předchozími verzemi
  • Programátorské změny při přechodu na verzi 8.0


Zpětná kompatibilita verze 8.0

Databázový soubor

Databázový soubor verze 8.0 není kompatibilní v žádném směru s databázovými soubory ze starších verzí. Při přechodu na verzi 8 je nutno obsah starší databáze exportovat a poté importovat do nové databáze.

V dějinách 602SQL je to teprve druhá podobně zásadní změna. Byla vynucena změnami řady vnitřních struktur, jejichž cílem je efektivnější práce serveru.

Jména programů a knihoven

V nové verzi 602SQL serveru jsou změněna jména souborů - viz popis instalace verze 8.0.

Přístup klienta na server

Protokol síťové komunikace byl ve verzi 8.0 změněn, aby z něj byla odstraněna omezení plynoucí z 16-bitové prehistorie 602SQL.

V důsledku toho klienti verze 8.0 se nemohou připojit na servery ze starších verzí. Starší klienti se nemohou připojit na server verze 8.0.

Přenos aplikací a dat ze starších verzí

Datové soubory sloužící pro vnitřní přenos dat pocházející se všech starších verzí 602SQL se dají bez omezení importovat do verze 8.0.

Aplikace vyvinuté pro starší verze se dají importovat do verze 8.0. V závislosti na tom, kterých rysů a nástrojů 602SQL využívají, mohou fungovat zcela beze změn nebo může být potřebné v nich provést drobné úpravy. Popis míst, která je vhodné v aplikaci zkontrolovat a případně upravit, je zde.

Aplikace vytvořené v externích programovacích jazycích je nutno překompilovat.

Aplikace využívající univerzální rozhraní jako ODBC, ActiveX nebo ODMA budou fungovat beze změny.

Nastavení serveru pro práci na nestandardním čísle portu

Číslo portu, na němž bude server nabízet klientům své služby, je uloženo mezi vlastnostmi serveru. Je třeba jej proto nastavit pomocí Řídicí konzole na stránce Parametry / Přístup po síti. Informace pro klienta, na kterém čísle portu má hledat server, je uložena na záložce Klientský přístup. Pouze při nastavení stejných čísel na obou stranách se klient bude schopen připojit na server.


Programátorské změny při přechodu na verzi 8.0

Na této stránce jsou uvedeny případy, kdy změny ve verzi 8.0 mohou vyžadovat zásah do aplikací vyvinutých pro starší verze. Značkou EXT jsou označena témata týkající se pouze programování ve vnějších jazycích (C/C++, Pascal/Delphi/Kylix).

Číslo objektu, kurzoru a tabulky

Typy tobjnum (číslo objektu), ttablenum (číslo tabulky) a tcursnum (číslo otevřeného kurzoru) jsou ve verzi 8.0 čtyřbajtové, zatímco v dřívějších verzích byly dvoubajtové. Parametry těchto typů se vyskytují v API funkcích jako Read, Find_object, Open_cursor_direct.

Pokud programátor používá v aplikaci výše uvedené typy, pak aplikace bude fungovat správně beze změn, po pouhém překompilování. Pokud však byly pro uložení těchto údajů použity proměnné jiných dvoubajtových typů - například Short, SmallInt a podobně - pak je nutno aplikaci upravit. Logicky korektní není přechod na čtyřbajtové celočíselné typy, nýbrž použití některého z typů ttablenum, tobjnum nebo tcursnum.

Číslo otevřeného kurzoru v binárním zápisu vypadá vždy takto:

1111 1111 1111 1111 10bb bbbb bbbb bbbb
kde b je 0 nebo 1. Pro jeho rozpoznání lze v jazyce C/C++ použít makro IS_CURSOR_NUM. Je-li číslo kurzoru interpretováno jako číslo se znaménkem, pak má stejný rozsah hodnot jako v předchozích verzích. Pro rozpoznání v klientském jazyce slouží postup uvedený u popisu funkce Get_fcursor.

Typy databázových sloupců a informace o sloupcích (EXT)

Typy CSString a CSIString zanikají, pro všechny znakové řetězce předem určené délky slouží typ String.

Funkce cd_Enum_attributes a cd_Attribute_info sice nadále existují, ale podrobnější informace o sloupcích poskytují funkce cd_Enum_attributes_ex a cd_Attribute_info_ex. Detailní doplňující údaje k typu sloupce poskytuje struktura t_specif.

Funkce bez parametru cdp (EXT)

Většina API funkcí 602SQL byla dosud k dispozici ve dvou verzích - s prvním parametrem cdp typu cdp_t a bez něj. Funkce bez parametru cdp jsou méně efektivní a omezeněji použitelné, proto je lepší dávat přednost funkcím s tímto parametrem.

Pokud programátor chce i nadále používat funkce bez parametru cdp, musí je v hlavičkových souborech pro C/C++ zpřístupnit definováním symbolu NON_CD_FUNCTIONS. Před řádku:

#include "wbkernel.h"

je v takovém případě třeba vložit řádku:
#define NON_CD_FUNCTIONS

Handlery chyb v SQL

Jazyk SQL umožňuje definovat handlery pro ošetření chybových situací. Ve starších verzí 602SQL se nekontrolovalo, zda chyba vůbec připouští ošetření handlerem, a bylo možno definovat handler i pro ty chyby, které z podstaty věci takto řešit nelze, například nedostatek místa na disku. Od verze 8.0 se při deklaraci handleru kontroluje přípustnost ošetření chyby.

Indexy k tabulkám

Ve verzích starších než 8.0 SQL server mohl nekorektním způsobem použít index pro optimalizaci dotazu. Dělo se tak ve dvou případech: v podmínce na prefix znakového řetězce tříděného podle národních pravidel a při hledání záznamů s indexovým klíčem NULL pomocí indexu neobsahujícího hodnoty NULL.

Tyto nekorektnosti jsou již odstraněny. Při převzetí aplikace z verze starší než 8.0 se může zpomalit vyhodnocení některých dotazů. V takovém případě je třeba doplnit indexy nebo upravit jejich definici. Detaily jsou na stránkách o použití prefixů a indexů bez hodnot NULL.

Aplikace a práva k objektům

Aplikace pro verzi 8.0 musí respektovat tyto odlišnosti:

  • Aplikaci lze zrušit pouze SQL příkazem DROP SCHEMA nebo z řídicího panelu;
  • Objekty lze vytvářet pouze voláním API funkce Insert_object nebo prováděním příslušných příkazů SQL, nikoli případným vkládáním záznamů do tabulky OBJTAB;
  • Uživatel obsazený do role Administrator nemá právo modifikovat a rušit komponenty aplikace, pokud toto právo není této roli explicitně přiděleno;
  • V zamčené aplikaci nikdo nemá právo vytvářet triggery ani volat API funkci Admin_mode;
  • Uživatel, který provede import aplikace, nezíská jiná práva (k datům a komponentám) než ta, která plynou z jeho obsazení do role Administrator případně vyplývající z použití funkce Admin_mode;
  • Využití funkce Am_I_db_admin se v aplikacích verze 8 pravděpodobně rozdělí na test, je-li uživatel členem skupiny CONFIG_ADMIN (a může nastavovat parametry SQL serveru) a na test, je-li obsazen do role Administrator resp. Author (a má tedy příslušná práva k aplikaci). Pro první test je k dispozici nová funkce Am_I_config_admin.

V aplikaci _sysext je do rolí Author a Administrator obsazena skupina provozních správců.

Systémové triggery (kromě _on_login_change) se provádějí s právy provozního správce.

Označení uložených procedur pro provádění v administrátorském režimu pomocí funkce Admin_mode je persistentní - zachovává se při vypnutí serveru nebo při exportu a importu aplikace. Proto na rozdíl od verze 7 není třeba volat funkci Admin_mode v proceduře _on_server_start, a ani to obvykle není možné, protože skupina provozních správců nebývá obsazena do rolí Author.

Struktura t_clivar

Přibyla nová položka ve struktuře t_clivar, která se používá k předávání hodnot proměnných z jazyka C/C++ nebo Pascal do SQL.

Ostatní

  • Byla změněna pravidla pro stanovení typu hodnoty funkce SUBSTRING tak, aby se rozšířila použitelnost této funkce v indexech.
  • Při práci s obsahem databáze přes formuláře se ve starších verzích při vložení nového záznamu napřed vložil prázdný záznam a pak se do něj zapsaly hodnoty. Hodnoty zadané ve formuláři se zapisovaly po jedné. V důsledku toho se INSERT trigger volal s hodnotami NULL a UPDATE triggery se volaly pro každou zapsanou hodnotu. Nyni se změny ve formuláři ukládají najednou, a proto se zavolá pouze jeden INSERT nebo UPDATE trigger. Pokud tedy byl do minulých verzí aplikací zaveden kód ošetřující méně logické volání triggerů, je třeba jej odstranit.
  • Při běžné práci s tabulkou (i po uvolnění zrušených záznamů v tabulce případně i po zkompatknění tabulky) může být na konci tabulky nevelký počet volných záznamů. Souvisí to s novým mechanismem přidělování diskového prostoru tabulce a na činnost serveru to nemá žádný vliv. Pokud aplikace zjišťovala počet záznamů v tabulce pomocí funkce Rec_cnt(tabulka), je možné, že ve verzi 8 funkce vrátí větší počet záznamů. Správný test téhož je počítat záznamy v kurzoru SELECT * FROM tabulka, který volné záznamy neobsahuje.


Přehled novinek

Novinky se ve 602SQL objevují převážně po jednotlivých verzích. V rámci aktuálně platné verze se mohou objevovat drobné doplňky a úpravy v jednotlivých vydáních.

Přechod aplikace ze starší na novější verzi 602SQL může vyžadovat drobné úpravy. Proto pro každý přechod mezi verzemi uvádíme popis míry kompatibility.

Seznam subsekcí:

  • Verze 7.0
  • Kompatibilita verze 7.0 s předchozími verzemi
  • Verze 6.1
  • Kompatibilita verze 6.1 s předchozí verzí
  • Verze 6.0
  • Kompatibilita verze 6.0 s předchozí verzí
  • Verze 5.1
  • Kompatibilita verze 5.1 s předchozí verzí
  • Verze 5.0
  • Kompatibilita verze 5.0 s předchozími verzemi


Novinky verze 7.0

602SQL-Úplná dokumentace

Hlavní novinky ve verzi 7.0

602SQL verze 7.0 byla sestavena v říjnu 2000

Rozhraní pro fulltextové indexování a vyhledávání dokumentů - podrobnosti

Pro dokumenty v čistém textovém formátu nebo ve formátech WPD, RTF, HTML nebo DOC je SQL server schopen provést zaindexování dokumentu, tedy zařazení všech slov obsažených v dokumentu do svých indexů a poté vyhledávat dokumenty obsahující slova, fráze a jejich kombinace pomocí nástrojů plně zabudovaných do jazyka SQL.

Komfortní a úplné logování serveru - podrobnosti

Možnost vést řadu logů na SQL serveru, definovat jejich obsah i formát a získávat tak informace o událostech na serveru, např. o volaných SQL příkazech, o chybách včetně kontextu, lze sledovat manipulaci s vybranými tabulkami apod. Nastavování a řízení logů se provádí dvojicí nově zabudovaných SQL procedur _sqp_define_log a _sqp_trace. Pro získání posledních záznamů z logů přibyl nový systémový dotaz na serveru: _iv_recent_log.

Rozlišení platforem serveru - podrobnosti

V kódu klientského vnitřního jazyka i jazyka SQL lze rozlišit platformu SQL serveru a podle toho případně větvit program.

Systémové triggery - podrobnosti

Pomocí tzv. systémových triggerů lze definovat reakci na různé události na SQL serveru. K dispozici jsou tyto procedury: _on_server_start při startu serveru, _on_server_stop před ukončením serveru, _on_login_change při změně logovacího jména, _on_backup při automatické záloze databázového serveru.

Nové datové typy - podrobnosti

Praxe si vynutila nové datové typy (na serveru) - 8-bitový integer TINYINT a 64-bitový integer BIGINT (celá čísla v rozsahu 1 bajtu nebo 8 bajtů, dosavadní celočíselné typy měly 2 nebo 4 bajty). Současně také přibyly konverzní funkce Bigint2str, Str2bigint, tinyint se konvertuje pomocí stávající funkce Int2str.

Dynamicky sestavované SQL příkazy

Nově lze v rámci procedury uložené na SQL serveru na základě vstupních či jiných údajů sestavit jiný "dynamický" SQL příkaz a provést ho bez nutnosti tento příkaz ukládat jako novou proceduru. Podrobnosti u popisu funkce SQL_execute

Alternativní provozní režimy serveru

Byly zavedeny nové režimy SQL serveru (jsou volitelné, aby byla zachována zpětná kompatibilita). Při provádění kaskádních změn vyvolaných aktivní referenční integritou se budou provádět také triggery, při chybě se neukončí probíhající transakce, k jejímu ukončení dojde až po explicitním zavolání příkazu Commit nebo Roll_back aj.

Viz funkce Set_sql_option.

Rozhraní ODMA pro ukládání dokumentů v databázi - podrobnosti

Nové univerzální rozhraní pro ukládání a správu dokumentů jiných aplikací na databázovém serveru.

Rozhraní pro nastavování a ovládání replikací z aplikačního programu - podrobnosti

Soubor neinteraktivních funkcí a funkcí otevírajících nastavovací dialogová okna. Využití je pro aplikace napsané v externím jazyce nebo aplikacích provozovaných pouze s provozním systémem. Není tedy nutné nyní instalovat Personální databázi pro zprovoznění replikací.

Rozšířily se výpisy do logů při nenadálých stavech (replikační konflikty, duplicity), přibyl paket typu Odmítnutí replikace a Odmítnutí žádosti o replikaci - podrobnosti

Přibyla možnost místo dosavadního automatického systémového unikátního klíče pro replikace používat vlastní primární klíč replikované tabulky, jehož hodnoty má autor aplikace pod svou kontrolou.

Embedded variables v externích jazycích - podrobnosti

Rozhraní umožňující použití proměnných klienta v externím programovacím jazyce (C/C++, Pascal) v SQL příkazech prováděných na serveru, včetně dlouhých hodnot typu BLOB a CLOB, viz funkce SQL_host_execute

ODBC driver k 602SQL serveru pro Linux

Pro potřeby univerzálního přístupu k 602SQL Serveru byl vyvinut plnohodnotný ODBC driver pro platformu Linux.

Standardní formuláře

Při změně šířky sloupce myší se nezmění vybraný řádek, sloupec nebo buňka

Při přesunu sloupce se používá tvar kurzoru obvyklý pro Move

Při pohybu myši nad editovatelným polem se změní tvar kurzoru na I

Klik do editovatelného pole nevybere celou buňku a umožní rovnou selekt, dvojklik vybere slovo, trojklik celou buňku

Šířku sloupce v návrhu pohledu je možné nastavit i "ručně" v seznamu vlastností složky.

Formuláře

Nová vlastnost formuláře - volitelné zavírání formulářů pomocí klávesy Esc.

Nové vlastnosti složek - možnost zapnout automatickou změnu velikosti či polohy složky (např. subformuláře, textu, obrázku apod.) při změně velikosti okna formuláře.

Nová funkce IsViewChanged (a metoda) pro zjištění, byla-li ve formuláři provedena editační změna.

Export aplikace

Lze exportovat i zašifrovanou aplikaci (zašifrované objekty zůstanou zašifrované).

Lze exportovat aplikaci jen s objekty novějšími než určité datum.

Internet Klienti verze 7

602SQL verze 7 přináší mnoho novinek v technologii Internet Klientů - podrobnosti

Novinky verze 7.0b (únor 2001)

Nový přehled zámků

Přibyl nový systémový dotaz _IV_LOCKS, který zobrazuje aktuální zámky umístěné na záznamech tabulek. Obsah tohoto dotazuje možné vidět i na záložce Zámky v okně Monitoru.

Manipulace s právy z SQL

Byla rozšířena syntaxe příkazů GRANT a REVOKE pro manipulaci s právy až na úroveň záznamových práv, přibyly nové predikáty has_select_privil, has_update_privil apod. pro zjišťování práv - podrobnosti

SQL konzole

Z řídicího panelu je možné otevřít jednoduchou textovou konzoli, z níž lze přímo zadávat SQL příkazy a kontrolovat výsledek.

Obnovení řídicího panelu

Na řídicím panelu přibylo tlačítko, pomocí něhož lze obnovit informace o objektech v aktuální aplikaci (pokud jiní klienti nebo server sám manipulovali s objekty, spuštěný klient změny automaticky nevidí).


Kompatibilita verze 7.0

602SQL-Úplná dokumentace

Zpětná kompatibilita verze 7.0

Do 602SQL verze 7.0 byly pouze přidávány nové rysy, které by neměly ovlivnit chování stávajících aplikací.

Databázový soubor z předchozí verze lze používat bez úprav.


Novinky verze 6.1

602SQL-Úplná dokumentace

Hlavní novinky ve verzi 6.1

602SQL 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;

  • přidáno programové rozhraní pro nastavení a správu replikací (16 funkcí) - podrobnosti;

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;


Kompatibilita verze 6.1

602SQL-Úplná dokumentace

Zpětná kompatibilita verze 6.1

  • Změna, která může ovlivnit chování programu, je změna čísla výjimky, vyvolané příkazem SELECT INTO v případě, že odpověď neobsahuje žádný záznam. Dřívější 02000 (neexistující záznam v kurzoru) byla změněna na správnější 21000 (Chybný počet záznamů v odpovědi). Pokud máte vytvořen handler pro tuto situaci, změňte, prosím, číslo sqlstate.

  • V dřívějších verzích bylo omylem umožněno používat funkci Restrict_cursor i na proměnné kurzory, což mohlo vést v krajním případě i k přepisování paměti. Nyní je to zakázáno a program toto obsahující nepůjde přeložit.

Do 602SQL 6.1 byly jinak 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á.


Novinky verze 6.0

602SQL-Úplná dokumentace

Hlavní novinky ve verzi 6.0

602SQL 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 602SQL, 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 602SQL 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;

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 (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í 602SQL;

  • 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.0

602SQL-Úplná dokumentace

Zpětná kompatibilita verze 6.0

602SQL 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 602SQL 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 602SQL 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.1

602SQL-Úplná dokumentace

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 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 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 602SQL 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 602SQL

  • 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 logu serveru

ODBC

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


Kompatibilita verze 5.1

602SQL-Úplná dokumentace

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 602SQL 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!


Novinky verze 5.0

602SQL-Úplná dokumentace

Hlavní novinky ve verzi 5.0

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

602SQL 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 602SQL_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

602SQL-Úplná dokumentace

Zpětná kompatibilita verze 5.0

Naprostá většina aplikací vyvinutých pro verze 602SQL 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ů 602SQL (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é 602SQL:

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 602SQL.

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


Licenční politika 602SQL

K využití služeb 602SQL uživatel musí získat a zadat do programu příslušné licence. Přitom je třeba vykonat několik kroků podle níže uvedeného návodu.

Při instalaci 602SQL vznikne tzv. instalační klíč, který není přenosný z počítače na počítač. Všechna licenční čísla se generují z instalačního klíče a jsou na něj vázána. Nelze proto licence získané pro instalaci 602SQL na jednom počítači využít na jiném počítači.

Všechny licence se vztahují k serveru. Klienti, kteří se připojují na server, žádnou vlastní licenci nepotřebují.

Fulltextové nástroje a internetový přístup na server nevyžadují ve verzi 8 žádnou zvláštní licenci. Fulltext se aktivuje tehdy, když na server zadáte jakýkoliv počet licencí pro přístup klientů. Internetový přístup je aktivován stále.

Licence k provozování serveru 602SQL

Licence k provozování serveru 602SQL je poskytována zdarma po registraci na webu. Při registraci se využije instalační klíč. Během registrace vyplníte kontaktní údaje a poté elektronickou poštou obdržíte licenční číslo serveru. Toto číslo zadáte v 602SQL a tím umožníte časově neomezený provoz serveru.

Tato licence se vztahuje ke konkrétnímu počítači a je využívána všemi SQL servery, které na něm poběží.

Zadáním této licence zároveň získáte 1 licenci pro přístup klienta na server. Pokud má být na server připojeno současně více klientů, je třeba server vybavit licencemi pro přístup klientů - viz níže.

Server spuštěný pod Windows bez této licence zobrazí dialogové okno dovolující připojit se na webové stránky pro registraci nebo zadat již získané licenční číslo. Pod Linuxem server (spuštěný jako úloha) zobrazí informace o způsobu registrace.

Zkušební provoz 602SQL

Zadáním licence z předchozího odstavce přechází uživatel automaticky do časově omezeného, tzv. TRIAL režimu. V něm je 30 dní k dispozici dalších 5 klientských licencí, 90 dní je možno používat fulltext. Po vypršení této doby zůstane pro přístup pouze jedna základní licence bez fulltextu.

Licence pro přístup klientů na 602SQL server

Licence pro přístup klientů určují maximální počet klientů současně připojených na server. Při nedostatku licencí se další klient nemůže připojit. Licence lze na server postupně doplňovat podle narůstajících potřeb na obsluhu klientů.

Počet licencí pro přístup na server se zvětšuje pomocí tzv. distribučního klíče, který funguje stejně jak dobíjecí číslo na dobíjecím kupónu pro mobilní telefon s předplacenou kartou. Postupujte se takto:

  1. Nejprve zakoupíte distribuční klíč pro požadovaný počet přidávaných licencí. Distribuční klíč lze získat v elektronickém obchodě Software602, a.s. nebo od některých dealerů (OPL program).
  2. Poté vstoupite na registrační portál Software602 a zadáte váš distribuční klíč. Elektronickou poštou obdržíte licenční číslo.
  3. Toto licenční číslo zadáte do serveru.

Přidávání licencí se nejsnáze provádí pomocí průvodce, kterého otevírá tlačítko Průvodce přidáváním licencí na stránce Licence příslušného serveru na Řídicí konzoli.

OPL licence

Podorobnosti o OPL programu a jeho vztahu k licencím získáte na těchto stránkách.

Zjišťování licencí

Aplikace může zjistit přítomnost licencí voláním funkce Get_server_info.

Přidělování licencí pro mnohonásobná spojení z jednoho procesu

Pokud jeden proces vytvoří více spojení na stejný databázový server (například 1 spojení přes ODBC a 2 přes 602SQL API), pak všechna tato spojení zaberou na serveru pouze jednu licenci.

Seznam subsekcí:

  • Sdílení licencí mezi servery
  • Interní uložení licenčních čísel


Provoz více serverů na jednom počítači a sdílení licencí

Je-li na jednom počítači více databází a lze na něm provozovat více serverů, pak lze zvolit jeden ze dvou přístupů k licencím:

  • buď má server vlastní licence vázané na databázi, nad níž pracuje, a tyto licence nijak nesouvisejí s licencemi ostatních serverů;
  • anebo servery sdílejí licence a pokud spustíte současně dva servery a na jeden se připojí klienti, pak o to méně klientů se může připojit na druhý server

První přístup se používá, je-li třeba docílit nezávislého provozu serverů, například na serverových farmách. Druhý případ slouží zejména tehdy, pokud se servery provozují převážně alternativně nad různými databázemi a licence mají být využívány a sdíleny tou skupinou serverů, které právě běží.

Oba přístupy lze libovolně kombinovat. Na jednom počítači lze mít několik skupinek serverů sdílejících licence i několik serverů se soukromými licencemi.

Skupina serverů sdílejících licence je definována tím, že používá stejný instalační klíč. Při vytváření nové databáze na počítači, na němž již jsou serverům přiděleny nějaké licence, lze buď zvolit některý z existujících instalačních klíčů a tím se připojit k některé skupině sdílející licence, nebo nechat vytvořit nový instalační klíč a tím si zajistit soukromé využívání v budoucnu získaných licencí.

Pokud se nová databáze vytváří pomocí Řídicí konzole, lze buď vybrat existující instalační klíč a tím vybrat skupinu serverů, s níž bude sdílet licence, anebo vytvořit nový instalační klíč a tím vytvořit soukromý prostor licencí. Při jiných způsobech vytvoření databáze je třeba do záznamu o databázi v registru nebo v souboru /etc/602sql zaznamenat údaj InstallationKey s hodnotou zvoleného instalačního klíče.

Vytvoření nového instalačního klíče

Pokud nový server nemá sdílet licence s již existujícími servery, pak je třeba při registraci jeho databáze požadovat vytvoření nového instalačního klíče. Tato volba je k dispozici na Řídicí konzoli.

Pokud se registrace nové databáze provádí přímým zápisem do úložiště informací, pak je třeba mezi údaje popisující databázi přidat zápis:

InstallationKey=NEW
Při prvním spuštění serveru bude vytvořen nový instalační klíč a nahradí hodnotu NEW.


Interní uložení licenčních čísel

Pro pohodlnou interaktivní správu licencí slouží Řídicí konzole dostupná pod Windows i Linuxem. Pokud však mají správu databází a licencí provádět skripty a programy, pak musejí zasahovat přímo do úložiště informací - pod Windows do registru (klíč HKEY_LOCAL_MACHINE\Software\Software602\602SQL\Licences) a pod Linuxem do souboru /etc/602sql.

Všechny instalační klíče jsou zapsány v sekci InstallationKeys (na Linuxu jsou jména sekcí v hranatých závorkách a začínají navíc tečkou). Pokud všechny servery sdílejí licence, pak se používá pouze jediný instalační klíč, jinak každý instalační klíč odpovídá hnízdu (poolu) serverů sdílejících licence.

V sekci ServerRegKey je licenční (provozní) číslo serveru. Toto licenční číslo sdílejí všechny servery provozované na jednom počítači a získává se registrací. URL pro registraci je www.602.cz/registrace/602sql_server.htm.

V sekci ClientAccessLicences jsou add-on licence pro přístup klientů na server. Každá licence je spárována s některým instalačním klíčem.

V záznamech o konkrétní databázi je údaj pojmenovaný InstallationKey obsahující jako hodnotu jeden instalační klíč. Databáze se stejnou hodnotou instalačního klíče budou sdílet licence.

Licenční číslo pro databázi lze získat tak, že se na URL www.602.cz/registrace/602sql_addon.htm vyplní licenční číslo serveru, instalační klíč přiřazený k databázi a zakoupené distribuční číslo. Licenční číslo se pak zaznamená do sekce ClientAccessLicences.


602SQL server

Tato kapitola zahrnuje témata týkající se provozu 602SQL serveru.

Architektura klient - server

602SQL 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 programů, které těchto služeb využívají.

Programu poskytujícímu služby říkáme server, v našem případě databázový (SQL) 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.

Server je schopen současně obsluhovat více klientů. Klienti mohou pracovat na stejném počítači jako server, na jiném počítači v lokální síti nebo i na zcela jiném počítači, který se se serverem dokáže spojit pomocí vhodné nadsítě (např. Internetu, WAN, vytáčeného telefonního spojení atd.)

Všichni klienti mohou pracovat nad stejnými daty, využívat navzájem svoje výsledky, sdílet informace.

602SQL nepoužívá model, při němž by klientské programy pracující na stejnou databází zasahovaly do nějakého sdíleného souboru. Místo toho klienti se obracejí s žádostmi na server a pouze server čte nebo přepisuje obsah databáze.

Koordinace klienta a serveru

Pokud se klient chce připojit na SQL server, který dosud neběží a který může běžet na stejném počítači, na němž je klient, pak je server klientem spuštěn (toto nelze použít na Windows Terminal Serveru). 602SQL Server, který byl takto automaticky spuštěn, je automaticky ukončen, jakmile se z něj odhlásí poslední klient. Toho se využívá zejména při lokální práci v rámci jednoho počítače.

Platformové rozdíly

602SQL server je platformově nezávislý a z hlediska vývojáře i uživatele aplikací poskytuje stejné služby na všech podporovaných platformách. Existuje však několik oblastí, kde je činnost SQL serveru ovlivněna platformou:

  • Základní síťový protokol pro komunikaci mezi klienty a serverem je TCP/IP a je k dispozici na všech platformách, ale pod Windows lze použít také protokoly IPX/SPX nebo NetBEUI.
  • Poštovní profily typu SMTP/POP3 fungují na všech platformách, ale pod Windows lze použít také profily MAPI nebo Mail602.
  • Fulltextové indexování textových souborů je k dispozici na všech platformách, ale pod Windows lze indexovat také dokumenty v mnoha dalších formátech jako DOC nebo RTF.
  • Pokud je přihlašování klienta na server realizováno prostřednictvím externího systému, pak tyto systémy jsou platformově specifické, například ve Windows jsou do domény, a v Unixovém prostředí Kerberos.
  • Informace popisující instalovaný server a existujicí databáze jsou uloženy na různých místech.
  • Konverze data, času a dalších dat do znakového řetězce může využívat řadu formátů, a lze se také odvolávat na formát nastavený v operačním systému.

Rozdíly ve spouštění a ovládání serveru na různých platformách jsou popsány dále.

Seznam subsekcí:

  • Administrace 602SQL pomocí Řídicí konzole
  • Databáze
  • Provoz SQL serveru
  • Bezpečnost databáze
  • Komunikace mezi klientem a serverem a síové protokoly
  • Práva a jejich subjekty
  • Trasování a logování činnosti serveru
  • Systémové triggery
  • Čekání na uvolnění zdrojů
  • Fulltext ve 602SQL
  • Vlákna a synchronizace
  • Vlastnosti a jejich nastavování
  • Replikace dat


Administrace 602SQL

Hlavním nástrojem pro administraci 602SQL serverů i klientů je Řídicí konzole. Pro pochopení je třeba rozdělit její funkce do 3 oblastí:

  1. Konzole umožňuje spravovat lokální databáze, například definovat novou databázi DB1, kterou bude zpřístupňovat lokálně běžící server, nebo obnovit obsah databázového souboru ze záložní kopie.
  2. Konzole umožňuje editovat informace, které používají lokální klienti pro přístup na servery, například umožní zaznamenat, že server ABC se má hledat na síťové adrese XYZ a je přístupný pomocí protokolu DEF.
  3. Konzole se může připojit (jako klient) na kterýkoliv server a administrovat jej, například nastavovat provozní parametry serveru, monitorovat jeho provoz nebo manipulovat se objekty definovanými na serveru.
  4. (Dále se zde nastavují poštovní profily a parametry Internet klientů, kterých se tento popis netýká.)

Vztah mezi počítačem, na němž běží konzole a počítačem, který konzole ovlivňuje, vypadá takto:

  1. První oblast se týká pouze databází a SQL serverů umístěných na tom počítačí, na kterém jste spustili řídicí konzoli.
  2. Druhá oblast se týká pouze klientů, kteří poběží na tom počítačí, na kterém jste spustili řídicí konzoli.
  3. Třetí oblast se týká vlastností serverů a umožňuje konfigurovat běžící servery lokálně nebo na dálku. Tato oblast je zdaleka nejrozsáhlejší.

Činnosti konzole, spadající do první nebo druhé oblasti, lze alternativně provádět přímým zapisováním konfiguračních údajů na příslušná místa: na Windows do registru, na Linuxu do souboru /etc/602sql.

Činnosti konzole, spadající do třetí oblasti, lze zčásti provádět i přes klientské rozhraní serveru. Některé jsou také zabudovány do vývojového prostředí pod Windows.

V levé části okna konzole je (mimo jiné) seznam databází/serverů. Pro vybranou databázi/server se v pravé části objeví 3 záložky (pro vzdálený SQL server pouze dvě první):

  • Záložka Správa: umožní se přihlásit na daný SQL server za účelem jeho administrování (nastavování parametrů, monitorování provozu apod.). Při přihlašování se je třeba volit uživatelské jméno s odpovídajícími pravomocemi
  • Záložka Klientský přístup: nastavení parametrů 602SQL klientů spouštěných na tomto počítači vztahujících se k vybranému SQL serveru; globální nastavení parametrů klientů se provádí ve větvi Nastavení klienta a přístupů
  • Záložka Databáze (pouze pro lokální databázi): umožní provádět speciální akce s databázovým souborem WB8.FIL; musí se provádět v době, kdy není nikdo přihlášen


Databáze

Databáze je úložištěm pro data a pro objekty tvořící aplikace. SQL server obsluhuje vždy jednu databázi.

Databáze je vnitřně rozčleněna do schémat. Každý objekt (například databázová tabulka) patří do některého schématu a v různých schématech mohou být i stejně pojmenované objekty. Schémata obvykle odpovídají databázovým aplikacím, které se na serveru provozují, a kromě dat mohou obsahovat také například uložené procedury v jazyce SQL nebo komponenty uživatelského rozhraní aplikace.

Každá databáze je označena jménem a pod tímto jménem je registrována na počítači serveru i na počítačích klientů. Server využívá registraci například k tomu, aby spojil jméno databáze s umístěním její datových souborů. Klient pomocí registrace například zjišťuje, na jaké síťové adrese pracuje server obsluhující databázi.

Kolik sdílených databází a databázových serverů potřebujete?

Data, která mají být přístupná v síti, lze ukládat v jedné centrální databázi nebo členit do více databází. Při plánování počtu a umístění databází je třeba vzít v úvahu tyto okolnosti:

  • na jednom počítači lze spustit i více serverů a tím současně zpřístupnit více databází;
  • z hlediska efektivity je žádoucí, aby server běžel na stejném počítači, na němž je umístěna databáze;
  • databázová aplikace je v jednom okamžiku zpravidla připojena k jednomu serveru, proto data, s nimiž má pracovat, se nejsnáze zpřístupní, pokud budou v jedné databázi;
  • probíhá-li souběžně rutinní provoz a vývoj databázové aplikace, je pro spolehlivost provozu lepší umístit obě aplikace do různých databází;
  • data, za jejichž správu, integritu a utajení zodpovídají různé osoby, může být z organizačních důvodů lepší rozdělit do samostatných databází;
  • server nemusí nutně běžet na dedikovaném počítači, server poskytující služby v síti může být provozován i na kterékoli klientské stanici.

Kromě sdílených síťových databází si uživatelé mohou vytvořit pro soukromá data své lokální databáze, které budou obsluhovat svým lokálním serverem.

Seznam subsekcí:

  • Vytvoření databáze
  • Registrace existující databáze
  • Přehled a umístění databázových souborů
  • Zkompaktnění databáze
  • Umístění databáze na CD ROM


Vytváření databáze

Vytvoření nové databáze

Při vytváření nové databáze je třeba stanovit a zaregistrovat jméno databáze a umístění databázového souboru. Zaregistrované údaje o databázi budou uloženy na Windows v systémovém registru, na Linuxu v souboru /etc/602sql. Databázový soubor bude fyzicky vytvořen až při prvním spuštění serveru nad touto databází.

K vytvoření nové databáze je na Windows potřeba mít právo editovat systémový registr, na Linuxu právo editovat soubor /etc/602sql - toto právo má typicky uživatel root.

Vytvoření nové databáze pomocí řídicí konzole

Na řídicí konzoli 602SQL otevřete stránku Vytvořit novou databázi a server. Vyplňte jméno databáze a vyberte adresář, do nějž má být umístěn databázový soubor. Pak stiskněte tlačítko Vytvořit nový lokální server,

Vytvoření nové databáze z řídicího panelu vývojového prostředí

Pokud chcete vytvořit novou databázi na počítači, na němž je instalováno vývojové prostředí 602SQL, pak ve stavu, kdy není připojen server, na řídicím panelu stiskněte tlačítko Vytvořit databázi a zadejte požadované údaje.

Vytvoření nové databáze z příkazové řádky pod Linuxem

Pro vytvoření nové databáze zadejte příkaz:

602inst8 [-f<cesta_k_databázi>] [-n<jméno_databáze>] [-p<číslo_portu>] [-u<jméno_uživatele> [-c] ]
Program vytvoří záznamy odpovídající nové databázi s daným jménem. Parametry jsou nepovinné, při jejich absenci je uživatel dotázán. Je možné nastavit i další parametry, aktuální výpis přepínačů a nastavovaných parametrů lze zjistit přepínačem -h. Parametry, jejichž nastavování zde není podporováno, je třeba zadat ruční editací konfiguračního souboru.

kde

  • -f cesta_k_databázi je cesta k adresáři, do něhož se má umístit databázový soubor.
  • -n jméno_databáze je jméno, které se přidělí databázi a pod nimž bude server nabízet tuto databázi v síti.
  • -p číslo_portu je číslo prvního portu použitého 602SQL pro inzerování služeb a připojování klientů
  • -u jméno_uživatele nastaví jméno uživatele, s jehož právy server poběží, je-li spuštěn uživatelem root
  • -c Pokud byl uveden s -u neexistující uživatel, bude vytvořen

V systémech založených na Unixu je zvykem spouštět daemony pod zvláštním uživatelem, aby možnost případných škod při chybě daemona byla omezena. Jméno tohoto uživatele lze zadat pomocí parametru -u a pomocí parametru -c lze takového uživatele vytvořit.

Stav nově vytvořené databáze

Nová úspěšně vytvořená databáze je prázdná až na systémové objekty: tabulky, uživatele a skupiny.

Služební tabulka TABTAB je tabulkou všech tabulek, tabulka OBJTAB je tabulkou všech objektů, USERTAB je tabulkou uživatelů, REPLTAB a SRVTAB se používají při replikování, KEYTAB je tabulkou veřejných klíčů. Tyto tabulky nepatří do žádné aplikace.

Po vzniku databáze je vytvořen tzv. anonymní uživatel, přihlašující se jménem ANONYMOUS nebo prázdným jménem a prázdným heslem. Dále vznikne skupina EVERYBODY, do níž patří všichni uživatelé, a 3 skupiny správců DB_ADMIN, CONFIG_ADMIN a SECURITY_ADMIN. Po instalaci je anonymní uživatel členem všech správcovských skupin. Při jiné než jednouživatelské instalaci (Personální databáze) doporučujeme vytvořit jednotlivé správce jako zvláštní uživatele a anonymního uživatele z těchto skupin vyřadit.


Registrace existující databáze

Pokud chcete umožnit provoz serveru nad existující databází, musíte ji nejprve zaregistrovat na tom počítači, na němž poběží server.

Registrace existující databáze se provádí stejným způsoben, jako vytvoření databáze nové. Při zadávání adresáře pro umístění databázového soubory zadáte adresář, v němž se nachází existující databázový soubor.


Přehled a umístění databázových souborů

Databázový server pracuje s těmito soubory:

Jméno souboru | Účel
wb8.fil | Databázový soubor, obsahuje vše, co je uloženo do databáze.
journal.fil | Journal změn prováděných v databázovém souboru, viz ochrana databáze journalem.
transact.fil | Transakční soubor s informacemi o rozpracovaných transakcích.
wbsqllog.txt | Základní log serveru, viz logování.
/etc/602sql | Konfigurační soubor serveru obsahující registraci databází a hodnoty důležitých vlastností serverů (používá se pro Linux). Mimo jiné obsahuje pro každou databázi cesty k výše uvedeným souborům.

Databázový soubor je kvůli rychlosti přístupu zpravidla umístěn na stejném počítači jako server, který s nim pracuje.

Databázový soubor by měl být chráněn přístupovými právy operačního systému, protože jeho smazání nebo přepsání znamená zničení celé databáze.

Transakční soubor je využíván serverem k dočasnému odkládání dat, která jsou modifikována v transakcích, a k dokončení rozpracované transakce po pádu serveru. Pokud je server korektně ukončen, lze tento soubor vymazat bez jakýchkoli následků.

Vzhledem k pevně daným jménům těchto souborů nelze do jednoho adresáře umístit dvě databáze.

Rozdělení databázového souboru do více částí

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 systému zvláštním souborem, každá se jmenuje stejně ale je ve zvláštním adresáři (často 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. Nespecifikujete-li velikost některé části, bude tato část poslední a poroste bez omezení.

Pod Windows se rozdělení databázového souboru nastavuje ve speciálním okně, k němuž se lze dostat takto:

  1. spustíte Řídicí konzoli;
  2. vyberete stránku SQL server příslušného jména, nepřihlašujete se;
  3. na záložce Databáze stisknete tlačítko Umístění databázových souborů.

Na Linuxu se parametry databázových souborů popíší v inicializačním souboru /etc/602sql takto:

[jméno databáze]
LIMIT1=maximální velikost první části db. souboru v MB
PATH2=umístění druhé části databázového souboru
LIMIT2=maximální velikost druhé části db. souboru v MB
PATH3=umístění třetí části databázového souboru
LIMIT3=maximální velikost třetí části db. souboru v MB
PATH4=umístění čtvrté části databázového souboru

Také lze použít grafickou Řídící konzoli pro Linux, pak platí stejný popis jako pro Windows

Umístění ostatních souborů databáze

Transakční soubor, journal a log se implicitně umístí do stejného adresáře, jako databázový soubor (resp. jeho poslední část, je-li rozdělen do částí). Odlišné umístění těchto souborů může mít tento účel:

  • zvýšení výkonu serveru rozložením zátěže mezi více fyzických disků;
  • zvýšení bezpečnosti zálohování databáze umístěním journalu na jiný fyzický disk než databázový soubor.

Pod Windows se umístění databázových souborů specifikuje stejně jako v předchozí sekci. Pokud některý adresář nespecifikujete, soubor se umístí na implicitní místo.

Na Linuxu se parametry databázových souborů popíší v inicializačním souboru /etc/602sql takto:

[jméno databáze]
TRANSACTPATH=umístění transakčního souboru
JOURNALPATH=umístění journalu
LOGPATH=umístění logu

Také lze použít grafickou Řídící konzoli pro Linux, pak platí stejný popis jako pro Windows


Zkompaktnění databáze

Zkompaktnění databáze je operace, při níž se obsah databázového souboru přeorganizuje tak, aby soubor byl co nejmenší.

Při normálním provozu není důvod databázi zkompaktňovat. Zkompaktnění má smysl provést před převedením databáze na CD ROM nebo v situaci, kdy z databáze byla vymazána podstatná část dat a nedostává se místa na disku.

Zkompaktnění lze provést buď ze stránky Úpravy databázového souboru v okně Řídicí konzole SQL serveru, anebo přes API pomocí funkce (cd_)Compact_database.


Databáze uložené na CD ROM

602SQL 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.

602SQL musí být na uživatelově počítači buď instalována předem (normálním instalačním programem 602SQL), nebo se bude při každém spuštění číst z CD ROM. Druhý případ má tyto omezující vlastnosti:

  • 602SQL 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 602SQL z CD ROM reagovat pomaleji i za běhu;

  • použití 602SQL z CD ROM předpokládá, že na uživatelově počítači je instalováno ODBC.

602SQL 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.

Seznam subsekcí:

  • Příprava databáze a obsahu CD ROM
  • Obsah souboru SETUPDB.INI
  • Postup instalace CD ROMová databáze


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. Pomocí Řídicí konzole se připojit k databázi, určenou k převedení na CD ROM; vybrat větev Nástroje / Úpravy databázového souboru (povoleno pouze konfiguračnímu 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 okně 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. Řídicí konzole i vývojové prostředí se uzavřou a server se ukončí.

Nad stejnou databází se server nesmí více spouštět. Popsaným postupem vznikne soubor WB8.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 WB8.FIL vytvořený v předchozí fázi.

2. Soubor SETUPDB.EXE z 602SQL Extension Packu (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 602SQL, pokud aplikace má být provozována na uživatelově počítači bez instalace 602SQL.

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

602SQL-Úplná dokumentace

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 602SQL, Shortcut1 a případné další sekce Shortcut2, Shortcut3 atd.

V sekci [602SQL] 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 602SQL na CD ROM

Tento údaj je nepovinný. Pokud není uveden, pak se na uživatelském počítači bude hledat existující instalace 602SQL 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 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 602SQL.

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 602SQL, kde jej běžící aplikace najde. Jsou-li na CD ROM programy 602SQL, 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:

[602SQL]
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 602SQL, tedy: 602CLI8.EXE, 602SQL8.EXE, 602KRNL8.DLL, 602PREZ8.DLL, 602DVLP8.DLL, 602CONF8.EXE, 602SEC8.EXE, WBED.DLL a 602WED8.DLL, případně 602SQL.CHM (nápověda)

  • nápovědný soubor MOTYLI.HLP

Subadresář DATABASE:

  • Soubor WB8.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 aplikaci.

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 CD ROMové databáze


Postup instalace CD ROMové databáze

602SQL-Úplná dokumentace

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 602SQL, a pokud ji nenajde, zaregistruje instalaci v adresáři RegisterInstallation. Není-li tento údaj uveden, skončí s chybou. (Programy 602SQL 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 602SQL.)

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


Provoz databázového serveru pod Windows

Databázový server 602SQL pro Windows může být provozován jako běžná úloha (angl. task) nebo jako tzv. služba (angl. service). První varianta je použitelná pod všemi verzemi Windows, druhá pouze pod Windows NT/2000/XP.

Server se vždy spouští nad určitou databází. Vytvoření nové databáze je popsáno zde.

Provoz SQL serveru běžícího jako úloha

SQL server se provozuje jako úloha zejména tehdy, pokud je třeba jej co nejjednodušeji zapínat a vypínat podle momentální potřeby.

Spuštění serveru jako úlohy

SQL server se spouští jako úloha spuštěním programu 602sql8.exe, zpravidla pomocí zástupce vytvořeného při instalaci 602SQL. Zástupce může obsahovat tyto parametry příkazové řádky:

&jméno databáze - server bude pracovat se zadanou databází

/N - server umožní přístup klientů po síti, tedy i z jiných počítačů

/Q - server nebude spouštět systémové triggery

Žádný parametr není povinný. Při spuštění serveru bez parametrů závisí jeho chování na počtu lokálních databází. Je-li registrována pouze jediná databáze, přihlásí se server k ní a poskytuje své služby v síti. Je-li databází více, objeví se dialog s jejich seznamem a operátor musí jednu vybrat.

Server může být spuštěn také klientem, pokud klient zjistí, že nad zvolenou databází žádný server nepracuje a databáze by byla dostupná pro server běžící na jeho počítači. Takto spuštěný server však neposkytuje služby v síti, proto slouží pouze klientovi, který jej spustil.

Indikace běhu

Běžící server je buď uveden na liště Windows mezi ostatními běžícími úlohami nebo může být označen pouze malou ikonou v roku lišty v oblasti zvané system tray. Jeden nebo druhý způsob zobrazení lze nastavit tak, že se vlastnosti serveru System Tray přiřadí hodnota 0 nebo 1.

Ukončení serveru běžícího jako úloha

Činnost serveru ukončíte stiskem tlačítka Ukončit server na konzoli serveru nebo tak, že ze systémového menu serveru zadáte příkaz Konec. Je-li k serveru přihlášen nějaký uživatel, pak se při pokusu o ukončení jeho práce vypíše varovná zpráva.

Provoz SQL serveru pracujícího jako služba ve Windows NT/2000/XP

SQL server se provozuje jako služba zejména tehdy, pokud má být automaticky spuštěn po startu operačního systému. Výhodou služby je, že může pracovat na počítači v uzavřené místnosti. Běží totiž obvykle na systémový účet, a tudíž na počítač se serverem nemusí být nikdo přihlášen.

Služba SQL serveru musí být před spuštěním zaregistrována v systému pod určitým jménem. Pokud chcete provozovat více SQL serverů, pak je třeba je zaregistrovat jednotlivě pod různými jmény.

Registrace a konfigurování služby

Registrace a konfigurace služby se provádí na Řídicí konzoli 602SQL.

Nová služba se registruje na stránce Registrované služby SQL serveru. Službě přidělíte jméno (např. "602SQL Server") a registrujete ji stiskem tlačítka. Po registraci se služba objeví pod svým jménem v seznamu služeb.

Po registraci je třeba na stránce konzole odpovídající této službě zadat jméno databáze, nad níž bude služba pracovat. Dále lze nastavit, zda se služba bude spouštět automaticky při každém startu operačního systému, nebo bude spouštěna ručně. Automatické spouštění není vhodné, pokud se při startu SQL serveru musí zadávat heslo k databázovému souboru. Způsob spouštění lze nastavit také pomocí ovládacích panelů Windows.

K registraci a konfigurování služby je nutno mít administrátorská práva ve Windows NT/2000/XP.

Spuštění serveru jako služby

Služba může být spuštěna automaticky při startu operačního systému, je-li tak zkonfigurována, nebo ji lze spustit ručně. Na ovládacím panelu Windows pro služby se služba spouští tlačítkem Start. Na Řídicí konzoli 602SQL se služba zapíná zatržením čtverce Služba běží.

Server běžící jako služba pracuje nad databází určenou v konfiguraci (viz výše) a vždy poskytuje služby v síti. Služba není automaticky spouštěna lokálním klientem.

Indikace běhu

Běh služby je indikován malou ikonou na liště Windows v oblasti zvané System tray.

Pokud je služba spuštěna při startu systému nebo pokud se za běhu služby odhlásí a přihlásí uživatel systému, není zobrazení ikony zaručeno. Spolehlivou indikací běhu služby je proto zatržený čtverec Služba běží na řídicí konzoli nebo údaje v přehledu služeb na ovládacím panelu Windows.

Ukončení serveru běžícího jako služba

Činnost serveru běžícího jako služba lze ukončit:

  • na konzoli serveru stiskem tlačítka Ukončit server, nebo
  • na ovládacím panelu Windows pro služby stiskem tlačítka Stop, anebo
  • na Řídicí konzoli 602SQL zrušením zatržení čtverce Služba běží.

Je-li k serveru přihlášen nějaký uživatel, pak se při pokusu o ukončení jeho práce vypíše varovná zpráva.

Na co pamatovat při provozu služby

Vzhledem k tomu, že služba běží na systémový účet, je nutno přidělit operačnímu systému práva ke všemu, s čím bude server pracovat, zejména k databázovému souboru. Tato práva obvykle nejsou nastavena automaticky.

SQL server spuštěný jako služba má na některých počítačích problémy s protokolem NetBEUI. Pokud inzeruje své služby v tomto protokolu, zabere většinu času procesoru, ale nelze se na něj přihlásit. Pokud se problém vyskytne, doporučujeme přejít na jiný protokol, například TCP/IP.

V případě, že klientský program přistupující k 602SQL Serveru sám běží jako služba, je naprosto nutné, aby 602SQL server sám běžel také jako služba. V opačném případě server bude požadavky zpracovávat neúnosně pomalu. V praxi se touto situací lze setkat například při provozu 602SQL Internet ISAPI Klienta provozovaného MS Internet Information Serverem, který běží jako služba.

Sledování a řízení činnosti serveru

Základní informace o běhu serveru jsou zobrazeny v okně serveru. Okno se otevře kliknutím na indikátor běhu serveru.

V horní části okna jsou vypsány informace o verzi serveru, o používaných komunikačních protokolech (příp. zkratka N/A při lokálním provozu), o počtu klientů právě přihlášených k serveru a o maximálním počtu klientů, kteří se mohou na server přihlásit. Jako nerozšiřitelné jsou označeny ty servery, které není možno pomocí přidání licencí dodatečně rozšířit pro větší počet klientů.

Je-li zapnut přepínač monitorování všech chyb, do seznamu se vypisují chyby týkající se jednotlivých klientů. Je-li přepínač vypnut, monitorují se pouze chyby týkající se serveru jako celku. Přepínač monitorování replikací způsobí vypisování informací týkajících se navazování spojení a průběhu replikací. Monitorování replikací je neaktivní pokud jsou replikace na serveru vypnuty.

Z okna serveru lze otevřít řídicí konzoli, která umožňuje podrobné sledování a řízení činnosti serveru.

Neodhlášení klienti

Pokud klient 602SQL havaruje, neodhlásí se od serveru.

Pokud tento klient a server běží na různých počítačích, pak se server dozví o "smrti" klienta nejpozději během několika málo minut. Takového klienta pak sám odhlásí a odstraní všechny jeho zámky.

Běží-li klient i server na stejném počítači, nelze automatické odhlášení klienta zajistit. V této situaci je z pohledu serveru klient stále přihlášen.

Neodhlášený ukončený klient může na serveru blokovat různé prostředky. Pro jejich uvolnění může být nezbytné ukončit a znovu nastartovat server. Proto doporučujeme buď provozovat na stejném počítači jako server pouze odladěné aplikace, anebo nepoužívat stejný server zároveň i pro vzdálené klienty.


Provoz SQL serveru pod Linuxem

Databázový server 602SQL pro Linux může běžet buďto na popředí, kdy komunikuje s operátorem prostřednictvím konzole, nebo jako daemon na pozadí, kdy jej lze ovládat pouze z klientů a v omezené míře pomocí signálů.

Server se vždy spouští nad určitou databází. Tato databáze se uvede jako parametr při spouštění serveru. Vytvoření nové databáze je popsáno zde. Vlastní instalace SQL serveru je popsáno zde.

Parametry příkazové řádky SQL serveru

SQL server akceptuje tyto parametry příkazové řádky:

  • -n <jméno databáze> určuje databázi, nad níž server poběží
  • -f <cesta k adresáři s databází> alternativní způsob určení databáze
  • -p <heslo> nutno uvést při spouštění serveru nad databází chráněnou heslem
  • -d spustí server na pozadí (jako daemona)
  • -P vypíše číslo procesu serveru (PID)
  • -h vypíše stručnou nápovědu se seznamem parametrů
  • -v vypíše číslo verze serveru
  • -q vypne systémové triggery (nař. _on_server_start)
  • -t zapne logování síťových událostí do základního logu
  • -e zapne logování ušech uživatelských chyb do základního logu
  • -r zapne logování replikací do základního logu
  • -l zapne paralelní zápis základního logu do syslogu

Parametry -n a -f slouží k určení databáze, nad níž server poběží. Stačí uvést jeden z nich, hodnota druhého se dohledá v konfiguračním souboru /etc/602sql. Pokud není uveden ani jeden z těchto parametrů, pak:

  • je-li je registrována jediná databáze, server se spustí nad ní,
  • je-li registrováno více databází, server oznámí chybu a nespustí se.

Parametr -p a heslo je třeba uvést, pokud je databáze zašifrována a chráněna heslem.

Provoz SQL serveru běžícího na popředí

SQL server běžící na popředí lze ovládat z klávesnice a vypisuje přírůstky do svého základního logu na obrazovku. SQL server se spouští na popředí zejména tehdy, pokud je třeba jej co nejjednodušeji zapínat a vypínat podle momentální potřeby.

Spuštění serveru na popředí

SQL server se spouští na popředí příkazem:

602sql8

Ovládání serveru běžícího na popředí

Server běžící na popředí reaguje na klávesy; seznam akceptovaných kláves a jejich význam se zobrazí po stisku "h". Běh serveru se ukončí klávesou "q".

Provoz SQL serveru běžícího jako daemon

SQL server se provozuje jako daemon zejména tehdy, pokud má být automaticky spuštěn po startu operačního systému.

Je-li potřeba sledovat na obrazovce log serveru, lze použít příkaz tail -f <cesta k log souboru>.

Spuštění serveru na pozadí a jeho ukončení

SQL server se spouští jako daemon, je-li na jeho příkazové řádce uveden parametr -d. Zároveň je vhodné uvést i parametr -P pro vypsání čísla procesu. Ukončení takto spuštěného serveru se provede zasláním signálu TERM příkazem kill <číslo procesu>.

Druhá možnost je používat skript /etc/init.d/602sql8, který hromadně ovládá servery registrované v /etc/602sql s příznakem AUTOSTART. Příkaz

/etc/init.d/602sql8 start
spustí všechny tyto servery na pozadí a přitom zaznamená jejich čísla procesů. Příkaz
/etc/init.d/602sql8 stop
pak ukončí takto spuštěné servery. K restartování této skupiny serverů lze použít příkaz
/etc/init.d/602sql8 restart
a ke zjištení stavu serverů příkaz
/etc/init.d/602sql8 status
Tyto operace může provádět pouze uživatel root.

Druhou možnost používají některé Linuxové distribuce ke startování serveru při startu. Pokud to distribuce umožňuje, pak lze příkazem chkconfig 602sql8 [on|off] zajistit automatické provedení "/etc/init.d/602sql8 start" resp. "/etc/init.d/602sql8 stop" při startu resp. ukončení operačního systému.

Zjišťování stavu daemonů

Seznam procesů běžících daemonů lze zjistit programem ps:

 ps u -C 602sql8 --forest
Na každý spuštěný server připadají nejméně čtyři procesy; každý strom ve výpisu odpovídá jednomu serveru.

Jaké porty jsou právě používány běžícími servery lze zjistit příkazem netstat, např.

netstat -npaA inet |grep 602sql8

Práva potřebná ke spuštění serveru

Server běží na účet uživatele, který jej spustil, s jednou výjimkou: pokud je server spuštěn uživatelem root a pokud v popisu serveru v souboru /etc/602sql je údaj:
USER=<jméno uživatele>
pak server poběží na účet zadaného uživatele.

Uživatel, na jehož účet server běží, musí mít právo čtení a zápisu na soubory databáze (včetně logů), plus na celý databázový adresář. Musí mít také právo číst a přepsat soubor /etc/602sql a vytvářet soubory v adresáři /etc.

Seznam subsekcí:

  • Konfigurační soubor 602SQL na LINUXu


Konfigurační soubor pro 602SQL servery a klienty na Linuxu.

Základní konfigurace 602SQL serverů provozovaných na operačním systému LINUX je uložena v souboru /etc/602sql. Další konfigurační parametry jsou pak uloženy v systémových tabulkách uvnitř databáze jako tzv. vlastnosti.

Soubor /etc/602sql má strukturu .ini souborů z Windows. Skládá se ze sekcí začínajících názvem sekce v hranatých závorkách ([ ]). V sekcích jsou na jednotlivých řádcích vždy název parametru, rovnítko a hodnota parametru. Řádky začínající středníkem jsou chápány jako komentáře. V názvech parametrů nezáleží na velikosti písmen.

Při instalaci 602sql se vytvoří implicitní konfigurační soubor, v němž jsou uvedeny a komentovány téměř všechny použitelné klíče.

Sekce odpovídající serverům

Každá sekce popisuje jeden server, jméno sekce je stejné jako jméno databáze a tedy i jméno serveru. Popisují se dva druhy serverů: lokální servery, které lze spustit na tomto počítači, a síťové servery, na něž se klient z tohoto počítače může připojit po síti.

Pro lokální servery se uvádějí tyto údaje:

PATH=cesta k adresáři obsahujícímu databázový soubor
LOGPATH=cesta k adresáři, v němž se bude vytvářet základní log serveru
TRANSACTPATH=cesta k adresáři, v němž se bude nacházet transakční soubor serveru
JOURNALPATH=cesta k adresáři, v němž se povede journal změn v databázi
USER=jméno uživatele zavedeného v operačním systému, na jehož účet poběží server spuštěný
      s právy superuživatele
AUTOSTART=0|1  zařadit či vyřadit server do skupiny serverů, které mohou být hromadně
      spouštěny jako daemony, např. při startu systému (na systémech se startovacími scripty
      typu System V, tedy např. RedHat či SuSE)
InstallationKey=instalační klíč, na jehož základě bude server využívat add-on licence
Povinný je pouze údaj PATH. Podrobnosti o umístění dalších částí databázového souboru naleznete zde.

Pro vzdálené síťové servery se uvádějí údaje potřebné pro klienta, který se chce na ně připojit:

IP ADDRESS=IP adresa počítače se SQL serverem
IPPORT=číslo portu, na němž naslouchá SQL server
IP adresu je nutno uvést pro každý síťový server. Číslo portu se uvádí pouze pro ty servery, které jsou nastaveny pro práci na jiném než standardním portu 5001.

Sekce s licenčními čísly

V těchto sekcích se uvádějí licenční informace. Na řádcích v sekcích je vždy pouze příslušný údaj a rovnítko, za kterým již nic dalšího nenásleduje.

Logika licenčních čísel a instalačních klíčů je vysvětlena v kapitole o licencování.

Sekce [.InstallationKeys] obsahuje instalační klíče. První klíč se vygeneruje automaticky při prvním spuštění serveru. Více než jeden klíč se používá v případech, že servery provozované na jednom počítači jsou rozděleny do hnízd sdílejících licence. Pak v popisu každého serveru musí být uveden údaj InstallationKey definující příslušnost do hnízda. Instalační klíče nejsou přenosné mezi počítači.

Do sekce [.ServerRegKey] je nutno zaznamenat provozní licenční číslo serveru získané po registraci na webu. Toto licenční číslo je vázáno na (kterýkoliv) instalační klíč z předchozí sekce.

Do sekce [.ClientAccessLicences] je nutno zaznamenat add-on licence umožňující přístup dalších klientů na server. Tyto licence se získávají registrací na webu po zadání instalačního klíče a zakoupeného distribučního čísla. Licence platí pouze pro servery, které používají konkrétní instalační klíč, tedy pro jedno hnízdo.

Další sekce

Kromě sekcí pro jednotlivé servery a sekcí pro zaznamenání licencí jsou v tomto souboru další sekce, se jmény začínajícími tečkou (aby nedošlo k záměně se jménem serveru - jméno serveru tečku obsahovat nesmí). Jedná se o

  • sekce popisující e-mailové profily,
  • sekce pro konfiguraci 602SQL Internet klienta
Aktuální popis je v distribuovaném konfiguračním souboru.


Nastavení paměťových alokací serveru

Správce provozu serveru může nastavením několika parametrů dosáhnout efektivnějšího využití operační paměti a tím zvýšit výkon serveru. Zpravidla lze však vystačit s implicitními hodnotami parametrů.

Počáteční paměť serveru určuje velikost operační paměti alokované na začátku běhu serveru. Tento parametr má minimální význam protože současné verze serveru již v případě nedostatku paměti automaticky alokují další. Počet bloků je shora omezen hodnotou 200, tedy cca 12.5 MB.

Velikost parametru Cache databázového souboru může ovlivnit rychlost provádění většiny operací 602SQL Serveru. Doporučená velikost je asi 50-200 krát velikost clusteru v databázovém souboru, minimum je 35 krát velikost clusteru (horní mez není stanovena). Cluster má 4096 bajtů.

Dalšími parametry jsou Prostor pro třídění a Prostor pro všechna souběžná třídění, které mohou zkrátit dobu potřebnou pro třídění záznamů nebo indexování. Při třídění server používá algoritmus, který je tím rychlejší, čím více paměti má k dispozici. První údaj omezuje množství paměti, které server alokuje pro jedno třídění, druhý omezuje množství paměti pro všechna souběžně probíhající třídění. Nehodláte-li experimentálně zjišťovat optimální hodnoty na Vašem počítači, použijte implicitní hodnoty. Prostor pro třídění je implicitně 1024 KB, minimum je 30 KB, maximum je rovno prostoru pro všechna souběžná třídění. Prostor pro všechna souběžná třídění má implicitní hodnotu 1300 KB, minimum je 30 KB, maximum není omezeno. V praxi je prostor pro třídění omezen také maximální velikostí souvislého bloku paměti, který lze od systému alokovat.

Poslední tři parametry mohou při svém zvětšení urychlit odezvu serveru a tím i běh aplikací, pouze však do té doby, než nedostatek operační paměti donutí Windows používat odkládací soubor na disku (swapovat na disk). V tomto případě dojde ke značnému zpomalení práce.

Nastavení paměťových parametrů

Paměťové parametry serveru jsou uloženy jako vlastnosti serveru. Dají se nastavovat buď na Řídicí konzoli na stránce Provozní parametry nebo pomocí API funkcí.

Omezení paměťových nároků serveru a prevence chyb

Na některých systémech je množství dostupné operační paměti značně omezeno - například když neexistuje odkládací prostor na disku nebo když je malý a nesmí se dynamicky zvětšovat. Pokud by SQL server dynamicky požadoval více paměti, došlo by k chybě.

K nestandardnímu zvýšení potřeby operační paměti může dojít například tehdy, pokud řada klientů souběžně požaduje třídění rozsáhlých dat. Smyslem parametru omezujícího velikost paměti alokované pro všechna souběžná třídění je zabránit vzniku chyby v takové situaci.


Rozlišení platforem serveru

V některých aplikací je třeba rozlišit, na jaké platformě běží SQL server. Například pokud procedura uložená na serveru volá externí funkcí, pak jméno a umístění této funkce často závisejí na platformě.

Klient může rozlišit platformy voláním funkce Get_server_info s parametrem OP_GI_SERVER_PLATFORM (0).

Na serveru lze platformy rozlišit zjištěním hodnoty systémové proměnné @@PLATFORM.

Platformy jsou označeny celými čísly podle této tabulky:

0 | Windows
1 | Novell Netware (od verze 7.0 není podporováno)
2 | Linux


Principy zabezpečení sytému

Při provozu databáze je nutné brát v úvahu možnost výskytu těchto událostí:

  • výpadek napájení nebo technická havárie počítače uprostřed provádění složité aktualizace;
  • poškození poškození dat uložených na disku počítače;
  • havarijní chování oprávněného uživatele.

Každá z těchto situací má jinou povahu a způsobuje jiný druh škod.

Výpadek počítače

Výpadek napájení nebo technická havárie počítače jsou situace, které nabývají na nebezpečnosti, pokud k nim dojde uprostřed aktualizace sestávající se z více kroků. Je-li aktualizace provedena pouze zčásti, databáze se může dostat do nekonzistentního stavu. Na některých discích může v důsledku výpadku během operace zápisu dojít i k neopravitelnému poškození sektoru. Pak tato havárie přechází na případ uvedený pod dalším bodem.

Poškození paměťového média

Údaje, které byly zaznamenány na disk mohou být vlivem chyby povrchu média nečitelné. V takovém případě je velmi významný fakt, zda se nečitelnost odhalí již při zápisu, nebo až při čtení. V prvním případě je náprava podstatně jednodušší.

Selhání uživatele

Systém přístupových práv zabrání tomu, aby neoprávněný uživatel manipuloval s daty. Nezabrání však oprávněnému uživateli "v náhlém pominutí smyslů" zničit důležitá data.

Dále v této sekci popíšeme, jak se lze proti jednotlivým druhům katastrof bránit.

Seznam subsekcí:

  • Ochrana přesměrováním zápisu
  • Ochrana záložní kopií a journalem změn
  • Jak lze provádět kompletní zálohování databáze?
  • Ochrana parciálním zálohováním
  • Ochrana preventivním zvětšováním databázového souboru
  • Ochrana transakcemi a jištěním transakcí
  • Kontrola konzistence databáze


Ochrana přesměrováním zápisu

Při zápisu údajů na disk může být zjištěno, že příslušný diskový sektor je poškozený a nelze do něj zapisovat. V takovém případě 602SQL automaticky přidělí nové místo na disku a přesměruje všechny odkazy z původního sektoru na nový sektor.

Tato ochrana je velmi jednoduchá, funguje zcela automaticky a nevyžaduje žádnou aktivitu ze strany správce.


Ochrana záložní kopií a journalem změn

Záložní kopie 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 obnovit databázi z kopie, tedy uvést databázi do toho stavu, v němž byla v okamžiku vytvoření kopie.

Záloha se provádí zkopírováním databázového souboru wb8.fil na archivní medium. Výhodné bývá spojit kopírování s komprimací. Při obnovování databáze nahradíme poškozený databázový soubor dříve pořízenou kopií.

Zálohování lze provést buď ručně, nebo jej lze vyvolat z databázové aplikace, anebo lze naplánovat periodické automatické provádění záloh serverem. Zde je popis, jak lze provádět zálohování.

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.

Journal změn

Ochrana databáze záložní kopií má sama o sobě omezenou účinnost, protože záložní kopie časem ztrácí aktuálnost. Lze ji výrazně posílit, pokud se kromě pořizování záložních kopií vede také journal změn.

Ochrana databáze journalem změn je určena pro období, kdy je databáze v rutinním provozu, a nikoli pro dobu vývoje, kdy ještě dochází k častým hlubokým reorganizacím dat.

602SQL server může pracovat tak, že si všechny prováděné změny zaznamenává do určitého zvláštního souboru (journalu). Pokud je obsah poškozené databáze obnoven ze záložní kopie, pak pomocí journalu lze zopakovat všechny aktualizace, které byly provedeny od pořízení kopie až do zadaného okamžiku (např. do okamžiku poškození databáze).

Journal tedy umožňuje plnou restauraci obsahu databáze po téměř každé havárii. Dokáže chránit i před selháním uživatele, a to i v případě, že se na tuto skutečnost přijde až s určitým zpožděním. Pokud některý uživatel provedl destruktivní akci, pak lze nejprve obnovit databázi z kopie a pak na ni "přehrát" z journalu všechny aktualizace s výjimkou té, která neměla být provedena.

Vedení journalu se zapíná na Řídicí konzoli (stránka Parametry / Provozní parametry) nebo přes API pomocí vlastnosti serveru WriteJournal.

Journal je veden v souboru 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.

Pokud po vytvoření nové záložní kopie journal nesmažete, pak lze databází obnovit i ze záložních kopií staršího data. Tím se zvětšuje míra zabezpečení. Na Řídicí konzoli, stránka Nástroje / Přehrávání journalu) lze zjistit datum nejstaršího záznamu v journalu. Máte-li záložní kopie označeny datem, zjistíte, zda se záložní kopie dá ještě použít.

Vedení journalu zvyšuje množství diskových operací potřebných k zápisu do databáze. Toto zvýšení však zpravidla nedosahuje dvojnásobku.

Doporučujeme sledovat velikost souboru obsahujícího journal. Pokud budete vkládat do databáze obrázky nebo editovat rozsáhlé texty uložené v databázi, poroste journal velmi rychle. To by mohlo po čase vést ke kritickému nedostatku místa na disku. Vyčerpání veškerého diskového prostoru uprostřed databázové operace může poškodit databázi. Proto průběžně sledujte, kolik místa na disku zbývá.

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. Proto nedoporučujeme zapínat a vypínat vedení journalu podle okamžitých okolností. Přerušovaně vedený journal nemůže účinně chránit. Výjimkou, kdy má smysl v zájmu rychlosti dočasně vypnout vedení journalu, je restrukturalizace tabulky naplněné velkým množstvím dat nebo rozsáhlý import dat.

Zde je návod, jak používat journal k obnově databáze.


Jak lze provádět kompletní zálohování databáze?

Jedním ze způsobů, jak zajistit databázi proti ztrátě dat, je pravidelné zálohování celého databázového souboru. Níže jsou popsány způsoby zálohování a jejich vlastnosti. Není zde popsáno, jak zálohovat data z důležitých tabulek exportem do souboru nebo replikací na jiný server.

Ruční kopírování databázového souboru

Zálohu databáze lze pořídit tak, že se databázový soubor zkopíruje na jiné místo.

Toto kopírování lze provádět pouze tehdy, když nad souborem neběží databázový server, jinak nelze zaručit integritu zkopírované databáze.

Automatické zálohování databáze

Na Řídicí konzoli, stránka Nástroje / Periodické zálohování (nebo pomocí API funkce Get_property_value) lze nastavit vlastnosti serveru Backup..., definující automatické zálohování databáze. Toto zálohování může probíhat buď se zadanou periodou od startu serveru, nebo v určenou dobu a v určené dny.

Vlastnost | Význam | Příklad hodnoty
BackupDirectory | adresář pro zálohu | e:\zaloha
BackupFilesLimit | počet ponechaných záloh | 7
BUĎ Zálohovat periodicky
BackupIntervalHours | záloha serveru se provede po N hodinách | 12
BackupIntervalMinutes | ... a M minutách běhu | 0
NEBO Zálohovat v určenou dobu
BackupTimeDay1 | určení dne zálohy | 9
BackupTimeHour1 | určení hodiny zálohy | 6
BackupTimeMin1 | určení minuty zálohy | 0
BackupTimeDay2 | určení dne zálohy | 9
BackupTimeHour2 | určení hodiny zálohy | 18
BackupTimeMin2 | určení minuty zálohy | 0
BackupTimeDay3 | určení dne zálohy | 10
BackupTimeHour3 | určení hodiny zálohy | 0
BackupTimeMin3 | určení minuty zálohy | 30

V praxi použijte buď zálohování periodické nebo zálohování v určenou dobu. V uvedených příkladech se zálohuje každých 6 hodin nebo v pracovní dny (po-pá 2x denně v 6:00 a 18:00 a v so+ne 30 min po půlnoci). Čísleník s určením dne:
1 | denně
2 | pondělí
3-8 | úterý až neděle
9 | pracovní dny (po-pá)
10 | volné dny (so-ne)

Záloha se vytváří v adresáři určeném BackupDirectory. Přitom se může testovat, kolik záloh se v tomto adresáři již nachází, a pokud jejich počet překročí nastavený limit BackupFilesLimit, nejstarší záloha se smaže. Záložním souborům se přidělí jméno ve tvaru YYMMDDhh.mmX, kde YYMMDD je rok, měsíc a den, hhmm je hodina a minuta, X je A až D pro jednotlivé části databázového souboru.

Z takto vytvořených záloh lze databázový soubor kdykoli snadno obnovit pomocí tlačítka Obnovit zaznamenané na téže stránce Řídicí konzole.

Pokud se během práce serveru začne vytvářet záloha, provádění většiny operací je pozastaveno na dobu, po kterou se vytváří kopie souboru.

Bezprostředně po vytvoření zálohy se zavolá systémový trigger _on_backup. Díky tomu lze snadno reagovat na úspěšné i neúspěšné zálohování (např. odesláním mailu správci).

Zálohování vyvolané z aplikace

Zálohování databáze může explicitně vyvolat databázová aplikace (platí jen pro aplikace napsané v externím jazyce), například tehdy, když její uživatel zvolí tuto akci v menu nebo když počet provedených změn v databázi překročí určitou mez. Ve vnitřním klientském jazyce není možné zálohu celé databáze provést - je doporučován pravidelný export dat z tabulek v kombinaci se zálohou databáze nastavenou na Řídicím panelu.

Explicitní zálohování provádí funkce Backup_database_file. Podobně jako u automatického zálohování je přitom pozastavena většina normálních operací serveru.


Ochrana parciálním zálohováním

Každý uživatel používající přímo vývojové prostředí si může pořizovat záložní kopie jednotlivých objektů z databáze, dat ze svých tabulek nebo celých aplikací pomocí akcí dostupných na řídicím panelu. K povedení exportu postačí právo číst objekt (pokud objekt není v zašifrovaném stavu).

Autor aplikace by měl zvážit, zda není výhodné přidat do aplikace funkce na export a import veškerých dat. Takové funkce dovolí efektivně zálohovat to, co je třeba, místo celého obsahu databáze.


Ochrana preventivním zvětšováním databázového souboru

602SQL má veškerá data uložena v databázovém souboru (jménem wb8.fil) uloženým na disku. Soubor má po svém vzniku určitou velikost, data zabírají jen malou část. Postupem času objem dat roste a volného místa v souboru ubývá.

Dojde-li při provozu 602SQL k situaci, že je třeba do datového souboru zapsat další údaje a přitom tam již není volné místo, databázový soubor se dynamicky zvětší. Zde však číhá nebezpečí: dojde-li v této situaci k nekorektnímu ukončení serveru (například při výpadku napájení počítače), ta část databázového souboru, která přibyla, se ztratí a tím se poruší konzistence dat.

Této teoretické situaci lze předejít. Vývojové prostředí 602SQL při spuštění kontroluje volné místo v databázovém souboru, a klesne-li pod jistou hranici, vydá varování.

Správce by v této chvíli měl provést doporučované zvětšení databázového souboru. Pokud tak neučiní, bude se tato hláška ukazovat při každém dalším spuštění.

Úpravu velikosti databázového souboru lze provést pomocí Řídicí konzole pro daný SQL server (stránka Nástroje / Úpravy databázového souboru) nebo přes API z aplikačního programu pomocí funkce GetSet_fil_size.


Ochrana transakcemi a jištěním transakcí

Transakce jsou nástrojem, jak spojit provedení několika změn v databázi do jednoho celku. Autor databázové aplikace definuje transakce a server se stará o to, aby se transakce buď provedla jako celek nebo neprovedla vůbec. Tím se brání vzniku nekonzistencí v databázi, protože změny provedené v průběhu transakce se nezaznamenávají před jejím dokončením.

Jištění transakcí

Při provádění transakcí je kritickým okamžikem jejich uzavírání, kdy se změny zaznamenávají do databáze. Mechanismus jištění transakcí zabezpečuje konzistenci databáze i v případě, že by k výpadku počítače došlo během uzavírání transakce. Jištění transakcí může zapnout nebo vypnout správce databáze.

Nic nebrání tomu, aby se jištění zapínalo a vypínalo podle okamžitých okolností. Například během importu velkého množství dat, což je časově náročná operace, je možno jištění transakcí vypnout.

Jištění transakcí se zapíná na Řídicí konzoli nebo přes API pomocí vlastnosti serveru SecureTransactions.

Zápis změn na disk

Většina operačních systému má zabudovanou funkci, která odkládá zápis změn v souborech na disk a tím dosahuje zrychlení práce aplikací. Důsledkem toho však je nedefinovaný stav souborů na disku během práce. Pokud má spolehlivě fungovat jištění transakcí, pak je nezbytné zapisovat při ukončení transakce všechny změny na disk.

Zápis změn na disk se zapíná na řídicí konzoli nebo přes API pomocí vlastnosti serveru FlushOnCommit.

Vliv na rychlost

Zatímco použití transakcí obvykle 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í z databáze nebo vyhledávání nemají transakce žádný vliv. Pro orientaci uvádíme změřený čas provedení 1000 zápisů na velmi pomalém počítači, v závislosti na tom, zda je zapnuto jištění transakcí a zápis změn na disk. Konkrétní hodnoty závisejí na použitém počítači, uvádíme je pro vyjádření závislosti času na způsobu práce.

 | bez jištění, bez zápisu | jištění, bez zápisu | bez jištění, zápis | jištění, zápis
Všechny aktualizace v 1 transakci | 1 | <2 | <2 | <2
Každá aktualizace v nové transakci | 2 | 5 | 41 | 68


Kontrola konzistence databáze

SQL server může provést kontrolu vnitřní konzistence databáze, nad níž pracuje. Přitom odhaluje chyby ve struktuře databázového souboru.

Kontrola konzistence databáze nezahrnuje kontrolu integritních omezení definovaných pro databázové tabulky.

Provádění kontroly konzistence nemůže probíhat souběžně se zpracováním jiných požadavků. Řešení takových konfliktů je popsáno dále.

Druhy chyb v konzistenci

Chyby konzistence databáze lze rozdělit do dvou skupin:

  • chyby, které způsobují horší využití místa v databázi;
  • poškození dat uložených v databázi.

První skupina chyb je neškodná, pouze snižuje efektivitu využití místa na disku. Tyto chyby mohou vzniknout vždy, když SQL server není korektně ukončen.

Druhá skupina chyb znamená, že určitá část dat uložených v databázi není přístupná nebo je přepsána. Takové chyby mohou vzniknout, pokud počítač, na němž běží SQL server, havaruje během uzavírání transakce, a zároveň není zapnuto jištění transakcí nebo je zapnuto odložené zapisování změn na disk.

Pokud se při kontrole konzistence nalezne poškození dat v databázi, informace o zasažených tabulkách se vypíšou do základního logu serveru.

Explicitní vyvolání kontroly konzistence

Kontrola konzistence se provádí buď z Řídicí konzole pro vybraný SQL server, stránka Nástroje / Konzistence databáze nebo ji může také vyvolat klient přihlášený jako konfigurační správce pomocí funkce (cd_)Database_integrity.

Kontrola konzistence se nespustí a funkce vrátí chybu, pokud ve stejném okamžiku server zpracovává požadavek jiného klienta, pokud běží samostatné vlákno, pokud se provádí replikační akce nebo pokud se provádí jiná kontrola konzistence.

Pokud během explicitně vyvolané kontroly konzistence přijde nový požadavek od některého klienta, vrátí se s chybou. Pokud se rozběhne samostatné vlákno nebo replikační akce, budou pozdrženy do dokončení kontroly konzistence.

Automatické provádění periodických kontrol konzistence

SQL server může provádět kontroly konzistence databáze automaticky v zadaných časových intervalech. Pokud vlastnost IntegrCheckInterv má nenulovou hodnotu, pak udává počet sekund mezi kontrolami integrity. Je-li vlastnost nulová nebo není-li definovaná, pak se automatické kontroly neprovádějí.

Interval pro zahájení automatické kontroly se počítá od startu serveru nebo od poslední dokončené kontroly konzistence, přičemž se berou v úvahu kontroly spuštěné automaticky i explicitně.

Pokud uplyne interval pro zahájení automatické kontroly a server právě zpracovává požadavek klienta, běží samostatné vlákno, nebo se provádí replikační akce, kontrola se pozdrží.

Pokud během provádění automatické kontroly přijde požadavek klienta nebo se rozběhne samostatné vlákno, je kontrola zrušena a později se spustí znovu od začátku. Pokud se během provádění kontroly má rozběhnout replikační akce, pozdrží se do dokončení kontroly.

Pokud automatická kontrola odhalí v databázi chybu, která znamená poškození dat, zapíše zprávu do základního logu serveru.


Postupy při záchraně poškozené databáze

Dojde-li k poškození databáze, pak lze k záchraně dat použít tyto postupy:

Problém | Řešení
Poškozené indexy (chyby ve vyhledávání a třídění) | Přebudovat indexy dotčených tabulek
Chyby ve vnitřní integritě databázového souboru | Spuštění oprav integrity
Zničení databáze | Obnovení databáze ze záložní kopie a aktualizace pomocí journalu
Omylem vymazána důležitá data | Obnovení databáze ze záložní kopie a aktualizace pomocí journalu, s vyloučením akcí určitého uživatele v určitém období
Nelze spustit server nad databází | Provést podepření databáze
Nespecifické chyby | Přenést obsah do nové databáze

Seznam subsekcí:

  • Přebudování indexů
  • Opravy poškozené databáze
  • Obnova databáze pomocí záložní kopie a journalu změn
  • Podepření vážně poškozené databáze
  • Odstranění nespecifických chyb


Přebudování indexů

Havárie během aktualizační operace v režimu bez jištění transakcí může mít za následek poškození indexů tabulky. Chyby v indexech se projevují nesprávným vybíráním záznamů podle zadaných kritérií nebo chybným tříděním. Pokud se zjistí, že se chyby omezují pouze na indexy, pak je možné nechat je znovu vytvořit.

Přebudování indexů je podstatně rychlejší a jednodušší akce, než obnovování obsahu databáze ze záložní kopie a její aktualizování z journalu.

Indexy se přebudovávají příkazem Opravit indexy na řídicím panelu. Je v popup menu pro tabulku a také pod tlačítkem Správa tabulky. Stejnou akci lze vyvolat dvojím provedením API funkce Enable_index, jednou s parametrem FALSE a podruhé TRUE.


Opravy 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 602SQL vybaven nástroji, které dokážou nalézt a odstranit některé druhy chyb ve struktuře databáze. Opravování databáze lze vyvolat buď z Řídicí konzole pro vybraný SQL server, stránka Nástroje / Konzistence databáze nebo z programu pomocí funkce (cd_)Database_integrity.

K provedení této akce je nutné zamknutí serveru. Proto akci nelze provést, jsou-li na server připojení jiní uživatelé, běží-li replikace nebo samostatná vlákna.

Příkaz Opravy databáze otevře 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. V prvním případě se chyby pouze vyhledají, v druhém případě i opraví, a zobrazí se počet nalezených resp. opravených chyb.

Při opravování chyb:

  • Je-li zatržen čtverec Ztracené bloky nebo Ztracené kusy diskové paměti, vracejí se tyto objekty do správy volné diskové paměti.
  • 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.
  • 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.
  • 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é.


Obnova databáze pomocí záložní kopie a journalu změn

Vhodné využití záložní kopie databáze a journalu dovoluje obnovit databázi ve stavu bezprostředně před její poškozením.

Pro pochopení spolupráce záložních kopii a journalu je dobré si představit, jak se databáze vyvíjí v čase. Každému časovému okamžiku odpovídá určitý stav databáze. Při vytvoření záložní kopie uložíte stav databáze odpovídající určitému okamžiku. Poté se databáze může měnit a změny se zaznamenávají do journalu. Nahrazením poškozené databáze její záložní kopií se stav databáze vrátí do minulosti, do toho okamžiku, kdy byla kopie pořízena. Chcete-li poté databázi aktualizovat, musíte na ní přehrát ty záznamy z journalu, které vznikly mezi vytvořením záložní kopie a jejím načtením. Tím zopakujete všechny změny, kterými databáze v tomto časovém intervalu prošla. Přehráváním journalu se čas databáze bude postupně posouvat kupředu.

Obnovení databáze ze zálohy

Databázový soubor lze obnovovat pouze tehdy, pokud nad ním právě neběží SQL server.

Obnovení lze provést ručně tak, že zálohu databázového souboru přemístíte do adresáře, kde se nachází databázový soubor, a přejmenujete ji na wb8.fil. Pokud je databázový soubor rozdělen do více částí, je nutno toto provést se všemi jeho částmi.

Jednodušeji lze obnovení provést pomocí Řídicí konzole spuštěné jako samostatný program. Vyberte stránku příslušného serveru, ale nepřipojujte se na něj. Pomocí tlačítka Obnovit ze zálohy na záložce Databáze otevřete dialog, v něm zvolíte nejprve adresář ze zálohami a pak konkrétní zálohu, a provedete obnovení. Takto lze obnovovat pouze ze záložních kopií pojmenovaných standardním způsobem.

Přehrávání journalu

Přehrávání se spouští z Řídicí konzole na stránce Nástroje / Přehrávání journalu. Na této stránce je údaj, odkdy se vede journal. Pokud byl veden bez přerušení, pak záložní kopie pořízené po tomto okamžiku se dají použít k obnově aktuálního stavu databáze, zatímco starší záložní kopie nikoli.

Na stránce se dále zobrazuje, jakému času odpovídá aktuální stav databáze. Během normální práce s databází je to čas provedení poslední aktualizace a pokusíte-li se zahájit přehrávání, 602SQL sdělí, že v journalu není žádný platný záznam, tedy záznam o změně, která by se odehrála po čase odpovídajícím aktuálnímu stavu databáze. Pokud jste však předtím načetli záložní kopii, zobrazuje se stav v minulosti a můžete journal přehrávat.

Omezení přehrávání časem

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 tím posune kupředu na okamžik, který je zapsán ve vybrané aktualizaci.

Před zahájením přehrávání můžete zadat omezení, do jakého času má tento proces pokračovat. Databázi lze aktualizovat po krocích: můžete postupně zvyšovat časový limit a přehrávat určitý interval aktualizací. Není ale možné některý časový úsek přeskočit.

V části Omezení časem můžete vyplnit datum a čas, před nimiž má být přehrávání přerušeno. Tlačítkem Zrušit omezení odstraníte zadané omezení.

Vyloučení uživatele

Z aktualizací lze vyloučit akce, které byly provedeny určitým uživatelem. Jméno tohoto uživatele můžete zvolit v pravé části dialogového okna.

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.

Postup přehrávání journalu

V dialogovém okně řídícím přehrávání journalu je uveden čas, kterému odpovídá aktuální stav databáze. Pokud přehrajete určitou část záznamů, tento časový údaj se posune kupředu.

Stiskem tlačítka Start přehrávání zahájíte přehrávání záznamů z journalu. Během něj se budou přeskakovat záznamy o změnách provedených vyloučeným uživatelem a přehrávání skončí buď dosažením nastaveného časového limitu nebo vyčerpáním obsahu journalu.

Na co je třeba myslet při použití journalu?

Přehrávání journalu je schopno opakovat pouze ty aktualizace, které byly zaznamenány do journalu. Pokud se journal nevedl po celou dobu od pořízení kopie, může to vést k chybám.

Jestliže na akce nezaznamenané do journalu navazují jiné, zaznamenávané akce, nemusí být jejich úspěšné zopakování možné. Pokud se například nezaznamená vložení jednoho záznamu do tabulky a zaznamená se vložení dalších, dojde ke ztrátě synchronizace v číslech záznamů a obnova se nezdaří.

Pokud hodláte načíst záložní kopii databáze a přehrát na ní obsah journalu, musíte tyto akce provést bezprostředně po sobě. Pokud byste totiž po načtení záložní kopie provedli sebejednodušší aktualizaci, posunul by se tím čas posledního zásahu do databáze a z journalu by se nevybraly k přehrání žádné záznamy.

Pokud se v přehrávané části journalu vytvářejí nové objekty, pak práva tvůrce k těmto objektům bude mít správce databáze. Proto může být potřebné po přehrání journalu přidělit určitá práva uživatelům 602SQL.

Co journal nesleduje

Vede-li se journal, zaznamenávají se do něj všechny aktualizace obsahu databáze s těmito výjimkami:

  • přebudování indexů;
  • uvolnění zrušených záznamů;
  • zapomenutí (části) historie;
  • opravování obsahu databáze;
  • změna provozních parametrů databáze.

Journal tedy nezajistí zopakování výše uvedených operací během aktualizace kopie databáze.

Jak postupovat v praxi?

V případě poškození databáze postupujte takto:

  1. Pořiďte si kopii aktuálního stavu databázového souboru wb8.fil, neboť vzhledem k výše uvedeným omezením nelze zcela vyloučit neúspěch operace;
  2. obnovte databázi tak, že databázový soubor wb8.fil přepíšete obsahem poslední záložní kopie;
  3. spusťte Řídicí konzoli (pokud není spuštěna již z předchozího kroku) a přehrajte na databázi záznamy z journalu.

Pokud jste po vytvoření záložní kopie nesmazali journal, pak budete mít možnost obnovit databázi z posledních dvou kopií, a tak dále. Jistíte se tedy i proti případu, že by některá záložní kopie byla nečitelná.


Podepření vážně poškozené databáze

I z databáze, které se dostala do takového stavu, že na ní nelze spustit server, je možné získat uložená data.

Stav vhodný pro podepření databáze se projevuje hlášeními jako Poškozen databázový soubor případně i Chybná verze serveru nebo se ztratí přidělená práva a není možné se nijak přihlásit. K této situaci může dojít například tehdy, pokud nějaký program přepíše část obsahu databázového souboru.

I v této situaci mohou však některé části dat v databázi být nepoškozené. Podepření databáze se pokusí uvést databázi do takového stavu, aby se šlo k serveru přihlásit, nepoškozená data exportovat a poté je přenést do nově vytvořené databáze.

Nepoužívejte podepírání databáze v situaci, kdy se server spustit sice dá, ale některá její část je poškozená nebo některá data scházejí. V tomto případě podepření nepomůže. Podepření nelze provést na šifrovaný databázový soubor.

Podepření poškozené databáze

Podepření lokální databáze lze provést z Řídicí konzole 602SQL. Na stránce SQL server xyz, záložce Databáze stiskněte tlačítko Podepřít poškozenou databázi (aktivní v době, kdy není správce přihlášen). Po dvojím vážném varování se záchranná akce provede.

Restaurování databáze

Po úspěšném podepření databáze spusťte vývojové prostředí 602SQL s parametrem /B (upravte příkazovou řádku zástupce). Tento parametr zabrání případné kompilaci programu ve vnitřním jazyce při otevírání aplikace a tím i zápisu na disk.

Dále pak proveďte export definic objektů a dat z tabulek do souborů. Data doporučujeme exportovat ve vnitřním formátu. Je jistější exportovat jednotlivé komponenty každé aplikace než aplikaci jako celek, protože jedna poškozená komponenta zabrání exportu dalších komponent aplikace.

Nepokoušejte se do podepřené databáze cokoli zapisovat!

Po exportu všech objektů a dat, která se dají zachránit, vytvořte databázi znova.

Jsou-li programy 602SQL nepoškozeny, nemusíte ji instalovat z distribučních disket, ale stačí vytvořit databázi pomocí akce Vytvořit databázi z řídicího panelu nebo z Řídicí konzole.

Po novém vytvoření je databáze prázdná a můžete do ní importovat data zachráněná z poškozené databáze.


Odstranění nespecifických chyb přenosem dat do nové databáze

Vyskytne-li se v databázi chyba, na jejíž řešení se nehodí žádný z popsaných postupů, lze se jí zbavit poměrně jednoduchým postupem:

  1. Exportujte z databáze všechny aplikace, včetně dat a práv uživatelů, skupin i rolí. Každou aplikaci exportujte do zvláštního adresáře, aby se stejně pojmenované objekty v různých aplikacích navzájem nepřepsaly.
  2. Exportujte z databáze všechny uživatele pomocí příkazu Export všech uživatelů, skupin a klíčů z menu Nástroje.
  3. Založte novou databázi a připojte se k ní.
  4. Importujte do databáze všechny uživatele pomocí příkazu Import všech uživatelů, skupin a klíčů z menu Nástroje.
  5. Importujte do databáze všechny vyexportované aplikace.

Pokud chyba brání exportu některé aplikace, pokuste se z ní exportovat alespoň jednotlivé nepoškozené objekty. Nedaří-li se exportovat data z některé tabulky, pokuste se exportovat alespoň část záznamů vybranou vhodně položeným dotazem.


Administrování SQL serveru

Oprávnění k administrování serveru uživatel získává tím, že se stane členem některé administrativní skupiny. Jsou to tyto tři skupiny: CONFIG_ADMIN, DB_ADMIN a SECURITY_ADMIN.

Skupina provozních správců CONFIG_ADMIN

Úkolem provozních správců je zajišťovat provoz SQL serveru, zejména nastavovat provozní parametry a řešit nestandardní situace. Mezi jejich oprávnění patří:

  • Definování logů a zařazování požadavků na trasování do logů (kromě trasování dat)
  • Čtení obsahu všech logů (základní log mohou číst všichni uživatelé)
  • Nastavení parametrů síťové komunikace, například síťového protokolu
  • Nastavení IP adres, ze kterých je povolen nebo zakázán přístup klientů
  • Nastavení adresářů pro knihovny externích funkcí, které lze volat ze serveru
  • Zvětšování a zkompaktňování databázového souboru
  • Příprava databáze pro umístění na CD ROM
  • Nastavení parametrů periodického zálohování a provedení ad-hoc zálohy databáze
  • Přehrání obsahu journalu
  • Spuštění oprav integrity databázového souboru
  • Vytváření a rušení uživatelů a skupin uživatelů
  • Povolování a zakazování jednotlivých uživatelských účtů
  • Násilné odpojování klientů přihlášených na server nebo přerušování akcí prováděných klientem na serveru
  • Odstraňování zámků umístěných klienty na objektech na serveru
  • Role Author a Administrator v aplikaci _sysext, z čehož vyplývá například možnost editovat systémové triggery
  • Nastavení řady dalších provozních parametrů

Další oprávnění může provozní správce získat, pokud mu je přidělí bezpečnostní správce. Jde o právo zařazovat a vyřazovat uživatele do a ze skupin uživatelů a skupiny provozních správců.

S právy provozního správce se provádějí například systémové triggery _on_server_start, _on_server_stop, _on_backup a další.

Skupina datových správců DB_ADMIN

Datový správce má maximální práva ke všem datům a objektům umístěným na serveru. To znamená, že může číst, vkládat, přepisovat a rušit všechny záznamy v databázi a objekty.

Provoz databázových aplikací většinou nevyžaduje existenci datového správce a v některých případech je existence datového správce přímo v rozporu s koncepcí datového soukromí v aplikacích. V typickém stavu proto na serveru nebude žádný datový správce. Části jeho úlohy převezmou administrativní role vytvořené podle potřeby v jednotlivých aplikacích. Existence skupiny datových správců má za účel zachování kompatibility s některými staršími aplikacemi a také poskytnutí "zadních vrátek" pro řešení nestandardních situací na serveru.

Skupina bezpečnostních správců SECURITY_ADMIN

Úkolem bezpečnostního správce je učinit klíčová rozhodnutí týkající se bezpečnosti provozu SQL serveru. Bezpečnostní správce do normálního provozu serveru nezasahuje.

V menších firmách může být bezpečnostním správcem majitel nebo manažer, ve větších firmách pak osoba stojící mimo normální provoz a zodpovídající za bezpečnostní koncepci.

Mezi oprávnění bezpečnostního správce patří:

  • Rozhodovat o tom, zda server bude mít datového správce, a zařazovat uživatele do skupiny datových správců
  • Nastavovat trasování čtení a zápisu dat do tabulek
  • Povolit nebo zakázat přístup anonymního uživatele na server
  • Nastavit minimální délku uživatelského hesla a expirační dobu hesel
  • Rozhodovat, zda se bude využívat "one-time-password" s omezeným počtem použití
  • Rozhodovat o šifrování databázového souboru
  • Vybrat doménový server, z něhož se bude přebírat přihlášení
  • Manipulovat s tajným klíčem SQL serveru
  • Rozhodovat o šifrování síťové komunikace
  • Rozhodovat, zda provozní správcové mohou zařazovat a vyřazovat uživatele do/ze skupiny provozních správců
  • Rozhodovat, zda provozní správcové mohou zařazovat a vyřazovat uživatele do/z uživatelských skupin
  • Změnit heslo libovolného uživatele


Nastavení bezpečnostní politiky databáze

Pokud je některá databáze provozována bez možnosti přístupu po síti a pokud k počítači s databází má fyzický přístup pouze jediná osoba, pak není nutno dělat žádná bezpečnostní opatření.

Pokud však databázi bude sdílet více uživatelů, pak je pro ní třeba zvolit určitou bezpečnostní politiku.

Po vytvoření uživatelských účtů v databázi následují tyto kroky:

  1. Zařazení některého uživatele do skupiny bezpečnostních správců.
  2. Zařazení jednoho nebo více uživatelů do skupiny provozních správců.
  3. Vyřazení anonymního uživatele ze skupin provozních, datových a bezpečnostních správců.

Další kroky provede uživatel přihlášený jako bezpečnostní správce:

  1. Rozhodnutí, zda se přihlášení k databázi bude přebírat z některého doménového serveru.
  2. Rozhodnutí, zda provozní správcové budou mít oprávnění zařazovat uživatele do své skupiny.
  3. Rozhodnutí, zda provozní správcové budou mít oprávnění zařazovat uživatele do vytvořených uživatelských skupin.
  4. Rozhodnutí, zda je potřeba vytvořit datového správce a případné zařazení některého uživatele do této skupiny.

Další možná nastavení vztahující se k bezpečnosti lze nalézt v popisu zabezpečení databáze proti útokům a v seznamu oprávnění jednotlivých správců.


Zabezpečení databáze proti útokům

Míru zajištění serveru proti útokům zvenčí lze nastavit pomocí řady vlastností. Jednotlivé vlastnosti se dají nastavit buď pomocí API funkce (cd_)Set_property_value nebo interaktivně na Řídicí konzoli serveru.

Přístup anonymních uživatelů na server

Vlastnost DisableAnonymous určuje, zda se serverem smí pracovat anonymní uživatel. Přestože anonymní uživatel má obvykle minimální práva, může například posíláním velkého počtu požadavků vázat na sebe část výkonu serveru. Proto součástí zabezpečení serveru proti útoku může být zákaz přístupu pro anonymí uživatele. Tuto vlastnost nastavuje bezpečnostní správce.

Omezení síťových adres pro přístup na server

Pomocí filtrování IP adres (vlastnosti IP_enabled_addr[N], IP_enabled_mask[N], IP_disabled_addr[N] a IP_disabled_addr[N]) lze určit, ze kterých IP adres se mohou na server připojovat klienti. Lze například omezit přístup na server na IP adresy ve firmě a její pobočkách. Takové omezení má smysl, pokud se obáváme, že by neoprávněná osoba zvenčí mohla uhodnout heslo některého uživatele. Tyto vlastnosti nastavuje provozní správce.

Vlastnost DisableFastLogin určuje, zda další klient přicházející ze stejné síťové adresy jako již přihlášený klient musí projít normálním přihlášením, nebo se přihlásí automaticky a pod stejným jménem. Vlastnost je nutno aktivovat, pokud více stanic může sdílet stejnou síťovou adresu. Tuto vlastnost nastavuje bezpečnostní správce.

Minimální délka hesla

Vlastnost MinPasswordLen udává minimální délku uživatelského hesla. Pokud má hodnotu 0, pak hesla mohou být libovolně dlouhá. Nastavením minimální délky hesla lze zabránit použití příliš krátkých hesel a snížit pravděpodobnost uhádnutí hesla. Tuto vlastnost nastavuje bezpečnostní správce.

Expirační doba hesla

Vlastnost PasswordExpiration udává počet dnů, po který uživatel může používat stejné heslo. Po uplynutí této doby si uživatel musí heslo změnit. Pokud vlastnost má hodnotu 0, pak hesla mají neomezenou platnost. Pomocí této vlastnosti může bezpečnostní správce nutit uživatele, aby pravidelně obměňovali svá hesla.

Použití trvale platných hesel

Mechanismus "one-time-password" vyžaduje, aby každé heslo bylo změněno po dosažení maxima počtu použití (řádově tisíce). To může vadit, pokud heslo využívají klienti, kteří se velmi často přihlašují a odhlašují (např. aplikace přistupující pře PHP klienta). Bezpečnostní správce může pomocí vlastnosti UnlimitedPasswords změnit způsob přihlašování tak, že hesla jsou použitelná neomezený počet krát. Všechny tři vlastnosti týkající se hesel se interaktivně nastavují z Řídicí konzole serveru na stránce Parametry / Identifikace a bezpečnost .

Omezení přístupu k externím knihovnám z databázových aplikací

Procedury uložené na serveru mohou volat funkce umístěné v externích knihovnách DLL (so na Linuxu). Teoreticky by tak mohly spustit destruktivní akce na počítači, na němž běží SQL server. Proto je nutno dovolit přístup pouze ke knihovnám určeným pro podporu běhu databázových aplikací. Adresáře, ze kterých je možné spouštět tyto knihovny se specifikují pomocí vlastností Dir[N], které nastavuje provozní správce. Interaktivní nastavení se provede z Řídicí konzole serveru na stránce Parametry / Identifikace a bezpečnost / Adresáře pro DLL/SO.

Ochrana databázového souboru

Databázový soubor je nutno zajistit proti poškození. Toho lze docílit kombinací fyzické ochrany počítače obsahujícího databázi a ochrany databázového souboru pomocí přístupových práv. Databázový soubor by neměl být viditelný ze sítě.

Pro provoz SQL serveru není třeba přidělit uživatelům (operačního systému) žádná práva k databázovému souboru. Tato práva stačí přidělit účtu, pod nimž poběží server. Pokud SQL server pracuje jako Win služba na systémový účet, pak práva pro přístup k databázovému souboru je třeba přidělit systému. Situace na Linuxu je popsána zde

V praxi však může nastat situace, kdy není možno provozovat server pod účtem, k němuž nemá přístup žádný uživatel. Kvalifikovaný uživatel by pak mohl analyzovat databázový soubor, přečíst z něj utajená data nebo nějaká data v něm pozměnit. Proti tomuto nebezpečí je vhodné databázový soubor šifrovat.

V 602SQL jsou implementovány tři způsoby šifrování:

  • Jednoduché a rychlé šifrování bez hesla.
  • Jednoduché a rychlé šifrování založené na heslu zvoleném uživatelem.
  • Velmi účinné, ale pomalejší šifrování (DES) založené na heslu zvoleném uživatelem.

První způsob šifrování může být prolomen odborníkem při vynaložení středního úsilí, druhý způsob lze prolomit při použití značného úsilí. Třetí způsob je založen na kvalitním šifrovacím algoritmu a šance na jeho prolomení existuje pouze teoreticky při vynaložení extrémních nákladů. Použití třetího způsobu však zpomalí činnost serveru.

Při použití druhého nebo třetího způsobu je nutno při spouštění serveru zadat šifrovací heslo. Nehodí se proto v těchto případech:

  • SQL server se startuje automaticky po naběhnutí systému a musí se bez zásahu obsluhy rozběhnout po restartu počítače.
  • Lokální SQL server je spouštěn klientem podle okamžité potřeby a není vhodné žádat v takové situaci uživatele, aby zadal heslo.

Šifrování nastavuje bezpečnostní správce pomocí Řídicí konzole serveru na stránce Parametry / Identifikace a bezpečnost / Šifrování databáze nebo nastavením vlastnosti FilEncrypt.

Ochrana proti "falešným serverům"

Narušitel může vyrobit falešný síťový SQL server vystupující pod stejným jménem jak pravý server a napodobující jeho činnost. Tímto způsobem se může pokusit získat tajné informace od klientů nebo uvést je v omyl poskytnutím falešných dat. Proti tomuto nebezpečí se lze bránit spolehlivým ověřením identity SQL serveru.

Ochrana proti odposlechu a narušování síťové komunikace

V počítačových sítích je možno zachytávat cizí přenášená data a při využití vhodných nástrojů je lze i pozměňovat. Proti tomu se lze chránit šifrováním síťové komunikace mezi klientem a serverem.


Komunikace mezi klientem a serverem a síťové protokoly

Na 602SQL Server pod Windows se lze připojit pomocí těchto síťových protokolů: TCP/IP, NetBEUI a IPX/SPX. Klient běžící na stejném počítači může na server přistoupit také přímo, bez síťového protokolu.

Na UNIXových platformách se používá pouze protokol TCP/IP.

Volba protokolu IPX/SPX je aktivní pouze v případě, že je na počítači instalován produkt Client32 od firmy Novell.

Komunikace pomocí protokolu NetBEUI je oproti ostatním znatelně pomalejší.

Volba protokolů SQL serveru

Na server mohou být v jednom okamžiku připojení klienti různými síťovými protokoly i přímo. Protokoly, které server podporuje, se volí na Řídicí konzoli serveru ve větvi Parametry / Přístup po síti zatržením příslušných čtverců.

Pokud 602SQL Server běží pod Windows, pak úspěšně spuštěné síťové protokoly jsou uvedeny v jeho okně. Změna vybraných protokolů se projeví až po vypnutí a zapnutí serveru.

Volba protokolu klienta

Klient se může připojit na 602SQL Servery, které jsou u něj zaregistrovány. Mezi registračními údaji serveru je i protokol používaný pro připojení. Pokud pro určitý server není protokol nastaven nebo pokud se klient připojuje na server, který není zaregistrován, pak použije globálně nastavený protokol. Klient se dokáže po síti napojit na server pouze tehdy, pokud oba používají společný síťový protokol.

Síťový protokol klienta se volí na Řídicí konzoli. Na stránce Nastavení klienta a přístupů se nastaví globální protokol klienta. Pro jednotlivé registrované servery lze protokol klienta nastavit na jejich stránkách.

Globální protokol je uveden na informační řádce okna vývojového a provozního klienta v době, kdy ještě není na žádný server připojen. Změna globálního protokolu klienta se projeví až po jeho vypnutí a zapnutí.

Seznam subsekcí:

  • Protokol TCP/IP
  • Filtrování IP adres
  • Odpojování nekomunikujících klientů
  • Zabránění anonymního přístupu
  • Vzdálený přístup klienta na server
  • Ověřování identity SQL serveru v síti
  • Šifrování síové komunikace mezi klientem a serverem
  • Řešení problémů se síovým připojením


Protokol TCP/IP

Protokol TCP/IP je nejčastěji používaným protokolem 602SQL. 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 zapisovanou jako 4 čísla oddělená tečkami, například "194.196.210.54". IP adresa je buď pevně nastavena na počítači nebo je přidělována dynamicky jiným 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.

TCP/IP ve Windows

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 v položce Internet (máte-li ji tam) doporučujeme vypnout automatické vytáčení. Jinak by se při inicializaci protokolu v 602SQL mohlo začít 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í.

Aktivní hledání SQL serverů v lokální síti

Pokud je na stránce Nastavení klienta a přístupů na řídicí konzoli zatržen označovací čtverec Aktivní hledání serverů v lokální síti (TCP/IP broadcast), pak klient spuštěný bez udání serveru osloví 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.

Číslo portu pro TCP/IP

Komunikace klientů a serveru s protokolem TCP/IP využívá 3 po sobě jdoucí čísla portů. Standardně jsou to čísla 5001, 5002 a 5003. Pokud by tato čísla byla obsazena jiným programem nebo pokud je třeba na jednom počítači spustit více SQL serverů, pak je třeba serveru přidělit jiná čísla a tato čísla také zaznamenat u všech klientů, kteří se na tento server budou připojovat.

Číslo portu, na němž bude server nabízet klientům své služby, je uloženo mezi vlastnostmi serveru. Je třeba jej proto nastavit pomocí řídicí konzole na stránce Parametry / Přístup po síti. Informace pro klienta, na kterém čísle portu má hledat server, je uložena na stránce Klientský přístup. Pouze při nastavení stejných čísel na obou stranách se klient bude schopen připojit na server.


Filtrování IP adres klientů

602SQL 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 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.

Pří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í pomocí tzv. vlastností SQL serveru . 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_disabled_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_disabled_mask1=192.168.1.254

povoluje přístup ze všech adres kromě 192.168.1.182 a 192.168.1.183.


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.

Je-li nečinný klient odpojen serverem a poté se pokusí opět se serverem pracovat, všechny jeho požadavky skončí chybou CONNECTION_LOST.

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á pomocí těchto vlastností serveru:

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

Tyto vlastnosti lze nastavit na Řídicí konzoli serveru na stránce Parametry / Přístup po síti.

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 hlavním logu serveru. Není-li hodnota KillTimeLogged zadána (defaultní stav), dojde k odpojení po 23 hodinách nečinnosti klienta


Zabránění anonymního přístupu

Na každém 602SQL serveru existuje anonymní uživatel, který se přihlašuje s prázdným jménem i heslem. Pro bezpečnost provozu serveru přístupného zvenčí je třeba omezit možnosti anonymního uživatele.

Anonymního uživatele je třeba vyřadit ze skupin správců a z rolí v aplikacích a odebrat mu práva k objektům a datům. I poté však anonymní uživatel může například přečíst seznam uživatelů, může sledovat výpisy logu serveru, vidí názvy aplikací apod.

Proto existuje možnost zabránit anonymnímu uživateli jakkoli pracovat se serverem a konzumovat licence. Je-li na SQL serveru nastaveno takovéto omezení, pak jako vedlejší efekt se v dialogu pro přihlášení nezobrazuje seznam uživatelů v combu, nýbrž je nutné zadat jméno z klávesnice.

Zákaz anonymního přístupu řídí vlastnost serveru DisableAnonymous. Interaktivně ji lze nastavit na Řídicí konzoli serveru na stránce Parametry / Identifikace a bezpečnost.


Vzdálený přístup klienta na server

Klient a server 602SQL nemusí nutně běžet ve stejné lokální síti. Zde popíšeme:
  • přímé telefonní spojení klienta a serveru;
  • spojení přes Internet.

Nebudeme zde popisovat přístup do databáze přes webový prohlížeč, protože využívá odlišné protokoly a jsou mu věnovány zvláštní kapitoly.

Přímé telefonní spojení znamená, že klientův počítač vytočí telefonní číslo, na němž čeká modem síťového serveru. Server na zavolání zvedne telefon a připojí klienta do své sítě. Databázový klient se pak může připojit na SQL server a jejich komunikace probíhá pomocí modemů po běžné telefonní lince. Pokud server chce tímto způsobem současně obsluhovat více klientů, musí mít více modemů.

Spojení přes Internet znamená, že se klient a server připojí do Internetu, který pak zajišťuje jejich komunikaci. Klient i server mohou být zapojení do Internetu buď přes telefonní síť (tak, že předtím zavolali na číslo poskytovatele přístupu), nebo mohou mít pevnou linku - typicky se pevná linka bude vyskytovat na straně serveru. Server může tímto způsobem obsluhovat libovolný počet klientů, aniž by potřeboval dodatečná technická zařízení.

Ve 602SQL je v obou případech dálkového spojení nutno provést tato nastavení:
  1. na serveru nastavíte přístup přes protokol TCP/IP a poskytování služeb v síti (lze ověřit v okně běžícího serveru);
  2. u klienta zaregistrujte vzdálený server, s nimž chcete komunikovat zadáním jeho jména a IP adresy (nebo jména hostitele).
  3. u klienta (na Řídicí konzoli pro vzdálený SQL server, záložka Klientský přístup) nastavíte protokol TCP/IP (implicitní nastavení);

Ve Windows je nastavení složitější. V každém případě musíte instalovat síťový protokol TCP/IP a další komponenty popsané níže. Detailnější informace naleznete například v knize "Microsoft Windows Resource Kit". Vytvořené spojení mezi počítači můžete ověřit utilitou PING (je součásti Windows), s výjimkou případu komunikace přes firewall.

Bez zaregistrování jména serveru a jeho IP adresy (nebo jména hostitele) nelze na počítači s databázovým klientem vidět server běžící mimo lokální síť.

Ověření rychlosti síťového spojení

Rychlost komunikace po telefonních linkách nebo v Internetu je zřetelně nižší než v lokální počítačové síti. Tuto rychlost lze kvantifikovat dvojím způsobem:

  • na základě přenosové kapacity sítě (např.: Jak dlouho trvá přenesení 1 MB dat mezi dvěma počítači?) nebo
  • na základě doby obrátky v síti (např.: Jak dlouho trvá 1000 výměn typu dotaz-odpověď nepřekrývajících se v čase, pokud dotazy i odpovědi jsou velmi krátké?).

Rychlost komunikační sítě mezi klientem a serverem lze změřit tak, že na řídicím panelu klienta se připojíte na server a stisknete tlačítko Rychlost spojení. Z programu lze tytéž údaje o rychlosti získat pomocí funkce (cd_)Connection_speed_test.

Pokud klient a server běží na stejném počítači, pak měření poskytuje informaci pouze o rychlosti počítače a efektivitě meziprocesové komunikace v operačním systému. Pokud server a klient komunikují po síti, pak lze na základě změřených údajů odhadnout, zda aplikace bude poskytovat přijatelnou dobu odezvy.

Optimalizace aplikace pro práci v rozlehlé síti

U aplikací pracujících v rozlehlých sítích je často nutno navrhovat komunikaci klienta se serverem tak, aby omezená rychlost komunikační linky nezpůsobila nepřijatelnou dobu odezvy. Toho lze dosáhnout dvěma cestami:

  • návrhem aplikace přihlížejícím ke komunikační náročnosti operací - viz Příručka vývojáře, kapitola Šíření aplikace.
  • ukládáním kopie objektů, s nimiž aplikace pracuje, do cache na počítači klienta - viz kapitola Architektura a instalace.

Vhodně navržená aplikace se dá vcelku pohodlně provozovat po modemu s přenosovou rychlostí již 14.4 - 16.8 Kbps.

Provozní výsledky však nezávisí pouze na vlastnostech aplikace, ale i na konkrétních poměrech v síti. Na rozdíl od přímého telefonního spojení nelze při komunikaci po Internetu předem říci, jak dlouhou dobu spotřebuje paket na cestě. V době psaní tohoto manuálu nebylo obtížné najít dvojici poskytovatelů přístupu na Internet, mezi nimiž sebemenší paket putoval okolo jedné sekundy a ztrátovost paketů byla 40 procent. Za takových podmínek se sice spojení klienta a serveru nerozpadne, ale časové prodlevy aplikaci zcela znehodnotí.

Telefonické připojení sítě ve Windows

Telefonické připojení sítě (Dial-Up Networking) je obecný nástroj, který pomocí modemu zapojí počítač do vzdálené sítě.

Tento nástroj musí být k dispozici pro uskutečnění přímého telefonního spojení klienta a serveru. Pro spojení přes Internet jej potřebuje pouze ten počítač, který není v síti zapojené do Internetu. Z několika možných protokolů komunikace mezi počítači propojenými telefonem se využije tzv. Point-to-Point Protocol (PPP).

Před zkoumáním telefonického připojení sítě ověřte v položce Síť na Ovládacích panelech nastavení protokolu TCP/IP. Pokud počítač není zapojen do Internetu, pak jako IP adresy v lokální síti můžete využít některé pro tento účel vyhrazené úseky adres, například 192.196.xyz.1 až 192.196.xyz.254 (xyz je číslo z rozsahu 0 až 255). V jedné lokální síti použijte adresy z jednoho úseku (stejné hodnoty xyz), v sítích na straně klienta a na straně serveru použijte různé úseky (různé hodnoty xyz). Můžete také využít možnost přidělovat IP adresy DHCP serverem.

Pod Windows je telefonické připojení sítě standardní součástí systému. Pokud není na vašem počítači instalováno, doinstalujte jej. Položka pro otevření složky a nastavování vlastností telefonického připojení je ve složce Tento počítač na pracovní ploše a také ve startovním menu Programy / Příslušenství (/ Komunikace).

Ve složce Telefonické připojení sítě kliknutím na Vytvořit nové připojení (Make New Connection) vytvoříte připojení na počítač, na němž:

  • běží telefonní (a případně i databázový) server - usilujete-li o přímé telefonní spojení;
  • je poskytovatel přístupu do Internetu - usilujete-li o spojení přes Internet.

Zadáte přitom jméno tohoto připojení a telefonní čísla (směrové, místní) potřebná k dovolání se na server. Není-li na vašem počítači dosud instalován modem, instaluje se během vytváření tohoto připojení.

Nově vytvořené připojení se objeví ve složce Telefonické připojení sítě. Na jeho panelu vlastností nastavte:

  • Typ serveru: zvolte typ PPP;
  • Možné síťové protokoly: zatrhněte TCP/IP;
  • Další možnosti: možno zatrhnout Přihlásit se k síti, pokud chcete používat síťové zdroje sítě, v níž běží server, a dokážete se do ní přihlásit se stejným jménem a heslem, které jste zadali při vstupu do Windows. Nezatrhávejte, pokud v cílové síti vaše jméno a heslo nebude přijato.

Spojení klienta se serverem přes telefonní okruh

Strana klienta

Na počítači, na němž poběží databázový klient, instalujete výše popsaným způsobem Telefonické připojení sítě.

Ve složce Telefonické připojení sítě můžete příkazem Nastavení v menu Připojení otevřít dialogové okno, v němž lze vyznačit, zda se počítač má tázat před vytvořením telefonního spojení, nebo zda má automaticky přistoupit k vytáčení.

Na řídicí konzoli klienta v sekci Nastavení klienta a přístupů / Přístup na servery na stránce příslušného serveru vyberte z comba název telefonního spojení vytvořeného ke komunikaci se serverem.

Pokud komunikujete pomocí protokolu TCP/IP v lokální síti a obtěžují vás pokusy o vytáčení čísla, kdykoli se databázový klient pokouší připojit na server, pak na Ovládacích panelech pomocí položky Internet zrušte volbu automatického vytáčení čísel.

Strana serveru

Funkci telefonního serveru pro přímé telefonní spojení může plnit počítač vybavený systémem:

  • Windows 95 s nástavbou "Microsoft Plus!", nebo
  • Windows NT 3.51 Server a vyšší.

V prvním případě může telefonní server obsluhovat pouze jednoho klienta a databázový server musí běžet na tom počítači, na nějž se klient dovolal. V druhém případě může telefonní server obsluhovat až 256 dovolavších se klientů a databázový server může běžet na kterémkoli počítači v síti počítače s telefonním serverem (a obecně i kdekoli v Internetu, pokud tam má přístup počítač, na němž běží telefonní server).

Ve Windows 95 s nadstavbou Plus! se telefonní server zapíná a nastavuje v dialogovém okně, které otevřete příkazem Server telefonického připojení z menu Připojení složky Telefonické připojení sítě. V něm můžete povolit nebo zakázat připojení se klienta a tlačítkem Typ serveru otevřít okno, v němž zvolíte typ serveru PPP.

Ve Windows NT využijete služby RAS (Remote Access Server) dle manuálů k tomuto systému. Nezaměňujte název této služby s protokolem RAS, který byl využíván ve starších verzích Windows, ale v současnosti je nahrazován protokolem PPP.

Problémy s navazováním spojení

Navázání spojení klienta 602SQL se serverem po telefonu pomocí TCP/IP není úplně jednoduchá záležitost. Většinou bude vyžadovat určitý čas věnovaný zkoušení a nastavování parametrů na třech nebo čtyřech různých místech Windows nebo 602SQL na každém počítači. A je ověřeno, že i když je všechno nastaveno tak, jak má, nemusí Windows spolupracovat.

Popisovat spojení budeme ze strany klienta.

Spojení klienta se serverem 602SQL po telefonu lze rozdělit do několika na sebe navazujících kroků, z nichž v každém se může projevit určitá nesnáz. První dva kroky se týkají pouze telefonického připojení počítače, další tři pak komunikace 602SQL.

Prvním krokem je dovolat se na telefonní server. Ve složce Telefonické připojení sítě dvakrát klikněte na propojení vytvořené podle předchozích odstavců. Objeví se okno Připojit, v němž můžete ještě upravit vlastnosti vytáčení a můžete zadat své jméno a heslo, pokud vyžadujete připojení do sítě. Tlačítkem Připojit začnete vytáčet telefonní číslo serveru.

Modem signalizuje vytáčení, informační okno ukazuje stav "Vytáčí se..." Po chvilce se stav v okně změní na "Ověřuji uživatelské jméno a heslo...". Telefonní server byl nalezen a komunikuje.

V tomto kroku by neměly nastat větší problémy. Je nutné mít správně nainstalovaný a nakonfigurovaný modem - viz manuály k modemu. Je nutné mít na straně serveru povolený telefonní přístup a na straně klienta správně zadat vlastnosti vytáčení (telefonní číslo, typ serveru, IP adresu klienta).

Informační okno vytáčení poté zmizí a (je-li to v konfiguraci dovoleno) objeví se okno nebo ikona signalizující fungující spojení. Tlačítkem Detaily si můžete zkontrolovat protokoly, kterými komunikujete a jaký typ serveru se spojil.

Místo úspěšného propojení se může objevit chybová hláška, ukazující na špatné nastavení v okně Typ serveru ve vlastnostech používaného telefonního připojení (špatná nebo chybějící IP adresa, použití protokolu, který na druhé straně není instalován apod.). V takovém případě opravte nastavení, začněte s minimální konfigurací (pouze TCP/IP s IP adresou stejnou jaká je v nastavení sítě), případně hledejte příčinu v manuálech Windows.

Pokud spojení bylo úspěšně vytvořeno, je možno spustit 602SQL. Nastavení komunikačního protokolu klienta musí být TCP/IP. Z nabídky serverů na řídicím panelu vyberte zaregistrovaný vzdálený server (přepokládáme, že již běží).

Pokud okno spojení poté nesignalizuje odesílání paketů, jedná se o špatné nastavení vlastností sítě. Zkontrolujte, existuje-li vazba TCP/IP na telefonní adaptér a má-li nastavenu správnou IP adresu. Případně zrušte vazbu ostatních protokolů na telefonní adaptér, případně zrušte vazbu TCP/IP na síťovou kartu.

Pokud modem stále jen odesílá pakety a žádné nepřijímá, je nutné změnit parametry sítě na straně serveru. Zkuste dočasně odstranit vazbu TCP/IP na síťovou kartu, ponechte pouze TCP/IP na telefonní adaptér a vyzkoušejte spojení znovu. Pokud to pomůže, znovu doplňte vazby (odstraněním a přidáním síťové karty) ve stejné podobě jako byly dříve.

Když klient naváže spojení se serverem, objeví se logovací dialog.

Spojení klienta se serverem přes Internet

Na Internet může být počítač připojen dvojím způsobem:

  • buď v jeho síti běží brána, která spojuje lokální síť se zbytkem světa;
  • nebo se počítač modemem a telefonní linkou napojuje na poskytovatele přístupu na Internet.

Je-li síť zapojena do Internetu, pak je věcí brán a směrovačů, aby zajistily komunikaci databázového klienta a serveru. V parametrech protokolu TCP/IP se buď vyplní vlastní IP adresa, adresa brány a adresa DNS serveru, nebo se tyto údaje přidělují počítači z DHCP serveru. Jakmile si databázový klient zaregistruje na Konfiguračním panelu 602SQL jméno a IP adresu (nebo jméno hostitele) databázového serveru, může se na tento server připojit.

V druhém případě se používá telefonní číslo (a případně i software) poskytovatele přístupu na Internet. IP adresu přidělí poskytovatel buď trvale nebo dočasně po přihlášení se klienta. Druhá varianta není vhodná pro databázový server, protože přidělená IP adresa může být při každém vstupu do Internetu jiná a klienti by si ji nemohli zaregistrovat.

Napojujete-li se na Internet telefonní linkou, pak:

  • instalujte telefonické připojení sítě a vytvořte připojení na poskytovatele přístupu na Internet (viz výše);
  • na panelu vlastností takto vytvořeného připojení stiskněte tlačítko Nastavení TCP/IP a zvolte varianty Adresu IP přiděluje server, Adresy názvového serveru přiděluje server a zatrhněte Komprimovat záhlaví IP a Použít výchozí bránu vzdálené sítě (pokud poskytovatel přístupu do internetu nestanovil jinak);
  • ve vlastnostech protokolu TCP/IP (položka Síť na Ovládacích panelech) na záložce IP adresa zvolte možnost Získat adresu IP ze serveru DHCP;

Spojení klienta na server přes SOCKS firewall

SOCKS firewall je produkt dodávaný Software602 umožňující připojení lokální sítě na Internet a provádějící selekci procházejících paketů za účelem zajištění bezpečnosti sítě proti proniknutí zvenčí. Programy, jejichž pakety mají projít přes tento firewall, musí být vhodně upraveny.

Na straně klienta je třeba na řídicí konzoli na stránce popisující přístup na příslušný server zatrhnout označovací čtverec Spojení na server přes Firewall a vyplnit IP adresu SOCKS firewall. Na řídicím panelu je u takto zaregistrovaného serveru značka s otazníkem, protože 602SQL během hledání serverů neví, je-li server v provozu.

IP adresu firewallu lze specifikovat buď pro konkrétní server nebo společně pro všechny servery na stránce Nastavení klienta a přístupů.

Mezi klientem a serverem smí stát pouze jeden SOCKS firewall, ať už na straně klienta nebo serveru. Pokud by na obou stranách byly sítě připojené do Internetu přes SOCKS firewall, pak server musí běžet na stejném počítači jako firewall a tím mít do Internetu přímý přístup.

Parametry firewallu musí být nastaveny tak, aby připustil komunikaci mezi adresou klienta a adresou serveru.

Omezením tohoto způsobu komunikace je, že klient nemůže přerušit dlouhotrvající operaci serveru vysláním příkazu Break.


Ověřování identity SQL serveru v síti

Při provozu v rozlehlých sítích a při zpracování citlivých dat jsou potřebné nástroje, které klientovi poskytnou jistotu, že se připojuje na správný server. Lze si představit falešný SQL server vystupující pod stejným jménem jak pravý server a napodobující jeho činnost.

Připojení na správný server do jisté míry zajistí zaregistrování IP adresy serveru u klienta. Při vynaložení jistého úsilí však falešný server může zneužít IP adresu pravého serveru.

Metoda, která spolehlivě určí identitu serveru, se opírá o asymetrický šifrovací algoritmus. Server si vygeneruje svůj tajný klíč a certifikát obsahující veřejný klič. Certifikát poskytne všem potenciálním klientům a tajný klič si uschová pouze pro sebe. Pomocí certifikátu pak kterýkoli klient může zkontrolovat, zda komunikuje se serverem disponujícím odpovídajícím tajným klíčem.

Import certifikátu a tajného klíče na SQL server ze souborů

Importem certifikátu a tajného klíče na SQL server se zprovozní ověřování jeho identity všemi klienty.

Certifikát a tajný klíč se importuje na stránce Ověřování identity serveru ve větvi Parametry / Identifikace a bezpečnost na Řídicí konzoli takto:

  1. Zadejte jméno souboru s certifikátem;
  2. Stiskněte tlačítko Importovat ze souboru;
  3. Zadejte jméno souboru s tajným klíčem;
  4. Vyplňte heslo ke klíči;
  5. Stiskněte tlačítko Importovat ze souboru a dešifrovat.

Stejná stránka dovoluje exportovat certifikát a tajný klíč z SQL serveru do souborů. Při exportu tajného klíče se soubor zašifruje pomocí zadaného hesla.

Manipulovat s certifikátem a tajným klíčem SQL serveru může pouze jeho bezpečnostní správce.

Import certifikátu a tajného klíče na SQL server z Windows NT/2000/XP

Níže popsaný postup využívá pro manipulaci s tajným klíčem CryptoAPI a úložiště soukromých klíčů na Windows. Postupujte takto:
  1. Najděte certifikační autoritu, která Vám vystaví certifikát, a na její webových stránkách podle jejího návodu si vygenerujte pár klíčů a odešlete žádost o certifikaci.
  2. Nechte si vystavit certifikát.
  3. Importujte certifikát do Windows mezi vlastní certifikáty.
  4. Prohlédněte si certifikát a najděte v něm v sekci Majitel (Subject) řetězec znaků, kterým se tento certifikát odlišuje od všech ostatních vašich certifikátů.
  5. Pokud jste certifikát obdrželi v jiném než X.509 formátu nebo jiném než DER kódování, pak certifikát exportujte do souboru v tomto formátu a kódování.
  6. Na řídicí konzoli SQL serveru otevřete stránku Ověřování identity serveru ve větvi Parametry / Identifikace a bezpečnost.
  7. Importujte certifikát (vyplňte jméno souboru s X.509 DER certifikátem a stiskněte tlačítko Importovat ze souboru).
  8. Převezměte tajný klíč v Windows tak, že vyplníte řetězec znaků identifikující certifikát a stisknete tlačítko Převzít.

Ochrana tajného klíče

Ověření identity serveru je spolehlivé do té míry, do jaké je bezpečně uschován jeho tajný klíč. Při odcizení tajného klíče lze snadno vytvořit falešný server.

Tajný klič uložený v souboru je spolehlivě chráněn heslem. Je však nutno zvolit heslo, které nelze snadno uhádnout, protože není obtížné vyzkoušet na soubor s klíčem řadu často používaných hesel.

Tajný klič uložený v databázi nelze zjistit přes klientské rozhraní serveru. Analýzou databázového souboru by však mohl být přečten. Proto není-li databázový soubor spolehlivě zajištěn proti přečtení, je nutno jej zašifrovat.

Jak klient ověřuje identitu serveru?

Klient může využít tři nástroje k ověření identity serveru:

  • Když se klient poprvé připojí na určitý SQL server, stáhne si a uloží jeho certifikát. Při každém budoucím připojení se kontroluje, zda se komunikuje se stejným serverem, jak poprvé. Tento princip funguje zcela automaticky a je tím zajištěn každý přístup na server kromě prvního.
  • Provozovatel SQL serveru může mezi všechny potenciální klienty publikovat tzv. miniaturu certifikátu. Klient může při prvním připojení ověřit, zda server, na nějž se připojil, má shodnou miniaturu certifikátu.
  • Klient může ověřit, zda certifikát, který od serveru získal, je podepsán důvěryhodnou certifikační autoritou.

Prozkoumat certifikát stažený ze vzdáleného SQL serveru lze tak, že se na Řídicí konzoli otevře stránka přístupu klienta na server (záložka Klientský přístup), v ní se stiskne tlačítko Certifikát serveru a poté tlačítko Zobrazit certifikát. V okně vlastností certifikátu jsou údaje o vystaviteli, platnosti a také miniatura certifikátu.

Problém s novým serverem stejného jména

Pokud se klient v minulosti připojoval na SQL server určitého jména a poté se chce připojit na jiný server se stejným jménem, pak systém ověřování identity serveru spojení nepovolí. Nový server bude totiž považován za falešný server předstírající identitu starého serveru.

Aby klient mohl pracovat s novým serverem, musí u sebe smazat certifikát starého serveru. Slouží k tomu Řídicí konzole, záložka Klientský přístup. Na stránce odpovídající serveru stiskněte tlačítko Certifikát serveru a poté tlačítko Vymazat certifikát.

Pokud naopak provozovatel SQL serveru potřebuje vytvořit nový server, kterým nahradí starý server, a chce se vyhnout problémům s ověřováním identity, pak musí vybavit nový server stejným certifikátem a tajným klíčem, jaké měl starý server. Pokud provozovatel tyto soubory již nemá, může je získat exportem ze starého serveru.


Šifrování síťové komunikace mezi klientem a serverem

V počítačových sítích je možno zachytávat cizí přenášená data a při využití vhodných nástrojů je lze i pozměňovat. Toto riziko je třeba brát v úvahu, pokud přenosová cesta mezi klientem a serverem není celá pod spolehlivou kontrolou, zvláště pak v případě připojení po internetu.

Ochranu dat přenášených mezi klientem a serverem před vyzrazením a pozměněním zajišťuje šifrování síťové komunikace.

Šifrovací algoritmus použitý ve 602SQL se opírá o náhodně vygenerovaný šifrovací klíč. Tento klíč se předá z klienta na server na začátku každého spojení utajeným způsobem opírajícím se o certifikát serveru. Šifrování komunikace lze proto použít pouze na spojení s SQL serverem, který je vybaven certifikátem identity.

Bezpečnostní správce serveru rozhoduje o tom, zda server bude vyžadovat šifrovaný přístup. Požadavek za šifrování se zapíná na Řídicí konzoli na stránce Identifikace a bezpečnost nebo pomocí vlastnosti ReqCommEnc.

Informace o tom, kteří klienti komunikují zašifrovaně, je obsažena v odpovědi na systémový informační dotaz _iv_logged_users a je vidět také na Řídicí konzoli na stránce Klienti a vlákna.


Řešení problémů se síťovým připojením

Pokud se klient nemůže připojit na síťový SQL server (neobjeví se dialog pro přihlášení, ale po určité době čekání na spojení (zdánlivé nečinnosti) se objeví okno se stručným popisem příčiny), pak doporučujeme hledat chybu podle níže sepsaného seznamu.

  1. Ověřte, zda server běží a zda poskytuje síťové služby (v okně serveru pod Windows musí být vidět síťový protokol).

  2. Otevřete informační okno serveru a ověřte, zda protokol používaný klientem (vypsaný při hledání serveru na informační řádce) je uveden v seznamu protokolů, kterými komunikuje server. Pokud není, pak programem Konfigurace přidejte tento protokol mezi protokoly serveru, nebo u klienta zvolte jiný protokol, který je serverem podporován. Pokud se pod Windows nedaří nastartovat určitý protokol, není správně nainstalován v operačním systému.

  3. Používáte-li protokol TCP/IP , ověřte správnost registrace (jména, IP adresy a portu serveru) na počítači klienta - vždy u těch případů, kdy server běží v jiném segmentu sítě; jsou-li server i klient ve stejném segmentu, registrace není nutná a server se sám nabízí na řídicím panelu. Registrované servery jsou vypsány tučně, neregistrované viditelné servery jsou vypsány netučně na konci seznamu.

  4. Pokud server neběží ve stejném síťovém segmentu jako klient, ověřte u správce sítě, zda mezi segmenty nebo sítěmi je most, který by přenášel pakety zvoleného protokolu. V případě protokolu TCP/IP vždy vyzkoušejte spojení počítačů systémovou utilitou PING nebo tlačítkem Test spojení IP na řídicím panelu klienta (tento test je podmínka nutná, nikoliv však dostačující). Signalizace spojení pomocí barvy ikony u serveru na řídicím panelu nemusí vždy odpovídat reálné situaci (ve složitých sítích).

  5. V případě, že mezi serverem a klientem je firewall, přidejte jeho adresu do parametrů (program Konfigurace) a zapněte jeho použití. Test spojení IP v tomto případě zřejmě nebude fungovat, nicméně IP komunikace pře firewall bude funkční.

  6. Ujistěte se, že port, na němž poslouchá server, je prvky sítě povolen. Implicitně jsou zvoleny TCP port 5001 a UDP port 5002, pro replikace přes Direct IP také TCP port 5003. Výchozí port (5001) je možno změnit v konfiguraci serveru, ostatní se změní automaticky (nová_hodnota+1, nová_hodnota+2).

  7. Jsou hlášeny problémy s komunikací v síti s Terminal Serverem - doporučujeme nepoužívat tuto konfiguraci Windows.

  8. Ověřte, zda protokol odpovídá programovému rozhraní k protokolu. Zejména je nutno vyloučit případy, kdy rozhraní NetBIOS není napojeno na protokol NetBEUI, nýbrž je emulováno nad protokoly IPX/SPX nebo TCP/IP, případně rozhraní IPX/SPX je emulováno nad protokolem TCP/IP. Ve Windows NT 3.51 je nutno pro rozhraní NetBIOS volit Nbf a nikoli NetBT. Ve Windows NT 4.0 je nutno na záložce Bindings vypnout propojení NetBIOS interface na cokoli jiného, než NetBEUI protocol. Ve Windows 95 je nutno ve vlastnostech protokolu IPX/SPX na záložce NetBIOS odstranit zatržení Používat NetBIOS přes IPX/SPX.

  9. Používáte-li protokol NetBEUI, ověřte, zda je nastaven parametr LANA NUM = 0. Ve Windows 95 se nastaví automaticky poté co zvolíte NetBEUI jako implicitní protokol. Ve Windows NT v parametrech NetBIOSu je nutno zadat LANA NUM 0 pro položku comba začínající Nbf.

  10. Používáte-li protokoly IPX/SPX, ověřte, zda na straně klienta a serveru se pracuje se stejnými rámci (802.2, 802.3, Ethernet II). Nutno nastavit v parametrech tohoto protokolu.

  11. Obsluhuje-li Váš protokol více adapterů nebo adaptér a modem, pak IPX/SPX pravděpodobně nebude fungovat, NetBEUI bude fungovat pouze s tím adapterem, který má LANA NUM 0, TCP/IP by měl fungovat správně.

  12. Používáte-li protokol TCP/IP pod Windows pro více adapterů nebo adaptér a modem, nastávají někdy problémy s rozpoznáním, který adaptér resp. modem se má pro určitou IP adresu použít. Spojení pak nefunguje. Tyto problémy se zpravidla odstraní odinstalováním a opětovným nainstalováním protokolu.


Práva a jejich subjekty

Každý uživatel má ke každému objektu a k datům ve 602SQL 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.

SQL server 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.

SQL server 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. Tvůrce a administrátor smí svá práva (všechna nebo část) poskytnout jiným subjektům. V 602SQL neexistuje právo poskytnout ta práva, která uživatel nemá.

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.

Seznam subsekcí:

  • Správa uživatelů
  • Skupiny uživatelů a jejich správa
  • Role a práva v aplikaci
  • Export a import uživatelů ze serveru
  • Práva k datům
  • Práva k jednotlivým záznamům tabulky
  • Práva k objektům
  • Automaticky přidělovaná práva
  • Práva k systémovým tabulkám
  • Práva při provádění uložených procedur a vyhodnocování dotazů


Správa uživatelů

Ochrana dat v databázi je založena na uživatelských účtech. Každý klient databáze se přihlašuje k některému uživatelskému účtu a na tomto základě bude disponovat určitými právy, například právem číst nebo přepisovat některá data.

Každý účet je označen uživatelským jménem. Uživatelské jméno má nejvýše 31 znaků a nerozlišuje s v něm mezi malými a velkými písmeny.

Uživatelské účty obvykle odpovídají "jeden-k-jedné" osobám, které se do databáze přihlašují. Výjimkou je anonymní účet, k němuž se může přihlásit kdokoliv. Využití tohoto účtu může správce zakázat. K anonymnímu účtu se přihlašuje s prázdným uživatelským jménem nebo se jménem ANONYMOUS.

Vytváření a rušení uživatelů

Vytvořit nového uživatele může provozní nebo bezpečnostní správce. Tito správcové mohou poskytnout právo vkládat záznamy do tabulky USERTAB dalším subjektům, a tím dovolit dalším uživatelům nebo skupinám vytvářet uživatele. Vytvořit uživatele lze z klientské strany (kromě interaktivních nástrojů, tj. Řídicí konzole, stránka Systémové objekty / Uživatelé nebo Vývojového prostředí, složka System / Uživatelé) funkcí Create_user a lze mu přitom zadat heslo. Pro interaktivní vytvoření uživatele vyplněním údajů v dialogu slouží funkce Acreate_user. Na straně SQL serveru uživatele vytváří SQL příkaz CREATE USER, takto vytvořený uživatel má prázdné heslo a musí si je při prvním přihlášení změnit.

Zrušit uživatele může provozní nebo bezpečnostní správce. Přihlášený uživatel také může sám zrušit svůj vlastní účet. Pro zrušení uživatele slouží SQL příkaz DROP USER nebo API funkce Delete použitá na tabulku USERTAB.

Zrušením a opětovným založením uživatele se stejným jménem nevznikne původní uživatel - práva původního uživatele nepřejdou na nového uživatele. Proto se provozní správce nemůže dostat k soukromým datům uživatele tak, že jej zruší a znovu založí.

Pokud existuje sysémová doména, v níž budoucí uživatele databáze již mají své účty, pak efektivnější než vytvářet uživatele jednotlivě je hromadně převzít uživatelská jména z této domény. Tuto akci lze provést na Řídicí konzoli serveru na stránce Systémové objekty / Převzetí doménových uživatelů a je třeba k tomu znát jméno controlleru domény. Shodu jmen uživatelů v doméně a v databázi lze pak využít ke snadnějšímu přihlašování se.

Editace údajů o uživateli

Údaje blíže popisující uživatele (jméno, příjmení atd.) se dají nastavit při vytváření nového uživatele a později si je může upravit vytvořený uživatel sám. Nikdo jiný (s výjimkou případného datového správce) k nim nemá právo přepisu.

Tyto údaje se přenesou do žádosti o certifikát a objeví se v certifikátu uživatele a v digitálních podpisech.

Přihlašování uživatele na SQL server (Login)

Když se klient přihlašuje na server pod určitým uživatelským jménem, server musí ověřit jeho identitu. Může tak učinit dvěma cestami:

  • buď uživatel uvede svoje jméno a heslo,
  • anebo server zjistí, že uživatel je již přihlášen do určité domény, a automaticky jej přihlásí pod stejným jménem.

Žádný správce databáze nemůže zjistit cizí heslo. Otázkám bezpečnosti databáze v souvislosti s přihlašováním uživatelů se věnuje také stránka Zabezpečení databáze proti útokům.

Přihlašování na SQL server se jménem a jednorázovým heslem

Správa hesel ve 602SQL se opírá o metodu one-time-password z RFC1938. Její vlastnosti lze shrnout takto:

  • heslo není nikde v systému zaznamenáno, a to ani v zašifrované podobě;
  • heslo se nikdy neposílá po síti, a to ani v zašifrované podobě (neboť síť lze odposlouchávat);
  • kód odvozený z hesla, který otevírá uživateli přístup na server, se nedá použít opakovaně;
  • analýza programů, které s hesly pracují, ani interních dat uložených na serveru nebo posílaných po síti, nenapomůže ke zlomení hesla.

Nevýhodou této metody je, že heslo lze použít pouze omezený počet krát - řádově tisíce krát. Po vyčerpání tohoto počtu si 602SQL server při přihlašování uživatele vynutí zadání nového hesla.

Přihlašování na SQL server se jménem a opakovatelným heslem

Existuje třída aplikací, jimž by povinnost periodicky měnit heslo přinesla značné komplikace. Jedná se zejména o neinteraktivní klienty 602SQL, např. CGI nebo PHP klienta. Pro tyto případy lze použít trvale platná hesla.

Trvale platná hesla mají všechna uživatelská jména začínající znakem _ (podtržítko). Například někteří internetoví klienti používají uživatelské jméno __WEB.

Při volbě bezpečností politiky databáze může bezpečnostní správce rozhodnout, že všechna hesla budou trvale platná. Toto nastavení se provádí na Řídicí konzoli serveru na stránce bezpečnostních parametrů.

Přihlašování na SQL server na základě dřívějšího přihlášení do domény

Bezpečnostní správce může určit doménu, které důvěřuje do té míry, že přihlášení do ní bude považovat za dostatečné oprávnění pro přihlášení na SQL server. Jméno takové domény je třeba zadat na Řídicí konzoli serveru na stránce Parametry / Identifikace a bezpečnost.

Jméno, pod kterým je uživatel přihlášen do domény, musí být stejné jako uživatelské jméno v databázi. Je proto výhodné vytvořit uživatelské účty v databázi převzetím jmen z domény.

Pozastavení platnosti uživatelského účtu

Provozní nebo bezpečnostní správce může pozastavit platnost uživatelského účtu - přihlášení k tomuto účtu je pak znemožněno do doby, než je platnost účtu obnovena. Pozastavování a obnovování platnosti účtů se provádí na řídicím panelu Vývojového prostředí 602SQL.

Zvláštním případem je povolení nebo zakázání anonymního přihlášení, tedy přístupu bez jména a hesla. O tom rozhoduje pouze bezpečnostní správce. Tuto vlastnost lze nastavit také na Řídicí konzoli serveru na stránce Parametry / Identifikace a bezpečnost.

Zapomenuté heslo

Pokud uživatel své heslo zapomene, neexistuje způsob, jak jej zjistit. V takové situaci uživatel může pouze požádat bezpečnostního správce, aby mu nastavil nové heslo. Řešením není zrušit uživatelský účet a založit jej znovu, protože tím by uživatel přišel o všechna práva.

Změna hesla

Každý uživatel může změnit vlastní heslo. Pouze bezpečnostní správce může měnit hesla jiných uživatelů. Změnu hesla provádí funkce Set_password.


Skupiny uživatelů a jejich správa

Skupiny uživatelů usnadňují přidělování práv, protože získá-li nějaké právo skupina, mohou s nim disponovat všichni uživatele patřící do skupiny. Na rozdíl od rolí jsou skupiny definovány nezávisle na aplikacích (schématech).

Předdefinované systémové skupiny

V každé databázi existují tyto předdefinované systémové skupiny:

  • EVERYBODY - skupina, do níž patří všichni uživatelé,
  • DB_ADMIN - skupina datových správců,
  • CONFIG_ADMIN - skupina provozních správců,
  • SECURITY_ADMIN - skupina bezpečnostních správců.

Skupina EVERYBODY slouží k hromadnému přidělování práv všem uživatelům. Do ostatních systémových skupin se zařazují ti uživatelé, kteří mají vykonávat úlohu správce, a získávají tím specifická oprávnění.

Definování skupin

Další skupiny se vytvářejí většinou podle organizační struktury firmy. Například všichni fakturanti mohou být zařazeni do skupiny FAKTURANT. Pokud v ekonomickém systému existuje zvláštní role pro fakturanty, stačí pak do ní obsadit skupinu FAKTURANT jako celek. Vytvářet a rušit tyto skupiny mohou provozní a bezpečnostní správci.

Právo zařazovat uživatele do všech skupin má bezpečnostní správce. Část tohoto práva může postoupit provozním správcům - může dovolit, aby provozní správce:

  • mohl zařazovat uživatele do všech skupin, kromě systémových;
  • mohl zařazovat uživatele do skupiny provozních správců CONFIG_ADMIN.

Vytvořit skupinu lze z klientské strany funkcí Create_group, na straně SQL serveru SQL příkazem CREATE GROUP. Zjistit vztah mezi dvěma subjekty práv (tj. zda je uživatel členem skupiny apod.) nebo změnit toto nastavení (např. obsadit skupinu do role) lze provést z klientské strany funkcí GetSet_group_role nebo interaktivně funkcí Edit_relation, na straně SQL serveru funkcemi Set_membership a Get_membership a pomocí systémového informačního dotazu _iv_subject_membership.

Skupiny lze vytvářet a rušit a zařazovat do nich jiné subjekty též z klientského Vývojového prostředí, složka Systém / Skupiny nebo pomocí Řídicí konzole serveru, stránka Systémové objekty / Skupiny uživatelů.


Role a práva v aplikaci

Role jsou nástrojem, jak zprostředkovat uživatelům práva ke specifickým akcím nebo datům a aplikaci. Autor aplikace definuje role podle logiky aplikace a přidělí jim práva. Administrátor aplikace obsadí uživatele nebo skupiny do těchto rolí a tím jim předá příslušná práva.

Například v ekonomickém systému existuje akce "Vytvořit novou fakturu". Právo provést tuto akci budou mít pouze někteří uživatelé systému. Proto:

  1. autor aplikace založí roli Fakturant a přidělí jí všechna práva potřebná k založení faktury - například právo vložit záznam do tabulky faktur a do tabulky položek vyskytujících se na faktuře, právo číst tabulku obchodních partnerů atd.
  2. administrátor aplikace obsadí do role Fakturant všechny ty uživatele, kteří budou mít oprávnění vytvářet faktury, případně jako celek skupinu uživatelů, kteří patří do fakturačního oddělení.

Autor aplikace nezná uživatele, kteří budou jeho aplikaci používat, proto jim nemůže přidělovat práva. Administrátor aplikace nezná vnitřek aplikace do té míry, aby věděl, se kterými objekty se pracuje při zakládání faktury. Proto role jsou spojovacím můstkem mezi autorem a provozovatelem aplikace.

Viz také programátorské odlišnosti verze 8.0.

Standardní role

Při vytvoření nové aplikace vzniknou 4 standardní role. Při vytvoření nového objektu v aplikace se těmto standardním rolím přidělí tato práva:
Standardní role | Implicitní práva
Author | Právo modifikovat nebo rušit všechny objekty v aplikaci
Administrator | Právo číst a přepisovat data ve všech tabulkách a používat všechny objekty
Senior_user | Právo číst a přepisovat data ve všech tabulkách a používat všechny objekty
Junior_user | Právo číst data ve všech tabulkách a používat všechny objekty

Implicitně přidělená práva standardním rolím slouží pouze jako pomůcka pro nejběžnější situace. Autor aplikace může přidělení práv těmto rolím jakkoliv změnit a může tyto role z aplikace i odstranit.

Kromě toho má role Administrator oprávnění, která jí nemohou být odebrána: právo obsazovat uživatele a jejich skupiny do všech rolí, právo definovat sdílení aplikace mezi replikujícími servery a právo zrušit celou aplikaci.

Obsazování do rolí

Právo obsazovat do rolí má administrátor aplikace (tj. uživatel obsazený do role Administrator ve stejné aplikaci) a také (pro řešení mimořádných situací) bezpečnostní správce serveru.

V tzv. zamčené aplikaci je obsazování do role Author znemožněno.

Vytvoření nové aplikace

V nově vytvořené aplikaci je tvůrce obsazen do rolí Author i Administrator. Pro nově vytvářené objekty se přidělují práva standardním rolím dle popisu výše.

Pokud si autor přeje, aby některá komponenta mohla být modifikována za provozu aplikace, poskytne práva k jejímu přepisu některé roli (jiné než Author).

Pokud si autor přeje omezit práva k datům v některé tabulce, odebere tato práva standardním rolím. Například tabulka obsahující důvěrné dokumenty jednotlivých uživatelů bude mít práva přidělovaná na úrovni záznamů a globální práva ke všem záznamům nemusí mít žádná role (ani Administrator).

Rušení aplikace a její komponent

Zrušit aplikaci jako celek může pouze uživatel obsazený do role Administrator nebo Author, a také (pro řešení mimořádných situací) bezpečnostní správce serveru. Mohou k tomu použít SQL příkaz DROP SCHEMA nebo řídicí panel klienta 602SQL. Při rušení celé aplikace se netestují práva k jednotlivým komponentám.

Samostatné rušení objektů se řídí jednotlivě nastavením práva zrušit objekt. Standardně se toto právo přidělí uživateli, který objekt vytvořil, a roli Author. Pokud toto právo není explicitně poskytnuto jiným rolím, v zamčené aplikaci nebude mít právo rušit komponenty nikdo.

Export a import aplikace

Aplikace se může exportovat pro dvě různé třídy účelů:

  • Autor chce aplikaci zálohovat nebo přenést na jiný počítač, a po importu chce mít aplikaci ve stejném stavu, v němž byla před exportem.
  • Autor chce vyrobit distribuční verzi aplikace, v níž nebude možno libovolně zasahovat do její komponent a některé objekty budou zašifrovány.

V druhém případě říkáme, že aplikace je exportována jako zamčená.

Po importu aplikace je uživatel, který import provedl, obsazen do role Administrator. Mimo to nezíská žádná další práva. Možnost zasahovat do komponent aplikace závisí na tom, zda aplikace je zamčená:

  • Pokud aplikace není zamčená, je uživatel, který provedl import, obsazen také do role Author;
  • Pokud aplikace je zamčená, není po importu jejím autorem nikdo.

Dále je po importu obsazena skupina EVERYBODY do role Junior_user.


Export a import uživatelů

602SQL-Úplná dokumentace

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.

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.

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 zejména zakládání nové databáze, pokud chceme zachovat prostředí původní databáze. Následující import aplikací vyexportovaných včetně práv zajistí, že je možné okamžitě začít pracovat.

Pozor: Hesla uživatelů jsou svázána s identifikací serveru. Proto se po importu uživatelů objeví dotaz, zda mají být hesla smazána. Pokud se hesla smažou, každý uživatel bude mít prázdné heslo a bude při prvním přihlášení vyzván, aby si zadal nové heslo.

Administrátor, který provádí import uživatelů, může využít jeden ze dvou postupů:

  1. Buď nechá smazat všechna hesla a zatíží uživatele nutností zadat své heslo znovu. Znovuzadání hesel je třeba provést před importem aplikací, jinak by vzniklo riziko zneužití cizích přístupových práv.

  2. Bezprostředně po vytvoření databázového souboru administrátor (ještě přihlášený jako anonymní uživatel) zadá serveru stejnou identifikaci, jakou měl server, z něhož byli uživatelé exportováni. Pak importuje uživatele a jejich hesla ponechá v platnosti.

Pokud má nový server jinou identifikaci než starý a hesla nejsou smazána, uživatele se nebudou moci přihlásit.

Přenos uživatelů a skupin do verze 8.0 ze starších verzí

Ve verzi 8.0 byla skupina DB_ADMIN rozdělena do tří administrativních skupin . Při importu uživatelů a skupin ze starších verzí proběhnou proto automaticky tyto změny:

  • budou vytvořeny nové administrativní skupiny pro verzi 8.0;

  • uživatelé, kteří byli zařazeni do skupiny DB_ADMIN, budou zařazení do všech tří standardních administrativních skupin.

Po importu je vhodné upravit zařazení uživatelů do skupin podle skutečné potřeby.


Práva k datum

602SQL-Úplná dokumentace

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 (select) hodnoty všech nebo některých sloupců;

2) právo přepisovat (update) hodnoty všech nebo některých sloupců;

3) právo vkládat (insert) nové záznamy;

4) právo rušit (delete) záznamy;

5) právo poskytovat (grant) svá práva dalším uživatelům.

Kromě toho lze i nastavovat obdobná práva k jednotlivým záznamům tabulky (s výjimkou práva vkládat záznamy).

Práva vytvářet tabulky (vkládat záznamy do systémové tabulky TABTAB), vytvářet objekty (vkládat záznamy do systémové tabulky OBJTAB) a vytvářet uživatele (vkládat záznamy do systémové tabulky USERTAB) se nastavují zvlášť - viz Práva k systémovým tabulkám.

Interaktivní nastavování práv

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.

Programová manipulace s právy

Práva se nastavují a zjišťují pomocí GetSet_privils vnitřního jazyka nebo zde uvedenými postupy v jazyce SQL.


Práva k jednotlivým záznamům tabulky

K jednotlivým záznamům v určité tabulce lze přidělovat tato (globální) práva:

1) právo číst (select) hodnoty všech nebo některých sloupců;

2) právo přepisovat (update) hodnoty všech nebo některých sloupců;

3) právo rušit (delete) záznamy;

4) právo poskytovat (grant) svá práva dalším uživatelům.

Kromě toho lze i nastavovat obdobná práva k tabulce jako celku (včetně práva vkládat záznamy).

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. Vytváříte-li tabulku SQL příkazem CREATE TABLE, musíte v záhlaví uvést příznak REC_PRIVILS.

Interaktivní nastavování práv

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.

Programová manipulace s právy

Práva se nastavují a zjišťují pomocí GetSet_privils vnitřního jazyka nebo zde uvedenými postupy v jazyce SQL.


Práva k objektům

602SQL-Úplná dokumentace

Práva k objektům v databázi

Mezi objekty aplikace se počítají definice tabulek, formuláře, pevné dotazů, zdrojové texty programů a další. Ve vztahu k nim může subjekt práva získat tato práva:

1) právo použít (select) objekt (tj. např. otevřít pohled nebo dotaz, spustit program);

2) právo změnit (update) objekt (tj. např. předefinovat tabulku, změnit návrh formuláře nebo program);

3) právo zrušit (delete) objekt;

4) právo poskytnout (grant) 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ášť.

Interaktivní nastavování práv

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.

Programová manipulace s právy

Práva se nastavují a zjišťují pomocí GetSet_privils vnitřního jazyka nebo zde uvedenými postupy v jazyce SQL.


Automaticky přidělovaná práva

Při vzniku tabulek a vkládání záznamů 602SQL přiděluje některá práva automaticky.

Pokud uživatel založí tabulku, pak získá k datům ve všech záznamech této tabulky veškerá globální práva, tedy právo číst a přepisovat všechny sloupce, právo vkládat a rušit záznamy a právo poskytovat svá práva dalším subjektům.

Pokud uživatel vloží záznam do tabulky, která umožňuje přidělování práv na úrovni jednotlivých záznamů, pak získá k tomuto záznamu veškerá práva, tedy právo číst a přepisovat jeho sloupce, právo zrušit tento záznam a právo poskytnout práva k tomuto záznamu. Navíc, pokud to je v popisu práv k tabulce specifikováno, může (nebo nemusí) skupina EVERYBODY nabýt některých práv k tomuto záznamu - práva číst nebo přepisovat všechny sloupce nebo práva zrušit tento záznam.

Dále se automaticky přidělují práva standardním rolím.

Po importu aplikace proběhne automatické obsazení do její rolí.

Práva se interaktivně nastavují a zjišťují pomocí příslušných akcí na řídicím panelu nebo pomocí funkce GetSet_privils vnitřního jazyka nebo zde uvedenými postupy v jazyce SQL.


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.

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.


Práva při provádění uložených procedur a vyhodnocování dotazů

Při provádění uložených procedur a při vyhodnocování dotazů se kontrolují práva uživatele, který zavolal proceduru nebo položil dotaz. Existují však případy, kdy je třeba ve vymezeném rozsahu tato práva obejít:

  • Určitá akce smí být provedena pouze v kontextu jisté procedury. Například aplikace může obsahovat log provedených akcí. Uživatelé nemají právo přidávat do logu libovolné záznamy, avšak je třeba do něj zaznamenat zavolání určité procedury. Je proto žádoucí umožnit proceduře, aby tento zápis provedla i tehdy, když ji volá uživatel, který právo zapisovat nemá.
  • Uživatel potřebuje dotazem vybrat záznamy, ke kterým má právo čtení, ale přitom klade podmínky na hodnoty sloupců, ke kterým nemusí mít právo čtení. Takový dotaz porušuje přístupová práva, přesto by měla existovat možnost, jak jej položit.

Autor aplikace má možnost označit procedury a dotazy, jejichž provádění nebude v rámci schématu omezováno přístupovými právy. Říkáme, že se pro proceduru nebo dotaz zapne administrátorský režim. Právo zavolat takovou proceduru nebo položit dotaz bude kontrolováno i nadále, ale v rámci jejich vyhodnocování již nebudou kontrolována práva k objektům ze stejného schématu.

Procedury a dotazy, kterých se to týká, se označí voláním funkce Admin_mode.

Toto označení smí provést pouze uživatel obsazený do role Author. Označení je persistentní a tudíž se zachovává při vypnutí serveru nebo exportem a importem aplikace. Proto na rozdíl od verze 7 není třeba volat funkci Admin_mode v proceduře _on_server_start, a ani to obvykle není možné, protože skupina provozních správců (na jejíž účet se _on_server_start provádí) nebývá obsazena do rolí Author.

Níže uvedený dotaz vybírá z dokumentů v tabulce DOCTAB ty, které uživatel smí číst a obsahují slovo "Orinoko":

SELECT Contents FROM Doctab WHERE Has_select_privil(Contents,2) AND Position("Orinoko" In Contents)>0

Tento dotaz nelze položit přímo, protože uživatel nemá globální právo ke sloupci Contents a nemůže jej použít v podmínce WHERE ve funkci Position. Pokud je dotaz označen pro provádění bez kontroly práv, pak funguje a přitom přístupová práva neporušuje.

Přehled oprávnění v administrátorském režimu

V proceduře prováděné v administrátorském režimu lze:

  • volně přistupovat ke všem datům ve schématu (čtení, přepis, vkládání a rušení záznamů),
  • obsazovat uživatele a skupiny do rolí definovaných ve stejném schématu,
  • přidělovat práva k datům a ke spouštění procedur ve stejném schématu.
Všechna tato oprávnění se týkají dat a objektů ve stejném schématu, v němž se nachází procedura prováděná v administrátorském režimu.


Trasování a logování činnosti serveru

Činnost SQL serveru lze sledovat pomocí trasovacích nástrojů a zaznamenávat do textových souborů, kterým se říká logy. Takto lze získat:

  • zprávy o chybách v akcích konkrétního uživatele nebo všech uživatelů;

  • zprávy o chybách týkajících se SQL severu jako celku;

  • informace o provedení sledovaných akcí na serveru (například přihlášení se uživatele);

  • informace o manipulaci se sledovanými objekty (například přepis dat v určité tabulce);

  • informace o kontextu, v němž k těmto situacím došlo;

Provozní správce databáze může určit, jaké informace se zaznamenávají do logu (s výjimkou trasování čtení a zápisu dat, což povoluje Bezpečnostní správce) - viz Administrování SQL serveru.

Definování logů a jejich soubory

Pokud potřebujete sledovat více různých druhů informací, pak lze pro ně vytvořit samostatné logy. Každý log má svoje jméno, pro něž platí stejná omezení jako pro jména všech ostatních objektů ve 602SQL.

SQL server vždy automaticky vytváří tzv. základní log označený prázdným jménem. Další logy je třeba definovat a pak existují až do vypnutí serveru. Každý log se zaznamenává do jednoho textového souboru (mimo databázi). Základní log se zapisuje do souboru jménem wbsqllog.txt umístěného v adresáři specifikovaném na Řídicí konzoli serveru (standardně je to stejný adresář, v němž je databázový soubor). Soubory příslušné ostatním logům se zadávají při jejich definování.

Pokud při definování logu jeho soubor již existuje, bude se do něj zapisovat na konec. Pokud soubor neexistuje, je vytvořen.

Nový log lze definovat takto: Otevřete okno Řídicí konzole 602SQL, připojíte se k danému SQL serveru, o naleznete větev Monitor serveru/ Logy serveru. V dialogu v pravé části zadáte jméno logu a stisknete tlačítko Vytvořit nový log. Pokud má mít log jiný než defaultní formát, zadejte formát (ještě před vytvořením) do pole Formát (popis formátu je uveden u funkce _sqp_define_log).

Nový log lze z programu definovat tak, že zavoláte standardní proceduru _sqp_define_log. Log smí definovat pouze provozní správce databáze.

Pokud potřebujete, aby se určitý log vytvářel při každém spuštění serveru, pak zařaďte volání funkce _sqp_define_log do systémového triggeru na start serveru (_on_server_start).

Pro přímé volání funkce _sqp_define_log z klienta můžete využít direktivu #sql nebo funkci SQL_execute.

Požadavky na logování

Server provádí logování své činnosti v souladu se zadanými požadavky na logování. Požadavek platí, dokud není zrušen nebo dokud není ukončen server. Každý požadavek má tyto parametry:

  • zvolenou situaci, v níž se vytvoří zápis do logu;

  • jméno uživatele, jehož akce se logují (pokud je prázdné, platí pro všechny uživatele);

  • rozsah informací o kontextu, v němž k logované situaci došlo, které se mají zapsat do logu;

  • jméno logu, do kterého se má zápis provést;

  • jméno sledované tabulky (pro situace týkající se manipulace s daty v tabulkách).

Ve stejném okamžiku mohou současně platit požadavky na logování stejné situace, stejného uživatele a stejného objektu do různých logů. Zadáte-li proto požadavek na logování nové situace nebo nového uživatele nebo nového objektu nebo do nového logu, neovlivní se tím dříve zadané požadavky.

Požadavky na logování lze zobrazit, zadat, upravit nebo zrušit na stránce Trasování v okně Řídicí konzole 602SQL. Seznam platných požadavků na logování vrací systémový dotaz _iv_pending_log_reqs. Požadavky na logování lze z programu zadávat a rušit voláním standardní procedury _sqp_trace. Požadavky smí zadávat pouze Provozní správce databáze (požadavky na trasování dat pouze Bezpečnostní správce) - viz Administrování SQL serveru.

Pokud potřebujete, aby se určité logování provádělo při každém spuštění serveru, pak zařaďte volání funkce _sqp_trace do systémového triggeru na start serveru (_on_server_start) - viz příklad u funkce _sqp_trace.

Pro přímé volání funkce _sqp_trace z klienta můžete využít pragma #sql nebo funkci SQL_execute.

Logovací situace

Situace, jejich výskyt lze logovat, se při volání funkce _sqp_trace označují identifikátory uvedenými v prvním sloupci. V druhém sloupci je písmeno, které se pro danou situaci objeví v logu. Ve čtvrtém sloupci jsou číselné hodnoty konstanty, které vrací systémový dotaz _iv_pending_log_reqs. Situace jsou rozděleny do tří tříd:

Globální situace týkající se provozu serveru:

Identifikátor |  | Popis | Číslo
TRACE_SERVER_FAILURE | F | globální selhání serveru (včetně sítě) | 2
TRACE_NETWORK_GLOBAL | N | trasování síťové komunikace globální | 4
TRACE_REPLICATION | R | trasování replikací | 8
TRACE_DIRECT_IP | D | přenosy replikačních paketů přes direct IP | 16
TRACE_REPLIC_MAIL | X | přenosy replikačních paketů poštou | 4096
TRACE_REPLIC_COPY | Y | přenosy replikačních paketů kopírováním souborů | 8192
TRACE_START_STOP | A | informace o spuštění a vypnutí serveru a o chybách, které znemožňují spuštění | 16384
TRACE_REPL_CONFLICT | Q | replikační konflikt | 32768
TRACE_SERVER_INFO | B | základní informace o činnosti serveru (např. vytvoření zálohy, odpojení nekomunikujícího uživatele) a informace vyžádané na konzoli serveru (např. výpis připojených uživatelů) | 65536
TRACE_NETWORK_ERROR |  | zatím nevyužito | 2048 (*)
TRACE_BCK_OBJ_ERROR | O | syntaktická chyba v objektu, s nimž server pracuje na pozadí – může jit o trigger, globální deklarace ve schématu, implicitní hodnotu sloupce nebo integritní omezení v návrhu tabulky | 2097152

Pro tyto situace se nezadává jméno uživatele, pro kterého se mají logovat.

Situace týkající se akcí konkrétního klienta:

TRACE_USER_ERROR | E | uživatelská chyba | 1
TRACE_USER_MAIL | M | zatím nevyužito | 32 (*)
TRACE_SQL | S | provedení SQL příkazu (včetně předem připravených příkazů), text příkazu včetně hodnot dynamických parametrů a proměnných klienta lze zobrazit v kontextu, proto doporučujeme nastavit kontext na hodnotu 2 nebo 3 | 64
TRACE_LOGIN | L | připojení a odpojení klienta, login a logout uživatele | 128
TRACE_LOG_WRITE | W | explicitní zápis do logu pomocí procedury Log_write | 1024
TRACE_CURSOR | P | otevírání a zavírání kurzorů včetně textu příslušného SELECTu, pokud je možné jej zjistit | 256
TRACE_IMPL_ROLLBACK | V | implicitní provedení operace RollBack kvůli chybě | 512
TRACE_PROCEDURE_CALL | P | Volání SQL procedury | 4194304
TRACE_TRIGGER_EXEC | T | Spuštění triggeru | 8388608

Pro tyto situace lze buď zadat jméno uživatele, pro něhož se logují, nebo lze uvést prázdné jméno, a pak se logují pro všechny uživatele.

Další situace se týkají manipulací s tabulkami. Logovat lze:

TRACE_INSERT | i | vložení nového záznamu do tabulky | 524288
TRACE_DELETE | d | zrušení záznamu v tabulce | 1048576
TRACE_WRITE | w | přepis hodnoty v záznamu v tabulce | 262144
TRACE_READ | r | čtení hodnoty ze záznamu z tabulky | 131072

Typicky se pro tyto situace zadává konkrétní sledovaná tabulka. Dále lze buď zadat jméno uživatele, pro něhož se situace logují, nebo lze uvést prázdné jméno, a pak se logují pro všechny uživatele.

Po spuštění serveru je zapnuto logování do základního logu globálních situací A, B, F, situace W pro všechny uživatele a dále se zachová stav logování situací E a R pro všechny uživatele podle nastavení provedeného při posledním běhu serveru.

Vazba logování na uživatelské jméno

Pro situace týkají se akcí vyvolávaných uživateli může být požadavek na logování:

  • buď omezen na konkrétního uživatele - pak se logují pouze situace vyvolané klienty přihlášenými s tímto uživatelským jménem,

  • anebo se logují situace bez ohledu na jméno klienta.

Je-li zadán požadavek na logování svázaný s uživatelským jménem, pak se uplatní jak pro klienty, kteří jsou pod tímto jménem již přihlášení, tak i pro klienty, kteří se pod tímto jménem teprve přihlásí.

Prohlížení logu

Všechny logy se průběžně zapisují do souborů. Tyto soubory si lze prohlížet z různých počítačů pomocí nástrojů pro sdílení souborů v síti. Všichni klienti mohou číst pouze základní log. Ostatní definované logy může číst jen provozní správce databáze.

Nejnovější záznamy základního logu jsou vidět také v okně serveru.

Klient může získat nejnovější záznamy z libovolného logu pomocí systémového informačního dotazu _iv_recent_log (klient, který není správcem, pouze z logu základního). Tyto záznamy se zobrazují v okně Konfigurační konzole SQL serveru.

Persistence požadavků

Po vypnutí a opětovném zapnutí serveru se zachovají pouze požadavky na logování do základního logu serveru, bez vazby na jméno uživatele nebo jméno tabulky. Ostatní požadavky je třeba (mají-li se zachovat i přes vypnutí serveru) volat pomocí funkce _sqp_trace v systémovém triggeru _on_server_start.

Viz

  • _iv_pending_log_reqs
  • Zjišťování detailů poslední chyby
  • Příklad


Systémové triggery

Systémové triggery jsou uložené procedury automaticky spouštěné serverem, pokud nastane určitá událost.

Systémové triggery mají předepsaná jména a parametry. Jméno triggeru určuje, při jaké události bude spuštěn.

Všechny tyto procedury musí být umístěny do aplikace _SYSEXT mezi procedury uložené na serveru (nikoli mezi triggery, tam patří pouze triggery svázané s databázovými tabulkami). Při definování procedury fungující jako systémový trigger je nutno dodržet předepsaný počet a typy parametrů, jinak procedura nebude zavolána.

Replikační systémové triggery (_on_replpacket_sent a _on_replpacket_received) se volají jen v případě, že je to explicitně povoleno při nastavování parametrů replikací.

Pokud systémová procedura volá proceduru uloženou v některé aplikaci, musí její jméno prefixovat jménem této aplikace.

Přehled systémových triggerů

PROCEDURE _on_server_start()

Procedura bude zavolána při spuštění SQL serveru. Procedura se zavolá v samostatném vlákně, takže server nebude čekat na její dokončení, a bude schopen obsluhovat klienty za jejího běhu.

PROCEDURE _on_server_stop()

Procedura bude zavolána při ukončování SQL serveru. Ukončení serveru se pozdrží do doby, dokud tato procedura neskončí.

PROCEDURE _on_login_change(IN old_logname CHAR(31), IN new_logname CHAR(31))

Procedura se zavolá, kdykoli se klient přihlašuje, odhlašuje nebo mění své uživatelské jméno. Činnost klienta se pozdrží do dokončení této procedury.

PROCEDURE _on_backup(IN pathname CHAR(254), IN success Boolean)

Procedura se zavolá, když server vytváří kopii svého databázového souboru. V parametru pathname dostane jméno souboru, do něhož se kopie zapisuje, v parametr success je TRUE, pokud se kopii podařilo vytvořit, FALSE při chybě.

PROCEDURE _on_replpacket_sent (IN ServerID BINARY(12), IN ServerName CHAR(31),
 IN PacketType INT, IN PacketNO INT, IN ErrNO SMALLINT, IN ErrText CHAR(128));

Procedura se zavolá při odeslání replikačního paketu, podrobnosti viz Prostředky pro klientskou reakci na chyby replikací.

PROCEDURE _on_replpacket_received (IN ServerID BINARY(12), IN ServerName CHAR(31),
 IN PacketType INT, IN PacketNO INT, IN ErrNO SMALLINT, IN ErrText CHAR(128),
 IN HdrRec INT, IN HdrID TIMESTAMP);

Procedura se zavolá při příjmu replikačního paketu, podrobnosti viz Prostředky pro klientskou reakci na chyby replikací.

Bezpečnost

Procedury _on_server_start, _on_server_stop, _on_backup , _on_replpacket_send a _on_replpacket_received se provádějí s právy provozního správce databáze. Procedura _on_server_start může spustit samostatná vlákna, která budou provádět různé práce pro aplikace běžící na serveru, procedura _on_server_stop může ukončit činnost těchto vláken. Procedura _on_backup může například při chybě odeslat dopis správci.

Tyto procedury může vytvořit nebo modifikovat uživatel obsazený do role Author v aplikaci _sysext. Iniciálně je do této role obsazena skupina provozních správců CONFIG_ADMIN.

Vypnutí spouštění procedur

Spouštění procedur systémovými událostmi lze vypnout při startu serveru pomocí parametrupříkazové řádky /Q. Toto vypnutí se využije v případě, pokud se podařilo vytvořit proceduru, která způsobuje pád serveru.


Čekání na uvolnění zdrojů

Zpracování požadavku klienta na SQL serveru může být pozastaveno do doby, než se uvolní zdroje, které jsou k jeho provedení potřeba. Děje se tak ve dvou případech:

  • pokud nastavený stupeň izolace transakcí brání pracovat s objektem, dokud neskončí transakce jiného klienta, který manipuloval se stejným objektem;
  • pokud s objektem nelze pracovat, protože jiný klient explicitně zamkl přístup k tomuto objektu.

Klient může nastavit, jak dlouho chce v takových situacích čekat. Pokud nastavený čas vyprší a požadovaný objekt není uvolněn, operace skončí s chybou NOT_LOCKED. Limit času čekání se nastavuje pro každého klienta zvlášť.

Čas se nastavuje v desetinách sekundy. Hodnota -1 označuje neomezeně dlouhé čekání. Pro nastavení času čekání z prostředí serveru slouží systémová proměnná @@WAITING. Pro nastavení času čekání z prostředí klienta slouží API funkce waiting.


Fulltextové nástroje ve 602SQL

Součástí 602SQL Serveru jsou nástroje pro fulltextové indexování dokumentů a vyhledávání v těchto dokumentech. SQL server je schopen:

  • provést zaindexování dokumentu, tedy zařazení všech slov obsažených v dokumentu do svých indexů;

  • vyhledávat dokumenty obsahující slova, fráze a jejich kombinace pomocí nástrojů plně zabudovaných do jazyka SQL;

  • vyhledávat kontext výskytu fráze v dokumentu (tj. slova před a za hledanou frází).

Zaindexovat a následně vyhledávat lze dokumenty:

  • uložené přímo v databázových tabulkách ve sloupcích typu Text (CLOB) nebo řetězec znaků

  • zapsané v souborech, jejichž jména jsou v databázové tabulce (ve sloupci typu řetězec znaků);

  • uložené v OLE embedded objektech v databázové tabulce (sloupec typu BLOB) nebo jako OLE linked objekt v externím souboru s odkazem v databázové tabulce (sloupec typu BLOB).

Dokumenty mohou být v čistém textovém formátu nebo ve formátech RTF, HTML, WPD nebo DOC. 602SQL Server pro LINUX umí v současné verzi indexovat pouze čistý text.

POZOR! Dokumentem pro indexování se zde myslí obsah jednoho či více sloupců databázové tabulky, který text přímo obsahuje nebo odkazuje na soubor na disku.

Tvarosloví

Slova se v dokumentech mohou vyskytovat v řadě tvarů odpovídajících různým pádům, číslům, osobám apod. Fulltextový systém může pracovat jedním ze dvou způsobů:

  • buď považuje všechny tvary stejného slova za totéž slovo a pokud hledáte určité slovo, najde jeho výskyt v libovolném tvaru (což je typický přístup v jazycích s bohatým tvaroslovím jako čeština);

  • anebo považuje každý tvar slova za odlišné slovo a při hledání najde pouze tentýž tvar slova, jaký je uveden v dotazu (což je použitelný přístup v jazycích s chudým tvaroslovím jako angličtina).

První způsob fungování fulltextového systému vyžaduje, aby byla instalována příslušná jazyková podpora (součástí standardní instalace je pouze podpora pro češtinu). Rozlišování tvarů slov ve fulltextovém systému se volí při jeho vytváření a nelze je dodatečně změnit.

Fulltextové systémy

Pokud aplikace chce využívat fulltextové vyhledávání, musí v databázi založit fulltextový systém. V jedné databázi může být založeno i více fulltextových systémů. Každý fulltextový systém je označen řetězcem znaků. Označení fulltextového systému se uvádí při jeho vytváření a při všech odkazech na něj.

Fulltextový systém je vždy vytvořen pro určitý jazyk.

Řetězec znaků označující fulltextový systém obsahuje jméno některé aplikace v databázi, tečku a nejvýše dvacetipísmenný identifikátor, který rozlišuje fulltextové systémy umístěné do stejné aplikace. Pokud je jméno aplikace prázdné, míní se aplikace, z niž na fulltextový systém odkazujete. Identifikátor rozlišující fulltextové systémy v aplikaci smí být prázdný, v tom případě se nemusí uvádět ani oddělující tečka

Nový fulltextový systém se vytváří funkcí SQL Fulltext_create. Fulltextový systém se odstraňuje SQL funkcí Fulltext_destroy.

Při vytvoření fulltextového systému vzniknou ve zvolené aplikaci tabulky FTX_WORDTABid a FTX_REFTABid, sekvence FTX_DOCIDid a informační (na řídicím panelu neviditelný) objekt FTX_DESCRid, kde id je identifikátor fulltextového systému. Tabulka pro dokumenty nevznikne, aplikace (resp. její autor) si tyto tabulky vytvoří sama podle potřeby.

Související funkce:

Fulltext_create, Fulltext_destroy, Fulltext_index_doc, Fulltext_context, Fulltext_remove_doc,

Seznam subsekcí:

  • Označování a uložení dokumentů
  • Fulltextové vyhledávání dokumentů
  • Rozhraní ODMA
  • Slova, která se neindexují


Označování a uložení dokumentů ve fulltextových systémech

Dokumenty, s nimiž fulltextový systém pracuje, jsou zaznamenány v tabulce dokumentů. Každá tabulka dokumentů obsahuje:

  • sloupec (sloupce) s textem (texty) dokumentu resp. sloupec s odkazem na dokument (je-li dokument v externím souboru), sloupec může být typu CLOB, BLOB nebo řetězec znaků,

  • celočíselný sloupec s číslem dokumentu, které identifikuje dokument v rámci fulltextového systému.

  • unikátní index ke sloupci s číslem dokumentu;

  • libovolné další sloupce a indexy dle potřeby, další sloupec může například obsahovat údaj o tématické oblasti, do níž dokument patří, a může se využívat v kritériích při vyhledávání dokumentů.

Pro generování unikátních čísel nových dokumentů slouží sekvence FTX_DOCIDid vytvořená při založení fulltextového systému. Typicky má sloupec s číslem dokumentu definovanou implicitní hodnotu FTX_DOCIDid.nextval. Tato implicitní hodnota zajistí, že každý nový záznam v tabulce dokumentů automatický obdrží číslo dokumentu.

V jednom fulltextovém systému lze indexovat dokumenty z více různých tabulek dokumentů. Přitom je třeba zajistit, že čísla dokumentů budou unikátní přes všechny takové tabulky. Proto je výhodné využívat pro generování čísel sekvenci. Lze však místo ní využít i libovolný jiný způsob přidělování unikátních čísel.

Tabulku pro uložení dokumentů lze vytvořit například příkazem:

CREATE TABLE Txtab (cislo_doc INTEGER DEFAULT ftx_docid.nextval, tx LONG VARCHAR, PRIMARY KEY (cislo_doc))

Slova v dokumentech

Za slovo se pro indexování a vyhledávání dokumentů považuje maximální posloupnost znaků, která začíná písmenem, číslicí, znakem @ nebo _ a obsahuje kromě těchto znaků případně ještě pomlčky. Tak například MS-DOS je jedno slovo, zatímco TCP/IP jsou dvě slova. Slovo je také například ABC_DE_@14-23X, ale nikoli 123X.

Ve slovech se nerozlišuje velikost písmen, lze však vyhledávat slova s přihlédnutím k velikosti písmen.

Pro každý jazyk existuje seznam slov, která se neindexují. Pro češtinu je seznam zde.

Zaindexování dokumentu

Pro zaindexování slouží funkce Fulltext_index_doc.

Pokud se dokument nachází v souboru, pak je nutno volat funkci pro zaindexování na tom počítači, na němž je soubor dostupný. Proto SQL procedura prováděná na databázovém serveru obvykle nemůže zaindexovat dokument zacházející se v souboru na klientském počítači. Pro tento případ existuje funkce Fulltext_index_doc také v klientském API:

Odstranění dokumentu

Pokud je dokument či jeho obsah zrušen, pak je třeba jej odstranit z indexu pomocí funkce SQL Fulltext_remove_doc.

Funkci Fulltext_remove_doc není třeba volat po změně v dokumentu před voláním funkce Fulltext_index_doc - starý obsah dokumentu je při novém indexování odstraněn automaticky. Funkci lze volat například v triggeru na tabulce obsahující dokumenty.

Viz

  • Fulltextové vyhledávání dokumentů
    Související funkce:

    Fulltext_create, Fulltext_destroy, Fulltext_index_doc, Fulltext_context, Fulltext_remove_doc,


Fulltextové vyhledávání dokumentů

Ve fulltextovém systému lze vyhledávat dokumenty obsahující slova, fráze a jejich kombinace vytvořené pomocí operátorů AND, OR, NOT a NEAR, případně i s použitím kulatých závorek. Pro kombinování vyhledávaných slov platí tato pravidla:

  • Slova spojená binárním operátorem AND se musejí v dokumentu vyskytnout obě, na jejich pořadí nebo vzdálenosti v textu však nezáleží;

  • Ze slov spojených binárním operátorem OR se musí v dokumentu vyskytnout alespoň jedno, nezáleží na tom, které to bude;

  • Slovo, před nimž je unární operátor NOT se v dokumentu nesmí vyskytnout;

  • Slova spojená binárním operátorem NEAR se musejí v dokumentu vyskytnout obě a navíc musejí být blízko sebe - mezi nimi smí být nejvýše 5 jiných slov

  • Slova uzavřená do uvozovek tvoří frázi a v dokumentu se musejí vyskytnout všechna, ve stejném pořadí a bezprostředně za sebou.

  • Pokud se před hledaným slovem použije rovnítko, hledají se pouze dokumenty, v nichž je toto slovo zapsáno stejně velkými písmeny v rámci tří rozlišovaných způsobů zápisu.

Příklady vyhledávání:

most - hledají se dokumenty obsahující slovo "most";

uhlí AND elektrárna - hledají se dokumenty obsahující slova "uhlí" a zároveň "elektrárna";

teplárna OR elektrárna - hledají se dokumenty obsahující slova "teplárna" nebo "elektrárna";

elektrárna AND NOT vodní - hledají se dokumenty obsahující slovo "elektrárna", ale neobsahující slovo "vodní";

elektrárna NEAR znečištění - hledají se slova obsahující slovo "elektrárna" vyskytující se poblíž slova "znečištění";

"vodní elektrárna" - hledají se dokumenty obsahující bezprostředně za sebou stojící slova "vodní" a "elektrárna".

Operátor NOT se dá použít pouze na jednotlivá slova. Operátor AND má vyšší prioritu než OR, takže například při vyhledávání aaa OR bbb AND ccc se vrátí také dokument obsahující pouze slovo aaa.

Integrace fulltextového vyhledávání do SQL dotazů

K vyhledání slouží predikát

Fulltext(označení_ft_systému, číslo_dokumentu, hledaná_slova).

Tento predikát má hodnotu TRUE, pokud dokument uvedeného čísla obsahuje hledaná slova, nebo FALSE, pokud je neobsahuje. Predikát se dá použít ve vyhledávacích podmínkách na tabulkách dokumentů.

Příklad:

SELECT * FROM Txtab
WHERE Fulltext("", cislo_doc, "(Linux OR ""Windows NT"") AND NOT MS-DOS")

vybere z tabulky Txtab ty záznamy, které obsahují ve svých zaindexovaných sloupcích slovo Linux nebo Windows NT a zároveň neobsahují výraz MS-DOS.

Rozlišování velikosti písmen při vyhledávání dokumentů

Fulltextové nástroje ve 602SQL nesledují velikost všech písmen ve slově. Dovolují však rozlišit tři případy:

  • slovo je napsáno pouze velkými písmeny;

  • slovo má první písmeno velké, ale ostatní písmena nejsou všechna velká;

  • slovo má první písmeno malé.

Při normálním vyhledávání slova se k velikosti písmen nepřihlíží. Pokud se velikost písmen má respektovat (v rámci uvedených tří kategorií), pak je třeba v posledním parametru predikátu Fulltext uvést bezprostředně před příslušným slovem znak = (rovnítko).

Příklad:

most - hledají se dokumenty obsahující slovo "most", bez ohledu na velikost písmen;

=most - hledají se dokumenty obsahující slovo "most", s malým prvním písmenem (obecné slovo, leda že je na začátku věty);

=Most - hledají se dokumenty obsahující slovo "Most", s prvním písmenem velkým, avšak nikoli se všemi velkými písmeny (název města, leda že jde o obecné slovo na začátku věty);

=MOST - hledají se dokumenty obsahující slovo "MOST", napsané pouze velkými písmeny (název nevládní organizace);

Příklad:

Fulltext("", cislo_doc, "Německo OR =BRD")

- dotaz v této formě zabrání nalezení dokumentu, který obsahuje slovo "Brd" jako genitiv od "Brdy".

Setřídění dokumentů podle počtu a váhy výskytů

Fulltextový systém dokáže sledovat počty výskytů hledaného slova nebo fráze v dokumentech. Tyto počty se nejčastěji používají k setřídění nalezených dokumentů. Setříděnou odpověď vytvoří dotaz využívající systémovou proměnnou @@FULLTEXT_WEIGHT v tomto tvaru:

SELECT ...., @@FULLTEXT_WEIGHT FROM ...
WHERE Fulltext(...)
ORDER BY @@FULLTEXT_WEIGHT

Pokud při vytvoření fulltextového systému bylo umožněno sledování vah jednotlivých výskytů slova v dokumentu, pak se jeden výskyt slova může počítat s násobnou váhou. Rozlišení váhy výskytů však závisí na formátu dokumentu a na schopnosti konverzní knihovny přiřadit slovům v různých částech dokumentu různé váhy. V současné verzi se rozlišení váhami nepoužívá.

Vyhledání kontextu výskytu

Fulltextový systém umožňuje vyhledávat k dané frázi také její kontext (slova před a za frází v původním dokumentu). K vyhledání kontextu slouží funkce Fulltext_context s využitím systémové (typu INT) @@FULLTEXT_POSITION.

SELECT Fulltext_context(doc,0,@@FULLTEXT_POSITION,5,">>%<<")
FROM Doctab
WHERE Fulltext("",id,"...")

Negativistické dotazy

Není dovoleno vyhledávat dokumenty pouze na základě toho, že neobsahují určité slovo či frázi. Nelze například vyhledávat dokumenty neobsahující slovo Windows pomocí predikátu:

fulltext("", cislo_doc, "NOT Windows")

Klauzule NOT musí být vždy spojena operátorem AND s pozitivním vyhledáváním nějakého slova nebo fráze, např. lze psát:

fulltext("", cislo_doc, """Operační systém"" AND NOT Windows")

Na negativistický dotaz fulltextový systém vrátí prázdnou odpověď. Klauzule NOT spojená pomocí OR s jinou klauzulí se ignoruje.

Uživatelské rozhraní pro vyhledávání dokumentů

Pro vyhledávání dokumentů pomocí fulltextových nástrojů lze využít dotazová pole ve formulářích, které vedou do tabulek zaindexovaných dokumentů. Jak dotazovou podmínku lze uvést predikát Fulltext, například ve tvaru:

Fulltext("", cislo_doc, "%")

Vyhledávání dokumentů z prostředí jiných aplikací

Aplikace podporující rozhraní ODMA mohou vyhledávat dokumenty prostřednictvím tohoto rozhraní.

Viz

  • Fulltextové nástroje ve 602SQL
  • Označování a uložení dokumentů ve fulltextových systémech
    Související funkce:

    Fulltext_create, Fulltext_destroy, Fulltext_index_doc, Fulltext_context, Fulltext_remove_doc,


Rozhraní ODMA pro ukládání dokumentů do skladu

Součástí 602SQL Serveru jsou nástroje, které dovolují provozovat SQL server jako sklad dokumentů přístupný přes rozhraní ODMA (Open Document Management API).

Instalace tohoto rozhraní proběhne automaticky při instalaci klienta 602SQL. Implementované rozhraní odpovídá verzi 1.5 specifikace ODMA. Obsahuje však některá rozšíření.

Struktura skladů dokumentů

Na jednom serveru lze vytvořit více skladů dokumentů označených jmény. Každému skladu dokumentů přísluší některý SQL server a informace o tom, kde a jak jsou na tomto SQL serveru dokumenty uloženy.

Při otevírání dokumentu se v prvním kroku volí sklad dokumentů a poté některý dokument z tohoto skladu. Podobně při prvním uložení dokumentu se zvolí nejprve sklad a pak umístění a jméno dokumentu ve skladu.

Sklady dokumentů se vytvářejí a ruší na řídicí konzoli 602SQL na stránce ODMA a sklady dokumentů v sekci Nastavení klienta a přístupů. Po stisku tlačítka Správa skladů dat se otevře seznam všech existujících skladů dokumentů a pomocí tlačítek Přidat a Odstranit lze sklady vytvářet a rušit.

Při vytváření nového skladu dokumentů se zadávají tyto informace:

  • Jméno skladu - jméno, pod nímž bude sklad vystupovat při otevírání a ukládání dokumentů

  • Umístěn na SQL serveru - jméno SQL serveru, na němž bude sklad vytvořen

  • Ve schématu - jméno schématu neboli aplikace, do nich bude sklad umístěn

  • Rozlišovací přípona - nejvýše dvacetiznakový identifikátor rozlišující sklady dokumentů nacházející se ve stejné aplikaci, obvykle je přípona prázdná

  • Tabulka dokumentů - jméno databázové tabulky, do níž se budou ukládat dokumenty

  • Příznaky, které informace se mají sledovat u dokumentů ve skladu. Zatrženým příznakům budou odpovídat pomocné sloupce v tabulce dokumentů a bude je možno využívat v dotazech vyhledávajících dokumenty

Pokud sklad dokumentů již existuje na některém síťovém SQL serveru, pak se musí registrovat na každém počítači, na němž se bude využívat. Registrace se provádí stejně jako vytváření nového skladu, jen není nutno vyplňovat příznaky.

Sklady dat jsou zaevidovány v registru jako klíče pod HKEY_CLASSES_ROOT/ODMA32/602SQL/Repositories

Interface pro správu skladů dokumentů

Pro správu skladů dokumentů slouží rozhraní IODM602SQL deklarované takto:

DEFINE_OLEGUID(IID_IODM602SQL, 0x22FF9, 0, 0);

Funkce int ManageRepositories(void) přístupná přes toto rozhraní otevře dialogové okno pro správu skladů dokumentů. Umožňuje vytvořit nebo zaregistrovat nový sklad dokumentů. Dovoluje také zrušit místní registraci skladu dokumentů.

Rozšíření rozhraní pro vyhledávání dokumentů

Dotazový jazyk pro vyhledávání dokumentů byl rozšířen tak, aby umožňoval implementovat uživatelské rozhraní pro výběr a uložení dokumentu. V části WHERE lze použít zápisy ve tvaru:

Repository=´jméno skladu dokumentu´
FolderNum=´číslo folderu´

Pokud se použije první zápis, vyhledají se dokumenty pouze v zadaném skladu. Tento zápis se smí s ostatními podmínkami kombinovat pouze pomocí operátoru AND.

Pokud se použije druhý zápis, vyhledají se dokumenty umístěné v zadaném folderu (složce). Foldery mají stromovou strukturu a kořenový folder má číslo -1.

Kompatibilita z MS Word

Pro spoluprácí současných verzí programu MS Word a ODMA z 602SQL je nutno do registru zapsat klíč:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ODMA32\ANSIonNT

Viz

Fulltextové nástroje ve 602SQL


Seznam slov, které se neindexují

602SQL-Úplná dokumentace

Seznam slov, která se fulltextově neindexuji

Ve fulltextovém systému pro český jazyk se neindexují následující slova (a jejich tvary). Tato slova nelze vyhledávat.

"A", "ABY", "ALE", "ANEBO", "ANI", "ANIŽ", "ANO", "APOD", "AVŠAK", "AŤ",
"AŽ",  "AČKOLIV",
"BA", "BEZ", "BUĎ", "BY", "BÝT",
"CO",
"ČI", "ČÍ"
"DALŠÍ", "DO", "DOKUD", "DOSUD",
"HO",
"I",
"JA", "JAK", "JAKO", "JAKÝ", "JE-LI", "JEHO", "JEJICH", "JEJICHŽ", "JEJÍ",
"JEJÍMŽ", "JEJÍŽ", "JEN", "JENŽ",
 "JINAK", "JINÝ", "JIŽ", "JÍT",
"K", "KAŽDÝ", "KDE", "KDO", "KDY", "KDYBY", "KDYŽ", "KE", "KTERÝ", "KU",
"LEDA", "LZE",
"MIMO", "MÉ", "MÍT",
"NA", "NE", "NEBO", "NEBOLI", "NEBÝT", "NEŽ", "NICMÉNĚ", "NIKOLI", "NO",
"O", "OD", "OKOLO", "ON", "OPROTI",
"PAK", "PO", "POD", "POKUD", "PRO", "PROTO", "PŘE", "PŘED", "PŘES",
"PŘESTO", "PŘESTOŽE", "PŘEVÁŽNĚ", "PŘITOM",
"S", "SE", "SEBE", "SICE", "STEJNÝ", "SVÉ", "SÁM",
"TAK", "TAKTO", "TAKÉ", "TAM", "TATA", "TEDY", "TEN", "TENTO", "TJ",
 "TOTIŽ", "TU", "TUTEN", "TY", "TZN", "TÝŽ",
"U", "UVNITŘ", "UŽ",
"V", "VE", "VY", "VŠAK", "VŽDY",
"Z", "ZA", "ZDA", "ZDE", "ZE", "ZEJMÉNA",
"ŽE",


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. Synchronizovat 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.


Vlastnosti a jejich nastavování

Pro uložení provozních parametrů, voleb a příznaků na 602SQL serveru slouží takzvané vlastnosti. Každá vlastnost má:

  • majitele, což je objekt, kterého se vlastnost týká a jehož chování může ovlivnit;
  • jméno, což je slovní označení vlastnosti;
  • hodnotu, což je obvykle číslo nebo řetězec znaků.

Například majitel "@SQLSERVER" má vlastnost "TraceLogCacheSize" a ta může mít hodnotu 5000. Tato vlastnost ovlivňuje velikost cache pro log serveru a při uvedené hodnotě bude mít cache 5000 bajtů. Jiné jméno majitele než "@SQLSERVER" se v současné verzi nevyužívá.

Majitel a jméno vlastnosti jsou řetězce znaků a mohou obsahovat jakékoli znaky včetně mezer. K velikosti písmen se v nich nepřihlíží.

Hodnoty vlastností se dají nastavovat a číst dvojím způsobem:

  • Pomocí interaktivních nástrojů, jako jsou Řídicí konzole nebo dialogy ve vývojovém prostředí 602SQL;
  • Pomocí API funkcí Set_property_value a Get_property_value.

Do verze 7 včetně šlo vlastnosti zapisovat přímo do jejich externího úložiště, kterým je pod Windows registr, pod LINUXem soubor wbkernel.ini. Od verze 8 jsou vlastnosti uloženy v systémové tabulce v databázi.

Seznam subsekcí:

  • Přehled nastavitelných vlastností serveru


Přehled nastavitelných vlastností serveru

Provozní chování serveru lze ovlivnit nastavením řady vlastností. Níže uvedená tabulka obsahuje přehled vlastností. Jejich podrobnější popis je v dokumentaci u oblasti, kterou každá vlastnost ovlivňuje.

Změna hodnoty vlastnosti se většinou projeví po restartu serveru.

Majitelem všech zde uvedených vlastností je "@SQLSERVER".

IPPort | Číslo portu, na který se připojují klienti (na kterém naslouchá SQL server), implicitně 5001.
KillTimeNotLogged | Doba v sekundách, po níž server odpojí klienta, který se nepřilogoval.
KillTimeLogged | Doba v sekundách, po níž server odpojí přilogovaného nečinného klienta.
UnlimitedPasswords | Je-li 1, pak uživatelská hesla lze používat neomezený počet krát, za cenu snížené bezpečnosti.
TraceLogCacheSize | Velikost cache v bajtech pro každý log vytvořený na serveru. Obsah této cache je přístupný pro klienty.
Tray Icon | Určuje způsob zobrazení ikony serveru běžícího jako task. Je-li 1, zobrazuje se malá ikona v "system tray", je-li 0, používá se normální indikace. Týká se pouze Windows.
use_ascii | Je-li 1, pak výstup ze serveru na konzoli je v ASCII (bez háčků a čárek). Týká se pouze LINUXu.
Frame Space | Prostor pro interní cache pro přístup k databázovému souboru, v KB.
Server Memory | Počáteční operační paměť serveru, v násobcích 64 KB.
Sort Space | Maximální prostor, který se alokuje pro třídění, v KB.
Total Sort Space | Maximální prostor, který se alokuje pro všechna souběžně probíhající třídění, v KB.
Server Protocol | Seznam protokolů, po nichž se klienti mohou připojovat na server, lze uvést TCP/IP a pod Windows také IPX a NetBios.
CloseFileWhenIdle | Je-li 1, pak SQL server zavře databázový server na dobu, kdy na něj není připojen žádný klient ani neběží žádné vlákno.
DisableAnonymous | Je-li 1, pak se na server nemůže připojit anonymní klient.
DisableFastLogin | Je-li 1, pak se každý nový klient musí přihlásit, i když se připojuje ze stejné síťové adresy, jako již existující klient.
Dir[N] | Adresář, z něhož lze použít externí DLL/SO knihovnu. Lze zadat souvisle očíslované vlastnosti Dir1, Dir2 atd.
Monitor ... | Požadavky na logování určitých události do základního logu serveru.
IP_enabled_addr[N] | Seznam IP adres nebo jejich skupin, z nichž je povolen přístup klientů. Lze zadat souvisle očíslované vlastnosti IP_enabled_addr1, IP_enabled_addr2 atd.
IP_enabled_mask[N] | Seznam masek vztahujících se k IP adresám, z nichž je povolen přístup klientů. Lze zadat souvisle očíslované vlastnosti IP_enabled_mask1, IP_enabled_mask2 atd.
IP_disabled_addr[N] | Seznam IP adres nebo jejich skupin, z nichž je zakázán přístup klientů. Lze zadat souvisle očíslované vlastnosti IP_disabled_addr1, IP_disabled_addr2 atd.
IP_disabled_mask[N] | Seznam masek vztahujících se k IP adresám, z nichž je zakázán přístup klientů. Lze zadat souvisle očíslované vlastnosti IP_disabled_mask1, IP_disabled_mask2 atd.
Backup... | Vlastnosti vztahující se k automatickému zálohování.
IntegrCheckInterv | Počet sekund mezi automaticky prováděnými kontrolami konzistence databáze. Pokud je 0, automatické kontroly se neprovádějí.
DefaultSQLOptions | Nastavení příznaků kompatibility SQL pro každého nově přihlášeného klienta.
MinPasswordLen | Minimální délka uživatelského hesla.
PasswordExpiration | Maximální počet dnů platnosti uživatelského hesla (0 - neomezená platnost).
FilEncrypt | Šifrování databázového souboru.
ThrustedDomain | Jméno domény, z níž se přebírá přihlášení.
ServerKey | Tajný klíč SQL serveru.
ReqCommEnc | Je-li nenulové, pak se od síťových klientů vyžaduje šifrovaná komunikace.
WriteJournal | Je-li 1, pak se vede journal všech aktualizací.
SecureTransactions | Je-li 1, pak server pracuje v režimu jištěných transakcí.
FlushOnCommit | Je-li 1, pak se při každém commitu zapíšou všechny změny na disk.


Replikace dat v 602SQL

V oblasti databází hovoříme o replikacích, když databázové servery si mezi sebou vyměňují data tak, že data vložená nebo změněná na jednom serveru se objeví i na ostatních serverech. Replikace zpravidla probíhají podle plánu stanovaného uživatelem nebo aplikací. Termíny stanovené tímto plánem hlídá databázový server a podle nich replikuje, aniž by ke každému přenosu dat potřeboval podnět uživatele nebo aplikace.

V 602SQL tvoří rámec pro replikování dat mezi servery tzv. sdílená aplikace. Pokud se na obou serverech nachází tatáž aplikace, pak ji mohou servery sdílet, tj. může v ní docházet k replikacím dat mezi stejnými tabulkami.

Replikace se využijí v těch případech, kdy je třeba zajistit sdílení dat mezi více uživateli a není vhodné je všechny připojit na stejný databázový server. Důvody, kdy se řešení s jedním centrálním serverem nehodí, mohou být například tyto:

  • komunikační linka od uživatelů k centrálním serveru není dostatečně průchodná (například spojení po Internetu nebo po telefonu není pro mnoho databázových aplikací dostatečné); proto se uživatel připojí na svůj lokální server a ten bude občas replikovat s centrálním serverem;

  • jeden server je volně vystavený na Internetu (každý má přístup pomocí Internet klientů), druhý je již v zabezpečeném firemním intranetu a zde probíhá zpracování;

  • uživatelé patří k více organizacím a každá chce mít svůj server pod kontrolou.

Jaké typické úlohy se řeší pomocí replikací?

Využití replikací je zvlášť vhodné pro úlohy tohoto typu:

  • oddělení přijímání dat z Internetu a zpracování uvnitř firmy (např. elektronický obchod);

  • sběr a distribuce dat v geograficky rozlehlé oblasti, např. sběr objednávek dealerů u výrobce, distribuce ceníků dealerům;

  • vytváření centrálních kartoték a referenčních databází;

  • podpora týmové práce na sdílených dokumentech;

  • téměř on-line (v replikační periodě) zálohování důležitých dat bez přerušení běhu

Seznam subsekcí:

  • Jak replikace fungují
  • Vlastností replikací
  • Příprava sdílení aplikace mezi servery
  • Návrh replikujících aplikací


Jak replikace fungují

Replikace slouží pro sdílení dat jedné aplikace provozované na různých serverech, tedy zabezpečují to, aby se změna v tabulce na jednom serveru promítla do stejné tabulky ve stejné aplikaci na jiném serveru. Pro výměnu dat mezi různými aplikacemi nelze replikace použít.

Vlastní výměnu dat zabezpečuje server (nikoli klient). Servery si vyměňují data prostřednictvím tzv. replikačních paketů. Replikační paket je soubor obsahující údaje o změnách v datech provedených na serveru nebo různé organizační informace ve speciálním formátu, který místní server vytvoří ve svém výstupním adresáři, některým z podporovaných způsobů ho dopraví do vstupního adresáře protějšího počítače. Druhý server periodicky prohlíží obsah vstupního adresáře a došlé pakety postupně zpracovává. Pakety lze transportovat elektronickou poštou, pomoci přímého IP spojení obou serverů, nebo zkopírováním do adresáře, který sdílí oba servery.

Technické předpoklady použití replikací

K tomu, aby dva servery mohly sdílet aplikaci a tedy replikovat v jejím rámci data, stačí, když existuje mezi servery

  • poštovní spojení

  • přímé IP spojení

Poštovní spojení musí podporovat SMTP, MAPI nebo Mail602 rozhraní. V případě použití poštovního systému Mail602 lze replikace provozovat i v situaci, kdy je jeden ze serverů instalován na počítači, který s mateřským poštovním úřadem komunikuje v nespřaženém (off-line) režimu prostřednictvím vzdáleného klienta pošty Mail602.

K přímému spojení pomocí interního protokolu (nazývaného zde Direkt IP) postačuje existence IP konektivity mezi oběma SQL servery.

K testování a k omezenému provozu replikací v rámci jedné sítě není poštovní software nezbytný. Replikační pakety se mohou mezi servery předávat také kopírováním z adresáře do adresáře.


Vlastnosti replikací v 602SQL

Replikování lze v 602SQL ovlivnit nastavením řady parametrů. Při návrhu sdílené aplikace lze zvolit například:

  • které tabulky z aplikace se budou replikovat a které nikoli;

  • které sloupce a které záznamy replikovaných tabulek se budou přenášet (sloupce se specifikují výčtem, záznamy podmínkou);

  • zda zrušení záznamu na jednom serveru má vyvolat zrušení téhož záznamu na ostatních serverech;

  • jak často se budou data replikovat a zda se bude replikovat oběma směry;

  • jak se aplikace vypořádá s možností vzniku různých variant téhož záznamu na různých serverech.

Dominantním rysem replikací v 602SQL je přesunutí plánování vlastností replikací ze správce na autora aplikace. Pokud správce chce zajistit bezchybné sdílení aplikace mezi servery, nemusí nastavovat stovky parametrů a práv, nýbrž si zvolí některý z předem připravených replikačních vztahů k dalším serverům.

Nastavování replikačních vlastností je rozčleněno takto:

  1. Při návrhu každé tabulky se určí ty vlastnosti, které budou společné pro všechny servery sdílející aplikaci.

  2. Vlastnosti, které mohou být nastaveny specificky pro každou dvojici serverů sdílejících aplikaci, se definují v tzv. replikačních vztazích. Těchto vztahů navrhne autor aplikace tolik, kolik smysluplných vztahů mezi dvojicemi sdílejících serverů si dokáže představit.

  3. Při navazování sdílení aplikace mezi dvěma servery se zvolí některý replikační vztah a jeho obsah se okopíruje do replikačních pravidel pro tuto dvojici serverů. Tato pravidla lze pak podle potřeby upravit.

Je nutno pečlivě rozlišovat mezi dvěma pojmy: replikačními vztahy a replikačními pravidly. Replikační vztah je předpis, jak iniciálně nastavit replikační pravidla při navázání sdílení aplikace (je to objekt aplikace). Replikační pravidla pak řídí vlastní proces replikování. Replikační vztahy navrhuje autor aplikace. Replikační pravidla může modifikovat správce aplikace. Modifikovaná replikační pravidla lze po ověření funkčnosti uložit do databáze jako replikační vztah


Příprava sdílení aplikace mezi servery

Návaznost fází přípravy sdílení aplikace mezi dvěma servery lze znázornit takto:

  1. vytvoření a nastavení parametrů spojení (poštovního či Direkt IP či sdílených adresářů) a povolení replikace;

  2. navázání spojení mezi SQL servery;

  3. import (téže) aplikace (tj. sdílené aplikace) na oba SQL servery; aplikace musí být vytvořena tak, aby mohla být sdílena, tj. tabulky, které se mají sdílet, musí mít nastaveny speciální příznaky a musí existovat alespoň jeden replikační vztah;

  4. nastavení vlastností aplikace;

  5. volba replikačního vztahu a navázání sdílení;

  6. případná úprava replikačních pravidel;

Příprava parametrů spojení a navázání spojení mezi servery jsou akce nezávislé na konkrétních aplikacích, které se budou sdílet.

Zatímco vlastní replikace probíhají bez zásahu správců, při navazování spojení je nutná přítomnost obou správců u svých serverů a jejich vzájemná komunikace.

Zde popisované postupy vycházejí z toho, že na počítači je instalováno vývojové prostředí, které umožňuje interaktivně nastavovat parametry a navazovat sdílení. Pro případy větších projektů, kde 602SQL slouží jen jako úložiště dat a uživatelské rozhraní je vlastní, existuje sada funkcí (pouze z externích jazyků), které umožňují veškeré potřebné dialogy otevřít z jiného prostředí, a (je-li to možné) jsou k dispozici i neinteraktivní varianty těchto funkcí – viz programové rozhraní pro replikace.

Seznam subsekcí:

  • Vytvoření a nastavení parametrů spojení
  • Navázání spojení mezi dvěma servery
  • Import aplikace na servery a nastavení lokálních vlastností
  • Proces navazování sdílení aplikace
  • Upravování replikačních pravidel
  • Provoz sdílených aplikací
  • Programové rozhraní pro nastavení a řízení replikací
  • Prostředky pro klientskou reakci na chyby replikací
  • Systémové tabulky popisující replikační chyby


Vytvoření a nastavení parametrů spojení

Parametry spojení se nastavují v dialogu Replikační parametry místního serveru přístupného z Řídicí konzole serveru. Zde je nutné zvolit Typ a Parametry spojení (Pošta, Direkt IP nebo Sdílený adresář) a zvolit Schránku pro replikace. Ostatní nastavení lze ponechat v defaultním stavu (jejich význam – viz popup help v dialogu). Pro jednotlivé typy spojení se nastavuje:

1) Spojení pomocí elektronické pošty může zajistit

  • Libovolný poštovní server, se kterým lze komunikovat pomocí protokolů SMTP a POP3

  • Klient pošty Mail602 - klient může být síťový (LAN i NET, poštovní úřad běží na některém počítači v síti), vzdálený (komunikace s poštovním úřadem probíhá zpravidla pomocí telefonní linky) nebo SMTP/POP3

  • Libovolná pošta, která podporuje programové rozhraní MAPI (např. MS Exchange, MS Outlook)

V praxi se využívá zvláště spojení SMTP/POP3.

Nastavení poštovních parametrů se neprovádí zde – přebírá se nastavení tzv. Poštovních profilů 602SQL, vytvořených pro potřeby obecného využívání elektronické pošty v 602SQL.

Postup je tedy následující:

  1. vytvořit a uložit poštovní profil daného typu pošty (mimo tento dialog);

  2. při nastavování parametrů replikace pomocí pošty pouze vybrat z comba vhodný profil;

  3. jako Schránku pro replikace zadat poštovní adresu, na níž bude protější SQL server zasílat replikační pakety. Pokud je možné zjistit adresu ze zvoleného profilu, přednastaví se automaticky. Pro SMTP poštu je formát adresy obvyklý (např. repl_schranka@firma.cz).

2) Spojení pomocí Direkt IP

Pro nastavení jednoduché a rychlé spojení pomocí interního protokolu. Oba servery uvedou jako Schránku pro replikace svou IP adresu ve formátu IP_adresa:číslo_portu (např. 192.168.1.2:6003). Číslo portu (a dvojtečku) použijte tehdy, pokud SQL server naslouchá na jiném než standardním (5001) portu, pak použijte číslo portu o 2 větší než je číslo portu SQL serveru.

Pro Direkt IP se předpokládá pevná IP adresa obou serverů. Pokud není server trvale připojen do Internetu, lze nastavit, aby se při každém replikování připojil pomocí zvoleného Telefonního spojení, ale i zde přetrvává nutnost pevné IP adresy (tedy ne adresy přidělené DHCP serverem poskytovatele).

3) Spojení pomocí sdílených adresářů

V některých případech replikující servery nemusí využívat služeb pošty ani Direkt IP, protože sdílejí adresářový prostor a mohou si v něm předávat soubory. Oba servery, které chtějí nabídnout tento způsob příjmu paketů, uvedou jako Schránku pro replikace svůj vstupní adresář. Zasílání paketů na takto specifikovanou adresu bude realizováno prostým přenesením souboru obsahujícího paket do zadaného adresáře.

Po instalaci 602SQL je tento režim přednastaven. Pro zahájení navazování spojení dvou serverů na jednom počítači (nejjednodušší případ testování) stačí pouze replikace na obou stranách povolit. Pokud zvolené adresáře neexistují, vytvoří se při prvním použití.

Povolení replikace

Replikační režim serveru se zahájí po zatrhnutí čtverce Replikace povolena ve spodní části dialogu. Informace o zahájení replikování daného typu se objeví v okně serveru a logu (pokud se loguje replikování) – od této chvíle je replikování umožněno a může se přistoupit k navazování spojení s protějším serverem.


Navázání spojení mezi dvěma servery

Navázat spojení je nutno s každým serverem, s nimž bude probíhat replikace. Jednou navázané spojení může sloužit libovolnému počtu sdílených aplikací. Podstata navázání spojení spočívá v tom, že si servery vymění adresy svých schránek a další údaje.

K navázání spojení stačí následující akce provádět z jednoho serveru. Informace se přesto vymění oboustranně.

Chcete-li, aby server, na nějž jste připojení, navázal spojení s dalším replikačním serverem, postupujte takto:

  1. označte v levé oblasti řídicího panelu vlastní server (není vybrána žádná aplikace);

  2. ve střední oblasti označte ve složce Systém kategorii Replikační servery;

  3. proveďte akci Registrovat, tím otevřete dialogové okno;

  4. vyplňte adresu serveru podle zvoleného typu replikace, s nimž chcete navázat spojení (u typu pošta ještě zvolte typ pošty), a stiskněte OK.

Poté musíte vyčkat, až si servery vymění pakety - doba trvání této operace závisí na typu spojení – u Direkt IP je to téměř okamžitě, u pošty se čeká na doručení zásilek. Poté, co dorazí odpověď osloveného serveru, bude tento server zařazen do seznamu registrovaných replikačních serverů. Nový replikační server se však nepřidá do zobrazeného seznamu replikačních serverů ihned, objeví se až po novém překreslení řídicího panelu

Pro konkrétní replikační server lze později provést akci Aktualizovat, při níž se odešle tomuto serveru žádost o zaslání nových informací o sobě.

Volba adresy

Jakmile se protější server objeví v seznamu replikačních serverů, lze si na záložce Popis přečíst jeho adresy. Nabízí-li server dvě adresy, lze si z nich vybrat jednu pomocí přepínače Odesílat replikační pakety na alternativní adresu, který se objeví ve spodní části řídicího panelu. Některá z adres může být cestou ke vstupnímu adresáři serveru - takovou adresu lze vybrat pouze pokud je tento server ve stejné síti.

Volit adresu kteréhokoli replikačního serveru smí pouze provozní správce databáze.

K další fázi přípravy sdílení aplikace lze přistoupit až tehdy, když oba servery o sobě vědí.

Od okamžiku povolení replikací je možné sledovat "co se právě děje" v okně serveru, kam se vypisují veškeré informace o replikacích.


Import aplikace na servery a nastavení lokálních vlastností

Začít sdílet aplikaci lze pouze tehdy, pokud je tatáž aplikace importovaná na oba servery, nebo exportovaná z jednoho a importovaná na druhý. Nelze navázat sdílení dvou různých (třeba i stejně pojmenovaných aplikací). Nelze také sdílet aplikaci, kterou bylo nutno při importu přejmenovat v důsledku konfliktu jmen.

Některé aplikace vyžadují před navázáním sdílení nastavení jistých vlastností týkajících se replikací. Okno pro nastavení vlastností se otevírá provedením akce Vlastnosti pro vybranou aplikaci.

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.

Vlastnost lze nastavit pouze před zahájením sdílení aplikace. Nastavení může provést pouze provozní správce databáze.


Proces navazování sdílení aplikace

S navázáním sdílení dvou instancí téže aplikace mezi dvěma servery musí souhlasit správci aplikace (nebo správci databáze) na obou serverech (dále označovaní Správce1 a Správce2). Nestačí tedy aktivita pouze na jednom serveru, jako to bylo možné při navazování spojení. Předpokládá se, že spojení mezi servery již bylo navázáno.

Při navazování sdílení aplikace postupujte takto:

  1. Správce1 vybere aplikaci a proveďte pro ní akci Replik. pravidla. Tím otevře okno s replikačními pravidly aplikace.

  2. Za první záložce stiskne tlačítko Sdílet s dalším serverem. Tím otevře další dialog.

  3. Vybere server, s nimž chcete aplikaci sdílet, vybere jméno replikačního vztahu, který chcete s tímto serverem navázat, a stiskne OK. Tím odešle protějšímu serveru požadavek na sdílení. Zároveň pomocí čtverce Považovat současný stav za synchonizovaný? stanovíte, mají-li servery po navázání sdílení začít synchronizovat data ve všech replikačních tabulkách aplikace či nikoliv (pokud obě aplikace jsou totožné, čtverec zatrhněte).

Do doby, než Správce1 obdrží reakci z druhé strany, vidí tento stav: Žádost o vztah byla odeslána, čekám na odpověď.

Proces navazování sdílení poté pokračuje na protějším serveru:

  4. Správce2 vybere tutéž aplikaci a provede akci Replik. pravidla. Tím otevře dialog s replikačními pravidly aplikace.

  5. Pokud požadavek na navázání sdílení již dorazil, objeví se výchozí server v seznamu replikačních serverů této aplikace, a stavová informace bude říkat, že došla žádost o určitý replikační vztah.

  6. Stiskem jednoho ze dvou tlačítek Akceptovat nebo Zamítnout se tato žádost akceptuje nebo zamítne. Tím se výchozímu serveru odešle zpráva o přijetí nebo odmítnutí žádosti. Vlastní replikování je však dosud zablokováno.

Další fáze procesu proběhne automaticky na výchozím serveru.

Dorazí-li paket se zprávou o přijetí navrhovaného vztahu, změní se stav sdílení a protějšímu serveru se zašle paket, který na něm odblokuje replikování. Tyto změny stavu lze sledovat tak, že na kterémkoli serveru:

  1. Vyberete aplikaci a provedete pro ní akci Replik. pravidla. Tím otevřete okno s replikačními pravidly aplikace.

  2. Za první záložce vyberte jméno protějšího serveru. Stav signalizuje, jak postupuje navazování spojení.

Možné stavy procesu navazování sdílení aplikace

Stav navazování sdílení konkrétní aplikace mezi dvěma servery je vidět v okně replikačních parametrů této aplikace, vybere-li se z comba jméno protějšího serveru. Jednotlivé stavy jsou pojmenovány takto:

  • Žádost o vztah XYZ byla odeslána, čekám na odpověď - stav po odeslání žádosti o sdílení aplikace;

  • Došla žádost o vztah XYZ, rozhodněte: - v tomto stavu se v okně objeví tlačítka Akceptovat a Zamítnout a po jejich stisknutí se odešle odpověď;

  • Žádost o vztah XYZ byla zamítnuta protějším serverem - tento stav se objeví na serveru žádajícím o vztah poté, co dojde zamítnutí žádosti;

  • Žádost o vztah XYZ přijata, posílání změn zatím blokováno - tento stav se objeví na serveru, na němž byla akceptována žádost o vztah došlá z protějšího serveru;

  • Aplikace se sdílí ve vztahu XYZ - tento stav se objeví na nejprve na žádajícím serveru, jakmile dojde kladná odpověď na žádost o vztah. Přitom se odešle odblokování na protější server, a tím se do tohoto stavu dostane i on.

Poté, co proces navazování sdílení aplikace dospěje do stavu Aplikace se sdílí, servery provedou iniciální replikaci a poté začnou podle časového plánu periodicky odesílat změny v datech na protější server.

Automatické zamítnutí žádosti o sdílení

Dorazí-li na server žádost o sdílení aplikace od jiného serveru, bude tato žádost automaticky odmítnuta bez čekání na reakci správce v těchto případech:

  • aplikace, o jejíž sdílení se žádá, na serveru není;

  • v aplikaci je na obou serverech nastaven správce pešků nebo otcovský server odporujícím si způsobem;

  • některá tabulka v aplikaci používá editační pešky a na ani jednom severu není nastaven správce pešků.

Dostane-li server žádající o sdílení odmítavou odpověď, může změnit nastavení replikačních vlastností aplikace (správce pešků, otcovský server) až poté, co provede akci Zanechat sdílení, přestože k zahájení sdílení nedošlo.


Upravování replikačních pravidel

Poté, co se naváže sdílení dvou instancí aplikace na dvou serverech, jsou automaticky nastavena replikační pravidla tak, jak je to předepsáno ve zvoleném replikačním vztahu. Od tohoto okamžiku již na obsahu replikačního vztahu nezáleží, lze však upravovat nastavení replikačních pravidel. Úpravy replikačních pravidel se zpravidla omezují na nastavení vhodné replikační periody. Rozsáhlejší změny jsou výjimečné a obvykle svědčí o tom, že replikační vztahy v aplikaci nebyly adekvátně navrženy.

Replikační pravidla se nastavují zvlášť pro odcházejících pakety a zvlášť pro došlé pakety. Změny týkající se replikovaných sloupců je třeba na obou serverech provádět synchronně - pokud se rozhodnete replikovat další sloupec, je nutno, aby cílový server přijímal replikovanou hodnotu tohoto sloupce, není totiž možno jednostranně rozšířit replikaci nad rámec tohoto, co bylo oboustranně přijato v replikačním vztahu.

Úpravu replikačních pravidel provedete tak, že:

  1. Vyberete aplikaci a provedete akci Replik. pravidla.

  2. Z comba na první záložce vyberete jméno protějšího replikačního serveru.

  3. Na první záložce můžete nastavit, zda v případě rozpoznání replikačního konfliktu mají mít přednost lokální nebo došlá data (nastavení se ignoruje, pokud k replikačnímu konfliktu nemůže v aplikaci dojít).

  4. Na druhé záložce můžete přepsat údaje týkající se vytvářených replikačních paketů, zejména periodu po replikování a případně i seznamy replikovaných sloupců nebo replikační podmínky.

  5. Na třetí záložce můžete přepsat údaje týkající se příjmu replikačních paketů.

Obsah druhé a třetí záložky úzce souvisí s nastavením na protějším serveru. Pokud se na některém serveru replikuje ven jistá množina sloupců, pak na protějším serveru musí být tytéž sloupce označeny na záložce pro replikaci dovnitř, jinak protější server odmítne zaznamenat jejich došlé hodnoty. Podobně je-li v některé tabulce zatrženo replikování zrušení záznamu, pak protější server musí (na třetí záložce) akceptovat zrušení záznamu, jinak k přenosu zrušení nedojde. Toto dvoustranné nastavování replikačních pravidel slouží k ochraně soukromých dat serveru před jejich přepsáním jiným serverem.


Provoz sdílených aplikací

Replikování mezi servery lze řídit na dvou úrovních: na meziserverové komunikační úrovni a na úrovni konkrétní sdílené aplikace. Při normálním provozu replikace žádné explicitní řízení nevyžadují.

Řízení komunikace mezi servery

Servery si mezi sebou zasílají očíslované replikační pakety a vracejí si potvrzení o zpracování paketu. Protokol komunikace je navržen tak, že by neměl doznat úhony ani při opakovaných ztrátách paketů, ztrátách potvrzení, vícenásobném doručení stejného paketu nebo změně pořadí zásilek. Každý směr komunikace je zajištěn nezávisle.

Operace řídící komunikaci mezi servery smí provádět pouze správce databáze.

Zapnutí a vypnutí replikací

Replikování se zapíná nebo vypíná v dialogovém okně pro nastavení parametrů replikací na Řídicí konzoli SQL serveru. Stav tohoto přepínače se pamatuje a vypnete-li server se zapnutými replikacemi, bude replikování automaticky zahájeno při opětovném spuštění serveru.

Parametry replikací

Parametry replikování se nastavují v dialogovém okně zmíněném v předchozím odstavci. Lze nastavit Počet replikačních vláken v rozmezí 1 až 10. Tento parametr určuje, kolik replikačních paketů může serverem být zpracováváno (čteno nebo vytvářeno) souběžně. Pokud neprobíhají replikace enormního množství dat, postačí nastavit parametr na hodnotu 1. Dále lze nastavit Periodu prohlížení replikačních plánů. Udává počet minut, po nichž se prohlédnou sdílené aplikace a zjistí se, zda pro některou nenastala doba pro generování replikačního paketu (podle nastavení v Replikačních pravidlech). Zároveň se prohlédne fronta (poštovní adresa – poštovní schránka nebo adresář podle způsobu replikace), ne-jsou-li v ní došlé replikační pakety od protějšího serveru. Pro Direkt IP toto nastavení neplatí – provádí se okamžitě.

Dále je možné zapnout podrobnější sledování replikací a reagování na ně: pomocí čtverce Logovat do tabulky lze zapnout zapisování informací o chybách při replikaci do systémových tabulek v aplikaci _SYSEXT. Pomocí čtverce Spouštět triggery lze zapnout systémových triggerů v aplikaci _SYSEXT spouštěných jako rekce na replikování.

Technické detaily meziserverové komunikace

Žádný server nezačne vytvářet další replikační paket, dokud neobdržel potvrzení o zpracování předchozího paketu. Dokud nedojde potvrzení, server si drží kopii naposled zaslaného paketu a je schopen jej poslat opakovaně. Je-li server znepokojen tím, že nedostal potvrzení o zpracování zaslaného paketu, vyšle dotaz na stav komunikace. Zjistí-li, že se paket ztratil, pošle jej znovu.

Monitorování replikací

Základní informaci o stavu komunikace s určitým serverem lze nalézt na záložce Popis pro replikační server vybraný ve střední oblasti řídicího panelu. Záložka obsahuje adresy serveru, pořadové čísla posledního přijatého a odeslaného paketu a příznak, zda replikační paket naposled odeslaný tomuto serveru byl již potvrzen. Potvrzení posledního odeslaného paketu má klíčový význam, protože pokud nedošlo, nelze začít vytvářet další paket.

Průběh replikací se všemi servery lze detailně monitorovat v okně serveru (resp. jiném logu serveru), pokud je zapnuto trasování replikací. Do logu se vypisují veškeré informace o vytvářených a odesílaných paketech, včetně zahájení vytváření těch paketů, které nebudou odeslány, protože se zjistí, že v databázi nenastaly žádné změny, které by se měly replikovat, dále se zapisují informace o replikačních konfliktech, o duplicitách apod.

Resynchronizace replikujících serverů

Komunikování mezi servery nevyžaduje žádné zásahy uživatelů a při chybách se obnovu-je automaticky. Pro absolutní jistotu však bylo přidáno "tlačítko poslední záchrany". Provedením akce Synchronizovat pro vybraný replikační server se zahájí replikování s tímto 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.

Řízení komunikace pro určitou aplikaci

Pro každou aplikaci sdílenou s určitým serverem je v replikačních pravidlech nastavena replikační perioda, tj. čas, po kterém se vytvoří ze změněných údajů ve sdílených tabulkách další replikační paket a odešle se protějšímu serveru. Vytváření replikačního paketu se pozdrží, pokud dosud nedorazilo potvrzení o zpracování předchozího paketu.

Mimo tyto pravidelné replikace uživatel nebo aplikační program může provést tyto akce:

  • vyvolat neplánovanou replikaci na určený protější server nebo skupinu serverů;

  • zaslat protějšímu serveru nebo skupině serverů žádost o neplánovanou replikaci na vlastní server.

Uživatel může tyto akce provést z řídicího panelu tak, že označí aplikaci a provede akci Replikovat tam nebo Replikovat sem a ze seznamu serverů, sdílejících tuto aplikaci, vybere cílový server a stiskne tlačítko OK.

Program provede stejné akce voláním funkce Areplicate (s interaktivním výběrem serverů) nebo funkce Replicate (pro zvolený server) nebo se použijí obdobné standardní akce (Replikovat aplikaci a Odeslat žádost o replikaci)

Synchronizace replikací v aplikaci

Na rozdíl od akce Synchronizovat, která se provádí pro všechny sdílené aplikace přereplikováním obsahu všech sdílených tabulek, může být občas potřeba poněkud méně silný nástroj. Je-li třeba prohlásit aktuální stav sdílené aplikace za takový, že následující replikace nic nesmí přenést, lze provést akci Vypustit replikaci. Tato akce upraví interní čítač změn v replikovaných tabulkách do toho stavu, že generování dalšího replikačního paketu skončí s tím, že není co replikovat.Tento stav může nastat např. při importu dat apod.

Program provede stejné akce voláním funkce ASkip_repl (s interaktivním výběrem serverů) nebo funkce Skip_repl pro zvolený server.


Programové rozhraní pro replikace

602SQL-Úplná dokumentace

Programové rozhraní pro nastavení a řízení replikací

Nastavení a zprovoznění replikací lze provést pomocí ovládacích prvků dostupných buď z řídicího panelu 602SQL (na úrovni vybraného serveru nebo vybrané aplikace) nebo z aplikace pomocí funkcí rozhraní pro nastavování replikací. Vývojáři aplikací v externích jazycích mohou tedy pracovat s replikacemi přímo ze svých aplikací, bez nutnosti instalovat vývojové prostředí 602SQL.

Během provozu replikací se buď lze spolehnout na automatické replikování v souladu s nastavenými parametry nebo do replikování zasahovat, a to buď z řídicího panelu nebo pomocí funkcí rozhraní pro řízení replikací.

Řada funkcí pro nastavování a provozování replikací má dvě podoby. Buď funkce otevře dialogové okno a dovolí uživateli nastavit v něm potřebné údaje (interaktivní podoba), nebo má všechny potřebné údaje uvedeny jako své parametry a výsledek vrací také v parametrech (neinteraktivní podoba).

Většina funkcí je přístupná pouze z externích jazyků.

Funkce pro nastavení replikací přes dialogy

Repl_edit_local_server_options - otevře dialog pro nastavení parametrů replikací, umožní definovat adresy a cesty pro přenos replikačních paketů, zapnout nebo vypnout replikování na SQL serveru

Repl_register_new_remote_server - otevře dialog pro navázání spojení se vzdáleným replikačním serverem

Repl_unregister_remote_server - vymaže informace o vzdáleném replikačním serveru

Repl_edit_relation - otevře okno pro návrh replikačního vztahu

Repl_edit_application_properties - otevře dialog pro nastavení parametrů aplikace, včetně parametrů sdílení s jinými servery

Repl_edit_sharing_parameters - otevře dialog na editaci replikačních pravidel

Funkce pro programové nastavení replikací

Repl_GetSet_local_server_props - umožňuje zjistit nebo nastavit replikační parametry lokálního serveru

Repl_GetSet_server_props - umožňuje zjistit příp. nastavit parametry zadaného vzdáleného replikačního serveru

Repl_GetSet_appl_props - umožňuje zjistit a nastavit replikační vlastnosti aplikace.

Repl_Get_state - funkce vrací informace o stavu sdílení zadané aplikace se zadaným serverem.

Repl_direct_register_server - požádá server, aby navázal spojení s replikačním serverem na zadané adrese.

Repl_refresh_server_info - požádá server, aby získal aktuální informace o zadaném replikačním serveru.

Repl_send_share_req - požádá server, aby odeslal paket s žádostí o sdílení zadané aplikace.

Repl_accept_share_req - přijme resp. zamítne došlý požadavek na sdílení aplikace.

Repl_abandon_sharing - ukončí sdílení zadané aplikace

Repl_synchronize - zajistí, že se při příští replikaci přenesou na protější server všechna sdílená data, pro která je nastaveno replikování směrem ven.

Reset_replication - zastaví a spustí replikace tak, aby se mohly projevit

Funkce pro řízení replikací s výběrem serveru v dialogu

AReplicate - otevře dialog pro výběr serveru a pak provede replikaci na tento server nebo odešle žádost o replikaci z tohoto serveru

ASkip_repl - otevře dialog pro výběr serveru a pak zamezí replikování provedených změn na tento server

Funkce pro programové řízení replikací

Replicate - provede replikaci dat ven nebo požádá o replikaci dat směrem dovnitř

Skip_repl - zamezí replikování dat ze zvolené aplikace

Vazby mezi funkcemi

Všechny uvedené funkce kromě Repl_edit_local_server_options, Repl_edit_relation a Repl_edit_application_properties má smysl volat pouze v situaci, kdy jsou nastaveny parametry lokálního severu a replikování je zapnuto.

Funkce Repl_edit_sharing_parameters kontroluje, zda je registrován nějaký vzdálený replikační server, a pokud není, otevře dialog pro navázání spojení s novým serverem a skončí.

Sdílení aplikace s novým vzdáleným serverem lze spustit z dialogového okna otevřeného v funkcí Repl_edit_sharing_parameters. Před zahájením sdílení se zkontroluje, zda jsou nastaveny potřebné vlastnosti aplikace, a pokud ne, otevře se napřed stejný dialog, jaký otevírá funkce Repl_edit_application_properties.


Prostředky pro klientskou reakci na chyby replikací

Systémový trigger _ON_REPLPACKET_SENT

Pokud existuje v aplikaci _SYSEXT procedura _ON_REPLPACKET_SENT, spustí se po každém pokusu o odeslání paketu. Při definici procedury je nutno dodržet předepsaný počet a typy parametrů. Protože procedura běží s administrátorskými právy, je třeba, aby její spouštění povolil správce databáze a to buď interaktivně v dialogu Replikační parametry místního serveru, nebo programově pomocí funkce Repl_GetSet_local_server_props.

PROCEDURE _ON_REPLPACKET_SENT
(IN ServerID BINARY(12), IN ServerName CHAR(31), IN PacketType INT,
 IN PacketNO INT, IN ErrNO SMALLINT, IN ErrText CHAR(128));

Parametry:

ServerID | UUID cílového serveru
ServerName | Jméno cílového serveru
PacketType | Typ paketu: 1 - Data 2 - Žádost o replikaci 3 - Potvrzení replikace 4 - Zamítnutí replikace 5 - Žádost o zaslání stavu 6 - Zaslání stavu 7 - Serverové info 8 - Žádost o serverové info 9 - Žádost o navázání sdílení 10 - Přijetí žádosti o navázání sdílení 11 - Zamítnutí žádosti o navázání sdílení 12 - Odblokování replikací 13 - Ukončení sdílení 14 - Není co replikovat
PacketNO | Číslo paketu (má význam pouze v případě paketu typu replikační data, potvrzení replikace, zamítnutí replikace)
ErrNO | Kód chyby při odeslání paketu (0 = paket odeslán v pořádku)
ErrText | Text chyby při odeslání paketu

Systémový trigger _ON_REPLPACKET_RECEIVED

Pokud existuje v aplikaci _SYSEXT procedura _ON_REPLPACKET_RECEIVED, spustí se po zpracování každého došlého paketu. Při definici procedury je nutno dodržet předepsaný počet a typy parametrů. Protože procedura běží s administrátorskými právy, je třeba, aby její spouštění povolil správce databáze a to buď interaktivně v dialogu Replikační parametry místního serveru, nebo programově pomocí funkce Repl_GetSet_local_server_props.

PROCEDURE _ON_REPLPACKET_RECEIVED
(IN ServerID BINARY(12), IN ServerName CHAR(31), IN PacketType INT,
 IN PacketNO INT, IN ErrNO SMALLINT, IN ErrText CHAR(128),
 IN HdrRec   INT, IN HdrID TIMESTAMP);

Parametry

ServerID | UUID zdrojového serveru
ServerName | Jméno zdrojového serveru
PacketType | Typ paketu
PacketNO | Číslo paketu (má význam pouze v případě paketu typu replikační data, potvrzení replikace, zamítnutí replikace)
ErrNO | Kód chyby při zpracování paketu: 0 - paket zpracován bez chyb 1- replikační konflikt, přednost má místní hodnota 2- replikační konflikt, přednost má došlá hodnota
ErrText | Text chyby při zpracování paketu
HdrRec | Číslo záznamu s informacemi o chybě v tabulce _REPLERRHDR nebo NORECNUM, pokud k chybě nedošlo, nebo není povoleno logování to tabulky
HdrID | Index záznamu s informacemi o chybě v tabulce _REPLERRHDR nebo NONETIMESTAMP, pokud k chybě nedošlo, nebo není povoleno logování to tabulky

Nezávisle na systémovém triggeru _ON_REPLPACKET_RECEIVED se detaily chyb vzniklých při zpracování replikačního paketu zapisují do tabulek _REPLERRHDR, _REPLERRREC a _REPLERRATTR v aplikaci _SYSEXT. Zápis do tabulek lze povolit nebo zakázat buď interaktivně v dialogu Replikační parametry místního serveru, nebo programově pomocí funkce Repl_GetSet_local_server_props. Mazání nepotřebných záznamů si musí zabezpečit aplikace ve své režii. Pokud tabulky neexistují, vytvoří si je server při prvním zápisu.


Systémové tabulky popisující chyby replikací

602SQL-Úplná dokumentace

Systémové tabulky popisující replikační chyby

Tabulky se vytvoří v aplikaci _SYSEXT při prvním výskytu replikační chyby, je-li zapnut příznak Logovat do tabulky v základním nastavení replikací (dialog Replikační parametry místního serveru).

Tabulka _REPLERRHDR

Obsahuje záhlaví informace o chybě při zpracování replikačních dat

Sloupce, typy a jejich význam:

DT | TIMESTAMP | Datum z čas vzniku chyby, zároveň slouží jako unikátní index a odkaz do tabulky _REPLERRREC
ServerID | BINARY(12) | UUID zdrojového serveru
ServerName | CHAR(31) | Jméno zdrojového serveru
Typ | BOOLEAN | TRUE = Chyba je v došlých datech (replikační data se nepodařilo zpracovat) FALSE = Chyba je v odesílaných datech (přišel paket typu zamítnutí replikace)
PacketNO | INTEGER | Číslo replikačního paketu

Tabulka _REPLERRREC

Obsahuje informace o záznamu, který způsobil chybu

Sloupce, typy a jejich význam:

DT | TIMESTAMP | Odkaz na hlavičku v tabulce _REPLERRHDR
ApplID | BINARY(12) | UUID aplikace
ApplName | CHAR(31) | Jméno aplikace
TableNO | SMALLINT | Číslo tabulky
TableName | CHAR(31) | Jméno tabulky
W5_UNIKEY | BINARY(16) | Hodnota univerzálního klíče pro replikaci
RecRem | INTEGER | Číslo záznamu v tabulce na zdrojovém serveru (je-li známé)
RecLoc | INTEGER | Číslo záznamu na lokálním serveru
RecCnf | INTEGER | Číslo záznamu s nímž je přicházející záznam v konfliktu (má význam pouze v případě replikačního konfliktu a duplicity klíčů)
DetID | INTEGER | Odkaz do tabulky _REPLERRATTR (má význam pouze v případě replikačního konfliktu a duplicity klíčů)
ErrNO | SMALLINT | Kód chyby
ErrText | CLOB | Text chyby
UNIKEY | BLOB | Hodnota primárního klíče (použije se pouze pokud tabulka nemá univerzální klíč pro replikace)

Tabulka _REPLERRATTR

Detaily replikačního konfliktu nebo duplicity klíčů. Obsahuje hodnoty unikátních klíčů a v případě replikačního konfliktu i hodnoty atributů, ve kterých je změna, hodnoty jsou v textové formě.

Sloupce, typy a jejich význam:

DetID | INTEGER | Odkaz na záznam v tabulce _REPLERRREC
AttrNO | TINYINT | Číslo atributu
AttrName | CHAR(31) | Jméno atributu
RemVal | CLOB | Hodnota atributu na zdrojovém serveru
LocVal | CLOB | Lokální hodnota
CnfVal | CLOB | Hodnota v záznamu, který je s přicházejícím v konfliktu

Programové ovládání replikačních triggerů a zápisu do logovacích tabulek

Pro programové povolení resp. zákaz spouštění triggerů _ON_REPLPACKET_RECEIVED a _ON_REPLPACKET_RECEIVED a zápisu do logovacích tabulek slouží funkce Repl_GetSet_local_server_props, která pro parametr oper rovný

RPLS_GET_LOGTABLES (28) vrací stav povolení zápisu do logovacích tabulek

RPLS_SET_LOGTABLES (29) povoluje resp. zakazuje zápis do logovacích tabulek

RPLS_GET_REPLTRIGGERS (30) vrací stav povolení spouštění replikačních triggerů

RPLS_SET_REPLTRIGGERS (31) povoluje resp. zakazuje spouštění replikačních triggerů

Programové sledování výměny replikačních paketů

Stav výměny replikačních paketů se zvoleným replikačním serverem lze uživatelsky zjistit na řídicím panelu aplikace na záložce Popis. Pro programové zjištění slouží klientská API funkce Repl_GetSet_server_props, která pro parametr oper rovný

RPSP_GET_LASTRCVD (7) vrací číslo posledního přijatého paketu (integer)

RPSP_GET_LASTSNDD (8) vrací číslo posledního odeslaného paketu (integer)

RPSP_GET_LASTACKD (9) stav příznaku "Došlo potvrzení posledního paketu" (Boolean)

Příznak může mít tyto hodnoty:

FALSE (0) Poslední paket byl odeslán, potvrzení zatím nepřišlo

TRUE (1) Poslední paket byl potvrzen

NONEBOOLEAN (128) Poslední paket byl zamítnut (důvod zamítnutí, lze odchytit pomocí systémového triggeru _ON_REPLPACKET_RECEIVED nebo najít v tabulkách _REPLERRHDR a _REPLERRREC)

Programová reakce na chyby replikací

Reakci na chyby replikaci, tj. pokud nepřišlo potvrzení odeslaného paketu nebo pokud přišlo zamítnutí replikačního paketu, umožňují funkce: Repl_resend_packet a Repl_cancel_packet.

Pokud nepřišlo potvrzení posledního paketu, je možné zavolat funkci Repl_resend_packet, ta v takovémto případě odešle protějšímu serveru dotaz na stav, protější server vrátí číslo naposledy přijatého paketu a místní server podle toho jestli:

  • číslo přijatého se rovná číslu posledního odeslaného (ztratilo se potvrzení): zaktualizuje stav tak, jako kdyby potvrzení posledního paketu přišlo

  • číslo přijatého se rovná číslu předposledního odeslaného (ztratil se paket): znovu odešle poslední paket

  • jinak: takový stav by za normálního provozu neměl nastat a pokud nastane, je třeba databáze z obou stran synchronizovat

Pokud přijde zamítnutí replikačního paketu, je možné buď odstranit příčinu odmítnutí (zpravidla duplicitu klíčů v indexu) na vzdáleném serveru a zavolat funkci Repl_resend_packet a ta znovu odešle odmítnutý paket. Nebo je možné odstranit příčinu odmítnutí na místním serveru, zavolat funkci Repl_cancel_packet, která zruší zamítnutý paket a změní stav serveru jako by se poslední paket vůbec neodesílal, a potom znovu vyvolat přereplikování změn.

Funkcím Repl_resend_packet a Repl_cancel_packet odpovídají tlačítka Znovu odeslat a Zrušit paket na řídicím panelu aplikace.


Návrh replikujících aplikací

V této části popíšeme, jak se navrhuje databázová aplikace, která poběží souběžně na více serverech a mezi jejímiž instancemi se budou replikovat data.

Data, obsažená v tabulkách aplikace, mohou být buď soukromá, nebo sdílená. Pro sdílené tabulky je nutno zadat řadu doplňujících údajů. Návrh sdílené aplikace začíná proto analýzou toku dat mezi sdílenými tabulkami.

Při sdílení dat mohou různé servery hrát různé úlohy. V určité tabulce může server hrající specifickou roli pouze číst data, zatímco jiný server může data měnit a replikovat tyto změny na ostatní servery. Proto popis způsobu sdílení obsahu jednotlivých tabulek, není v aplikaci nastaven na jedinou možnou hodnotu, ale obsažen v tzv. replikačních vztazích, které servery mezi sebou podle svého postavení navazují.

Analýza toku informací mezi servery a rizik souběžné editace

Klíčovým bodem návrhu sdílené aplikace je otázka, jak se vypořádat s možností souběžné editace téhož záznamu na více serverech. Souběžná editace je zpravidla nežádoucí - pokud například dva lidé na dvou serverech doplní do stejného záznamu různé informace, pak se v procesu replikování mohou snadno jedny z těchto informací ztratit.

Tento problém nemá jediné univerzální řešení. Existuje řada cest, jak se s ním vypořádat. Nalezení optimální cesty vyžaduje důkladnou analýzu informačních toků mezi servery sdílejícími aplikaci. Tok informací v některé části aplikace zpravidla odpovídá některému z těchto schémat (seřazených podle vzrůstající náročnosti na replikace):

  1. Záznamy vznikají a jsou editovány na pouze jednom serveru. Na ostatní servery se replikují změny.

  2. Záznamy vznikají na různých serverech, každý záznam může být editován z podstaty aplikace pouze na jednom serveru - například na tom serveru, na němž vzniknul.

  3. Tentýž záznam může být editován na různých místech a je nutno zajistit, že nebude editován souběžně.

  4. Tentýž záznam může být editován na různých místech souběžně. Pokud na dvou serverech vzniknou dvě verze téhož záznamu, je určeno, který server se prosadí se svou verzí.

  5. Tentýž záznam může být editován na různých místech souběžně. Pokud na dvou serverech vzniknou dvě kopie tohoto záznamu, není definováno, která se prosadí.

Při analýze požadavků na aplikaci je žádoucí co nejvíce informačních toků nespadajících do typu A) převést na schéma B). Typický obrat vypadá takto:

Pokud je třeba na některém serveru doplnit nebo pozměnit údaje v záznamu vzniklém na jiném serveru, pak se místo toho vloží do sdílené tabulky změnový záznam s relačním odkazem na původní záznam.

Využití tohoto obratu není povinné, ale zjednodušuje návrh a provoz aplikace. Dále popíšeme způsoby, jak zamezovat vzniku různých variant záznamu jinými způsoby.

Vlastnosti sdílených tabulek

Na základě analýzy informačních toků podle předchozího bodu se pro každou vytvářenou tabulku zodpoví tyto otázky:

  1. Bude se obsah této tabulky vůbec replikovat? V typické sdílené aplikaci existují tabulky se sdíleným obsahem a zároveň i tabulky se soukromým obsahem týkajícím se pouze jednoho serveru.

  2. Budou se nové záznamy vkládat do tabulky na jednom serveru nebo na více serverech? Pokud nastává druhý případ, pak je nutno tabulku vybavit univerzálním klíčem pro replikaci, jehož hodnoty budou unikátní na různých serverech.

  3. Budou se změny přenášet mezi dvěma servery pouze jedním směrem nebo obousměrně? V druhém případě je žádoucí (ač není nutno) zajistit, aby změny vzniklé replikováním ze serveru A na server B nebyly zpětně přenášeny na server A. Tomu-to nežádoucímu jevu říkáme ozvěna.

  4. Může dojít k souběžnému editování téhož záznamu na více serverech? Pokud souběžná editace není vyloučena z podstaty aplikace, pak chceme bránit vzniku této situace nebo řešit ji, až vznikne? Má souběžné editaci bránit sama WinBase602 předáváním editačního peška, anebo se o to postará aplikace jiným způsobem?

  5. Povolíme-li souběžnou editaci téhož záznamu na více serverech, chceme tento stav detekovat, abychom mohli rozhodnout, která varianta má přednost?

  6. Přejeme si, aby se replikovalo i zrušení záznamu, anebo zrušení záznamu na jednom serveru nemá ovlivnit tentýž záznam na jiných serverech?

  7. Které sloupce a které záznamy z tabulky se mají replikovat?

  8. Jak často se kontrolovat, zda je co replikovat, a případně vytvořit nový replikační paket?

Odpovědi na tyto otázky ovlivní vytváření tabulek a další fáze návrhu sdílené aplikace. Odpovědi na prvních šest otázek jsou v převážné míře společné pro celou aplikaci a zadávají se při návrhu tabulek. Odpověď na sedmou a osmou otázku se týká vztahu dvou serverů, a proto se specifikuje v jedné nebo více variantách v tzv. replikačních vztazích definovaných v aplikaci.

Seznam subsekcí:

  • Návrh tabulky ve sdílené aplikaci
  • Návrh replikačních vztahů


Návrh tabulky ve sdílené aplikaci

V menu Vlastnosti návrháře tabulek je příkaz Příznaky, který otevírá okno se speciálními příznaky tabulky. Kromě prvních tří (zaznamenávání změn do journalu, přidělování práv k jednotlivým záznamům, umožnění koloběhu dokumentů) se všechny příznaky týkají replikací.

  • Příznak Umožnit replikací změn musí být zapnut v každé replikované tabulce. Není-li zapnut, není obsah tabulky přenášen mezi servery.

  • Příznak Vytvořit univerzální klíč pro replikaci přidá do tabulky nový 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 Bránit vzniku ozvěn 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 data budou 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 Předávat editačního peška 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 Detekovat replikační konflikty 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. Není-li zapnut tento příznak ani příznak Předávat editačního peška, pak se do záznamu vždy zaznamená poslední došlá změna a některé změny se mohou ztratit.

Využití univerzálního klíče

Při převádění starší aplikace na aplikaci schopnou replikování se v tabulkách, do nichž se budou vkládat záznamy na více serverech, nahrazuje dosavadní primární klíč (sloupec resp. sloupce s unikátní hodnotu identifikující záznam) univerzálním klíčem. Pouze u univerzálního klíče je (celosvětově) vyloučen vznik duplicity hodnot při vkládání záznamů na různých serverech (existuje také možnost využití původního primárního indexu, ale pak je na autorovi aby zajistil unikátnost přidělování hodnot tohoto klíče pro všechny replikující servery -z praxe: pro dva servery je možné přidělovat lichá a sudá čísla).

Sloupec obsahující univerzální klíč se v návrhu tabulky nedeklaruje, vznikne automaticky na základě nastavení příznaku Vytvořit univerzální klíč pro replikaci. Sloupec, který dříve plnil funkci primárního klíče, je vhodné z tabulky odstranit.

Relačně závislé tabulky si potřebují ve svých záznamech pamatovat hodnotu klíče z nadřazené tabulky. Sloupec, do něhož se v podřízených tabulkách zaznamená hodnota univerzálního klíče, musí být typu Binary(16). Jméno univerzálního klíče v nadřazené tabulce je _W5_UNIKEY. Právě typ Binary, s nímž se “špatně” pracuje, je častou příčinou toho, že se používá vlastní replikační klíč (např. Integer).


Návrh replikačních vztahů

Ty údaje o replikování, které mohou být na různých serverech nastaveny různě (v závislosti na roli, kterou server hraje), autor aplikace specifikuje v replikačních vztazích. Při navazování spojení mezi dvěma servery se pak vybere některý vztah a uplatní se informace v něm uvedené v nastavení konkrétních replikačních pravidel.

Vztahy jsou pojmenovanými objekty, které vytvoří autor aplikace. Uživatel ani správce provozu aplikace do návrhu vztahů nikdy nezasahuje.

Co obsahuje replikační vztah?

Vztah obsahuje pro aplikaci jako celek replikační periody pro každý směr komunikace. Pro každou tabulku schopnou sdílení a pro každý z obou serverů obsahuje:

  • seznam sloupců replikovaných na protější server;

  • podmínku pro výběr záznamů pro replikaci na protější server;

  • příznak Replikovat rušení záznamů, který způsobí, že zrušení záznamu na jednom serveru způsobí jeho zrušení i na protějším serveru. V takové tabulce se nesmí provádět operace uvolnění zrušených záznamů (přinejmenším před replikováním informace o zrušení).

Například aplikace pro distribuci ceníků a sběr objednávek může být instalována na serverech výrobce, regionálních distributorů a místních dealerů. Aplikace obsahuje dva vztahy: vztah “výrobce-distributor” a vztah “distributor-dealer”.

Podmínka pro výběr záznamů se zapisuje v syntaxi předepsané pro podmínku v klauzuli WHERE příkazu SELECT jazyka SQL.

Dále se v replikačním vztahu specifikuje, jak se má na obou replikujících serverech na-stavit způsob řešení případných replikačních konfliktů.

Dialog pro návrh replikačního vztahu

Replikační vztah se navrhuje v dialogovém okně rozděleném do tří záložek. Na první záložce se určí, jak se má postupovat při vzniku replikačního konfliktu. Další dvě záložky předepisují, které záznamy a které sloupce se replikují z jednotlivých replikovatelných tabulek.

Záložka Konflikty nabízí tyto možnosti řešení replikačních konfliktů

na každé straně lokální data | 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.
na každé straně přicházející data | 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
data žádajícího serveru | 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á
data akceptujícího serveru | 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á

Uplatnění replikačního vztahu v replikačních pravidlech

Údaje specifikované v replikačním vztahu se uplatní tehdy, když se dva servery dohodou na navázání sdílení aplikace v tomto vztahu. Pak se informace z replikačního vztahu překopírují do iniciálního nastavení replikačních pravidel na obou stranách takto:

Nastavení pro žádající stranu: u serveru, který žádá o vztah jako pravidla pro replikaci ven, u serveru, který akceptuje vztah jako pravidla pro replikaci dovnitř.

Nastavení pro akceptující stranu: u serveru, který žádá o vztah jako pravidla pro replikaci dovnitř, u serveru, který akceptuje vztah jako pravidla pro replikaci ven.


Jazyk SQL ve 602SQL

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 602SQL 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é.

Seznam subsekcí:

  • Kompatibilita s normami SQL a staršími verzemi 602SQL
  • Popis syntaxe jazyka SQL


Příznaky kompatibility jazyka SQL

Některé detaily implementace jazyka SQL a práce SQL serveru lze nastavit pomocí tzv. příznaků kompatibility. Týká se to oblastí, které nejsou v normě jazyka SQL specifikovány nebo které se ve starších verzích 602SQL chovaly odlišně, než předepisují nové normy jazyka SQL. 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 602SQL nastavit, do jaké míry se má zachovat kompatibilita funkce se staršími verze proti striktnímu dodržení norem.

Kupříkladu pokud je při vytváření odpovědi na dotaz požadována typová konverze, kterou nelze provést, starší verze 602SQL vracely hodnotu NULL, zatímco dle normy má celá operace skončit neúspěchem.

Nastavení příznaků kompatibility lze libovolně měnit i za běhu 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. Aktuální nastavení vrací funkce Get_sql_option. V prostředí SQL serveru lze aktuální nastavení číst a měnit pomocí systémové proměnné @@SQLOPTIONS.

Po připojení se nového klienta na server jsou všechny jeho volby nastaveny dle vlastnosti serveru DefaultSQLOption. Pokud hodnota této vlastnosti není změněna, je zapnuta ve všech volbách kompatibilita se staršími verzemi 602SQL. Interaktivní nastavování této vlastnosti umožňuje stránka Parametry / Provozní parametry / Kompatibilita SQL na Řídicí konzoli.

Přehled příznaků kompatibility:
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í, při konstrukci kurzoru | 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ár) | používá se varianta ALTER TABLE podle normy SQL
SQLOPT_DUPLIC_COLNAMES | 256 | když se dva sloupce v odpovědi na dotaz jmenují stejně | ponechají se stejná jména, lze je rozlišit pomocí prefixu | sloupce se automaticky přejmenují
SQLOPT_USER_AS_SCHEMA | 512 | prefixování jmen tabulek jménem uživatele | prefix se vždy považuje za jméno schématu | pokud se prefix shoduje se jménem přihlášeného uživatele, ignoruje se
SQLOPT_DISABLE_SCALED | 1024 | výskyt číselných necelých přesných typů v odpovědi na dotaz (NUMERIC) | pokud nelze považovat za typ Money, je automaticky konvertován na typ Real | typ se zachová
SQLOPT_ERROR_STOPS_TRANS | 2048 | reakce transakce na chybu | transakce se ukončí | transakce pokračuje až do commitu nebo rollbacku
SQLOPT_NO_REFINT_TRIGGERS | 4096 | spouštění triggerů při provádění akcí aktivní referenční integrity | triggery se nespouštějí | triggery se spouštějí
SQLOPT_USE_SYS_COLS | 8192 | výběr i systémových sloupcu (_W5_ ...) v klauzuli SELECT * | vyberou se všechny sloupce včetně systémových | systémové sloupce se nevyberou
SQLOPT_CONSTRS_DEFERRED | 16384 | kdy se má vyhodnocovat porušení těch omezení tabulky (s výjimkou UNIQUE), které nejsou nastaveny explicitně | chyba se projeví při commitu (DEFERRED) | chyba se projeví okamžitě (IMMEDIATE)
SQLOPT_COL_LIST_EQUAL | 32768 | kdy se provede UPDATE trigger se seznamem sloupcu | je-li změněna stejná množina sloupcu | pokud množina změněných sloupcu má neprázdný průnik se seznamem
SQLOPT_QUOTED_IDENT | 65536 | jak se interpretují uvozovky v SQL | uvozovky vymezují řetězec znaků, stejně jako apostrof | uvozovky vymezují identifikátor, stejně jako obrácený apostrof

(*) 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 verzemi 602SQL, není-li nastavena, server se chová dle norem SQL.


Popis syntaxe SQL

602SQL-Úplná dokumentace

Popis syntaxe jazyka SQL ve 602SQL

Pro zápis syntaxe SQL se používá 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á.


Způsoby použití jazyka SQL

Jazyk SQL je základním nástrojem pro manipulaci s daty uloženými v databázi pod správou 602SQL. Pro zadávání příkazů tohoto jazyka existuje řada cest:

  • příkazy jsou součástí uložených procedur či triggerů;

  • příkazy lze uvést uvnitř programu v klientském programovacím jazyce pomocí direktiv #sql, #sqlbegin a #sqlend;

  • příkazy lze zadávat z programů v klientském jazyce nebo v externím programovacím jazyce C/C++ nebo Pascal/Delphi pomocí funkce SQL_execute, a dalších;

  • klient připojený na server přes rozhraní ODBC, JDBC nebo dbExpress má nástroje za zadávání příkazů SQL v API příslušného driveru;

Chcete-li provádět stejné příkazy opakovaně na různými daty, lze příkaz několika způsoby parametrizovat:

  • uložené procedury mohou mít vstupní a výstupní parametry, jejichž hodnoty se předávají při volání procedury;

  • v SQL příkazech zasílaných klientem lze oddělit přípravu příkazu k provedení a vlastní provádění pomocí funkcí SQL_prepare, cd_SQL_host_prepare a SQL_exec_prepared;

  • příkazy zadané klientem z klientského programovacího jazyka mohou obsahovat odkazy na globální proměnné deklarované v programu;

  • příkazy zadané klientem z externího jazyka mohou obsahovat odkazy na vybrané proměnné klienta popsané ve struktuře předané funkci cd_ SQL_host_execute nebo cd_SQL_host_prepare;

  • příkazy předávané přes rozhraní ODBC mohou obsahovat tzv. dynamické parametry.

Při vývoji aplikací lze navíc používat k zadávání SQL příkazů tyto cesty:

  • Příkazy lze zapsat přímo pomocí textové konzole, která se otevírá z řídicího panelu. Příkazy budou ihned provedeny a v okně konzole se objeví informace o úspěchu či neúspěchu, dotazový výraz SELECT se vyhodnotí a výsledek se otevře ve zvláštním okně.

  • Procedury uložené na serveru lze zavolat z dialogového okna a přitom jim předat vstupní parametry a zobrazit vstupní parametry.

  • SQL příkazy také pro vybraný cizí ODBC zdroje dat lze zadat pomocí konzole otevřené z řídicího panelu tlačítkem SQL příkaz. Bude-li příkaz proveden, na stavovém řádku se objeví nápis Provedeno, vyskytne-li se chyba, objeví se zpráva s popisem chyby vrácená ODBC driverem.

Příkazy, které vznikají dynamicky za běhu programu, lze provádět pouze pomocí funkcí SQL_execute, SQL_prepare, SQL_exec_prepared, SQL_host_execute a cd_SQL_host_prepare. Funkci SQL_execute lze k tomuto účelu využít i uvnitř procedur uložených na serveru.

Seznam subsekcí:

  • Proměnné klientských aplikací v příkazech SQL (Embedded SQL)
  • Příprava a provádění příkazů SQL
  • Dynamické SQL příkazy uvnitř uložených procedur
  • Direktivy #sql


Proměnné klientských aplikací v příkazech SQL

Při komunikaci mezi klientem s SQL serverem lze využít také proměnných, které jsou deklarovány v klientské aplikaci a zároveň jsou použitelné v příkazech jazyka SQL a přístupné pro SQL server. Tyto proměnné mohou sloužit například pro zadání hodnot zapisovaných do databáze, pro určení vyhledávacích kritérií nebo pro získání výsledku dotazu či funkce z SQL serveru. Takto lze zapsat příkazy, jejichž obsah se bude měnit se změnami hodnot proměnných klienta.

Těmto proměnným se obvykle říká embedded variables nebo host variables. Jejich využití je podmíněno tím, že SQL příkazy na ně vhodným způsobem odkazují a klientská aplikace je serveru zpřístupní - viz dále.

Před každou takovou proměnnou s identifikátorem id je nutno uvést v SQL příkazu dvojtečku. Počet platných znaků v identifikátoru je pouze 18.

Do SQL příkazu lze navíc 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 klientskou aplikaci v klientském programovacím jazyce a serverem a tím zrychlí práci. Proměnná se pak 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

Příklady použití:

V níže uvedených příkladech se využívají proměnné OS_CISLO, PRIDAT, PL, JMENO a D_OBLAST1 deklarované v klientském programovacím jazyce 602SQL.

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))

Seznam subsekcí:

  • Proměnné vnitřního jazyka v příkazech SQL
  • Proměnné z externích jazyků v příkazech SQL


Proměnné klientského jazyka v SQL příkazech

602SQL-Úplná dokumentace

Proměnné klientského programovacího jazyka v příkazech SQL

Příkazy jazyka SQL se z klientského jazyka 602SQL 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 v klientském jazyce, který je projektem.

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).

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.


Proměnné z externích jazyků v příkazech SQL

Pokud je klientská aplikace vytvořena v některém externím programovacím jazyce (C/C++, Pascal), pak SQL příkaz obsahující klientské proměnné musí být na server poslán pomocí API funkce cd_SQL_host_execute nebo cd_SQL_host_prepare, a použité proměnné musí být explicitně zpřístupněny pomocí jejího parametru hostvars.

Parametrem hostvars je pole, jehož jednotlivé složky typu t_clivar popisují jednotlivé klientské proměnné použité v příkazu SQL. Počet složek pole je uveden v parametru hostvars_count. t_clivar je struktura s tímto obsahem:

struct t_clivar  // popis promenne klienta pristupne pro SQL server
{ tname     name;   // jmeno promenne (velka pismena)
  t_parmode mode;   // zpusob predavani hodnoty promenne
  int       wbtype; // typ promenne
  uns32     specif; // doplnujici udaje o typu
  void *    buf;    // ukazatel na buffer s hodnotou promenne
  int       buflen; // delka bufferu buf
  int       actlen; // skutecna delka hodnoty - plati pouze pro typy promenne velikosti
};

Typy a hodnoty položek použitých v této struktuře v definovány v definičních souborech pro příslušné programovací jazyky. Pro vstupní hodnoty proměnné velikosti (BLOB, CLOB) je třeba vyplnit nejen délku bufferu pro hodnotu buflen, ale i skutečnou délku hodnoty actlen. Pro výstupní hodnoty proměnné velikosti (BLOB, CLOB) stačí vyplnit délku bufferu pro hodnotu buflen, zatímco skutečná délka hodnoty actlen se ve struktuře objeví po provedení příkazu.

Složka specif obsahuje doplňující údaje o typu proměnné. Je to obsah struktury t_specif zapsaný jako32-bitové celé číslo. Pro znakové a binární řetězce pevné délky je to maximální délka řetězce, pro přesná čísla je to počet desetinných míst, v ostatních případech nula.

Značky < a > udávající v SQL příkazu směr přenosu hodnoty není nutno uvádět, protože stejná informace je již obsažena ve složce mode. Je-li tyto značky uvedeny, ignorují se.

Dynamická alokace bufferu

Pro výstupní hodnoty proměnné velikosti (BLOB, CLOB) nemusí být před provedeném příkazu zřejmá délka hodnoty. Může být proto obtížné předem alokovat buffer, který pojme celou vrácenou hodnotu.

V takovém případě lze nastavit ukazatel na buffer buf na NULL, údaj buflen se pak ignoruje. Při provedení příkazu se automaticky alokuje buffer potřebné velikosti a bude vrácen v buf. Programátor musí poté buffer uvolnit pomocí funkce corefree.

Příklad:

Volání funkce Maxim_plat s předáním vstupního parametru a návratem hodnoty:

t_clivar vardescr[2];
int os_cislo, max_plat;
strcpy(vardescr[0].name, "OS_CISLO");
vardescr[0].mode=MODE_IN;
vardescr[0].wbtype=ATT_INT32;
vardescr[0].specif=0;
vardescr[0].buf=&os_cislo;
vardescr[0].buflen=sizeof(os_cislo);
strcpy(vardescr[1].name, "MAX_PLAT");
vardescr[1].mode=MODE_OUT;
vardescr[1].wbtype=ATT_INT32;
vardescr[1].specif=0;
vardescr[1].buf=&max_plat;
vardescr[1].buflen=sizeof(max_plat);
os_cislo = 1294;
cd_SQL_host_execute(cdp, "SET :>MAX_PLAT = MAXIM_PLAT(:<OS_CISLO)", NULL, vardescr, 2);
// vysledek je v promenne max_plat.


Příprava a provádění příkazů SQL

Databázový klient 602SQL 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 nebo cd_SQL_host_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ě. Během přípravy 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


Dynamické SQL příkazy uvnitř procedur uložených na serveru

V některých situacích nelze SQL příkaz přímo zařadit mezi ostatní příkazy v uložené proceduře, například když:

  • jméno tabulky nebo sloupce, s nimiž bude příkaz pracovat, vyplyne až z provedení předchozích příkazů;
  • příkaz odkazuje na objekty, které vzniknou až během provádění předchozích příkazů.

V těchto a podobných případech je nutno analýzu a optimalizaci příkazu odložit až na dobu těsně před jeho prováděním. To umožňuje funkce SQL_execute. Dostane jako parametr příkaz nebo posloupnost příkazů v jazyce SQL, analyzuje je, optimalizuje a provede.

Provádění SQL příkazů pomocí funkce SQL_execute je méně efektivní než přímé vložení příkazu do uložené procedury (analýza a optimalizace se provádí znovu před každým provedením příkazu), ale je flexibilnější - příkaz může být dynamicky sestaven až těsně před provedením.

V SQL příkazu použitém ve funkci SQL_execute je možné použít i proměnné existující v SQL proceduře, v níž je SQL_execute voláno. V příkladu níže je proměnná J předaná jako hodnota parametru, proměnná I je deklarovaná globálně uvnitř procedury, proměnná K je lokální uvnitř složeného příkazu. Všechny tyto proměnné lze použít v SQL_execute.

PROCEDURE MY_PROC(IN j INT);
BEGIN
  DECLARE i INT DEFAULT 1;
  BEGIN
    DECLARE k INT DEFAULT 1;
    CALL SQL_execute('INSERT INTO My_Tab(cislo1,cislo2,cislo3) VALUES (i,j,k);');
  END;
END;

Dojde-li k chybě při překladu SQL příkazu, pak funkce SQL_execute vrátí kladné číslo chyby a příkaz se neprovede. Na provádění ostatních příkazů to nemá vliv.

Dojde-li k chybě při provádění SQL příkazu ve funkci SQL_execute, důsledky jsou stejné jako při provádění všech ostatních SQL příkazů. Chyby lze zpracovávat pomocí handlerů. Není-li chyba zpracována CONTINUE handlerem, pak se přiřazení hodnoty této funkce ani následující SQL příkazy neprovedou.


Vložení SQL příkazu do programu (klientský jazyk)

602SQL-Úplná dokumentace

Vložení příkazů SQL do programu (klientský jazyk)

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é: * SQL v klientském programovacím jazyce


Lexikální elementy SQL

602SQL-Úplná dokumentace

Lexikální elementy jazyka SQL

Nejnižší úroveň syntaxe jazyka SQL tvoří tzv. lexikální elementy. Lexikálními elementy jsou identifikátory, vyhrazená slova, oddělovače, 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

Znaky, vyskytující se v příkazech jazyka SQL, se interpretují dle kódové stránky 1250. 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

Seznam subsekcí:

  • Identifikátory a klíčová slova
  • Čísla
  • Znakové a binární řetězce
  • Zápis času a data
  • Komentáře


Identifikátory a vyhrazená slova SQL

602SQL-Úplná dokumentace

Identifikátory a vyhrazená slova (SQL)

Identifikátory jazyka SQL 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 31, proto identifikátory, které se liší až za 31. 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 602SQL jsou obrácené apostrofy. Zápisy `TO JE ONO!` nebo `UPDATE` jsou tedy platnými identifikátory. Při vhodném nastavení příznaků kompatibility (pomocí procedury Set_sql_option (volba SQLOPT_QUOTED_IDENT)) lze použít místo obrácených apostrofů také uvozovky.

Odlišnosti od normy

  • Identifikátory, které obsahují nealfanumerické znaky nebo které jsou shodné s některým vyhrazeným slovem, se uzavírají do obrácených apostrofů nebo, jsou-li vhodně nastaveny příznaky kompatibility, do uvozovek. Norma SQL používá vždy uvozovky.


Čísla v SQL

602SQL-Úplná dokumentace

Čísla (SQL)

Čísla se v SQL zapisují obvyklým způsobem. 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,

Pro kompatibilitu se staršími verzemi lze číslo typu Money zapsat také tak, že se místo desetinné tečky uvede znak $ a za nim nejvýše dvě číslice.

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


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

602SQL-Úplná dokumentace

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

Znakové řetězce se v SQL zapisují v apostrofech. 602SQL 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, jsou-li vhodně nastaveny příznaky kompatibility, také 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

602SQL-Úplná dokumentace

Zápis času a data (SQL)

Hodnoty typu DATE, TIME a TIMESTAMP lze v SQL zapisovat až trojím způsobem: dle norem SQL, dle specifikace ODBC a dle konvencí 602SQL. 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 602SQL | 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 602SQL', 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

602SQL-Úplná dokumentace

Komentáře (SQL)

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 602SQL.


Datové typy v SQL

602SQL-Úplná dokumentace

Datové typy (SQL)

Datový typ se v SQL uvádí v definici sloupce tabulky v příkazu CREATE TABLE, 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ů [jazyk_a_třídění] | binární_objekt | řetězec_bitů | přesný_číselný_typ | přibližný_číselný_typ | BOOLEAN | DATE | TIME | TIMESTAMP | specifický_typ_602SQL
řetězec_znaků ::= CHAR [( délka )] | CHAR VARYING ( délka ) | VARCHAR ( délka ) | NCHAR [( délka )] | NCHAR VARYING ( délka ) | CLOB [( délka )] | NCLOB [( 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 | TINYINT | BIGINT | DEC [( přesnost [, decim ] )] | NUMERIC [( přesnost [, decim ] )]
přibližný_číselný_typ ::= REAL | DOUBLE PRECISION | FLOAT [( přesnost )]
specifický_typ_602SQL ::= 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.

602SQL, 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ů 602SQL 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 602SQL
CHAR, NCHAR | Char
CHAR(n), CHAR VARYING(n), VARCHAR(n), pro n<4090 | String délky n bajtů
NCHAR(n), NCHAR VARYING(n), pro n<4090 | String v Unicode délky n znaků
CLOB, CLOB(n) | Text
NCLOB, NCLOB(n) | Text v Unicode
BLOB, BLOB(n) | Nospec
VARBINARY(n) | Raster
BINARY(n) pro n<4090 | Binary délky n bajtů
BIT, BIT(1), BOOLEAN | Boolean
BIT(n), BIT VARYING(n) pro 1<n<=8*4090 | Binary délky (n-1) / 8 + 1 bajtů
INT | Integer (4-bajtové celé číslo)
SMALLINT | Short (2-bajtové celé číslo)
TINYINT | Tinyint (1-bajtové celé číslo)
BIGINT | Bigint (8-bajtové celé číslo)
DEC(n, d), NUMERIC(n, d) pro n <= 2 | 1-bajtové číslo
DEC(n, d), NUMERIC(n, d) pro 2 < n <= 4 | 2-bajtové číslo
DEC(n, d), NUMERIC(n, d) pro 4 < n <= 9 | 4-bajtové číslo
DEC(n, d), NUMERIC(n, d) pro 10<=n<=14 a d=2 | Money (6-bajtové číslo se 2 desetinnými místy)
DEC(n, d), NUMERIC(n, d) pro 14 < n nebo d<>2 | 8-bajtové číslo
REAL, DOUBLE PRECISION, FLOAT, FLOAT(n) | Real
DATE | Date
TIME | Time
TIMESTAMP | Timestamp
AUTOR, AUTHOR | Autorizace
DATIM | Datumovka
HISTORY | Historie
SIGNATURE | Signature, digitální 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 602SQL

  • 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.

  • Typ INT má rozsah -2147483648 až +2147483648, typ SMALLINT má rozsah -32768 až 32768, typ TINYINT má rozsah -127 až 127, typ BIGINT má rozsah -2^63-1 až 2^63-1 (cca +/-9223372036854775000).

  • 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ů BLOB, CLOB a NCLOB nehraje konkrétní hodnota délky uvedené v popisu typu žádnou roli.

  • Rozlišení jazyka řetězcových typů pomocí COLLATE

Seznam subsekcí:

  • Rozlišení jazyka u znakových řetězců


Rozlišení jazyka a třídění u znakových řetězců

K popisu typu znakový řetězec lze připojit informaci o jazyce a třídění. Ta může mít různé funkce:

  • určuje, jak se řetězce budou uspořádávat, řadit podle abecedy, a zda se přitom přihlíží k velikosti písmen;
  • dovoluje převádět mezi sebou malá a velká písmena v národních abecedách;
  • pokud nejde o Unicode, pak určuje množinu znaků, které lze zapsat do řetězce - tzv. kódovou stránku.

Jazyk a třídění se specifikuje takto:

                jazyk_a_třídění ::= COLLATE [ jméno_jazyka ] [ IGNORE_CASE ]

Není-li jméno_jazyka uvedeno, pak se předpokládá, že řetězec obsahuje pouze ASCII znaky. Ty se třídí podle latinské abecedy. Obsahuje-li řetězec jiné než ASCII znaky, třídí se podle jejich kódu.

Je-li uvedeno IGNORE_CASE, pak se při třídění nerozlišuje mezi velkými a malými písmeny. To vyžaduje správné určení jazyka, aby bylo možno určit, které znaky jsou písmeny a které tvoří dvojice velké-malé písmeno.

Množina dostupných jazyků se může s verzemi 602SQL rozšiřovat. Pro kompatibilitu se staršími verzemi lze jako jméno_jazyka používat slova CSSTRING a CSISTRING.

Jméno jazyka | Jazyk | Kódová stránka | Script fontů Windows
- neuvedeno - | Angličtina | ANSI | - libovolný -
CSString, CSIString | Čeština | 1250 | středoevropský
CSString, CSIString | Slovenština | 1250 | středoevropský
DE | Němčina | 1252 | západoevropský
FR | Francouzština | 1252 | západoevropský
PL | Polština | 1250 | středoevropský


Databázové tabulky

Databázové tabulky slouží k uložení dat na serveru. Každá tabulka má pevně danou strukturu: jistý počet sloupců určených typů. Kromě toho se k tabulce vztahují pravidla vnitřní a vnější integrity a indexy.

Každá tabulka je označena jménem a patří (kromě systémových tabulek) do některého schématu.

Tabulky se vytvářejí příkazem CREATE TABLE a ruší se příkazem DROP TABLE. Strukturu a vlastnosti tabulky lze měnit příkazy ALTER TABLE, CREATE INDEX a DROP INDEX.

Stav záznamu v tabulce

Každá databázová tabulka se skládá ze záznamů. Na fyzické úrovni jsou záznamy v tabulce 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 jazyk SQL s ním nepracuje, 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 - volné místo v tabulce, na něž lze vložit nový záznam.
Z pohledu SQL jsou v tabulce pouze platné záznamy.

Příkaz DELETE a API funkce Delete ruší platný záznam. V závislosti na nastavení příznaků kompatibility se tento záznam stane buď zrušeným záznamem nebo uvolněným záznamem.

Všechny zrušené záznamy v tabulce změní na uvolněné záznamy API funkce Free_deleted.

Zrušené záznamy, které nebyly dosud uvolněny, lze obnovit voláním API funkce Undelete. Obnovovat záznamy lze také interaktivně ve formuláři, který obsahuje všechny typy záznamů z tabulky. Takový formulář lze otevřít například z řídicího panelu, pokud při otevírání standardního formuláře do tabulky držíte stisknutou klávesu Ctrl.

API funkce Compact_table provede zkompaktnění tabulky - přemístí záznamy tak, že po skončení akce nejsou v tabulce před platnými záznamy žádné uvolněné ani zrušené záznamy a tabulka zabírá minimum místa (na "konci" tabulky může být malý počet volných záznamů). Tuto akci nelze provést na tabulce, do níž vedou ukazatele.

Na řídícím panelu vývojového prostředí lze počty záznamů jednotlivých druhů v určité tabulce zjistit pomocí akce Statistika.

Seznam subsekcí:

  • Příkaz CREATE TABLE - vytvoření tabulky
  • Popis sloupce tabulky
  • Indexy k databázovým tabulkám
  • Integritní omezení v tabulce
  • Doba kontroly integritních omezení a triggery
  • Příkaz ALTER TABLE - změna tabulky
  • Příkaz DROP TABLE
  • Omezení historie


Příkaz CREATE TABLE

příkaz_CREATE_TABLE ::= CREATE TABLE [schéma.]jméno_tabulky [ příznak_tabulky ... ] (popis_elementu {, popis_elementu}... )
příznak_tabulky ::= NO_JOURNAL | REC_PRIVILS | ZCR | UNIKEY | LUO | TOKEN | DETECT
popis_elementu ::= popis_sloupce | popis_omezení
popis_omezení ::= [CONSTRAINT jméno_omezení] { popis_indexu | vnitřní_integritní_omezení | referenční_integritní_omezení }

Příkaz CREATE TABLE vytváří novou tabulku. Obsahuje popisy jednotlivých sloupců tabulky a popisy omezení, kterým mohou být indexy, vnitřní integritní omezení a referenční integritní omezení.

Není-li v příkazu uvedeno jméno schématu, pak:

  • je-li příkaz CREATE TABLE obsažen v proceduře uložené na serveru, tabulka vznikne ve stejném schématu, do něhož patří procedura;
  • jinak tabulka vznikne v právě otevřeném schématu.

Omezení mohou, ale nemusejí být pojmenována. Pokud v příkazu CREATE table není uvedeno jméno omezení, pak mu server přidělí implicitní jméno. Jména všech omezení musí být navzájem různá.

Příznaky jsou vlastnosti tabulky specifické pro 602SQL server.

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)


Popis sloupce tabulky

popis_sloupce ::= jméno_sloupce typ [ [cíl] ][ PREALLOC=n ][ EXPANDABLE ] [ DEFAULT implic_hodnota ] [vlastnost_sloupce {, vlastnost_sloupce}... ] [ jazyk_a_třídění ]
implic_hodnota ::= výraz | USER | UNIQUE
vlastnost_sloupce ::= PRIMARY KEY | UNIQUE | INDEX | NOT NULL | REFERENCES jméno_tabulky jméno_sloupce | CHECK ( podmínka )

Popis sloupce definuje vlastnosti sloupce v tabulce. Musí obsahovat jméno a typ sloupce.

Je-li v popisu sloupce použita klauzule PREALLOC nebo EXPANDABLE, pak sloupec je multiatribut, může mít tedy více než jednu hodnotu. Celé číslo n za PREALLOC udává, pro kolik hodnot se má v tabulce pevně rezervovat místo. Klauzule EXPANDABLE udává, že počet hodnot udaný n smí být překročen. n smí ležet v rozsahu 0 až 127. Větší hodnota n zrychluje přístup k datům, ale pokud v některých záznamech bude zapsáno méně hodnot, pak v tabulce vznikne nevyužité místo.

Údaj cíl se uvádí pouze pro sloupce typu ukazatel a obousměrný ukazatel a je to jméno tabulky, do níž sloupec ukazuje. Jméno tabulky je uzavřeno v hranatých závorkách.

Údaj jazyk_a_třídění lze uvést pouze pro znakové řetězce. Obvykle je obsažen v typu sloupce, smí být však alternativně uveden také za vlastnostmi sloupce.

Implicitní hodnota sloupce

Implicitní hodnota se do sloupce zapíše v nově vkládaných záznamech, pokud pro sloupec není zadána jiná hodnota. Je-li implicitní hodnota zadána výrazem, pak výraz musí být stejného typu jako sloupec. Implicitní hodnotu nelze zadat pro multiatributy, sloupce proměnné velikosti a sledovací atributy.

Například pro sloupce typu DATE, TIME nebo TIMESTAMP se jako implicitní hodnoty používají funkce CURRENT_DATE, CURRENT_TIME nebo CURRENT_TIMESTAMP.

Pro řetězce lze jako implicitní hodnotu použít speciální hodnotu USER označující uživatele vkládajícího záznam. Pro sloupec typu binární řetězec je USER binární ID uživatele, pro znakový řetězec je to logovací jméno uživatele.

Implicitní hodnota se používá také pro generování unikátních klíčů. Plnou kontrolu na celočíselnými klíči poskytují sekvence. Kromě toho lze pro sloupce typu INTEGER použít speciální implicitní hodnotu UNIQUE. Ta přiděluje hodnoty sloupce ze speciálního čítače sdruženého s tabulkou.

Generování unikátních klíčů pomocí implicitní hodnoty však funguje pouze tehdy, pokud hodnoty ve sloupci nejsou dodatečně měněny. Explicitní zápis jiné hodnoty do takového sloupce může zablokovat vkládání dalších záznamů, pokud by tím vznikla duplicita hodnot klíče.

Vlastnosti sloupce

Vlastnosti sloupce mají tento význam:

  • PRIMARY KEY - v tabulce bude vytvořen primární klíč z hodnoty sloupce;
  • UNIQUE - v tabulce bude vytvořen unikátní index, jehož klíčem je hodnota sloupce;
  • INDEX - v tabulce bude vytvořen neunikátní index, jehož klíčem je hodnota sloupce;
  • NOT NULL - sloupec nebude smět mít hodnotu NULL (speciální případ vnitřního integritního omezení);
  • REFERENCES - v tabulce vznikne pravidlo referenční integrity svazující tento sloupec se zadaným sloupcem v zadané nadřazené tabulce;
  • CHECK - v tabulce vznikne integritní omezení zadané podmínkou.

Vlastnosti sloupců jsou zkráceným zápisem jednoduchých případů vlastností tabulky. Protože je nelze pojmenovat, server jim přidělí automaticky vytvořená jména.

Integritní omezení zadaná jako vlastnosti sloupce neumožňují specifikovat čas provedení příslušné kontroly. Proto se uplatní implicitní nastavení určené příznaky kompatibility. Je-li potřeba vyhodnocovat omezení v jiném okamžiku, je nutno ho zadat jako omezení tabulky.


Indexy k databázovým tabulkám

Index je pomocná datová struktura, která podstatně urychluje například:

  • hledání záznamů splňujících určité podmínky v SQL dotazech i ve formulářích;
  • uspořádávání záznamů v odpovědi na dotaz i ve formuláři;
  • operace JOIN nad tabulkami (relační propojení tabulek);
  • práci s relačně propojenými subformuláři v interaktivních databázových aplikacích.

Každý index zachycuje uspořádání všech záznamů v tabulce podle určitého klíče. Tímto klíčem může být hodnota některého sloupce, hodnota výrazu nad sloupci, nebo posloupnost sloupců či výrazů.

Index může být spojen s pravidlem, které zakazuje duplicitu hodnot klíče - pak hovoříme o unikátním indexu.

Indexy nejsou součástí normy SQL, ale využívají se ve všech implementacích SQL. V současné verzi 602SQL je povoleno maximálně 24 indexů k jedné tabulce.

Použití indexů je zcela automatické. Programátor aplikace může však při vytváření dotazu určit, aby se použil určený index. Způsob vyhodnocení dotazu uloženého na serveru a využití indexů lze zjistit stiskem tlačítka Optimalizace na řídicím panelu.

Index se definuje takto:

popis_indexu ::= { UNIQUE | PRIMARY KEY | INDEX } (výraz [směr] {, výraz [směr] }... ) [{ NULL | NOT NULL }]
směr ::= ASC | DESC

Indexy, jejichž klíčem je hodnota jednoho sloupce, lze alternativně specifikovat jako vlastnost sloupce.

Indexy označené UNIQUE nebo PRIMARY KEY jsou unikátní a neumožňují vložení do tabulky dvou záznamů se stejnou hodnotou klíče. Index označený INDEX povoluje duplicity v hodnotách klíče. Index PRIMARY KEY smí být v definici tabulky uveden pouze jednou a má zvláštní postavení.

Hodnoty NULL v indexech

V definici indexu lze specifikovat, zda se do něj mají zahrnovat i ty řádky z databázové tabulky, pro které je hodnota indexového klíče NULL. Je-li na konci popisu indexu uvedeno NULL, pak index obsahuje i klíče s hodnotou NULL, je-li uvedeno NOT NULL, pak je neobsahuje.

Není-li v definici indexu uvedeno NULL ani NOT NULL, pak záleží na typu indexu: neunikátní index bude moci obsahovat hodnoty NULL, zatímco unikátní index a primární klíč nebude obsahovat hodnoty NULL.

Vyloučit hodnoty NULL z indexu má smysl například tehdy, pokud index je unikátní, ale pro hodnotu NULL chceme povolit duplicity.

Příklad:

CREATE TABLE Tab (a INTEGER, b INTEGER,
  UNIQUE (a) NULL,
  INDEX (b) NOT NULL)

Jsou-li z indexu vyloučeny hodnoty NULL, pak index nebude použit při optimalizaci agregační funkce MIN, predikátu IS NULL a řady podmínek v dotazech. Takový index nemusí urychlit vyhodnocení dotazu očekávaným způsobem.

Seznam subsekcí:

  • Informace o optimalizaci dotazu
  • Použití indexů v dotazech na prefix
  • Použití indexů neobsahujících hodnoty NULL
  • Příkaz CREATE INDEX
  • Příkaz DROP INDEX


Informace o optimalizaci a vyhodnocení dotazu

SQL server se pokouší každý dotaz před vyhodnocením optimalizovat, tedy transformovat tak, aby jeho vyhodnocení bylo co nejefektivnější.

Vývojář může získat informace o způsobu, kterým server bude dotaz vyhodnocovat, a data o náročnosti vyhodnocení jeho jednotlivých částí. K tom slouží tlačítko Optimalizace na řídicím panelu pro dotazy. Otevírá dialogové okno obsahující strom vyhodnocení dotazu.

Strom popisující vyhodnocení dotazu může mít dva rozsahy informací. Základní informace o struktuře vyhodnocování se v dialogovém okně zobrazí při jeho otevření. Detailní informace o počtu průchodů jednotlivými větvemi vyhodnocování a počtu zpracovaných záznamů v jednotlivých větvích se zobrazí až po stisku tlačítka vyhodnotit. K poskytnutí těchto informací je potřebné plné vyhodnocení dotazu, které může trvat delší dobu.

Větve ve stromu odpovídají operacím jako JOIN, OUTER JOIN, UNION, INTERSECT, EXCEPT a vytváření skupin záznamů (GROUP BY). U každé tabulky je uvedeno, zda se v ní procházejí všechny záznamy (exhaustivní průchod) nebo zda se záznamy vybírají pomocí indexů. Podmínky na záznamy jsou uvedeny na těch místech, kde se vyhodnocují.

Informace o optimalizaci dotazu poslouží vývojáři aplikace k tomu, aby nalezl a odstranil místa, kvůli nimž se vyhodnocení zbytečně zdržuje. Prosívání velkého množství záznamů pomocí podmínek není efektivní - lepší je navrhnout indexy, které dovolí přímo najít hledané záznamy.


Použití indexů v dotazech na prefix

Každý index uspořádává záznamy podle hodnot indexového klíče, vzestupně nebo sestupně. Je-li indexovým klíčem znakový řetězec, pak se používá lexikografické uspořádání podle jazyka určeného v popisu sloupce tabulky.

Národní lexikografické uspořádání hodnot klíče umožňuje efektivní vyhodnocení podmínek na rovnost nebo nerovnost řetězců použitých v dotazu a také setřídění záznamů v odpovědi na dotaz. Nehodí se však k optimalizaci dotazů obsahujících podmínku na prefix. Uvažujme český jazyk a tabulku obsahující tato data: 'caa', 'czz', 'd', 'cha', 'Ostra', 'Ostrá', 'Ostrava'.

V národním lexikografickém indexu jsou tyto záznamy v tom pořadí, v němž jsou výše uvedeny. Pokud by se použil tento index k optimalizaci dotazu sloupec.='c', pak by odpověď na dotaz obsahovala záznamu 'caa', 'czz', ale již nikoli 'cha', protože průchod indexem by skončil na záznamu 'd'. Podobně odpověď na dotaz sloupec.='Ostra' by obsahovala pouze záznam 'Ostra', protože záznam 'Ostrá' by vytváření odpovědi ukončil a záznam 'Ostrava' by nemohl být nalezen.

Národní lexikografické indexy nelze proto použít pro optimalizaci dotazů na prefix.

K tomu, aby bylo možno efektivně zodpovídat dotazy s podmínkami na prefix, je třeba v tabulce definovat jiný index. Pro sloupec XYZ typu řetězec znaků délky D je třeba použít indexový výraz:

CAST(XYZ AS CHAR(D))
Takový index bude třídit záznamy podle ASCII uspořádání a bude moci být proto využit pro optimalizaci podmínek na prefixy. Má-li hledání podle tohoto indexu nerozlišovat velikost písmen (ignorovat case senzitivitu), musí tomu odpovídat i indexový výraz:
CAST(XYZ AS CHAR(D) COLLATE IGNORE_CASE)

Pokud se některý řetězcový sloupec tabulky používá jak v podmínkách s rovnostmi či nerovnostmi tak i v podmínkách na prefix, pak pro efektivní vyhodnocení takových dotazů je nutno vybavit tabulku dvěma indexy.


Použití indexů neobsahujících hodnoty NULL

Indexy neobsahující hodnoty NULL mají pouze omezené využití při optimalizaci dotazů. Použijí se pro vyhledání záznamů vymezených podmínkami:

  • indexový_klíč = hodnota
  • indexový_klíč > hodnota
  • indexový_klíč >= hodnota
  • indexový_klíč .= hodnota
  • indexový_klíč BETWEEN hodnota1 AND hodnota2
  • indexový_klíč IS NOT NULL

Indexy neobsahující hodnoty NULL se nepoužijí pro setřídění záznamů podle hodnoty indexového klíče (ORDER BY) ani pro vyhledání záznamů vymezených podmínkami:

  • indexový_klíč <> hodnota
  • indexový_klíč < hodnota
  • indexový_klíč <= hodnota
  • indexový_klíč IS NULL
protože mezi záznamy nalezenými pomocí indexu by chyběly ty, jejichž indexový klíč má hodnotu NULL.

Pro zajištění efektivního vyhodnocování dotazů je proto lepší využívat indexů obsahujících i hodnoty NULL.

Pokud je třeba pro stejný indexový klíč efektivně vyhledávat záznamy, hlídat unikátnost hodnot klíče a povolit duplicity pro hodnotu NULL, pak je třeba vytvořit dva indexy: jeden neunikátní obsahující hodnoty NULL (pro vyhledávání) a druhý unikátní neobsahující hodnoty NULL (pro kontrolu unikátnosti):

INDEX (column) NULL,
UNIQUE (column) NOT NULL


Příkaz CREATE INDEX (SQL)

příkaz_CREATE_INDEX ::= CREATE [ UNIQUE ] INDEX jméno_indexu ON [schema.]jméno_tabulky ( výraz [ směr ] {, výraz [ směr ] }… ) [{ NULL | NOT NULL }]
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 602SQL používá interaktivní návrhář tabulek.

Odlišnosti od normy

  • příkaz CREATE INDEX není v normě 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 ::= 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


Integritní omezení v tabulce

Integritní omezení dovolují přenést na server starost o dodržování pravidel týkajících se dat v tabulce.

Vnitřní integritní omezení

Integritní omezení umožňuje stanovit podmínku na hodnoty sloupců v každém záznam tabulky. Pokud při manipulaci s daty v tabulce bude v některém záznamu porušena platnost této podmínky, dojde k chybě (sqlstate 40002) a transakce bude odvolána.

Vnitřní integritní omezení se specifikuje takto:

vnitřní_integritní_omezení ::= CHECK ( podmínka ) [ vyhodnocení ]

Alternativně lze vnitřní integritní omezení týkající se jednoho sloupce popsat jako vlastnost sloupce.

Referenční integrita

Referenční integrita je nástroj, který pomáhá udržovat vztahy mezi záznamy v relačně propojených tabulkách.

Definuje se jako vztah mezi dvojici tabulek. Tabulka, v níž je pravidlo referenční integrity uvedeno, se nazývá podřízená tabulka. Tabulka, jejíž jméno je v integritním omezení uvedeno, je nadřízená tabulka. V nadřízené i podřízené tabulce je určen sloupec nebo skupina sloupců tvořící klíč. Pravidlo referenční integrity vyžaduje, aby pro každý záznam v podřízené tabulce, jehož klíč nemá hodnotu NULL, existoval v nadřízené tabulce záznam se stejným klíčem.

Při manipulaci s daty se referenční integrita projevuje takto:

  1. Přidáváte-li záznam do podřízené tabulky (resp. přepisujete-li hodnotu sloupce z klíče), kontroluje se existence stejného klíče v nadřízené tabulce.
  2. Při smazání hodnoty sloupce z klíče (zrušením záznamu nebo přepsáním hodnoty) v nadřízené tabulce se kontroluje, zda v podřízené tabulce není záznam se stejnou hodnotou klíče.

Porušení pravidla 1. vyvolá chybu a odvolání transakce. Porušení pravidla 2. může buď vyvolat chybu a odvolání transakce, nebo úpravu dat v podřízené tabulce v souladu s definovanými akcemi.

Pravidlo referenční integrity se specifikuje takto:

referenční_integritní_omezení ::= FOREIGN KEY (jméno_sloupce {, jméno_sloupce}... ) REFERENCES [schéma.]jméno_tabulky [ jméno_sloupce {, jméno_sloupce}... ] [ ON UPDATE akce_referenční_integrity ] [ ON DELETE akce_referenční_integrity ] [ vyhodnocení ]
akce_referenční_integrity ::=  SET NULL | SET DEFAULT | CASCADE | NO ACTION

První skupina jmen sloupců určuje klíč v podřízené tabulce. Druhá skupina určuje klíč v nadřízené tabulce. Pokud není uvedena, pak se použije primární klíč nadřízené tabulky. Klíče v obou tabulkách musí být stejného typu.

Pravidlo referenční integrity propojující jeden sloupec s jedním sloupcem lze alternativně popsat jako vlastnost sloupce.

Aktivní referenční integrita

V pravidle referenční integrity lze specifikovat, co má server provést, pokud by v důsledku zrušení nebo přepsání záznamu v nadřízené tabulce mělo dojít k porušení referenční integrity. V takovém případě se provede zadaná akce referenční integrity uvedená v klauzuli ON DELETE resp. ON UPDATE:

  • SET NULL - v záznamech podřízené tabulky se stejnou hodnotou klíče se do sloupců tvořících klíč zapíše hodnota NULL;
  • SET DEFAULT - v záznamech podřízené tabulky se stejnou hodnotou klíče se do sloupců tvořících klíč zapíše implicitní hodnota určena v definici tabulky;
  • CASCADE - změna provedena v nadřízené tabulce se provede i na záznamech podřízené tabulky se stejným klíčem: při zrušení nadřízeného záznamu se zruší podřízené záznamy, při změně hodnot klíče v nadřízeném záznamu se stejná změna provede i v podřízených záznamech.
  • NO ACTION nebo nespecifikovaná akce - dojde k chybě (sqlstate 40002), která způsobí odvolání transakce.

Ve všech těchto případech tedy server zamezí porušení pravidla referenční integrity.

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.

Spouštění triggerů prováděním akcí referenční integrity je závislé na nastavení příznaků kompatibility pomocí funkce Set_sql_option (SQLOPT_NO_REFINT_TRIGGERS (4096)).

Příklad: tabulka s podmínkou na číslo >0 a aktivní ref. integritou do čísleníku firem (nadřízená tabulka FIRMY)

CREATE TABLE `OBJEDNAVKY` (
`FIRMA_ID` INTEGER ,
`OBJEDNANO` NUMERIC(14,2) ,
...
CONSTRAINT `Firmy` INDEX (`FIRMA_ID`),
CONSTRAINT `Check_gt0` CHECK (objednano>0) INITIALLY IMMEDIATE,
CONSTRAINT `Firma-Obj` FOREIGN KEY (`FIRMA_ID`) REFERENCES `FIRMY`(`FIRMA_ID`) ON UPDATE CASCADE ON DELETE CASCADE)

Kdy se kontroluje dodržení integritních omezení?

Server může kontrolovat dodržení integritních omezení buď na konci příkazu nebo na konci transakce. Kontrola odložená na konec transakce je nezbytná, pokud je v průběhu transakce platnost omezení nejprve porušena a později obnovena. Kontrola provedená bezprostředně po provedení příkazu je výhodná v tom, že nezatěžuje server nutností pamatovat si seznam všech odložených kontrol.

Výjimkou jsou změny v nadřazené tabulce referenční integrity, pro něž se následná akce nebo chyba vyvolává vždy okamžitě.

Čas vyhodnocení integritního omezení se předepisuje takto:

vyhodnoceni ::= INITIALLY { IMMEDIATE | DEFERRED }

INITIALY IMMEDIATE určuje, že se kontrola bude provádět bezprostředně po provedení příkazu. INITIALY DEFERRED určuje, že se kontrola vnitřního integritního omezení nebo kontrola referenční integrity po změně v podřízené tabulce odloží na konec transakce.

Čas vyhodnocení nelze explicitně nastavit pro vlastnost sloupce NOT NULL - je-li třeba, použijte místo vlastnosti NOT NULL integritní omezení CHECK (sloupec IS NOT NULL), pro nějž lze čas vyhodnocení zadat.

Není-li čas vyhodnocení specifikován, řídí se nastavením příznaku kompatibility SQLOPT_CONSTRS_DEFERRED (16384). To platí i pro vlastnost sloupce NOT NULL.


Doba kontroly integritních omezení a triggery

Provedení příkazu může vyvolat spuštění triggerů, kontrolu interitních omezení a provedení akcí aktivní referenční integrity.

Kdy se kontroluje dodržení integritních omezení?

Server může kontrolovat dodržení integritních omezení buď na konci příkazu nebo na konci transakce. Kontrola odložená na konec transakce je nezbytná, pokud je v průběhu transakce platnost omezení nejprve porušena a později obnovena. Kontrola provedená bezprostředně po provedení příkazu je výhodná v tom, že nezatěžuje server nutností pamatovat si seznam všech odložených kontrol.

Výjimkou jsou změny v nadřazené tabulce referenční integrity, pro něž se následná akce nebo chyba vyvolává vždy okamžitě.

Další výjimkou jsou integritní omezení UNIQUE, která se kontrolují při každé změně v tabulce okamžitě.

Čas vyhodnocení integritního omezení se předepisuje takto:

vyhodnoceni ::= INITIALLY { IMMEDIATE | DEFERRED }

INITIALY IMMEDIATE určuje, že se kontrola bude provádět bezprostředně po provedení příkazu. INITIALY DEFERRED určuje, že se kontrola vnitřního integritního omezení nebo kontrola referenční integrity po změně v podřízené tabulce odloží na konec transakce.

Čas vyhodnocení nelze explicitně nastavit pro vlastnost sloupce NOT NULL - je-li třeba, použijte místo vlastnosti NOT NULL integritní omezení CHECK (sloupec IS NOT NULL), pro nějž lze čas vyhodnocení zadat.

Není-li čas vyhodnocení specifikován, řídí se nastavením příznaku kompatibility SQLOPT_CONSTRS_DEFERRED (16384). To platí i pro vlastnost sloupce NOT NULL.

Pořadí akcí a kontrol při provádění příkazů

Provádní příkazu probíhá v této obálce:

  1. BEFORE trigger FOR EACH STATEMENT
  2. zpracování všech záznamů v příkazu
  3. AFTER trigger FOR EACH STATEMENT

Pro každý záznam ovlivněný příkazem se provádí tato posloupnost akcí:

  1. BEFORE trigger FOR EACH ROW
  2. provedení změn v datech:
    • pro INSERT vyhodnocení DEFAULT hodnot, kde jsou potřeba, a zápis hodnot
    • pro UPDATE zápis hodnot
    • pro DELETE zrušení záznamu
  3. úprava indexů, aby odpovídaly novým hodnotám
  4. kontrola UNIQUE
  5. akce aktivní referenční integrity (kaskádní změna nebo rušení nebo přitom kontrola)
  6. AFTER trigger FOR EACH ROW
  7. kontrola IMMEDIATE integrity: vnitřní pravidla CHECK + test existence nadřízených záznamů pro změněné záznamy v podřízených tabulkách v referenční integritě.


Příkaz ALTER TABLE

Příkaz ALTER TABLE mění strukturu a vlastnosti databázové tabulky. Jeho syntaxe a funkce závisí na nastavení příznaků kompatibility. Syntaxe odpovídající normě SQL vypadá takto:

příkaz_ALTER_TABLE ::= ALTER TABLE [schéma.]jméno_tabulky [ příznak_tabulky ... ] akce {, akce }...
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 ] popis_sloupce
odstranění_sloupce ::= DROP [ COLUMN ] jméno_sloupce
změna_sloupce ::= ALTER [ COLUMN ] jméno_sloupce { SET DEFAULT implic_hodnota | DROP DEFAULT }
přidání_omezení_tabulky ::= ADD popis_omezení
odstranění_omezení_tabulky ::= DROP CONSTRAINT jméno_omezení

Syntaxe kompatibilní se staršími verzemi 602SQL se liší v těchto detailech:

akce ::= přidání_sloupce | odstranění_sloupce | popis_omezení
přidání_sloupce ::= ADD [ pořadí ]  popis_sloupce [ VALUES " výraz_pro_přenos_hodnoty " ]

V obou variantách syntaxe se uvádějí přidávané a rušené sloupce. Změna sloupce (jiná než změna v implicitní hodnotě) vyžaduje zrušení a nové vytvoření sloupce. Syntaxe 602SQL dovoluje navíc specifikovat pořadí - pořadové číslo nového sloupce v návrhu tabulky (počítáno od 1). Dále umožňuje uvést výraz definující hodnotu nového sloupce pomocí hodnot starých sloupců, a tím zajistit transformaci dat uložených v modifikované tabulce.

V syntaxi SQL se dále uvádějí přidávaná a rušená omezení, zatímco v syntaxi 602SQL se uvedou všechna omezení, které mají platit v nové tabulce), ostatní omezení budou automaticky zrušena.

Příznaky kompatibility se nastavují buď globálně na řídicí konzoli serveru nebo dynamicky pomocí funkce Set_sql_option, volba SQLOPT_OLD_ALTER_TABLE (128). Druhou možnost nelze v tomto případě doporučit. Po fungování příkazu je rozhodující nastavení příznaku kompatibility v okamžiku překladu. Proto pokud v proceduře následují po sobě příkaz měnící příznak kompatibility a příkaz ALTER TABLE, pak se efekt změny příznaku nemůže na provádění ALTER TABLE projevit.

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

Pravidla pro používání příkazu ALTER TABLE

Odkazy na tabulku z jiných objektů

Změna struktury tabulky může zasáhnout řadu objektů, které na ní odkazují. Uložené procedury, formuláře, aplikační programy atd. odkazující na zrušené nebo změněné sloupce tabulky mohou přestat fungovat.

602SQL nezruší odkazující objekty při provedení ALTER TABLE ani nebrání provedení ALTER TABLE v případě, že odkazující objekty existují. Místo toho očekává, že autor aplikace uvede odkazující objekty do souladu s novou strukturou tabulky.

Odkazy na tabulku z následujících SQL příkazů

Příkazy jazyka SQL jsou před svým prováděním analyzovány, optimalizovány a překládány do tvaru, který umožní jejich efektivní provedení. Tato fáze využívá informace o struktuře použitých tabulek Pokud se mezi překladem SQL příkazu a jeho provedením struktura tabulek změní, příkazy by se provedly nesprávně.

Tato situace nastane v případě, kdy je příkaz ALTER TABLE zařazen do posloupnosti příkazů v proceduře nebo triggeru, v níž se po jeho provedení jakýmkoliv způsobem manipuluje se stejnou tabulkou. Proto po provedení ALTER TABLE není dovoleno jakkoli pracovat s daty v této tabulce až do úplného dokončení všech rozpracovaných uložených procedur a triggerů.

Příklady nepovolených operací:

  1. Použití tabulky TB v jakémkoli SQL příkazu následujícím po ALTER TABLE TB.
  2. Použití dotazu odkazujícího na tabulku TB v jakémkoli SQL příkazu následujícím po ALTER TABLE TB.
  3. Výskyt příkazu z bodů 1 nebo 2 v proceduře zavolané pro provedení ALTER TABLE.
  4. Výskyt příkazu z bodů 1 nebo 2 v triggeru aktivovaném pro provedení ALTER TABLE.
  5. Výskyt příkazu z bodů 1 nebo 2 v proceduře, do níž se řízení vrátí z procedury, která provedla ALTER TABLE.

Je-li nezbytné, aby se takové příkazy vyskytly v jedné proceduře, je nutno odložit kompilaci příkazů závislých na nové struktuře tabulky pomocí funkce SQL_execute.

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

Odlišnosti od normy

  • V jednom příkazu ALTER TABLE lze uvést i více než jednu změnu struktury tabulky
  • Při modifikování tabulky se nezkoumá, jak to ovlivní objekty závislé na tabulce, nejsou implementovány klauzule RESTRICT ani CASCADE

Seznam subsekcí:

  • Práva k sloupcům po modifikaci struktury tabulky


Práva k sloupcům po modifikaci struktury tabulky

Po modifikaci struktury tabulky jsou zachována veškerá práva k nezměněným sloupcům. To se týká jak práv přiděleným sloupcům v celé tabulce tak i práv přiděleným sloupcům v jednotlivých záznamech (pokud tabulka přidělování těchto práv umožňuje).

Změní-li se typ nebo jiné vlastnosti sloupce (např. délka nebo implicitní hodnota), práva zůstanou rovněž zachována.

Pro nově přidané sloupce platí: Uživatel, které modifikuje strukturu tabulky a standardní role Administrator a Senior_user získají právo sloupec číst i přepisovat, standardní role Junior_user získá pouze právo číst. Toto pravidlo se týká globálních práv platných pro všechny záznamy v tabulce, žádná práva k jednotlivým záznamům se těmto subjektům k novým sloupcům nepřidělí.

Pokud je sloupec přejmenován, jeho původní práva zaniknou a přidělí se mu nová práva jako pro nové sloupce.


Příkaz DROP TABLE (SQL)

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

Popis

Příkaz DROP TABLE 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.

Je-li tabulka prefixována jménem aplikace (na stejném serveru), tabulka se hledá v uvedené aplikaci (schématu).

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


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.


Práva a subjekty práva v SQL

Z hlediska editace subjektů práv lze rozlišit tyto činnosti:

  • vytváření a rušení uživatelů a skupin uživatelů;

  • nastavení či zjištění vztahů mezi subjekty práv;

Z hlediska vztahu práv k uživateli (resp. subjektu práv) lze rozlišit tyto činnosti:

  • zjištění práv zadaného subjektu práv k zadané tabulky nebo záznamům tabulky - podrobnosti;

  • nastavení práv (přidání nebo odebrání) pro zadaný subjekt k tabulce nebo k záznamům tabulky - viz popis SQL příkazů GRANT a REVOKE.

Vytváření a rušení uživatelů a skupin

Uživatele lze vytvořit SQL příkazem CREATE USER, zrušit příkazem DROP USER. Nastavit přístupové heslo uživateli lze pomocí funkce Set_password.

Skupinu uživatelů lze vytvořit SQL příkazem CREATE GROUP, zrušit příkazem DROP GROUP.

Vztah mezi subjekty práv

Zjistit nebo změnit vztah mezi dvěma subjekty práv (např. zařadit uživatele do skupiny, obsadit skupinu do role) umožňují funkce Set_membership a Get_membership

Příklad:

PROCEDURE `INIT_SET_PRIVILS`();
/*******************************************/
// nastaví všem tabulkám v aplikaci práva číst, psát, vkládat a mazat záznamy
// pro roli Internet_user
BEGIN
  DECLARE sqlstr CHAR(500);
  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
  BEGIN
    CALL log_write("Init_set_privils - "||sqlstate||' '||Int2str(sqlcode));
  END;

  FOR row AS INSENSITIVE CURSOR FOR
   SELECT T2.tab_name              // seznam tabulek
   FROM OBJTAB T1, TABTAB T2
   WHERE T1.APL_UUID=T2.APL_UUID
    AND (Ord(T1.category)=CATEG_APPL) AND (t1.obj_name=CURRENT_APPLICATION)
  DO
    SET sqlstr = "GRANT DELETE, INSERT, SELECT, UPDATE ON "||row.tab_name||" TO ROLE INTERNET_USER";
    CALL SQL_execute(sqlstr);   // provést dynamicky sestavený příkaz
  END FOR;
END


Zjišťování práv z jazyka SQL

Pro zjištění práv zadaného subjektu práva k zadané tabulce nebo záznamům tabulky se využívá pětice predikátů has_select_privil (pro právo číst), has_update_privil (pro právo přepisovat), has_delete_privil (pro právo vkládat záznamy), has_insert_privil (pro právo mazat záznamy) a has_grant_privil (pro právo poskytovat své právo dalším subjektům).

Právo číst a právo přepisovat se zjišťuje pro každý sloupec zvlášť, ostatní práva pro celou tabulku najednou.

Predikáty se užívají jako součást dotazového výrazu SELECT: výběr tabulky ve FROM určuje, pro jakou tabulku se práva zjišťují, podmínka ve WHERE stanoví, u jakých záznamů se práva zjišťují (má-li tabulka povolena záznamová práva).

Predikáty mají následující formát:

privil_predikáty ::= predikáty_pro_sloupce | predikáty pro tabulku
predikáty_pro_sloupce ::= { has_select_privil | has_update_privil } ( sloupec, druh [, jméno_subjektu, kategorie_subjektu ] )
predikáty_pro_tabulku ::= { has_delete_privil | has_insert_privil | has_grant_privil } ( druh [, jméno_subjektu, kategorie_subjektu ] )
druh ::= {0 | 1 | 2}
kategorie_subjektu ::= { CATEG_USER | CATEG_GROUP | CATEG_ROLE }

Popis

U predikátů_pro_sloupce se musí určit vždy jeden sloupec uvedený v části SELECT dotazového výrazu, pro nějž se právo zjišťuje. U ostatních predikátů (delete, insert a grant) se neuvádí, protože tato práva se definují pro tabulku jako celek.

Podle hodnoty druh se rozlišuje, jaké právo se zjišťuje:

druh | význam
0 | práva přidělená záznamu (nejde pro insert a pro tabulky bez záznamových práv)
1 | práva přidělená tabulce
2 | efektivní práva

U predikátů je možné uvést dvojici parametrů jméno_subjektu a kategorie_subjektu. Je-li tato dvojice uvedena, zjišťuje se právo tohoto subjektu, není-li uvedena, uvažuje se přihlášený uživatel kladoucí dotaz. Při vyhodnocování se nekontroluje existence zadaného subjektu práva - neexistující subjekt práva nemá přidělena.

Efektivní práva v sobě zahrnují práva získaná náležením uživatele do skupin a obsazením do rolí. Nejsou zde zahrnuta zvláštní práva, která uživatel má při provádění procedur a vyhodnocování dotazů, pro něž je nastaven administrátorský režim provozování.

Použití:

vždy jako součást dotazového výrazu SELECT:

  • v klauzuli SELECT pro zjištění práv:
SELECT has_select_privil(a,2,"anonymous",CATEG_USER), has_select_privil(b,2,"anonymous",CATEG_USER)
FROM PrivTab

Vypsat práva ke čtení anonymního uživatele ke dvěma sloupcům tabulky

SELECT has_delete_privil(2,"everybody", CATEG_GROUP) INTO lze_smazat
FROM PrivTab
WHERE a=1;

Předat do proměnné typu BIT příznak, má-li každý právo smazat vybraný záznam

  • v podmínce WHERE
SELECT *
FROM PrivTab
WHERE has_select_privil(b,2,"junior_user",CATEG_ROLE)

Vypsat jen ty záznamy, u kterých má role JUNIOR_USER právo číst sloupec B

Editace práv

K nastavení práv (přidání nebo odebrání) pro zadaný subjekt k tabulce nebo k záznamům tabulky se používá dvojice SQL příkazů GRANT a REVOKE.

Viz

    Uživatelé a jejich správa,
    Práva při provádění uložených procedur a vyhodnocování dotazů


Funkce v SQL

602SQL-Úplná dokumentace

Funkce (SQL)

funkce ::= SQL_funkce                |
           funkce_602SQL         |
           funkce_uložené na serveru |
           funkce_z_externích_DLL

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

  • standardní funkce definované normou SQL - seznam

  • standardní funkce klientského programovacího jazyka 602SQL (s několika málo funkcemi určenými pouze pro SQL server) - 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 602SQL 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é v klientském programovacím jazyce klienta 602SQL.

Seznam subsekcí:

  • Standardní funkce vnitřního jazyka klienta
  • Funkce definované normou SQL


Funkce jazyka 602SQL v SQL

602SQL-Úplná dokumentace

Standardní funkce jazyka 602SQL (mimo normu SQL)

Zde jsou vypsány funkce (převážně klientského jazyka 602SQL), které je možno používat v jazyce SQL přesto, že nejsou nijak upraveny normou SQL. Některé zde uvedené funkce se částečně překrývají s funkcemi definovanými normou SQL (například funkci Strpos lze nahradit funkcí POSITION).

Jedná se o:

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

Str2int, Str2bigint, Str2money, Str2real, Str2date, Str2time, Str2timestamp, Int2str, Bigint2str, 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, LetterAddBLOBs, LetterSend, LetterCancel, TakeMailToRemOffice, MailOpenInBox, MailBoxLoad, MailBoxGetMsg, MailBoxGetFilInfo, MailBoxSaveFileAs, MailBoxSaveFileDBs, MailBoxDeleteMsg, MailCloseInBox, MailGetInBoxInfo, MailGetType,

  • Synchronizace vláken

Create_semaphore, Close_semaphore, Release_semaphore, Wait_for_semaphore,

  • Ostatní funkce:

602SQL_version, Waits_for_me, Who_am_I, Current_application, Set_password,

  • Funkce 602SQL určené pouze pro SQL server (nejsou v klientském jazyce):

Sleep, Client_number, Admin_mod, Set_membership, Get_membership, Active_routine_name

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í v klientském programovacím jazyce klienta 602SQL).

Na serveru jsou také použitelné standardní procedura SQL_execute, procedura Free_deleted a procedura Log_write (jakožto procedury nutno volat pomocí příkazu CALL (CALL Free_deleted("MY_TABLE")). Nastavit parametry SQL serveru lze pomocí procedury Set_sql_option, zjistit tyto parametry pomocí funkce Get_sql_option.


Funkce SQL

602SQL-Úplná dokumentace

Funkce definované normou SQL (SQL)

Funkce definované normou SQL implementované ve 602SQL jsou:

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

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

  • 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

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

  • 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 - provádí konverzi typu

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

Seznam subsekcí:

  • POSITION
  • CHAR_LENGTH, OCTET_LENGTH, BIT_LENGTH
  • EXTRACT
  • SUBSTRING
  • UPPER, LOWER
  • CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP
  • NULLIF
  • COALESCE
  • CAST
  • Agregační funkce


Funkce POSITION (SQL)

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í řetězce se hledá bez ohledu na velikost písmen, pokud str2 je typu ignorujícího velikost písmen.

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

  • Tato funkce patří do Full SQL2.

Odlišnosti od normy

  • Ve 602SQL 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))
  RETURNS INT;
BEGIN
  RETURN (POSITION(" " IN strpar));
END

Viz

  • CHAR_LENGTH
  • SUBSTRING
  • Pref
  • Substr
  • Strcat
  • Strinsert
  • Strdelete
  • Strcopy
  • Strpos
  • Strlength
  • Strtrim


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

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 602SQL

  • 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 (BIT) 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 602SQL 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

Viz

  • POSITION
  • SUBSTRING
  • Pref
  • Substr
  • Strcat
  • Strinsert
  • Strdelete
  • Strcopy
  • Strpos
  • Strlength
  • Strtrim


Funkce EXTRACT (SQL)

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 602SQL, 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 Faktury,Firmy
WHERE Faktury.Firma=Firmy.Cislo
GROUP BY Firmy.nazev, EXTRACT (MONTH FROM dat1)
ORDER BY Firmy.nazev, měsíc


Funkce SUBSTRING (SQL)

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

Funkce SUBSTRING vybírá podřetězec ze znakového nebo binárního řetězce, CLOBu nebo BLOBu str. Podřetězec začíná od pozice start a sahá nejvýš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.

Před verzí 8.0 byl typ hodnoty této funkce vždy stejný jako typ argumentu str. Od verze 8.0 je-li uvedena délka, je-li to celočíselná konstanta a nepřevyšuje-li maximální možnou délku řetězce, pak:

  • pokud str je znakový nebo binární řetězec s maximální délkou větši než délka, pak hodnota funkce je stejného typu, ale maximální délka hodnoty je délka;

  • pokud str je BLOB, pak hodnota funkce je binární řetězec s maximální délkou délka;

  • pokud str je CLOB, pak hodnota funkce je znakový řetězec s maximální délkou délka;

v ostatních případech je typ hodnoty funkce stejný jako typ argumentu str. Tato změna umožňuje využít funkci SUBSTRING pro efektivní tvorbu indexových výrazů.

Příklad použití:

Test, začíná-li hodnota proměnné znakem X:

IF SUBSTRING(Polozka FROM 1 FOR 1) = 'X' THEN
    UPDATE  SET cena = cena*1.1 WHERE CURRENT OF curcen;

Viz

  • CHAR_LENGTH
  • POSITION
  • Pref
  • Substr
  • Strcat
  • Strinsert
  • Strdelete
  • Strcopy
  • Strpos
  • Strlength
  • Strtrim


Znakové konverzní funkce UPPER a LOWER (SQL)

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)

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)

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)

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)

CAST (arg AS typ)

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

(Pozor - funkce není totožná s přetypováním (angl. casting) ve vyšších programovacích jazycích.)

Ve funkci není možné zvolit způsob formátování, pokud to vadí, použijte specializovanou konverzí funkci jazyka 602SQL.

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 ve funkci Set_sql_option (volba SQLOPT_MASK... (8,16,32)). 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

Viz konverzní funkce jazyka použitelné v SQL:

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


Agregační funkce (SQL)

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 602SQL

  • Výsledek agregační funkce COUNT je typu INT, výsledek ostatních funkcí je stejného typu jako argument s touto výjimkou: pro funkce AVG a SUM a argument typu SMALLINT je výsledek typu INT. 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í:

Spočítat faktury

SELECT COUNT(cislo) FROM Faktury

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)

Zjistit počet firem, které mají alespoň jednu fakturu za víc než 5000

SELECT COUNT (DISTINCT Firmy.nazev)
    FROM Faktury,Firmy
    WHERE (castka > 5000)
      AND (Firmy.cislo=Faktury.firma)


Výrazy v SQL

602SQL-Úplná dokumentace

Výrazy (SQL)

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           |
       volání_funkce (SQL rutiny) |
       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

  • funkce

  • funkce uložené na serveru

  • deklarace proměnných serveru

  • proměnné klienta

Seznam subsekcí:

  • 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
  • Jak zaokrouhlovat čísla v SQL?


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

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


Operátory v aritmetických výrazech (SQL)

V aritmetických výrazech lze používat binární operátor + pro sčítání čísel, - 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 602SQL.


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

602SQL-Úplná dokumentace

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

Pokud oba znakové řetězce v operaci mají specifikovanou množinu znaků a třídění, pak musí být u obou řetězců stejná.

Znakové řetězce lze spojovat operátorem zřetězení ||. Je-li alespoň jeden operand zřetězení v UNICODE, pak výsledek bude také v UNICODE. Má-li alespoň jeden znakový řetězec specifikovanou množinu znaků a třídění, pak výsledný řetězec bude mít stejnou množinu znaků a stejné třídění. Výsledný řetězec bude mít příznak ignorování velikosti písmen, pokud alespoň jeden z operandů má příznak ignorování velikosti písmen. Pokud alespoň jeden z operátorů je typu CLOB nebo pokud součet maximálních délek spojovaných řetězců přesahuje maximální možnou délku řetězce, pak výsledek je typu CLOB. Jinak maximální délka spojeného řetězce je součtem maximálních délek obou operandů.

Také binární řetězce lze spojovat operátorem zřetězení ||. Spojení vždy probíhá po celých bajtech. Pokud alespoň jeden z operátorů je typu BLOB nebo pokud součet délek spojovaných binárních řetězců přesahuje maximální možnou délku binárního řetězce, pak výsledek je typu BLOB. Jinak délka spojeného binárního řetězce je součtem délek obou operandů.

Pro porovnání hodnot znakových nebo binárních řetězců slouží operátory >, <, =, =<, => a <>. Při porovnávání znakových řetězců se ignoruje velikost písmen, pokud alespoň jeden z operandů má příznak ignorování velikosti písmen. Má-li alespoň jeden znakový řetězec specifikovanou množinu znaků a třídění, pak se porovnává podle tohoto třídění, jinak se porovnává podle hodnot interních kódů znaků.

Odchylky od Intermediate level směrem k Entry level

  • Operátor zřetězení nelze použít na bitové spojení binárních řetězců.

Implementací definované vlastnosti SQL ve 602SQL

  • Pro zřetězení lze alternativně použít i operátor + z jazyka 602SQL.

  • Pro porovnání lze použít také operátory .= (začíná na), .=. (obsahuje) a ~ (je podobný) z jazyka 602SQL.

Příklad:

IF res<>0 THEN
CALL Log_write("Chyba inicializace pošty "||Int2str(res)); CALL mailerr(res);
ELSE
...


Výrazy nad datem a časem v SQL

602SQL-Úplná dokumentace

Výrazy nad datem a časem (SQL)

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 602SQL.

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


Jak zaokrouhlovat čísla v SQL?

Jazyk SQL nedisponuje standardní funkcí pro zaokrouhlování čísel. Pro zaokrouhlování lze však snadno využít typové konverze prováděné pomocí funkce CAST.

Zaokrouhlování na stanovený počet desetinných míst

Pro zaokrouhlení použijte funkci:

CAST(hodnota AS NUMERIC(max_počet_platných_číslic, počet_desetinných_míst))

kde hodnota je zaokrouhlovaná číselná hodnota, max_počet_platných_číslic je maximální počet číslic potřebných pro zápis hodnoty (včetně desetinných míst) a počet_desetinných_míst je počet míst za desetinnou tečkou, na něž zaokrouhlujete.

Počet platných číslic nesmí překročit 19, neboť to je přesnost, s níž se provádějí číselné výpočty.

Zaokrouhlení na mocniny deseti

Pro zaokrouhlení na mocniny deseti (např. na desítky, stovky, tisíce, milióny) použijte podobný postup. Hodnotu však před zaokrouhlením vydělte zvolenou mocninou, zaokrouhlete na celé číslo na pak vynásobte stejnou mocninou:

CAST(hodnota/1eN AS NUMERIC(max_počet_platných_číslic, 0)) * 1eN

kde N je mocnina.

Například při zaokrouhlování na tisíce (třetí mocnina deseti) použijte zápis:

CAST(hodnota/1e3 AS NUMERIC(19, 0)) * 1e3
V jazyce SQL lze pro zaokrouhlování použít i původně klientské funkce jazyka Round a Trunc.


Podmínka v SQL

602SQL-Úplná dokumentace

Podmínka (SQL)

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
    | predikát Fulltext
    | privil_predikáty
    | ( 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 integritním omezení 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. 602SQL 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

  • predikát Fulltext

  • privil_predikáty

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ů.

Rozšíření jazyka SQL proti normě

  • Predikáty pro fulltextové vyhledávání a pro manipulaci s právy jsou rozšířením 602SQL


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

602SQL-Úplná dokumentace

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

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í (musí obsahovat jediný sloupec) 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 ::= 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 ::= 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í (musí obsahovat jediný sloupec). 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 ::= 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)

Použití mimo SELECT:

IF EXISTS (SELECT admin_enabled FROM System
           WHERE (admin_name=usr)AND(admin_password=pwd)AND(admin_enabled IS TRUE))
  THEN ...


Predikát UNIQUE (SQL)

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 ::= 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 _ (podtržítko) ve výrazu2 odpovídá libovolnému znaku ve výrazu a znak % (procento) 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á" z Prahy

SELECT Zamestnanci.jmeno
FROM Zamestnanci
WHERE (jmeno LIKE '%ová') AND (mesto LIKE 'Praha%')

Najít kód, který má na druhém místě řetězce znak %:

...
WHERE kod LIKE "_\%%" ESCAPE "\"


Predikát IS NULL (SQL)

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é (i když 602SQL je připouští).

Příklad použití:

Vybrat nezaplacené faktury:

SELECT *
FROM FAKTURY
WHERE zaplaceno IS NULL


Dotazy v SQL

602SQL-Úplná dokumentace

Dotazy v SQL (SELECT)

Dotazy slouží v SQL 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. 602SQL 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.

Reakce serveru na případ, kdy uživatel nemá oprávnění číst některý sloupec odpovědi, lze nastavit pomocí funkce Set_sql_option (volba SQLOPT_RD_PRIVIL_VIOL (4)).

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ů

Fulltextové vyhledávání dokumentů

Seznam subsekcí:

  • Zobecněná tabulka
  • Specifikace dotazu
  • Dotazový výraz


Zobecněná tabulka (SQL)

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 602SQL.

Viz také:

Dotazy v SQL

Sbírka dotazů

Příklad použití dotazových výrazů a joinů na místě zobecněné tabulky (z aplikace eSupport - zjednodušeno):

SELECT *
FROM Kb_topics
   LEFT OUTER JOIN
     (SELECT topic_id,un_reports+un_answers AS unanswered
      FROM (SELECT topic_id,Count(*) AS un_reports
            FROM Kb_reports WHERE all_answer_count=0 GROUP BY topic_id
           )
         JOIN
           (SELECT Kb_reports.topic_id,Count(*) AS un_answers
            FROM Kb_reports JOIN Kb_answers ON (Kb_reports.id=Kb_answers.report_id)
            WHERE (NOT EXISTS(SELECT *
                              FROM Kb_answers answ
                              WHERE Kb_answers.id=answ.question_id))
            GROUP BY Kb_reports.topic_id
            )
         USING (topic_id))
      ON (Kb_topics.id=topic_id)
ORDER BY Kb_topics.pos


Specifikace dotazu v SQL

602SQL-Úplná dokumentace

Specifikace dotazu (SQL)

specifikace_dotazu ::= SELECT [ DISTINCT ] výraz [ přejmenování ] { , výraz [ přejmenování ] }…
FROM zobecněná tabulka { , zobecněná tabulka }…
[ WHERE podmínka_where ]
[ GROUP BY výrazg { , výrazg }… ]
[ HAVING podmínka_having ]
přejmenování ::= AS jméno

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.

Jména sloupců v odpovědi na dotaz závisejí na struktuře výrazů. Pokud výraz je tvořen jménem sloupce některé zobecněné tabulky, pak si jméno zachová, jinak je unikátní jméno přiděleno automaticky (např. Expr1 apod.). Vzniknou-li zachováním jmen sloupců duplikátní jména, mohou být automaticky odstraněna pomocí nastavení příznaku SQLOPT_DUPLIC_COLNAMES (256) ve funkci Set_sql_option. Také je možné jména sloupců určit již ve specifikaci - pomocí klauzule AS.

Výraz za SELECT může také být * - pak se v odpovědi objeví všechny sloupce všech zobecněných tabulek. Je-li výraz ve tvaru zobecněná tabulka.*, budou v odpovědi všechny sloupce zobecněné tabulky. Je-li použito klauzule SELECT *, nesmí již následovat další výrazy. Mají-li se do výběru sloupců zadaného pomocí SELECT * přidat i systémové sloupce (_w5_...) je rozlišeno pomocí příznaku SQLOPT_USE_SYS_COLS (8192) ve funkci Set_sql_option.

Výrazem může být jméno sloupce (nebo *), konstanta, podmíněný výraz CASE, standardní SQL funkce nebo funkce vytvořená pomocí DECLARE FUNCTION, agregační funkce, proměnná serveru, globální proměnná klienta, subdotaz vracející jeden řádek a jeden sloupec nebo výraz tvořený těmito subvýrazy.

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

Příklady:

SELECT Month(datum),SUM(Objednavky.objed)
FROM Firmy, Objednavky
WHERE Objednavky.firma=Firmy.firma
GROUP BY Month(datum)

Viz také:

Dotazy v SQL

Sbírka dotazů

Výrazy v SQL


Dotazový výraz v SQL

602SQL-Úplná dokumentace

Dotazový výraz (SQL)

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. Uvedení ALL výrazně zrychluje vyhodnocení dotazu.

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 602SQL.

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é:

Dotazy v SQL

Sbírka dotazů


Příkazy SQL

602SQL-Úplná dokumentace

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 USER

  • příkaz DROP USER

  • příkaz CREATE GROUP

  • příkaz DROP GROUP

  • 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

Řídicí příkazy:

Řídicí příkazy jsou popsány v samostatné kapitole - viz Ří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

Viz také:

Fulltextové nástroje ve 602SQL

Seznam subsekcí:

  • Příkaz CREATE SCHEMA
  • Příkaz DROP SCHEMA
  • Příkaz CREATE USER
  • Příkaz DROP USER
  • Příkaz CREATE GROUP
  • Příkaz DROP GROUP
  • Příkaz CREATE VIEW
  • Příkaz DROP VIEW
  • Příkaz GRANT
  • Příkaz REVOKE
  • Příkaz UPDATE
  • Příkaz INSERT
  • Příkaz DELETE
  • Příkaz SELECT INTO


Příkaz CREATE SCHEMA (SQL)

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í.

Viz

  • DROP SCHEMA


Příkaz DROP SCHEMA (SQL)

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.

Viz

  • CREATE SCHEMA


Příkaz CREATE USER

602SQL-Úplná dokumentace

Příkaz CREATE USER (SQL)

příkaz_CREATE_USER ::= CREATE USER jméno_uživatele [ PASSWORD ‘password‘ ]

Popis

Příkaz CREATE USER vytvoří na SQL serveru nového uživatele zadaného jména. Jméno může být dlouhé max. 31 znaků. Uživatel tohoto jména nesmí dosud existovat.

V příkazu může být uvedeno heslo tohoto uživatele ve formě řetězce znaků v apostrofech. Pokud heslo uvedeno není, pak uživatel bude mít prázdné heslo a při prvním přihlášení bude vyzván, aby si ho změnil.

Heslo lze uživateli zadat nebo změnit také pomocí funkce Set_password.

Příklad použití:

Vytvoření uživatele XUSER s heslem X, skupiny XGROUP a zařazení uživatele do skupiny

CREATE USER xuser;
CALL Set_password('xuser','x');

CREATE GROUP xgroup;
CALL Set_membership('xuser', CATEG_USER, 'xgroup', CATEG_GROUP, TRUE);

Viz

  • DROP USER
  • DROP GROUP
  • CREATE GROUP
  • Práva a subjekty práva v SQL


Příkaz DROP USER

602SQL-Úplná dokumentace

Příkaz DROP USER (SQL)

příkaz_DROP_USER ::= DROP USER jméno_uživatele

Popis

Příkaz DROP USER zruší uživatele zadaného jména.

Příklad použití:

Zrušení uživatele XUSER a skupiny XGROUP

DROP USER xuser;
DROP GROUP xgroup;

Viz

  • CREATE USER
  • DROP GROUP
  • CREATE GROUP
  • Práva a subjekty práva v SQL


Příkaz CREATE GROUP

602SQL-Úplná dokumentace

Příkaz CREATE GROUP (SQL)

příkaz_CREATE_GROUP ::= CREATE GROUP jméno_skupiny

Popis

Příkaz CREATE GROUP vytvoří na SQL serveru novou skupinu zadaného jména. Jméno může být dlouhé max. 31 znaků. Skupina tohoto jména nesmí dosud existovat.

Příklad použití:

Vytvoření uživatele XUSER s heslem X, skupiny XGROUP a zařazení uživatele do skupiny

CREATE USER xuser;
CALL Set_password('xuser','x');

CREATE GROUP xgroup;
CALL Set_membership('xuser', CATEG_USER, 'xgroup', CATEG_GROUP, TRUE);

Viz

  • CREATE USER
  • DROP USER
  • DROP GROUP
  • Práva a subjekty práva v SQL


Příkaz DROP GROUP

602SQL-Úplná dokumentace

Příkaz DROP GROUP (SQL)

příkaz_DROP_GROUP ::= DROP GROUP jméno_skupiny

Popis

Příkaz DROP GROUP zruší skupinu zadaného jména.

Příklad použití:

Zrušení uživatele XUSER a skupiny XGROUP

DROP USER xuser;
DROP GROUP xgroup;

Viz

  • CREATE USER
  • DROP USER
  • CREATE GROUP
  • Práva a subjekty práva v SQL


Příkaz CREATE VIEW (SQL)

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

Popis

Příkaz CREATE VIEW 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

Viz

  • DROP VIEW


Příkaz DROP VIEW (SQL)

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

Viz

  • CREATE VIEW


Příkaz GRANT (SQL)

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_subjektů [ WITH GRANT OPTION ] [ WHERE podmínka_where ]
výčet_práv ::= ALL [ PRIVILEGES ] | jednotlivé_právo {, jednotlivé_právo }…
jednotlivé_právo ::=  DELETE | INSERT | SELECT | UPDATE [( seznam_sloupců )] |  REFERENCES [( seznam_sloupců ) | GRANT ]
seznam_sloupců ::= sloupec { , sloupec }…
seznam_subjektů ::= PUBLIC | subjekt {, subjekt }…
subjekt ::= [ USER ] jméno_uživatele | [ GROUP ] jméno_role | ROLE [schéma . ] jméno_role

příkaz_GRANT_pro_rutiny ::= GRANT výčet_práv ON [ PROCEDURE | FUNCTION ] [schema.]jméno_rutiny TO seznam_subjektů [ WITH GRANT OPTION ]
výčet_práv ::= ALL [ PRIVILEGES ] | jednotlivé_právo {, jednotlivé_právo }…
jednotlivé_právo ::= EXECUTE | UPDATE

Popis

Příkaz GRANT nastaví pro uživatele, skupiny uživatelů a role určené v seznamu_subjektů práva k:

  • tabulce jméno_tabulky v aplikaci schema

  • vybraným záznamům tabulky jméno_tabulky

  • SQL rutině jméno_rutiny (proceduře či funkci)

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

Mají-li se nastavovat práva k jednotlivým záznamům (tzv. záznamová práva), musí se použít klauzule WHERE s omezující podmínkou na záznamy tabulky jméno_tabulky a současně tabulka musí mít tato práva povolena (při návrhu tabulky).

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.

  • GRANT - právo poskytnout svá práva dalším subjektům.

Pro záznamová práva není k dispozici právo INSERT.

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

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

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

V seznamu_subjektů určujete, koho (jakých subjektů práva) 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, skupinám nebo rolí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 u subjektu práva není uvedeno USER, GROUP ani ROLE, pak se jeho jméno hledá nejprve mezi uživateli, pak mezi skupinami.

Pokud subjekt 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 (totéž co GRANT ve výčtu_práv).

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, všechna práva k jednomu vybranému záznamu tabulky DocTab a právo spouštět proceduru ZmenaCeniku.

GRANT DELETE, UPDATE (Plat, Cislo)
ON Zamestan
TO Petr
GRANT ALL ON DocTab
TO USER Petr
WHERE id=25
GRANT EXECUTE
ON PROCEDURE ZmenaCeniku
TO Petr

Viz

  • REVOKE
  • Práva a subjekty práva v SQL
    Uživatelé a jejich správa


Příkaz REVOKE (SQL)

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_subjektů  [ WHERE podmínka_where ]
výčet_práv ::= ALL [ PRIVILEGES ] | jednotlivé_právo {, jednotlivé_právo }…
jednotlivé_právo ::=  DELETE | INSERT | SELECT | UPDATE [( seznam_sloupců )] |  REFERENCES [( seznam_sloupců ) | GRANT ]
seznam_sloupců ::= sloupec { , sloupec }…
seznam_subjektů ::= PUBLIC | subjekt {, subjekt }…
subjekt ::= [ USER ] jméno_uživatele | [ GROUP ] jméno_role | ROLE [schéma . ] jméno_role
příkaz_REVOKE_pro_rutiny ::= REVOKE [ GRANT OPTION FOR ] výčet_práv ON [ PROCEDURE | FUNCTION ] [schema.]jméno_rutiny FROM seznam_subjektů
výčet_práv ::= ALL [ PRIVILEGES ] | jednotlivé_právo {, jednotlivé_právo }…
jednotlivé_právo ::= EXECUTE | UPDATE

Popis

Příkaz REVOKE odebere pro uživatele, skupiny uživatelů nebo role určené v seznamu_subjektů práva k:

  • tabulce jméno_tabulky v aplikaci schema

  • vybraným záznamům tabulky jméno_tabulky

  • SQL rutině jméno_rutiny (proceduře či funkci)

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

Mají-li se odebrat práva k jednotlivým záznamům (tzv. záznamová práva), musí se použít klauzule WHERE s omezující podmínkou na záznamy tabulky jméno_tabulky a současně tabulka musí mít tato práva povolena (při návrhu tabulky).

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.

  • GRANT - právo poskytnout svá práva dalším subjektům.

Pro záznamová práva není k dispozici právo INSERT.

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

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

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

V seznamu_subjektů určujete, koho (jakých subjektů práva) 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, skupinám a rolím, které jsou uvedeny 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 u subjektu práva není uvedeno USER, GROUP ani ROLE, pak se jeho jméno hledá nejprve mezi uživateli, pak mezi skupinami.

Uvede-li se klauzule GRANT OPTION FOR, pak uživatelé a skupiny ztratí možnost svá práva poskytovat dalším uživatelům (totéž co GRANT ve výčtu_práv).

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
FROM PUBLIC

Viz

  • GRANT
  • Práva a subjekty práva v SQL
    Uživatelé a jejich správa


Příkaz UPDATE (SQL)

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.

Je-li tabulka prefixována jménem aplikace (na stejném serveru), tabulka se hledá v uvedené aplikaci (schématu).

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);

Viz

  • INSERT
  • DELETE


Příkaz INSERT (SQL)

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.

Je-li tabulka prefixována jménem aplikace (na stejném serveru), tabulka se hledá v uvedené aplikaci (schématu).

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

Záloha dat tabulky do jiné aplikace:

INSERT INTO Zaloha.Zamestnan
SELECT * FROM Zamestnan

Viz

  • DELETE
  • UPDATE


Příkaz DELETE (SQL)

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í.

Je-li tabulka prefixována jménem aplikace (na stejném serveru), tabulka se hledá v uvedené aplikaci (schématu).

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);

Viz

  • INSERT
  • UPDATE


Příkaz SELECT INTO (SQL)

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 (resp. :>).

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 objektů v SQL

Objekty, s nimiž pracuje jazyk SQL, lze rozdělit podle toho, kde a jak dlouho existují, do dvou skupin:

  • globální objekty, které tvoří databázové schéma a existují obvykle dlouhodobě;
  • lokální objekty, které jsou umístěny uvnitř některého bloku a existují pouze po dobu provádění tohoto bloku.

Globální objekty se dají vytvářet a rušit pomocí příkazů CREATE a DROP. Většinou vznikají při importu aplikace na SQL server. Jsou přístupné ze všech objektů ve schématu.

Lokální objekty se deklarují uvnitř bloku. Jakmile provádění příkazů SQL vstoupí do tohoto bloku, jsou lokální objekty automaticky vytvořeny a při opuštění bloku zaniknou. Nelze s nimi pracovat z jiného místa než z bloku, v němž jsou deklarovány.

Lokální i globální objekty jsou označeny jmény. Ve jménech se rozlišuje pouze prvních 31 znaků. Lokální objekty deklarované v různých blocích mohou mít stejná jména.

Některé kategorie objektů, například triggery nebo sekvence, mohou existovat pouze jako globální.

Lokální objekty

Jako lokální objekty lze deklarovat proměnné, rutiny, výjimky, handlery a kurzory.

Globální objekty

Při vývoji aplikace se tabulky, dotazy, procedury, triggery a sekvence vytvářejí buď provedením příslušného příkazu CREATE nebo pomocí interaktivních nástrojů ve vývojovém prostředí 602SQL. Každý objekt z těchto kategorií je samostatně vidět v seznam objektů na řídicím panelu.

Globální proměnné, výjimky a handlery se vytvářejí tak, že se jejich deklarace zapíše do speciálního objektu jménem Module_globals. Tento objekt je na řídicím panelu umístěn mezi procedurami.

Globální handlery nesmějí provádět příkazy manipulující s obsahem databáze. Mohou však volat procedury, které tuto práci provedou za ně.

Sdílení obsahu globálních proměnných

Pro každého klienta pracujícího s objekty ve schématu existuje zvláštní instance všech globálních proměnných tohoto schématu. Hodnoty globálních proměnných nastavené jedním klientem nejsou proto viditelné pro ostatní klienty.

Pokud klient provede SQL příkaz, který přiřadí některé globální proměnné hodnotu, pak tato hodnota zůstane v proměnné zachována až do přiřazení nové hodnoty stejným klientem. Volá-li tedy klient dvě procedury, pak druhá procedura vidí v globálních proměnných ty hodnoty, které v nich zanechala první procedura. Po odhlášení se klienta od serveru jeho instance globálních proměnných zanikne.

Pro předávání hodnot mezi klienty nebo pro persistentní uložení hodnot slouží databázové tabulky, nikoli proměnné.

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

Veškeré deklarace jsou implementovány dle úrovně SQL 3.

Seznam subsekcí:

  • Deklarace proměnných
  • Deklarace rutiny
  • Deklarace výjimky
  • Deklarace handleru
  • Deklarace kurzoru


Deklarace proměnných v SQL

602SQL-Úplná dokumentace

Deklarace proměnných (SQL)

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

602SQL-Úplná dokumentace

Deklarace rutiny (SQL)

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 602SQL ji však lze používat.


Deklarace výjimky v SQL

602SQL-Úplná dokumentace

Deklarace výjimky (SQL)

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 situaci popsanou uvedeným sqlstate. Stejný sqlstate se nesmí použít ve více výjimkách deklarovaných se stejným rozsahem platnosti.

Výjimky bez sqlstate jsou spouštěny explicitně příkazem SIGNAL. 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.


Deklarace handleru v SQL

602SQL-Úplná dokumentace

Deklarace handleru (SQL)

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 (v tomto složeném příkazu) 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 (nejprve v tomto složeném příkazu, poté ve vnějších složených příkazech). 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

602SQL-Úplná dokumentace

Deklarace kurzoru (SQL)

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 602SQL 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

602SQL-Úplná dokumentace

Řídicí příkazy (SQL)

Jazyk SQLve 602SQL 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 jazyce SQL 602SQL serveru lze použít následující řídicí příkazy:

složený příkaz | příkaz REPEAT
přiřazovací příkaz SET | příkaz LEAVE
příkaz RETURN | příkaz FOR
příkaz IF | příkaz CALL
příkaz CASE | příkaz SIGNAL
příkaz LOOP | příkaz RESIGNAL
příkaz WHILE |

Seznam subsekcí:

  • 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 - volání procedury
  • Příkaz SIGNAL
  • Příkaz RESIGNAL


Složený příkaz v SQL

602SQL-Úplná dokumentace

Složený příkaz (SQL)

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 chybě 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 602SQL je však přípustná.


Přiřazovací příkaz SET v SQL

602SQL-Úplná dokumentace

Přiřazovací příkaz SET (SQL)

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

602SQL-Úplná dokumentace

Příkaz RETURN (SQL)

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

602SQL-Úplná dokumentace

Příkaz IF (SQL)

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říklad2: Funkce, která zkontroluje platnost přihlášení do aplikace (z webu):

FUNCTION AUTH_GET_USERNAME(IN username CHAR(254),IN password CHAR(254)) RETURNS CHAR(35);
/*****************************************************/
// vrátí jméno uživatele (resp. jméno firmy) zadaného logjménem a heslem,
// pokud neexistuje, vrátí NULL
BEGIN
  DECLARE jmeno CHAR(35);
  DECLARE EXIT HANDLER FOR SQLSTATE "21000" BEGIN
    CALL Log_write("Exit handler v SQL funkci Auth_get_username - duplicita uživatelů podle jména a hesla");
    RETURN NULL;
  END;

  IF EXISTS(SELECT id FROM Obchodni_partneri
            WHERE intr_user=username AND intr_pswd=password )
  THEN
    SELECT nazev1 INTO jmeno FROM  Obchodni_partneri
    WHERE intr_user=username AND intr_pswd=password;
    RETURN jmeno;
  ELSE RETURN NULL;
  END IF;
END


Příkaz CASE v SQL

602SQL-Úplná dokumentace

Příkaz CASE (SQL)

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 chybě, pokračuje se dále v závislosti na dostupném handleru této chyby. 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 602SQL 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

602SQL-Úplná dokumentace

Příkaz LOOP (SQL)

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 chybě

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 tyto záznamy projít). K průchodu všemi záznamy kurzoru lze také použít příkaz FOR.

Příklad použití:

do tabulky vložit 10 záznamů a vzestupně je očíslovat (zápis v klientské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.

Příklad použití č. 2:

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

602SQL-Úplná dokumentace

Příkaz WHILE (SQL)

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 chybě.

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 v klientské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

602SQL-Úplná dokumentace

Příkaz REPEAT (SQL)

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 chybě.

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

PROCEDURE Rep ();
BEGIN
  DECLARE i INT DEFAULT 1;
  REPEAT
    INSERT INTO Tab3 (cislo) VALUES (i);
    SET i = i + 1;
  UNTIL  i > 10  END REPEAT;
END;


Příkaz LEAVE v SQL

602SQL-Úplná dokumentace

Příkaz LEAVE (SQL)

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říklad použití:

Je třeba projít záznamy kurzoru; pro firmy z Prahy nedělat nic (ukončit tento průchod cyklu), při výskytu hodnoty NULL ukončit cyklus. Důležité je umístění návěští - ukončí se ten příkaz, u něhož je volané návěští.

PROCEDURE `LEAVE_POKUS`();
BEGIN

  FOR_cyklus: FOR radek AS c INSENSITIVE CURSOR FOR
   SELECT * FROM Firmy
  DO
   tento_zaznam: BEGIN
    ...
    CALL Log_write("před "||radek.adresa);
    IF radek.adresa LIKE "Praha%" THEN LEAVE tento_zaznam; END IF;
    IF radek.adresa IS NULL THEN LEAVE FOR_cyklus; END IF;
    CALL Log_write("po "||radek.adresa);
    ...
  END;
  END FOR;

  CALL Log_write("...po FOR cyklu...");
END


Příkaz FOR v SQL

602SQL-Úplná dokumentace

Příkaz FOR (SQL)

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 chybě.

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 opačně 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). Kurzor v tomto případě nesmí být INSENSITIVE - pokud ano, změny se neuloží.

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

602SQL-Úplná dokumentace

Příkaz CALL - volání procedury (SQL)

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) nebo standardní deklarovanou v jazyce (např. SQL_execute, Log_write, Free_deleted, Set_sql_option).

Je možné volat i procedury uložené v jiné aplikaci - jméno procedury prefixujte jménem aplikace (v SQL terminologii 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. Jako DETACHED nelze spustit lokální nebo standardní procedury.

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 602SQL

  • 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 klientské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

602SQL-Úplná dokumentace

Příkaz SIGNAL (SQL)

příkaz_SIGNAL ::= SIGNAL identifikátor_výjimky;

Příkaz SIGNAL 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

602SQL-Úplná dokumentace

Příkaz RESIGNAL (SQL)

příkaz_RESIGNAL ::= RESIGNAL [ identifikátor_výjimky ];

Příkaz RESIGNAL 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

602SQL-Úplná dokumentace

Procedury a funkce uložené na serveru (SQL)

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í 602SQL 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í 602SQL začíná text editované rutiny slovem PROCEDURE nebo FUNCTION, slovo CREATE nebo ALTER se neuvádí.

Rozšíření jazyka SQL proti normě

  • Ve 602SQL 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

Seznam subsekcí:

  • Syntaxe rutiny
  • Vytvoření rutiny (CREATE PROCEDURE | FUNCTION)
  • Modifikování rutiny (ALTER PROCEDURE | FUNCTION)
  • Zrušení rutiny (DROP PROCEDURE | FUNCTION)
  • Volání externích rutin a předávání parametrů
  • Určení adresářů s DLL knihovnami pro SQL server


Syntaxe rutiny v SQL

602SQL-Úplná dokumentace

Syntaxe rutiny (SQL)

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 (resp. so na Linuxu). 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 (proměnná PATH). Pokud u jména knihovny chybí přípona, doplní se ve Windows .DLL a na Linuxu .so. Díky tomu je možné psát jeden kód pro obě prostředí - stejná externí funkce se najde v obou prostředích.

Pokud knihovna není nalezena nebo pokud v knihovně není nalezena funkce uvedeného jména, nastane chybový sqlstate 38001resp. W0224. Pokud není knihovna v adresáři, ze kterého je povoleno spouštět knihovny, nastane chyba W0223.

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 602SQL 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

Viz

  • CREATE PROCEDURE
  • CREATE FUNCTION
  • ALTER PROCEDURE
  • ALTER FUNCTION
  • DROP PROCEDURE
  • DROP FUNCTION


Vytvoření rutiny - CREATE PROCEDURE a CREATE FUNCTION v SQL

602SQL-Úplná dokumentace

Vytvoření rutiny - CREATE PROCEDURE a CREATE FUNCTION (SQL)

příkaz_CREATE_routine ::= CREATE popis_rutiny;

Příkaz vytváří novou rutinu uloženou na serveru podle definice popis rutiny. V databázi je rutina uložena bez úvodního slova CREATE.

Alternativně lze rutinu vytvořit pomocí řídicího panelu vývojového prostředí 602SQL.

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

CREATE PROCEDURE RecCount (IN cislo INT, OUT res INT);
BEGIN
  SELECT COUNT(*) INTO res
  FROM Tab2
  WHERE cisint = cislo;
END

Viz

  • ALTER PROCEDURE
  • ALTER FUNCTION
  • DROP PROCEDURE
  • DROP FUNCTION


Modifikování rutiny - ALTER PROCEDURE a ALTER FUNCTION v SQL

602SQL-Úplná dokumentace

Modifikování rutiny - ALTER PROCEDURE a ALTER FUNCTION (SQL)

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.

Alternativně lze rutinu modifikovat pomocí řídicího panelu vývojového prostředí 602SQL.

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).

Implementací definované vlastnosti SQL ve 602SQL

  • Příkaz ALTER PROCEDURE a ALTER FUNCTION nelze vložit do jiné procedury, je možné jej volat pouze samostatně.

Viz

  • CREATE PROCEDURE
  • CREATE FUNCTION
  • DROP PROCEDURE
  • DROP FUNCTION


Zrušení rutiny - DROP PROCEDURE a DROP FUNCTION v SQL

602SQL-Úplná dokumentace

Zrušení rutiny - DROP PROCEDURE a DROP FUNCTION (SQL)

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.

Alternativně lze rutinu zrušit pomocí řídicího panelu vývojového prostředí 602SQL.

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).

Viz

  • CREATE PROCEDURE
  • CREATE FUNCTION
  • ALTER PROCEDURE
  • ALTER FUNCTION


Volání externích rutin v SQL

602SQL-Úplná dokumentace

Volání externích rutin a předávání parametrů (SQL)

Rutiny uložené na serveru mohou volat procedury a funkce vytvořené v externím programovacím prostředí. Způsob deklarace těchto rutin je popsán v popisu procedury.

Příklad:

DECLARE FUNCTION TestFnc(INOUT cis CHAR(25)) RETURNS INT;
EXTERNAL NAME 'TestFnc@TestDLL';

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 (resp. so na Linuxu). Volání 16-bitových rutin nebo rutin s jinou volací konvencí není možné.

Při vytváření knihovny funkcí je nutno nastavit parametry překladače tak, aby, funkce používaly standardní stack frame. Parametry se jim nesmějí předávat v registrech. Zejména knihovny vytvářené v Delhpi občas dostávají parametry v registrech a pak je nelze volat ze SQL serveru.

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 jazyce C/C++ | typ v jazyce PASCAL | typ v popisu rutiny v SQL
int | Integer | IN INT
int * | VAR Integer | OUT INT
short | SmallInt | IN SMALLINT
short * | VAR SmallInt | OUT SMALLINT
double | Double | IN REAL
Double * | VAR Double | OUT REAL
char * | PChar | OUT CHAR(N)
char | Boolean | IN BIT(1)
char * | VAR Boolean | OUT BIT(1)
struct { char[N]; } | pole bajtů předávané hodnotou | IN BIT(N), N > 1
struct { char[N+1]; } | pole znaků předávané hodnotou | IN CHAR(N)
char * | PChar | OUT BIT(N) , N > 1
char * | PChar | INOUT CLOB

Pro mód INOUT platí stejná pravidla jako pro mód OUT.

S typem REAL lze zacházet stejně jako s DOUBLE PRECISION. S typy TIME, DATE a TIMESTAMP lze zacházet stejně jako s typem 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šit svoji velikost.

Pozor!

Nedodržení těchto konvencí (záměna IN a OUT/INOUT v deklaraci externí rutiny) může vést k přepsání paměti a pádu SQL serveru.


Určení adresářů pro umístění knihoven DLL volaných z SQL serveru

602SQL-Úplná dokumentace

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é ve sdílených knihovnách (DLL ve Windows či so v Linuxu). 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í 602SQL server tak, že povoluje volat pouze funkce z knihoven umístěných v adresáři, v němž je instalována 602SQL, a v dalších explicitně zadaných adresářích.

Nastavení adresářů s DLL/SO se provádí na Řídicí konzoli 602SQL na stránce Parametry / Identifikace a bezpečnost / Adresáře pro DLL/SO. Adresář, do nějž je instalována 602SQL, není třeba uvádět..

Jména adresářů jsou uložena ve vlastnostech serveru DIRn souvisle očíslovaných od 1. Tyto vlastnosti lze také editovat pomocí funkce Set_property_value.

Provozní správce databáze zodpovídá za to, takto zpřístupní pouze ty adresáře, v nichž nejsou nebezpečné knihovní funkce.


Triggery v SQL

602SQL-Úplná dokumentace

Triggery (SQL)

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ž změna 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);

  • 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 SQL), 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 602SQL.

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 přístupu k datům, může triggery vytvářet pouze uživatel obsazený do role Author v aplikaci, do níž trigger patří.

INSERT a UPDATE triggery se nespouštějí při importu dat do tabulky (ani při replikacích). 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

  • Spouštění UPDATE triggerů s uvedeným seznamem sloupců

  • Spouštění triggerů editací formuláře

  • Příkaz CREATE TRIGGER

  • Příkaz ALTER TRIGGER

  • Příkaz DROP TRIGGER

  • Efektivita triggerů

  • Ladění triggerů

Seznam subsekcí:

  • Popis triggeru
  • Spouštění UPDATE triggerů s uvedeným seznamem sloupců
  • Volání triggerů při ukládání změn ve formuláři
  • Příkaz CREATE TRIGGER
  • Příkaz ALTER TRIGGER
  • Příkaz DROP TRIGGER
  • Efektivita triggerů


Triggery - popis syntaxe (SQL)

602SQL-Úplná dokumentace

Syntaxe popisu triggeru (SQL)

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 [pravidlo] sloupec { , sloupec }… ] ]
reference ::= REFERENCING { OLD [ ROW ] [ AS ] stará_řádka | NEW [ ROW ] [ AS ] nová_řádka }…
granularita ::= FOR EACH { ROW | STATEMENT }
pravidlo ::= = | ANY

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 tuto množinu sloupců, není-li seznam sloupců uveden, trigger se spustí při změně v kterémkoliv sloupci. Viz Spouštění UPDATE triggerů s uvedeným seznamem sloupců.

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 602SQL 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

Viz

  • CREATE TRIGGER
  • ALTER TRIGGER
  • DROP TRIGGER


Spouštění UPDATE triggerů s uvedeným seznamem sloupců

Syntaxe UPDATE triggeru dovoluje uvést seznam sloupců, při jejichž změně se má trigger spustit. Příkaz UPDATE nebo API funkce Write_record_ex mohou modifikovat najednou celou množinu sloupců. Norma SQL není zcela jasná v tom, v jakém vztahu musí být seznam sloupců uvedených v definici triggeru a množina měněných sloupců, aby došlo ke spuštění triggeru.

Do verze 7 včetně 602SQL server spouštěl trigger tehdy, když byly obě skupiny sloupců stejné. Od verze 8.0 je je tato možnost nadále zachována, ale přibyla alternativní možnost spouštět trigger, když obě množiny mají neprázdný průnik, tedy když je příkazem změněn alespoň jeden ze sloupců, které jsou uvedeny v seznamu. Trigger se pak spustí i tehdy, pokud nejsou změněny všechny sloupce uvedené v seznamu nebo jsou změněny i jiné sloupce.

Pravidla pro spouštění triggeru lze zvolit dvojím způsobem:

  1. Pro konkrétní trigger uvedením znaku = nebo slova ANY za UPDATE OF. Znak = znamená, že se trigger spustí pouze při rovnosti množin sloupců. Slovo ANY znamená, že se trigger spustí při změně libovolného ze sloupců uvedených v seznamu.
  2. Pro všechny triggery, které nejsou označeny podle bodu 1, nastavením příznaku kompatibility SQLOPT_COL_LIST_EQUAL (32768) pomocí funkce Set_sql_option.


Volání triggerů při ukládání změn provedených ve formuláři

Mezi vlastnostmi formuláře je příznak, který předepisuje ukládání změn provedených ve formuláři buď po složkách nebo po záznamech. Je-li zvoleno ukládání po složkách, pak se změna kterékoli složky zaznamená bezprostředně po přechodu na jinou složku. Změna každé složky způsobí spuštění případných triggerů pro příslušný sloupec v tabulce.

Je-li zvoleno ukládání změn po záznamech, pak se změny zaznamenávají v jedné transakci až po opuštění záznamu, během jehož editace mohlo být změněno více složek. Způsob zaznamenání těchto změn se však liší mezi verzemi 7 a 8 602SQL. Proto některé aplikace, v nichž je volání triggerů jemně navázáno na změny složek ve formuláři, mohou vyžadovat při přechodu mezi těmito verzemi úpravu.

Záznam změn v záznamu před verzí 8.0

  • Pokud se ukládají hodnoty nového, dosud neexistujícího záznamu, pak se nejprve provedl příkaz INSERT INTO table DEFAULT VALUES.
  • Pak se pro každou změněnou složku provedl příkaz UPDATE.

V důsledku toho se při vkládání nového záznamu nejprve volaly INSERT triggery s implicitními hodnotami a pak UPDATE triggery jednotlivě po sloupcích odpovídajících změněným složkám.

Záznam změn v záznamu od verze 8.0

Počínaje verzí 8.0 je chování formuláře lépe napojeno na jazyk SQL. Záznam změn v záznamu vyvolá provedení pouze jednoho příkazu SQL, a to INSERT nebo UPDATE. V tomto příkazu jsou uvedeny sloupce odpovídající všech složkám změněným ve formuláři a jejich hodnoty.

Uložení změn vyvolá proto pouze jedno spuštění triggerů, a to buď INSERT nebo UPDATE. Množina změněných sloupců, která může ovlivnit výběr UPDATE triggerů, odpovídá všem složkám změněných ve formuláři. Pokud nevíte předem, které sloupce budou ve formuláři editovány, použijte v popisu UPDATE trigeru klauzuli UPDATE OF ANY - podrobnosti zde.


Příkaz CREATE TRIGGER

602SQL-Úplná dokumentace

Příkaz CREATE TRIGGER (SQL)

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í 602SQL.

Viz

  • ALTER TRIGGER
  • DROP TRIGGER


Příkaz ALTER TRIGGER (SQL)

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í 602SQL.

Viz

  • CREATE TRIGGER
  • DROP TRIGGER


Příkaz DROP TRIGGER

602SQL-Úplná dokumentace

Příkaz DROP TRIGGER (SQL)

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í 602SQL.

Viz

  • CREATE TRIGGER
  • ALTER TRIGGER


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 je objektem sloužícím ke generování posloupnosti celočíselných hodnot (v rozsahu 64 bitů), 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í 602SQL 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ě 602SQL 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 lze pomocí SQL příkazu ALTER SEQUENCE. Z řídicího panelu vývojového prostředí lze sekvenci resetovat (nastavit na nově zadané hodnoty včetně počáteční hodnoty).

Z prostředí klientské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í 602SQL 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 602SQL byly sekvence implementovány v podobě (téměř) shodné s Oracle 8 s rozšířeným ALTER SEQUENCE.

Seznam subsekcí:

  • Popis sekvence
  • Příkaz CREATE SEQUENCE
  • Příkaz ALTER SEQUENCE
  • Příkaz DROP SEQUENCE


Popis sekvence

602SQL-Úplná dokumentace

Popis sekvence (SQL)

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

Celé_číslo je číslo v rozsahu BIGINT (64 bitový integer - tj. cca +/-9223372036854775000).

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).

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í parametru 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ři exportu aplikace s daty se zachová současná hodnota sekvence, při exportu aplikace bez dat se sekvence vynuluje.

Příklad použití:

CREATE SEQUENCE SEQ10
START WITH 0
INCREMENT BY 10
NOMAXVALUE
NOMINVALUE
CACHE 2
NOCYCLE
ORDER

Viz

  • CREATE SEQUENCE
  • ALTER SEQUENCE
  • DROP SEQUENCE


Příkaz CREATE SEQUENCE

602SQL-Úplná dokumentace

Příkaz CREATE SEQUENCE (SQL)

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í 602SQL.

Viz

  • ALTER SEQUENCE
  • DROP SEQUENCE


Příkaz ALTER SEQUENCE

602SQL-Úplná dokumentace

Příkaz ALTER SEQUENCE (SQL)

příkaz_ALTER_SEQUENCE :== ALTER popis_sekvence

Příkaz ALTER SEQUENCE 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í 602SQL. Zde je možné také 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.

Příklad:

Při inicializaci změnit hodnotu sekvence na hodnotu o jedna větší než je dosavadní maximální.

  DECLARE maxid INT;
  SELECT MAX(id)+1 INTO maxid FROM Tab;

  CALL SQL_execute("ALTER SEQUENCE seqx START WITH "||Int2str(i));

Viz

  • CREATE SEQUENCE
  • DROP SEQUENCE


Příkaz DROP SEQUENCE

602SQL-Úplná dokumentace

Příkaz DROP SEQUENCE (SQL)

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í 602SQL.

Viz

  • CREATE SEQUENCE
  • ALTER SEQUENCE


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 ;

Seznam subsekcí:

  • Příkaz OPEN
  • Příkaz FETCH
  • Příkaz UPDATE CURRENT OF
  • Příkaz DELETE CURRENT OF
  • Příkaz CLOSE


Příkaz OPEN v SQL

602SQL-Úplná dokumentace

Příkaz OPEN (SQL)

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.

Viz

  • Kurzory v SQL


Příkaz FETCH v SQL

602SQL-Úplná dokumentace

Příkaz FETCH (SQL)

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ů tohoto řádku 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).

Viz

  • Kurzory v SQL


Příkaz UPDATE CURRENT OF (SQL)

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 v příkazu FOR 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;

Viz

  • Kurzory v SQL


Příkaz DELETE CURRENT OF (SQL)

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 v příkazu FOR 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ří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;

Viz

  • Kurzory v SQL


Příkaz CLOSE v SQL

602SQL-Úplná dokumentace

Příkaz CLOSE (SQL)

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.

Viz

  • Kurzory v SQL


Transakce a body návratu v SQL

602SQL-Úplná dokumentace

Transakce a body návratu (SQL)

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).

V závislosti na nastavení příznaků kompatibility funkcí Set_sql_option (volba SQLOPT_ERROR_STOPS_TRANS (2048)) může transakce automaticky skončit při výskytu první chyby.

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

Seznam subsekcí:

  • Izolace transakcí
  • Problémy při kombinaci explicitního zamykání záznamů a 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

602SQL-Úplná dokumentace

Izolace transakcí (SQL)

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 602SQL 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.

Viz

  • Transakce a body návratu


Problémy při kombinaci explicitního zamykání záznamů a izolace transakcí

Kombinování dvou odlišných mechanismů synchronizace požadavků různých klientů - explicitního zamykání a nastavení izolace transakcí - může vést k blokování klienta nebo k vrácení chyby.

Nechť jeden klient zamkne pro přepis záznam Z.

Druhý klient položí dotaz, při jehož zodpovídání je nutno testovat hodnoty ze záznamu Z.

Pokud druhý klient má nastavenou úroveň izolace transakcí SERIALIZABLE, pak je vytváření odpovědi na dotaz pozastaveno do doby, než první klient odemkne záznam Z nebo dokud nevyprší limit doby čekání na zámek. Požadavek na vytvoření dotazu pak skončí v druhém případě chybou.

Pokud dotaz má takovou strukturu, že dovoluje odložené vytváření, pak k chybě dojde až tehdy, když se testuje hodnota ze záznamu Z.

Proč první klient blokuje druhého klienta? První klient má díky zámku pro přepis vyhrazeno právo kdykoli změnit obsah záznamu Z. Druhý klient nastavením izolace Serializable žádá, aby server zaručil, že opakované položení stejného dotazu dá vždy stejnou odpověď. Jelikož se hodnoty záznamu Z používají při vyhodnocení dotazu, server toto zaručit nemůže. Proto nemůže povolit zodpovězení dotazu druhého klienta, dokud první klient vlastní zámek. Situace má za následek čekání nebo chybu, podle nastavených provozních parametrů.

Problém lze demonstrovat na tomto příkladu:

Máme tabulku STRATAB vytvořenou příkazem CREATE TABLE STRTAB (S CHAR(12)) - Tabulka má jeden sloupec S obsahující řetězec znaků, bez indexů. Tabulka nechť obsahuje alespoň jeden záznam.

Program Lock:
table strtab;
begin
  Write_lock_record(strtab, 0);
  Info_box('', 'Locked');
  Write_unlock_record(strtab, 0);
end.

Program Select:
var c:cursor;   cnt:trecnum;
begin
   Set_transaction_isolation_level(3);
   if Open_sql_cursor(c, 'select * from strtab where s<''zzzzz''')
     then Signalize
     else begin
       if Rec_cnt(c, cnt) then Signalize;
       Close_cursor(c);
     end
end.

První klient nejprve spustí program Lock a nechá jej čekat se zobrazeným Info_boxem. Pak druhý klient spustí program Select. Tento program se dostane do stavu čekání na zámek (stav 3 v přehledu klientů na serveru).

Pokud stiskem tlačítka OK v Info_boxu první klient pokračuje dál a odstraní zámek, pak druhý klient vzápětí dokončí vytváření kurzoru a také skončí bez chyby.

Pokud první klient neodstraní zámek v časovém limitu, pak druhý klient skončí s chybou "S objektem někdo pracuje".

K vzájemnému blokování klientů nedojde, pokud druhý klient bude používat úroveň izolace transakcí 1 (READ COMMITTED).


Příkaz START TRANSACTION v SQL

602SQL-Úplná dokumentace

Příkaz START TRANSACTION (SQL)

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 602SQL 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 602SQL navíc připouští, aby v příkazu START TRANSACTION nebyly uvedeny izolace ani druh transakce.


Příkaz COMMIT v SQL

602SQL-Úplná dokumentace

Příkaz COMMIT (SQL)

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

602SQL-Úplná dokumentace

Příkaz ROLLBACK (SQL)

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

602SQL-Úplná dokumentace

Příkaz SET TRANSACTION (SQL)

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

Příkaz SET TRANSACTION 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 602SQL 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 602SQL 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

602SQL-Úplná dokumentace

Příkaz SAVEPOINT (SQL)

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

602SQL-Úplná dokumentace

Příkaz RELEASE SAVEPOINT (SQL)

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.


Chyby, výjimky a jejich zpracování v SQL

Chybou nazýváme stav, kdy nelze normálním způsobem pokračovat v provádění operace. SQL server má pro každou chybu jistý implicitní způsob reakce. Ten se použije, pokud aplikace nepředepíše vlastní způsob ošetření chyby. Server může například předčasně ukončit operaci, odvolat rozpracovanou transakci, oznámit výskyt chyby klientovi.

Autor databázové aplikace může předepsat, co se má v případě výskytu chyby stát - popsat zpracování chyby pomocí handleru chyby. Handler může být buď lokální, a pak reaguje pouze na chyby, které nastanou v tom bloku, v němž je deklarován, nebo globální, a pak reaguje na všechny chyby ve schématu.

Kategorizace chyb a výjimek

Výjimečné situace lze rozdělit do tří druhů:

  1. Chyby na serveru.
  2. 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.
  3. Výjimky deklarované uživatelem v deklaraci CONDITION, označené identifikátorem a přiřazené určité chybě serveru. Tyto výjimky nastávají buď dostane-li se server při plnění příkazů klienta do příslušného chybového stavu, anebo při explicitním provedení příkazu SIGNAL. Spojují v sobě vlastnosti prvního a druhého typu.

Pomocí handleru lze ošetřovat některé chyby serveru (druh 1) a všechny uživatelem definované výjimky nespojené s chybou serveru (druh 2). Výjimky třetího druhu lze ošetřovat právě tehdy, lze-li ošetřovat chybu, se kterou jsou spojeny.

Označování chyb

Norma SQL označuje chyby pomocí řetězců pěti alfanumerických znaků, kterým říká SQLSTATE. SQLSTATE se uvádí v deklaraci handleru chyby a může se také uvést v deklaraci výjimky.

602SQL server interně označuje chyby celými kladnými čísly. Pro ty chyby serveru, kterým norma nepřidělila konkrétní SQLSTATE, se používá SQLSTATE skládající se z písmene W a čtyřmístného čísla chyby. Například chybě s číslem 152 odpovídá sqlstate "W0152". To umožňuje definovat handlery i pro chyby specifické pro 602SQL.

Ošetřování výjimek a chyb handlerem

Nastane-li chyba či výjimka, systém pro ní hledá handler. Handler je ve své deklaraci přiřazen buď určitým chybám resp. výjimkám anebo celé třídě chyb. Při hledání handleru se postupuje od místa, v němž k chybě či 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á chybu či výjimku zpracovávanou tímto handlerem k vnějšímu ošetření.

Seznam subsekcí:

  • Přehled chyb podle možností zpracování
  • Chyby a transakce
  • Diagnostické nástroje


Přehled chyb podle možností zpracování

V níže uvedených tabulkách jsou chyby rozděleny podle toho, jak na ně server reaguje a zda je lze ošetřovat handlerem.

Řada chyb způsobuje rollback transakce. Pokud chyba vyvolávající rollback nastala uvnitř atomického bloku, pak se rollback vztahuje pouze na tento blok, stav databáze se tedy vrátí do stavu před vstupem do bloku.

Kategorie "completion condition"

Do této kategorie patří varování a informace o zvláštních situacích. Nevyžadují reakci a pokud nejsou nijak ošetřeny, nemají žádný vliv na provádění operací, nikdy nezpůsobují rollback. Klient se o jejich výskytu může dozvědět, pokud volá funkci Sz_warning.

Kategorie "NOT FOUND"

Do této kategorie patří pouze jediná chyba, která signalizuje vyčerpání záznamů při procházení kurzoru. Tato chyba se zpravidla ošetřuje handlerem. Je-li ošetřena (viz příklad), pak transakce není odvolána a klient se o chybě nedozví. Není-li ošetřena handlerem, pak způsobí rollback transakce.

Identifikátor pro API | číslo | SQLSTATE | Popis
NOT_FOUND_02000 | 139 | 02000 | Příkaz FETCH přesunul pozici v kurzoru na neexistující záznam

Kategorie "no rollback exception condition"

Chyby v této kategorii signalizují, že určitá operace nemohla být povedena a že klient nedostane ze serveru normální odpověď. Tyto chyby nezpůsobují rollback transakce. Nedají se ošetřovat handlerem.

Identifikátor pro API | číslo | Popis
OUT_OF_TABLE | 131 | číslo záznamu zadané ve funkci pro čtení nebo zápis je mimo rozsah záznamů v tabulce nebo kurzoru
INTERNAL_SIGNAL | 184 | interní signál serveru pro klienta
NOTHING_TO_REPL | 229 | replikace neproběhla protože není co replikovat - oznámení protější straně, proč nedošlo k replikaci

Kategorie "handlable exception condition"

Do této kategorie patří chyby, po jejichž výskytu lze definovaným způsobem pokračovat v provádění operací. Dají se ošetřovat handlerem a jsou-li ošetřeny, pak se neprovede rollback, dosud provedené změny zůstanou v platnosti a z pohledu klienta k chybě nedošlo. Nejsou-li ošetřeny, způsobují rollback.

Identifikátor pro API | číslo | SQLSTATE | Popis
THREAD_START_ERROR | 132 | W0132 | systém nespustil DETACHED rutinu
OBJECT_DOES_NOT_EXIST | 137 | W0137 | SQL příkaz chce pracovat s objektem, který neexistuje
CANNOT_CONVERT_DATA | 141 | W0141 | Konverzi dat ve FETCH INTO nelze provést
SQ_INVALID_CURSOR_STATE | 196 | 24000 | neplatný stav kurzoru
SQ_SAVEPOINT_INVAL_SPEC | 197 | 3B001 | neplatné označení savepointu
SQ_TRANS_STATE_ACTIVE | 199 | 25001 | transakce je již zahájena
SQ_INVAL_TRANS_TERM | 200 | 2D000 | nedovolené ukončení transakce v atomickém příkazu
SQ_TRANS_STATE_RDONLY | 201 | 25006 | tato transakce nesmí modifikovat data
SQ_NUM_VAL_OUT_OF_RANGE | 202 | 22003 | číselná hodnota mimo povolený rozsah
SQ_INV_CHAR_VAL_FOR_CAST | 203 | 22018 | nepřípustný znak znemožňuje konverzi typu
SQ_STRING_DATA_RIGHT_TRU | 204 | 22001 | řetězec znaků je příliš dlouhý, seříznut zprava
SQ_DIVISION_BY_ZERO | 205 | 22012 | dělení nulou v SQL příkazu
SQ_CARDINALITY_VIOLATION | 206 | 21000 | odpověď obsahuje jiný počet záznamů než jeden
SQ_INVALID_ESCAPE_CHAR | 207 | 22019 | chyba v určení znaku ESCAPE
SQ_CASE_NOT_FOUND_STMT | 208 | 20000 | SQL příkaz CASE neobsahuje vhodnou větev
SQ_RESIGNAL_HND_NOT_ACT | 210 | OK000 | příkaz RESIGNAL použit mimo ošetření výjimky
SQ_EXT_ROUT_NOT_AVAIL | 211 | 38001 | externí rutina nebyla nalezena v zadané knihovně (DLL nebo so)
SQ_NO_RETURN_IN_FNC | 212 | 2F001 | v SQL funkci nebyl proveden příkaz RETURN
SQ_INVALID_CURSOR_NAME | 217 | 34000 | kurzor tohoto jména neexistuje
LIBRARY_ACCESS_DISABLED | 223 | W0223 | volána externí funkce z nepovoleného adresáře (povoluje se zápisem do registru)
LIBRARY_NOT_FOUND | 224 | W0224 | externí knihovna DLL nebo so nebyla nalezena
CONVERSION_NOT_SUPPORTED | 226 | W0226 | fulltextový engine neumí zkonvertovat zadaný text
WONT_RUN_AS_ROOT | 228 | W0228 | externí funkci nelze volat, pokud server běží jako root

Do této kategorie patří také všechny uživatelem definované výjimky, pokud nejsou sdruženy se sqlstate patřícím do jiné kategorie. Výjimky se aktivují příkazem SIGNAL nebo RESIGNAL a další postup je stejný jako při výskytu chyby.

Kategorie "rollback exception condition"

Do této kategorie patří chyby, po jejichž výskytu nelze pokračovat v provádění operací a je nezbytné provést rollback. Je-li k dispozici handler, může provést dodatečné akce, ale nemůže zabránit rollbacku (handler se vykoná až po rollbacku). Zprávu o této chybě vždy dostane klient.

Identifikátor pro API | číslo | SQLSTATE | Popis
NOT_LOCKED | 136 | W0136 | nelze zamknout záznam, protože s nim pracuje jiný klient
MUST_NOT_BE_NULL | 160 | 40002 | pokus o zapsání hodnoty NONE (NULL) do slupce, který to nemá povoleno
DEADLOCK | 171 | W0171 | deadlock, vzájemné zablokování klientů
KEY_DUPLICITY | 172 | 40002 | duplicita klíčů v unikátním indexu
CHECK_CONSTRAIN | 174 | 40002 | porušeno integritní omezení v tabulce
REFERENTIAL_CONSTRAIN | 175 | 40002 | porušena referenční integrita mezi tabulkami
TOO_COMPLEX_TRANS | 183 | W0183 | příliš složitá transakce
ASSERTION_FAILED | 195 | W0195 | interní chyba
SQ_SAVEPOINT_TOO_MANY | 198 | 3B002 | překročen limit na počet savepointů nebo otevřených atomických bloků
SEQUENCE_EXHAUSTED | 219 | W0219 | sekvence dosáhla maximální hodnoty a není zapnuto cyklování
NO_CURRENT_VAL | 220 | W0220 | CURVAL bylo provedeno před NEXTVAL, není k dispozici
OBJECT_VERSION_NOT_AVAILABLE | 230 | W0230 | Požadovaná verze objektu již neexistuje

Kategorie "critical exception condition"

Do této kategorie patří zejména chyby, po jejichž výskytu server nemůže pokračovat v operaci a nelze očekávat, že by handler mohl tuto situaci vyřešit. Nelze pro ně definovat handler. Provede se rollback transakce a klientovi se vrátí zpráva o chybě. Do této kategorie patří také signály o neošetřených výjimkách.

Identifikátor pro API | číslo | Popis
OUT_OF_KERNEL_MEMORY | 145 | vyčerpána operační paměť na serveru
UNREADABLE_BLOCK | 152 | nečitelný diskový blok - interní chyba
OUT_OF_BLOCKS | 154 | vyčerpáno místo na disku, vážná chyba, která může poškodit databázový soubor.
 | 163-167 | interní chyby, obvykle poškození databázového souboru
TABLE_DAMAGED | 168 | databázová tabulka je vážně poškozená
INDEX_DAMAGED | 191 | index je poškozen
SQ_UNHANDLED_USER_EXCEPT | 209 | uživatelem definovaná výjimka není ošetřena
SQ_TRIGGERED_ACTION | 214 | chyba v akci spuštěné triggerem
FRAMES_EXHAUSTED | 232 | interní chyba, vyčerpány rámy pro diskové bloky

Kategorie "chyby v komunikaci klienta se serverem" způsobující rollback

Příčina a řešení těchto chyb leží mimo SQL. Většinou jde o nepovolené nebo nesprávně formulované požadavky klienta na server. Vznikají například během ladění aplikace využívající programové rozhraní serveru (API) v důsledku předání špatných parametrů do funkcí serveru. Každá taková chyba vyvolá rollback transakce, ukončení operace a vrácení informace o chybě klientovi. Na straně serveru je nelze ošetřovat žádným handlerem, klient může obsahovat jejich vhodné ošetření.
Identifikátor pro API | číslo | Popis
BAD_MODIF | 128 | program se pokouší pracovat s multiatributy nebo se sloupci proměnné velikosti jako s normálními sloupci nebo naopak.
NO_RIGHT | 129 | uživatel nemá dostatek práv na přístup k datům
BAD_ELEM_NUM | 130 | neplatné číslo sloupce v tabulce nebo kurzoru
CURSOR_MISUSE | 133 | neplatné číslo kurzoru (např. pokus o použití dosud neotevřeného, již zavřeného nebo cizího kurzoru)
BAD_OPCODE | 134 | nedefinovaný požadavek klienta na server
CANNOT_APPEND | 135 | kurzor neumožňuje tuto operaci (např. INSERT do JOINu)
INDEX_OUT_OF_RANGE | 138 | index hodnoty multiatributu nebo počet hodnot je mimo rozsah daný definicí tabulky
EMPTY | 140 | pokud o obnovení uvolněného záznamu nebo o zápis do něj (chyba v čísle záznamu)
BAD_PASSWORD | 142 | chybné heslo při přihlašování uživatele
PTR_TO_DELETED | 143 | databázový ukazatel ukazuje na zrušený záznam
NIL_PTR | 144 | databázový ukazatel nikam neukazuje
RECORD_DOES_NOT_EXIST | 146 | pokus pracovat s neexistujícícm záznamem
IS_DELETED | 147 | práce se zrušeným záznamem v kurzoru nebo s již neexistující tabulkou
INDEX_NOT_FOUND | 148 | index nenalezen
OBJECT_NOT_FOUND | 149 | objekt v aplikaci nenalezen
BAD_DATA_SIZE | 151 | klient předal serveru data nesprávné délky
NOT_LOGGED_IN | 153 | klient se dosud úspěšně nepřihlásil na server
REQUEST_BREAKED | 155 | operace byla během provádění zrušena klientem
OS_FILE_ERROR | 157 | chyba při práci se souborem (může nastat u klienta nebo na serveru)
INCOMPATIBLE_VERSION | 158 | nekompatibilita verzí souboru s daty (TDT)
OPERATION_DISABLED | 161 | klient je přihlášen bez licence s omezenými možnostmi a snaží se provést nepovolenou operaci
CANNOT_LOCK_KERNEL | 169 | nelze uzamknout server pro provedení operace, na server jsou připojení uživatelé
UNPROPER_TYPE | 176 | typ sloupce není vhodný pro požadovanou funkci
ERROR_IN_FUNCTION_ARG | 180 | chyba v hodnotě argumentu API funkce
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
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íč
COLUMN_NOT_EDITABLE | 213 | pokoušíte se přepsat sloupec dotazu, který je tvořen výrazem a není tedy editovatelný
REPLICATION_NOT_RUNNING | 215 | replikace není zapnuta
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)
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
LANG_SUPP_NOT_AVAIL | 225 | pro fulltext není instalována podpora pro zvolený jazyk
NO_FULLTEXT_LICENCE | 227 | SQL server nemá licenci pro fulltextový systém
NO_REPL_UNIKEY | 231 | tabulka neobsahuje replikační klíč
NO_CONF_RIGHT | 233 | uživatel nemá práva provozního správce a nemůže provést operaci
NO_SECUR_RIGHT | 234 | uživatel nemá práva bezpečnostního správce a nemůže provést operaci
ACCOUNT_DISABLED | 235 | uživatelský účet je zablokován správcem

Kategorie "chyby v komunikaci klienta se serverem" nezpůsobující rollback

Další skupina chyb stojí mimo transakční systém a neovlivňuje případné rozpracované transakce. Vznikají na straně klienta nebo na hranici mezi klientem a serverem. V ostatních směrech o nich platí totéž, co o předchozí kategorii chyb.
Identifikátor pro API | číslo | Popis
NOT_ANSWERED | 255 | operace dosud není dokončena (při asynchronní komunikaci)
OUT_OF_APPL_MEMORY | 150 | vyčerpání paměti na straně klienta
CONNECTION_LOST | 156 | klient nemá spojení na server, buď server skončil nebo se rozpadlo síťové spojení
REJECTED_BY_KERNEL | 159 | požadavek klienta nebude zpracován - zvláštní stav serveru
BAD_VERSION | 173 | nesouhlasí číslo verze klienta a serveru
REQUEST_NESTING | 178 | vnoření požadavku klienta na server - nový požadavek zaslán před dokončením předchozího
CANNOT_FOR_ODBC | 179 | operace není proveditelná pro ODBC kurzor
ODBC_CURSOR_NOT_OPEN | 181 | zadaný ODBC kurzor není otevřen
DRIVER_NOT_CAPABLE | 182 | ODBC driver není schopen požadované operace
BAD_TOKEN_STATE | 189 | pešek je v nepřípustném stavu
BAD_TABLE_PROPERTIES | 190 | tabulka nemá potřebné vlastnosti


Chyby a transakce

Transakce spojují provádění operací s databází do atomických celků. Výskyt většiny chyb zasahuje do transakcí, může například předčasně ukončit transakci nebo způsobit odvolání transakce (rollback).

Dojde-li na SQL serveru k chybě nebo výjimce vyvolávající rollback transakce, pak další činnost může jít některou z těchto cest:

  1. pokud chyba či výjimka patří do kategorie "NOT FOUND" nebo "handlable exception condition" a je zpracována handlerem, pak transakce nejsou nijak ovlivněny (typ handleru ovšem určuje, zda některé příkazy nebudou přeskočeny nebo nebude odvolán atomický blok);
  2. pokud chyba je typu "rollback exception condition" a je zpracována handlerem, pak transakce je odvolána ještě před spuštěním handleru; po provedení handleru se pokračuje v místě určeném typem handleru;
  3. pokud chyba či výjimka nepatří do kategorie zpracovatelné handlerem nebo není pro ní handler nalezen, pak se provádění SQL příkazů ukončí a probíhající transakce bude odvolána. Ukončení transakce závisí na způsobu práce klienta:
    • Pokud klient nepoužil explicitní zahájení transakce a tudiž každý jeho požadavek se provádí jako samostatná transakce, pak tato jedna transakce je odvolána.
    • Pokud klient explicitně zahájil transakci a v jejím rámci posílá na server více požadavků, pak další pokračování závisí na nastavení příznaku kompatibility SQLOPT_ERROR_STOPS_TRANS:
      • Pokud je nastaven příznak SQLOPT_ERROR_STOPS_TRANS, pak po chybě transakce skončí nejpozději v okamžiku, kdy server vrátí klientovi zprávu o neúspěšném provedení jeho požadavku. Změny v databázi, které jsou obsaženy ve stejném požadavku klienta, již nebudou provedeny, protože budou odvolány v rámci rollbacku transakce. Další požadavky klienta již patří do jiné transakce a jsou prováděny bez ohledu na chybu.
      • Pokud není nastaven příznak SQLOPT_ERROR_STOPS_TRANS, pak transakce po chybě pokračuje a patří do ní i další požadavky klienta až do explicitního požadavku na COMMIT nebo ROLLBACK, při němž nastane Rollback transakce. Jelikož požadavky zaslané po výskytu chyby patří do stejné transakce, budou odvolány a nebudou mít žádný vliv na databázi.


Diagnostické nástroje

Diagnostické nástroje v SQL dovolují získávat podrobné informace o chybových stavech. Slouží dvěma účelům:

  • během ladění aplikace usnadňují nalezení a odstranění příčin chyb;
  • v hotové aplikace umožňují správně reagovat na výjimečné stavy.

Prvním krokem při reakci na chybu je její zachycení handlerem. Uvnitř handleru lze použít:
  • Systémovou proměnnou SQLCODE - obsahuje číslo chyby;
  • Systémovou proměnnou SQLSTATE - obsahuje sqlstate, pětiznakový kód chyby;
  • Systémovou proměnnou @@LAST_EXCEPTION - obsahuje jméno výjimky nebo sqlstate;
  • Systémovou proměnnou @@ROLLED_BACK - má hodnotu TRUE tehdy, když zpracovávaná chyba patří do kategorie "rollback exception condition" a před spuštěním handleru byl proveden rollback transakce;
  • Funkci Active_routine_name - poskytuje informace o rozpracovaných rutinách;


Systémové objekty

Systémové neboli "předdefinované" objekty jsou objekty, které jsou v jazyce SQL globálně k dispozici. Patří mezi ně konstanty, proměnné, dotazy, procedury a funkce. Mimo to existuje systémové schéma _systex pro objekty doplňující fungování serveru.

Seznam subsekcí:

  • Systémové proměnné
  • Systémové dotazy
  • Schéma _sysext


Systémové proměnné

Systémové proměnné jsou v SQL trvale dostupné. Některé z nich však mají definovanou hodnotu pouze v určitých situacích, například po provedení určité akce nebo v handleru chyby. V jazyce SQL lze použít hodnotu kterékoli systémové proměnné, ale explicitně přiřadit novou hodnotu lze pouze některým z těchto proměnných.

Každý klient má vlastní hodnoty systémových proměnných.

Jméno | Typ | Lze změnit? | Popis
@@PLATFORM | INT | Ne | Číslo platformy serveru
@@ROWCOUNT | INT | Ne | Počet záznamů vložených/změněných/zrušených posledním příkazem INSERT/UPDATE/DELETE
@@SQLOPTIONS | INT | Ano | Nastavení příznaků kompatibility SQL
@@WAITING | INT | Ano | Limit čekání na uvolnění zdrojů, v desetinách sekundy
@@LAST_EXCEPTION | CHAR(31) | Ne | Jméno poslední výjimky nebo sqlstate - podrobnosti
SQLCODE | INT | Ne | Číslo právě zpracovávané chyby
SQLSTATE | CHAR(5) | Ne | Platný sqlstate - kód chybového stavu
@@ROLLED_BACK | BOOLEAN | Ne | Příznak, že transakce byla v důsledku chyby odvolána - podrobnosti
@@FULLTEXT_POSITION | INT | Ne | Místo výskytu hledaného slova nebo fráze v dokumentu
@@FULLTEXT_WEIGHT | INT | Ne | Váha výskytu hledaného slova nebo fráze v dokumentu


Systémové informační dotazy

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šechny 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;
  • _IV_TABLE_COLUMNS - přehled sloupců tabulek v aplikacích databáze;
  • _IV_MAIL_PROFS - přehled poštovních profilů serveru;
  • _IV_RECENT_LOG - zápisy logu;
  • _IV_PENDING_LOG_REQS - platné nastavení logování;
  • _IV_PROCEDURE_PARAMETERS - seznam parametrů procedur;
  • _IV_LOCKS - seznam zámků;
  • _IV_SUBJECT_MEMBERSHIP - seznam vztahů mezi subjekty práv (náležení do skupin apod.);
  • _IV_INDICIES - seznam indexů na tabulkách;
  • _IV_CHECK_CONSTRAINS - seznam vnitřních integritních omezení v tabulkách;
  • _IV_FOREIGN_KEYS - seznam vztahů referenční integrity mezi tabulkami;
  • _IV_IP_ADDRESSES - seznam IP adres SQL serveru.

V příštích verzích serveru se i v existujících dotazech mohou objevit nové sloupce.

Seznam subsekcí:

  • _IV_LOGGED_USERS
  • _IV_TABLE_COLUMNS
  • _IV_MAIL_PROFS
  • _IV_RECENT_LOG
  • _IV_PENDING_LOG_REGS
  • _IV_PROCEDURE_PARAMETERS
  • _IV_LOCKS
  • _IV_SUBJECT_MEMBERSHIP
  • _IV_INDICIES
  • _IV_CHECK_CONSTRAINS
  • _IV_FOREIGN_KEYS
  • _IV_IP_ADDRESSES


Systémový dotaz _IV_LOGGED_USERS

Odpověď na systémový dotaz _IV_LOGGED_USERS obsahuje jeden řádek pro každé klientské vlákno na serveru. Jedno vlákno existuje pro každého připojeného uživatele, dále existují vlákna systémová (např. replikační) a samostatná vlákna spuštěná příkazem CALL DETACHED.

Při zobrazení vláken v okně Řídicí konzole (jako Klienti a vlákna) se barvou odlišují "normální" klienti (černá barva) od systémových vláken (modrá barva) a samostatně spuštěných SQL procedur (červená barva), názvy sloupců jsou přeloženy (názvy v závorkách), mohou být v jiném než zde uvedeném pořadí a číselné hodnoty mohou být nahrazeny slovním vyjádřením.

V odpovědi na dotaz jsou po řadě tyto sloupce:

Jméno sloupce | Typ | Obsah
Login_name (Jméno) | CHAR(31) | jméno, pod nimž je uživatel přihlášen, u systémových vláken může být např. DB_ADMIN či ANONYMOUS
Client_number (Číslo) | INT | interní číslo klienta, stejné jako vrací funkce Client_number
Sel_schema_name (Schéma) | CHAR(31) | jméno otevřené aplikace (schématu)
State (Stav) | INT | stav provádění požadavku klienta - viz níže
Connection (Spojení) | INT | způsob připojení klienta na server (0 přímo, 1 TCP/IP, 2 IPX/SPC, 3 NetBEUI)
Net_address (Síťová adresa) | CHAR(30) | síťová adresa klienta (prázdná pro klienty s přímým přístupem)
Detached(Samostatné) | BOOLEAN | příznak, že jde o samostatné vlákno (spuštěné příkazem CALL DETACHED)
Worker_thread (Pracovní) | BOOLEAN | příznak, že jde o pracovní vlákno, které neobsluhuje klientský požadavek; např. replikační vlákna
Own_connection (Já) | BOOLEAN | příznak, že jde o vlákno klienta kladoucího tento informační dotaz
Transaction_open (Transakce) | 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(Čekání) | INT | délka čekání na zámky blokované jinými klienty, v desetinách sekundy, nebo -1, pokud se čeká neomezeně dlouho
Comm_encryption (Komunikace) | INT | je větší než nula pokud vlákno patří klientovi, jehož komunikace se serverem je šifrovaná

Hodnoty ve sloupci State (Stav) mají tento význam:

0 (>100) | vlákno se provádí; v některých situacích se místo 0 vypisují hodnoty >100 signalizující interní vnitřní stavy, tyto hodnoty se nedají jednoduše interpretovat a slouží výhradně při případném zjišťování problémů ve spolupráci s Hotline (nejedná se o chybové stavy);
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, normální klidový stav
5 | vlákno 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

Vlákno uživatele, který tento dotaz položil má hodnotu sloupce State rovnou 0 (stav > 100 není chybou).

Příklad:

Vypsat uživatele (ne pracovní vlákna), kteří jsou přihlášeni do aplikace Majetek:

SELECT Login_name
FROM  _iv_logged_users
WHERE sel_schema_name = "Majetek" AND NOT detached AND NOT worker_thread


Systémový 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:

Jméno slopupce | Typ | Obsah
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
10 | Binary
11 | Date
12 | Time
13 | Timestamp
14 | Pointer
15 | Bipointer
16 | sledovací atribut: Autorizace
17 | sledovací atribut: Datumovka
18 | sledovací atribut: Historie
19 | Raster
20 | Text
21 | Nospec (OLE)
22 | Signature
45 | Tinyint
46 | Bigint

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"


Systémový 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štěn server (bez ohledu na operační systém). Poštovní profily vytvořené u klienta (a využívané z klientského programovacího jazyka) takto zjistit nelze.

Popis sloupců:

Jméno sloupce | Typ | Obsah
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 pro 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é: * Poštovní profily ve 602SQL


Systémový dotaz _iv_recent_log

602SQL-Úplná dokumentace

Systémový informační dotaz _IV_RECENT_LOG

Systémový dotaz _iv_recent_log vrací záznamy, které byly v poslední době zapsány do logů definovaných na SQL serveru. Jeden záznam v odpovědi odpovídá jednomu zápisu v logu.

Popis sloupců

Log_name | CHAR | jméno logu, z něhož pochází tento zápis (prázdné pro základní log)
Seq_num | INT | pořadové číslo zápisu v rámci logu
Log_message | CLOB | text zápisu

Uživatel, který není Provozním správcem databáze (- viz Administrování SQL serveru), smí klást dotaz pouze na zápisy ze základního logu:

SELECT * FROM _iv_recent_log WHERE Log_name=''

Dotaz na jiné zápisy skončí chybou.

Rozsah zápisů (velikost cache v bytech), které dotaz maximálně vrátí, je určen vlastností serveru TraceLogCacheSize. Implicitní hodnota je 4000 bajtů, jinou hodnotu lze nastavit na Řídicí konzoli serveru nebo pomocí API funkce.


Systémový dotaz _iv_pending_log_reqs

602SQL-Úplná dokumentace

Systémový informační dotaz _IV_PENDING_LOG_REQS

Systémový dotaz _iv_pending_log_reqs vrací platné požadavky na logování činnosti serveru. Přidávat a rušit tuto požadavky lze pomocí funkce _sqp_trace.

Popis sloupců

Log_name | CHAR | jméno logu, do něhož se zapisuje
Situation | INT | situace, v niž se má vytvořit zápis, význam hodnot naleznete zde
Usernum | INT | číslo uživatele, jeho akce se logují, nebo -1
Tabnum | INT | číslo tabulky, která se sleduje, nebo -1
Context | INT | rozsah zapisovaného kontextu (1, 2 nebo 3)


Systémový dotaz _IV_PROCEDURE_PARAMETERS

Systémový dotaz _iv_procedure_parameters vrací seznam parametrů procedur uložených na serveru. Dovoluje zjistit jména, typy a způsoby předávání parametrů.

Pro každý parametr je v odpovědi na dotaz jeden záznam. Pro funkce je v odpovědi navíc záznam odpovídající návratové hodnotě.

Popis sloupců

Jméno sloupce | Typ | Obsah
Schema_name | CHAR(31) | Jméno schématu (aplikace), do něhož procedura patří
Procedure_name | CHAR(31) | Jméno procedury
Parameter_name | CHAR(31) | Jméno parametru (prázdné pro návratovou hodnotu funkce)
Ordinal_position | INT | Pořadové číslo parametru od 1, 0 pro návratovou hodnotu
Data_type | INT | Typ parametru nebo návratové hodnoty
Length | INT | Délka (pouze pro typy s údajem o délce)
Precision | INT | Počet desetinných míst (pouze pro přesné číselné typy)
Direction | INT | Způsob předávání parametru: 1 = IN, 2 = OUT, 3 = INOUT, 0 = návratová hodnota
Specif | INT | Specifický parametr typu (např. způsob třídění řetězce)

Příklad

SELECT * FROM _iv_procedure_parameters
WHERE schema_name=’APL1’ AND procedure_name=’PROC’

Dotaz vrátí popis parametrů procedury PROC ze schématu APL1.


Systémový dotaz _IV_LOCKS

Systémový dotaz _IV_LOCKS vrací seznam zámků, které jsou v době vytváření dotazu umístěny na záznamech tabulek či na definicích objektů (záznamy systémových tabulek). Pro každý zámek je v odpovědi na dotaz jeden záznam.

V odpovědi jsou tyto sloupce (při zobrazení v okně Řídicí konzole jako Zámky jsou názvy přeloženy):

Jméno sloupce | Typ | Obsah
Schema_name | CHAR(31) | Jméno schématu (aplikace), do níž patří tabulka se zámkem; prázdný řetězec pro systémové tabulky OBJTAB a TABTAB
Table_name | CHAR(31) | Jméno tabulky, na jejíž záznam (záznamy) je zámek umístěn
Record_number | INT | Číslo záznamu (absolutní), na němž je zámek umístěn. Jsou-li zamčeny všechny záznamy, je zde hodnotu -1
Lock_type | INT | Typ zámku: zámek pro čtení = 128, zámek pro přepis = 64, dočasný zámek do skončení transakce=32
Owner_usernum | INT | Číslo uživatele (absolutní číslo v tabulce USERTAB), který zámek umístil
Owner_name | CHAR(31) | Jméno uživatele
Object_name | CHAR(31) | Jméno objektu: v případě uzamčení definice objektu zámkem na záznam systémové tabulky TABTAB či OBJTAB je zde uvedeno jméno zamčeného (tj. editovaného) objektu aplikace

Příklad

SELECT table_name, record_number, owner_name
FROM _iv_locks
WHERE table_name NOT IN ("tabtab", "objtab")

Dotaz vrátí zámky s výjimkou zámků na systémových tabulkách


Systémový informační dotaz _iv_subject_membership

Systémový informační dotaz _iv_subject_membership vrací informaci o náležení uživatelů do skupin a o obsazení uživatelů a skupin do rolí.

Uživatelé, skupiny a role jsou subjekty práv a jejich vzájemné náležení a obsazení ovlivňuje efektivní práva uživatelů.

Každý záznam v odpovědi na tento dotaz popisuje jeden vztah náležení nebo obsazení mezi dvojicí subjektů. Oba subjekty jsou charakterizovány redundantně.

Popis sloupců

Jméno sloupce | Typ | Obsah
subject_name | CHAR(31) | jméno náležejícího subjektu
subject_categ | SMALLINT | kategorie náležejícího subjektu
subject_uuid | BINARY(12) | UUID náležejícího subjektu
subject_objnum | INT | číslo objektu náležejícího subjektu
container_name | CHAR(31) | jméno obsahujícího subjektu
container_categ | SMALLINT | kategorie obsahujícího subjektu
container_uuid | BINARY(12) | UUID obsahujícího subjektu
container_objnum | INT | číslo objektu obsahujícího subjektu
container_schema | CHAR(31) | jméno schématu obsahujícího subjektu (role)

Příklady

Dotaz na seznam skupin, do nichž patří uživatel David:

SELECT container_name FROM _iv_subject_membership WHERE subject_name='DAVID' AND
subject_categ=CATEG_USER AND container_categ=CATEG_GROUP

Podmínka, že uživatel David patří do skupiny Účetní:

EXISTS(SELECT * FROM _iv_subject_membership WHERE subject_name='DAVID' AND
subject_categ=CATEG_USER AND container_categ=CATEG_GROUP AND container_name='ÚČETNÍ')

Viz

  • Funkce Set_membership


Systémový informační dotaz _iv_indicies

Systémový informační dotaz _iv_indicies vrací seznam indexů k databázovým tabulkám.

Odpověď na tento dotaz může být značně rozsáhlá. Proto doporučujeme jej používat pouze uvnitř jiného dotazu, který stanoví vhodné omezující podmínky na hodnoty ve sloupcích.

Popis sloupců

Jméno sloupce | Typ | Obsah
Schema_name | CHAR(31) | Jméno schématu, do něhož tabulka patří
Table_name | CHAR(31) | Jméno tabulky
Constrain_name | CHAR(31) | Jméno indexu
Index_type | SMALLINT | Typ indexu (1=primární klíč, 2=unikátní, 3=neunikátní)
Definition | CLOB | Definice indexu (sloupec, seznam sloupců nebo výrazů)

Příklady

Dotaz na indexy k tabulce Pokusna:

select * from _iv_indicies where table_name="pokusna"


Systémový informační dotaz _iv_check_constrains

Systémový informační dotaz _iv_check_constrains vrací seznam vnitřních integritních omezení definovaných v databázových tabulkách.

Odpověď na tento dotaz může být značně rozsáhlá. Proto doporučujeme jej používat pouze uvnitř jiného dotazu, který stanoví vhodné omezující podmínky na hodnoty ve sloupcích.

Popis sloupců

Jméno sloupce | Typ | Obsah
Schema_name | CHAR(31) | Jméno schématu, do něhož tabulka patří
Table_name | CHAR(31) | Jméno tabulky
Constrain_name | CHAR(31) | Jméno integritního omezení
Definition | CLOB | Podmínka (logický výraz)
Deferred | SMALLINT | Odložené provedení na konec transakce (0=není odloženo, 1=je odloženo, NULL=nespecifikováno)


Systémový informační dotaz _iv_foreign_keys

Systémový informační dotaz _iv_foreign_keys vrací seznam vztahů referenční integrity mezi tabulkami.

Odpověď na tento dotaz může být značně rozsáhlá. Proto doporučujeme jej používat pouze uvnitř jiného dotazu, který stanoví vhodné omezující podmínky na hodnoty ve sloupcích.

Popis sloupců

Jméno sloupce | Typ | Obsah
Schema_name | CHAR(31) | Jméno schématu, do něhož patří podřízená tabulka
Table_name | CHAR(31) | Jméno podřízené tabulky
Constrain_name | CHAR(31) | Jméno integritního omezení
Definition | CLOB | Vektor hodnot v podřízené tabulce
For_schema_name | CHAR(31) | Jméno schématu, do něhož patří nadřazená tabulka
For_table_name | CHAR(31) | Jméno nadřazené tabulky
For_definition | CLOB | Klíč v nadřazené tabulce (je-li prázdné, jde o primární klíč)
Deferred | SMALLINT | Odložené provedení kontroly na konec transakce (0=není odloženo, 1=je odloženo, NULL=nespecifikováno)


Systémový informační dotaz _iv_IP_addresses

Systémový informační dotaz _iv_IP_addresses vrací seznam IP adres SQL serveru.

Každá IP adresa je vrácena v binární podobě a také jako čitelný řetězec znaků v tečkové notaci.

Popis sloupců

Jméno sloupce | Typ | Obsah
IP_string | CHAR(17) | Čitelný zápis IP adresy
IP_bin | BINARY(6) | IP adresa doplněna nulami zprava


Schéma _sysext

Na SQL serveru existuje předdefinované schéma _sysext určené pro objekty, které:

  • nejsou součástí žádné konkrétní aplikace, ale vztahují se k práci SQL serveru jako celku,
  • nejsou používány SQL serverem ve specifických situacích;
  • jsou definovány a udržovány provozními správci serveru.

Typickým příkladem komponent schématu _sysext jsou systémové triggery.

Do rolí Author a Administrator v aplikaci _sysext je obsazena skupina provozních správců.

Jména objektů v této aplikaci pevně určují jejich funkci. Například je-li v ní procedura _on_server_start, pak se spouští při každém startu serveru.


Vývoj databázových aplikací

Databázovou aplikaci v 602SQL lze rozdělit na:

  • back-end objekty, tvořící datový základ aplikace, tedy databázové tabulky, triggery, dotazy (VIEWs), procedury v jazyce SQL uložené na serveru, sekvence, replikační vztahy, relace mezi tabulkami, role;
  • uživatelské rozhraní, tvořené buď front-end objekty jako formuláře, sestavy, menu, obrázky, WWW objekty a programy v klientském programovacím jazyce uloženými v databázi anebo vytvořené zcela mimo databázi například pomocí programovacích jazyků a nástrojů pro rychlý vývoj aplikací.

Objekty tvořící databázovou aplikaci a uložené v databázi jsou součástí některého databázového schématu. Mohou odkazovat na sebe navzájem a také na objekty z jiných schémat.

Hotová aplikace je z vývojového prostředí exportována a pak se importuje na ten SQL server, na němž bude provozována.

Interaktivní návrháře

Pro pohodlný návrh tabulek, dotazů, formulářů, sestav, menu, WWW objektů, relací nebo replikačních vztahů 602SQL obsahuje interaktivní návrháře. Pro psaní programů v klientském programovacím jazyce, procedur uložených na serveru a triggerů je k dispozici textový editor integrovaný s ostatními prvky vývojového prostředí.

Tyto nástroje jsou sdruženy do vývojového prostředí 602SQL na platformě Windows.

Vývojové a ladící nástroje

Programy v klientském programovacím jazyce, procedury uložené na serveru a triggery lze na platformě Windows ladit pomocí debuggeru.

Pro spouštění SQL příkazů zadaných ad-hoc je v menu Nástroje k dispozici SQL konzole. Pro testovací spouštění procedur uložených na serveru z řídicího panelu slouží nástroj, dovolující zadat vstupní parametry a po provedení zobrazit výstupní parametry.

Pro ladění slouží také logy, které si vývojář může definovat podle potřeby a trasovat v nich specifické situace nebo operace s vybranými objekty. Logy a jejich obsah se definují na řídicí konzoli.

Chyby, které se týkají činnosti klienta, se zaznamenávají v monitoru klienta. Otevírá se příkazem Monitor klienta z menu Nástroje.

Sledování činnosti serveru umožňuje řídicí konzole. Dá se otevřít jako samostatný program a na platformě Windows také z vývojového prostředí (příkaz Řídicí konzole serveru z menu Nástroje) nebo z okna serveru (tlačítkem Řídicí konzole).

Konzistence návrhu

Během vývoje databázové aplikace dochází v její komponentách k mnoha změnám a dočasně vznikají nekonzistence. Pokud je například v návrhu tabulky odstraněn sloupec a přidán jiný sloupec, pak s touto tabulkou nejsou konzistentní dotazy, které s odstraněným sloupcem pracovaly, do té doby, než je jejich návrh opraven.

Striktní dodržování norem SQL by vyžadovalo zrušení všech objektů, v nichž vznikne nekonzistence. 602SQL dovoluje, aby v průběhu vývoje nekonzistence dočasně existovaly. Obsahuje nástroje, které nekonzistence odhalují a upozorňují na ně.

Z vývojového prostředí lze příkazem Kontrola syntaxe z menu Nástroje spustit syntaktickou kontrolu všech objektů ve schématu. Do protokolu se zapíšou všechny objekty, v nichž je odhalena chyba.

Databázové tabulky lze během vývoje používat i tehdy, když se vyskytuje chyba v implicitní hodnotě některého sloupce, v některém vnitřním integritním omezení nebo v některém triggeru. O této kategorii chyb hovoříme jako o chybách v objektech na pozadí. Vývojář může zapnout záznam těchto chyb do logu a tak se dozvědět, že v aplikaci jsou stále nekonzistence.

Verze objektů

602SQL nebrání tomu, aby databázové objekty byly současně používány a modifikovány. Ve většině situací jakmile je některý objekt změněn začne se používat jeho nová verze.

Existují situace, kdy může dojít k nesouladu verzí objektů. Předpokládejme, že procedura A volá proceduru B. Nechť se pro jednoho klienta právě provádí na serveru procedura A. Jiný klient v té době změní proceduru B, například přidá do její hlavičky další parametr. Jakmile procedura A dospěje do místa, kde volá proceduru B, zjistí, že tuto akci nemůže provést, protože nesouhlasí počet parametrů. Nastane chyba OBJECT_VERSION_NOT_AVAILABLE neboli "Objekt byl změněn".

Kdyby procedura A byla zavolána až po změně v B, pak by chyba byla odhalena již během překladu A a vůbec by nedošlo k jejímu spuštění. Chyba OBJECT_VERSION_NOT_AVAILABLE nastane tehdy, když je používán objekt odkazující na měněný objekt. Jiným příkladem situace vedoucí k této chybě je změna ve funkci F provedená v době, kdy se pracuje s tabulkou, která volá F uvnitř svého integritního omezení.

Pokud by tato chyba přetrvávala, pak vždy pomůže zastavit a znovu spustit server.

Seznam subsekcí:

  • Přehled klientů 602SQL
  • Řídicí panel
  • Jména objektů ve 602SQL
  • Aplikace
  • Tabulky
  • Formuláře, sestavy a grafy (pohledy)
  • Menu
  • Návrh posloupností akcí
  • Dotazy
  • Obrázky
  • Nákresy
  • Relace
  • Programy a programování
  • Přenosy dat
  • Programování uživatelského rozhraní
  • Debugger
  • Editor textů ve 602SQL


Klienti 602SQL

Klientem je program, který chce pracovat s obsahem databáze, a proto se přihlásí k SQL serveru 602SQL. Mezi klienty patří tyto programy:

Vývojové a provozní prostředí 602SQL

Tento klient plní dvě funkce: dovoluje vývojářům vytvářet databázové aplikace a zároveň dovoluje uživatelům tyto aplikace provozovat. To, zda jsou k dispozici vývojové nástroje nebo pouze provozní prostředí, závisí na způsobu instalace. Na příkazové řádce klienta lze určit, na který server se klient má připojit a kterou aplikaci má otevřít nebo spustit. Pokud tyto údaje nejsou uvedeny, uživatel si vybere server a aplikaci ze seznamů.

Standardizované drivery pro přístup na server

ODBC driver umožňuje přístup do databáze přes univerzální rozhraní ODBC. Díky němu se do databáze snadno dostanou například textové procesory, tabulkové kalkulátory, generátory sestav a aplikační programy, které si svá data ukládají v databázi. ODBC driver je k dispozici pro platformy Windows i LINUX.

dbExpress driver poskytuje standardní rozhraní pro přístup do databáze z aplikací vyvinutých v Deplhi nebo Kylixu. Je k dispozici pro platformy Windows a LINUX.

ODMA driver umožňuje, že databáze může fungovat jako sklad dokumentů pro různé aplikace. Například textové procesory mohou ukládat dokumenty do tohoto skladu a pak vyhledávat dokumenty na základě výskytu slov nebo frází. ODMA driver pracuje pod Windows.

Internetoví klienti

Internetoví klienti (WBIK) vytvářejí spojení mezí Web serverem a SQL serverem a umožňují snadný přístup do databáze z webového prohlížeče, například přes formuláře nebo dynamicky generované HTML stránky. Speciálním případem internetového klienta je PHP modul.

Aplikace vyvinuté v programovacích jazycích

Aplikační programy napsané například v jazyce C/C++ nebo v Delphi se mohou přímo připojit na databázi jako klienti. Mohou však také využít standardních rozhraní.

Viz také informace o rozhraních pro přístup klientů na server.


Řídicí panel (základní stránka)

602SQL-Úplná dokumentace

Řídicí panel

Řídicí panel je základní ovládací prvek 602SQL klienta. Je to okno, které se automaticky otevírá po spuštění vývojového prostředí 602SQL. K řídicímu panelu patří ovládací lišta s tlačítky a menu s příkazy.

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í příkazu menu Zobrazit / Seznam serverů a aplikací nebo odpovídajícího tlačítka na liště můžete levé okno zavírat a ušetřit tím trochu místa na obrazovce.

  • střední okno ukazuje v seznamu po přihlášení k SQL 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 či příkazem menu Zobrazit / O úroveň výš nebo odpovídajícím tlačítkem na liště. 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.

  • 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í příkazu menu Zobrazit / Všechna ovládací tlačítka nebo odpovídajícího tlačítka na liště 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, jejichž význam či aktivita se liší podle typu vybraného objektu. Pro běžné objekty aplikace je to 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ě. Pro vybraného uživatele zde může Provozní správce SQL serveru dočasně zakázat jeho účet. Pro vybraný replikační server lze dočasně zvolit odesílání paketů na alternativní adresu.

Seznam subsekcí:

  • Uživatelské složky
  • Složka Systém
  • Servery na řídicím panelu
  • Komponenty aplikace
  • Popis hlavního menu


Složky (foldery) na řídicím panelu

602SQL-Úplná dokumentace

Uživatelské složky (foldery) na řídicím panelu

- označení složky na panelu

Objekty v rámci jedné aplikace lze rozdělit do několika složek (folderů). 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), ří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ě či příkazem menu Zobrazit / Složky nad kategoriemi) - složky jsou zobrazeny vždy pod každou kategorií:

nebo jsou zobrazeny nejdřív 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:

Při větší složitosti stromové struktury složek (v zobrazení Složky nad kategoriemi) je možné libovolnou složku označit jako kořen celého zobrazeného stromu v levé části řídicího panelu - použijte příkaz Nastavit jako kořen z popup menu na složce. Zpět k vyšším složkám a objektům se dostanete pomocí akce O úroveň výš (tlačítko, příkaz menu).

Zařazení objektu do složky

Objekt defaultně vzniká v kořenu kategorie. Při importu se zařadí do té složky, ve které byl při exportu (složky se importují dříve než ostatní objekty). Je-li třeba vytvořit nový objekt přímo v konkrétní složce, použijte příkaz Vytvořit z popup menu na složce a vyberte kategorii objektu.

Zrušení složky

Zrušit složku s celým jejím obsahem je jednoduché - použijte příkaz Zrušit. Složka i všechny podsložky a všechny objekty v nich budou z aplikace smazány.

Kopie složky

Celá kompletní složka se všemi podsložkami a všemi objekty v nich lze zkopírovat do clipboardu a vlepit na jiné místo téže nebo jiné aplikace. Použijte příkazy popup menu Zkopírovat objekt a Vlepit objekt.

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.


Složka System na řídicím panelu

602SQL-Úplná dokumentace

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 název.

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 602SQL, kde jsou uloženy informace o tabulkách v databázi, o dalších objektech, uživatelích, replikacích apod.


Servery na řídicím panelu

V levé části řídicího panelu se může objevit pět druhů symbolů serverů. K serveru se připojíte i odpojíte poklepáním na jeho jméno nebo z menu Přihlášení příkazy Přihlásit se a Odhlásit se. Zaregistrované 602SQL servery mají tučné názvy, neregistrované běžící v lokální síti mají netučné názvy.

lokální server, který neběží, je však možné ho spustit současně s přihlášením.
lokální server, který běží; poklepáním se na něj přihlásíte
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 pod ní aplikace v databázi spravované tímto serverem.

Viz také: | * Seznam akcí řídicího panelu při vybraném serveru
 | * Seznam akcí řídicího panelu při vybrané aplikaci


Komponenty aplikace na řídicím panelu

Seznam všech typů komponent aplikace (objektů) 602SQL. Pro přehled akcí a operací s jednotlivými typy klikněte na jeho název.

tabulka - základní objekt obsahující ve sloupcích data; tabulka je členěna do záznamů
tabulka, která je určena pro replikaci (její obsah se bude replikovat)
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ů.
nákres čá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í 602SQL 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 602SQL 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 602SQL - 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, sekvence, replikační vztahy.

Viz také: | * Řídicí panel
 | * Složka Systém


Hlavní menu 602SQL

Většina základních akcí s komponentami databáze se provádí pomocí řídicího panelu, činnosti a operace, které se netýkají jednotlivých objektů se volají z menu (a z lišty a některé z nich i z řídicího panelu)

Položky hlavního menu umožňují následující akce:

Přihlášení
 | Přihlásit se | pokud není nikdo přihlášen, lze touto položkou vyvolat přihlašovací dialog
 | Odhlásit se | odhlásit se a odpojit se od SQL serveru;
 | Přihlásit se pod jiným jménem | otevře okno pro přihlášení uživatele, až do stisku Login je stále přihlášen původní uživatel;
 | Konec | ukončení práce s 602SQL.
Aplikace
 | Spustit aplikaci | spuštění otevřené aplikace (aplikačního programu nebo menu);
 | Vytvořit aplikaci | vytvoření nové prázdné aplikace,
 | Importovat aplikaci | otevře dialog pro výběr APL souboru, poté provede import aplikace;
 | Exportovat aplikaci | otevře exportní dialog a po výběry typu a způsobu provede export otevřené aplikace;
 | Zrušit aplikaci | otevřená aplikace bude po odsouhlasení zrušena bez možnosti odvolání této akce;
Zobrazit
 | Seznam serverů a aplikací | přepínač pro zobrazení levé části řídicího panelu
 | Složky nad kategoriemi | přepínač způsobu zobrazení složek aplikace
 | Všechna ovládací tlačítka | přepínač zobrazení počtu tlačítek pravé části řídicího panelu
 | O úroveň výš | posun ve stromové struktuře složek o jednu nahoru
 | Obnovit objekty | znovunačtení obsahu otevřené aplikace
Nástroje
 | Vyhledat | nalezne v otevřené aplikaci všechny objekty, které ve své textové definici obsahují zadaný řetězec - viz Hledání objektu.
 | Nastavení klienta | nastavení globálních parametrů klienta 602SQL - viz Parametry klienta 602SQL;
 | Přenosy dat | otevře návrhář přenosů dat - viz Návrhář přenosu dat
 | Jazyky | umožní pracovat s vícejazyčnými verzemi aplikací - viz Vícejazyčné verze
 | Č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ář.
 | Řídicí konzole serveru | otevře centrální ovládací a konfigurační konzoli serveru
 | Ladící režim | zapíná / vypíná ladící režim pro programy ve vnitřním jazyce - viz Debugger
 | Kontrola syntaxe | otevře okno, v němž je možné spustit kontrolu syntaxe všech objektů otevřené aplikace
 | Monitor klienta | otevře plovoucí okno, kam se vypisují informace o dění a o chybách v klientovi. Lze zde také nalézt, pod jakým jménem je uživatel přihlášen.
 | SQL konzole | otevře okno pro zadání textového SQL příkazu (Příkazová konzole)
 | 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;
 | Export všech uživatelů, skupin a klíčů | export obsahu systémových tabulek - podrobnosti viz Export a import uživatelů
 | Import všech uživatelů, skupin a klíčů | import obsahu systémových tabulek - podrobnosti viz Export a import uživatelů
Okna a Nápověda - standardní menu Windows aplikace


Jména objektů ve 602SQL

Objektem se v prostředí 602SQL rozumí tabulka, pohled, program, dotaz, obrázky, relace, a další včetně uživatelů a skupin- viz kategorie objektů. Každý objekt má své jméno, pomocí něhož se k němu přistupuje. Pro jména objektů platí tato pravidla:

  • jméno smí mít nejvýše 31 znak, nesmí obsahovat tečku ani obrácený apostrof;

  • 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.

Pokud jméno obsahuje nealfanumerický znak nebo pokud začíná číslicí, pak se uvádí uzavřené v obrácených apostrofech.

Jména objektů jsou jako nedílná součást definice objektů uložena v systémových tabulkách, TABTAB (tabulky), USERTAB (uživatelé a skupiny) a OBJTAB (ostatní objekty).


Startovní objekt

V aplikaci lze označit jeden objekt jako tzv. startovní objekt. Tento objekt bude automaticky použit, když aplikaci z řídicího panelu spustíte (příkazem menu nebo tlačítkem na liště nebo tlačítkem Spustit.).

Vhodnými parametry na příkazové řádce lze docílit také toho, aby se při spuštění 602SQL klienta aplikace pouze otevřela do řídicího panelu nebo aby se spustila s jiným objektem.

Jako startovní objekt lze označit buď program, menu nebo pohled (formulář). Nejprve jej musíte označit ve středním okně řídicího panelu a pak můžete zatrhnout čtverec Startovní objekt, v pravé dolní části řídicího panelu. Je-li na řídicím panelu označen objekt jiné kategorie, je tento čtverec neaktivní.

Startovní objekt je označen ve středním panelu řídicího panelu hvězdičkou.


Vícejazyčné aplikace

Součástí 602SQL 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 602SQL 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 / Jazyky a stiskněte tlačítko 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 a tlačítka Editovat texty 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

Příkazem Nástroje / Jazyk otevřete seznam dostupných jazyků. Vyberte jeden z nich a stiskněte tlačítko Vybrat označený. Od této chvíle se budou metařetězce překládat.

Poznámka: je-li potřeba kód klientského programu rozvětvit podle zvolené jazykové mutace, lze použít předdefinované makro _LANGUAGE_.


Sdílení datové základny nebo uživatelského rozhraní

602SQL-Úplná dokumentace

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).

602SQL 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 602SQL

Sdílení front-endu nebo back-endu mezi aplikacemi se realizuje ve 602SQL 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 602SQL ří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.


Databázové tabulky ve 602SQL

Data, která spravuje 602SQL server, 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. Ke každému sloupci si můžete uložit textovou poznámku (např. co sloupec znamená).

Sloupec ve 602SQL 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

Seznam subsekcí:

  • Vytváření nových tabulek
  • Typy sloupců
  • Vlastnosti sloupce
  • Indexy
  • Integritní omezení
  • Referenční integrita
  • Přenos hodnot


Navrhová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á ze dvou části: v horní části je formulář pro zápis jmen a typů sloupců (a implicitní hodnoty a typu indexu k tomuto sloupci), v dolní části se na několika záložkách nastavují upřesňující a rozšiřující informace buď k vybranému sloupci nebo k tabulce jako celku.

Stav – needitovatelné pole nabývá těchto hodnot (pouze při modifikování již existující tabulky):

Nový | stav po přidání nového sloupce do návrhu. Upozorňuje, že sloupec ještě není (až do uložení) součástí tabulky.
Změněný | uživatel provedl změnu v názvu nebo typu sloupce. Na záložce Přenos hodnot je vhodné zapsat, jakým způsobem se mají data z původního sloupce přenést do sloupce změněného; do volby Zapsat tuto hodnotu se dosadí implicitní konverze ze starého na nový typ.
Zrušený | uživatel tento sloupec zrušil. Řádek se sloupcem je šedý, neaktivní.

Jméno sloupce – do tohoto pole se zapisuje nanejvýš třicetiznakové jméno sloupce, jméno může obsahovat i diakritiku a mezery

Typ sloupce - zde se volí z nabídkového comba typ sloupce. 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í.

Implicitní hodnota – do tohoto pole 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. 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. Přehled speciálních implicitních hodnot naleznete u popisu SQL příkazu CREATE TABLE .

Index - ke každému sloupci můžete vytvořit index. Z nabídky si vyberte jeden z typů:

Primární klíč | speciální unikátní index, může být pouze jeden v tabulce; 602SQL sama ho explicitně nepotřebuje, některé externí klientské programy však bez něj nepracují správně
Unikátní | hodnoty v indexu se nesmí opakovat, SQL server nepovolí vložení duplicitní hodnoty; viz také hodnota NULL v indexech
Neunikátní | hodnoty se smějí libovolně opakovat
- Bez indexu - | k tomuto sloupci není index vytvořen

Další parametry se nastavují na jednotlivých záložkách v dolní části okna:

  • Záložka Vlastnosti sloupce

  • Záložka Indexy

  • Záložka Podmínky

  • Záložka Referenční integrita

  • Záložka Přenos hodnot

Další parametry specifické pro 602SQL se nastavují v okně Příznaky tabulky.

Návrhářem sestavený SQL příkaz CREATE TABLE nebo ALTER TABLE je možné si prohlédnout (ne editovat) v okně, které se otevře příkazem menu SQL příkaz/Ukázat. Příkaz ALTER TABLE je v návrháři vždy (bez ohledu na nastavení SQL serveru) v původní 602SQL syntaxi, poněkud odlišné od normy SQL - viz ALTER TABLE .


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 602SQL 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
Tinyint | Bajt se znaménkem | -127 až 127 | 1
Short | Malé celé číslo | -32767 až 32767 | 2
Integer | Velké celé číslo | -2147483647 až 2147483647 | 4
Bigint | 8-bajtové celé číslo | -2^63-1 až 2^63-1 (cca +/-9223372036854775000) | 8
Money | Peníze | přibliž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 4090); tyto řetězce se uspořádávají lexikograficky podle zvoleného jazyka. Nadefinovanou délku řetězce není možné překročit - označovací čtverec Překročení se týká počtu hodnot multiatributu, nikoliv délky řetězce! | 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; max. délka je 4090 | 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, TIF, 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
 | * Navrhování a změna tabulek ve vývojovém prostředí
 | * Datové typy SQL

Seznam subsekcí:

  • Multiatributy
  • Sledovací atributy


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.


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 602SQL, 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, 602SQL 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.


Vlastnosti sloupce

602SQL-Úplná dokumentace

Záložka Vlastnosti sloupce

Na této záložce v návrháři tabulek se nastavují doplňující parametry vybraného sloupce. Podle typu sloupce je zde různé editační prvky:

Délka - je-li sloupec typu Řetězec znaků nebo Řetězec bajtů pevné délky, zapisuje se sem maximální počet znaků, které se budou moci vložit do sloupce; v současné verzi je omezení délky řetězce 4090 znaků

Jazyk – je-li sloupec typu Text proměnné délky nebo Řetězec znaků pevné délky, lze pro něj nastavit jazyk, jehož pravidla třídění se uplatní při indexování, porovnávání apod. - viz Jazyk a třídění

Unicode – SQL server bude uložená data interpretovat jako dvoubajtové znaky kódování UNICODE.

Ignorovat velikost písmen – při třídění a porovnávání lze ignorovat nebo rozlišovat velikost písmen (znak z a znak Z se mohou brát jako tentýž znak nebo jako dva rozdílné znaky.

Tabulka - je-li sloupec typ ukazatel (POINTER či BIPTR), nabízí se zde tabulka, do níž ukazatel směřuje.

Podmínka – v tomto poli můžete určit rozmezí hodnot, které se smějí do sloupce vložit (tj. integritní omezení sloupce, v SQL je to klauzule CHECK).

Povolena prázdná hodnota (NULL) – pole se odznačí tehdy, chcete-li zakázat možnost vložit záznam, který by neměl v tomto sloupci nic zapsáno (v SQL klauzule NOT NULL). Je rozumné zkombinovat tuto vlastnost s implicitní hodnotou.

Má-li sloupec 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.

Poznámka - zde si můžete zapsat libovolnou textovou poznámku či komentář k vybranému sloupci.


Indexy

602SQL-Úplná dokumentace

Záložka Indexy

Skupina prvků této záložky v návrháři tabulek slouží k přehlednému zobrazení a editování již definovaných indexů pro jednotlivé sloupce nebo k vytváření indexů složitějších.

Jméno indexu – podle normy SQL by každý index měl mít své unikátní jméno, na nějž lze odkazovat – pokud jméno nezadáte zde, vytvoří se jméno defaultní `INDEXn`.

Druh indexu – Primární klíč, Unikátní, Neunikátní

Definice indexu – obecně výraz, definující index, většinou však jen jméno jednoho nebo více sloupců

Včetně NULL – má index obsahovat i hodnoty NULL? - problematika NULL v indexech viz hodnota NULL v indexech

Tlačítko Vložit nový řádek otevře okno se seznamem sloupců sloužící k jednoduššímu definování nového indexu. 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ů.

Tlačítko Zrušit vybraný řádek odstraní z návrhu tabulky vybraný index


Podmínky

602SQL-Úplná dokumentace

Záložka Podmínky

Skupina prvků této záložky v návrháři tabulek slouží k přehlednému zobrazení a editování již definovaných podmínek pro jednotlivé sloupce nebo k vytváření podmínek složitějších, týkajících se více sloupců tabulky.

Jméno omezení - podle normy SQL by každá podmínka měla mít své unikátní jméno, na nějž lze odkazovat – pokud jméno nezadáte zde, vytvoří se jméno defaultní `CHECKn`.

Podmínka - definice podmínky

Odložit - tímto nastavením lze stanovit, zda se má porušení podmínky projevit okamžitě (FALSE) nebo až při COMMITu (TRUE) - podrobnosti zde .

Tlačítko Vložit nový řádek vytvoří řádek pro definování nové podmínky (integritního omezení)

Tlačítko Zrušit vybraný řádek odstraní z návrhu tabulky vybranou podmínku.


Referenční integrita

602SQL-Úplná dokumentace

Záložka Referenční integrita

Skupina prvků této záložky v návrháři tabulek slouží k přehlednému zobrazení a editování již definovaných referenčních integrit nebo k vytváření referenčních integrit nových. Referenční integrita (RI) se definuje vždy v tabulce podřízené.

Jméno omezení - podle normy SQL by každá podmínka měla mít své unikátní jméno, na nějž lze odkazovat – pokud jméno nezadáte zde, vytvoří se jméno defaultní `FOREIGN_KEYn`

Místní sloupec(ce) - sloupec (jeden nebo více) z editované tabulky, který tvoří klíč RI

Do tabulky - nadřízená tabulka (číselník) RI

Vzdálený(é) sloupec(ce) - sloupec (jeden nebo více) z nadřízené tabulky, který tvoří cizí klíč RI

Akce při změně - pravidlo, co se má stát s hodnotou v podřízené tabulce při změně hodnoty cizího klíče v nadřízené tabulce

Akce při zrušení - pravidlo, co se má stát při smazání záznamu v nadřízené tabulce s odpovídajícími hodnotami v tabulce podřízené

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.

Odložit - tímto nastavením lze stanovit, zda se má porušení RI projevit okamžitě (FALSE) nebo až při COMMITu (TRUE) - podrobnosti zde .

Tlačítko Vložit nový řádek otevře dialogové okno, které umožní snáze definovat novou referenční integritu. 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.

Tlačítko Zrušit vybraný řádek odstraní z návrhu tabulky vybranou referenční integritu


Přenos hodnot

602SQL-Úplná dokumentace

Záložka Přenos hodnot

Tato záložka v návrháři tabulek popisuje pravidlo, jak se mají pro všechny záznamy přenést hodnoty ze sloupce, který byl změněn, do sloupce nového.

Zachovat původní hodnotu - přenese se původní obsah - lze jen v těch případech, kdy lze provést implicitní konverze (např. z SMALLINT na INT apod.)

Zapsat implicitní hodnotu - původní hodnota se neuplatní, sloupec bude mít hodnotu podle své nastavené Implicitní hodnoty

Zapsat tuto hodnotu - do editačního pole zapište 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.


Pohledy ve 602SQL (formuláře, sestavy, štítky, grafy)

Pohled je jedním ze základních pojmů 602SQL. 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 602SQL rozdělit do čtyř základních typů:

  • formuláře - , 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 - 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 - 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. 602SQL 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 - 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ů

Seznam subsekcí:

  • Ovládání formulářů
  • Zamykání formulářů
  • Aktualizace obsahu formulářů
  • Vytváření jednotlivých typů pohledů
  • Složky formuláře
  • Prostředí návrháře pohledů
  • Návrh funkčnosti formulářů
  • Objektové programování
  • Vlastnosti a metody formulářů
  • Vlastnosti a metody složek formulářů


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 602SQL 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;


Zamykání záznamů ve formuláři

602SQL-Úplná dokumentace

Zamykání záznamů z formuláře

Příkazem menu Formulář / Zamykání nebo stiskem ovládacího tlačítka 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. Zamykání záznamů pomocí tohoto dialogu slouží spíše k testovacím účelům - v praxi se pracuje s formuláři, u nichž je zamykání záznamů již nastaveno autorem aplikace.

Umístěné zámky může správce sledovat a případně násilně odstraňovat pomocí Řídicí konzole (stránka Monitor serveru / Zámky).


Aktualizace obsahu formuláře

Příkazem menu Formulář / Obnovování nebo klávesou F5 nebo stiskem ovládacího tlačítka ve formuláři otevřete dialogové okno umožňující synchronizovat obsah formuláře s aktuálním stavem, který je dán změnami, prováděnými ostatními uživateli.

Volbou Aktualizovat data načtete do všech záznamů ve formuláři aktuální hodnoty ale nezobrazí přidané či vymazané záznamy (odpovídá funkci Reset_view s parametrem RESET_CACHE+RESET_CONTROLS). Volbou Aktualizovat výběr záznamů navíc ověříte, zda některé záznamy nebyly zrušeny nebo zda mezi ně nebyly vloženy záznamy nové (odpovídá funkci Reset_view s parametrem RESET_CURSOR+RESET_DELETIONS+RESET_CONTROLS).

Aktualizaci je možné používat ve formulářích vedoucích do všech typů zdrojů dat (tabulky, dotazy pevné i proměnné)


Návrh pohledů - úvod

602SQL-Úplná dokumentace

Vytváření pohledů - úvod

Ve 602SQL 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.

Seznam subsekcí:

  • Vytváření formulářů
  • Vytváření sestav
  • Vytváření štítků
  • Vytváření grafů


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. Lze navrhnou také vlastní lištu s obrázky, která nahradí lištu standardní.

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.)


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

Viz také: * Vytváření pohledů


Návrh štítků

Zvláštní druh obecných sestav tvoří štítky. 602SQL 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 grafu

Zvláštní druh obecných formulářů tvoří grafy. Grafy pro 602SQL 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 602SQL. 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ářů


Složky pohledů (formulářů a sestav) - přehled

602SQL-Úplná dokumentace

Složky formulářů a sestav - přehled

Formulář nebo sestava se skládá ze složek různých druhů (editačních polí, nápisů apod.). Některé složky lze umístit jen do formuláře obecného (např. víceřádkové editační pole), některé i do formuláře standardního (např. jednořádkové editační pole).

Složky se vkládají a jejich statické vlastnosti definují při návrhu formulářů/sestav. S jednotlivými složkami lze omezeně manipulovat také pomocí jejich dynamických vlastností a metod (změnit barvu, hodnotu apod.).

Podrobnosti o jednotlivých typech složek (k čemu se používají, k čemu se nehodí, jaké vlastnosti a metody mají a také triky z praxe) získáte na následujících stránkách.

Seznam subsekcí:

  • Editační pole jednořádkové (Edit Box)
  • Překládané combo (Combo Box)
  • Editovatelné combo (Combo Box)
  • Označovací (zaškrtávací) čtverec (Check Box)
  • Přepínač (Radio Button)
  • Seznam (List Box)
  • Neformátovaný text
  • Formátovaný text (RTF control)
  • Víceřádkové editační pole (Edit Box)
  • Kalendář
  • Datum a čas (DTP)
  • Obrázek
  • Digitální podpis
  • Složka OLE
  • Hodnotová složka
  • Nápis
  • Tlačítko
  • Subformulář
  • Rám nebo čára
  • Posuvník
  • Krokovač
  • Indikátor postupu
  • Záložky
  • ActiveX
  • Čárový kód


Editační pole

602SQL-Úplná dokumentace

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 obecné i standardní

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 (vlastnost 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


Needitovatelné (překládané) combo

602SQL-Úplná dokumentace

Needitovatelné (překládané) combo (Combo Box)

Vlastnosti: Metody:

Využití pro datové typy: Short, Integer, Tinyint a Char

Oblast použití: formuláře a sestavy obecné i standardní

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;

- při tisku se netisknou grafická označení comba, tedy combo se tiskne jako hodnotová složka;

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);

- ve standardním formuláři lze volbou Podmínky aktivity = FALSE docílit toho, že se složka chová jako Překládaná hodnota, tj. hodnotová složka, která hodnotu např. z číselníku přeloží na její název. Tohoto nelze dosáhnout v obecném formuláři.

Viz také: | * Složky - přehled
 | * složka Editovatelné combo
 | * Dotaz v combu
 | * Proměnné jazyka v SQL dotazech


Editovatelné combo

602SQL-Úplná dokumentace

Editovatelné combo (Combo Box)

Vlastnosti: Metody:

Využití pro datové typy: řetězcové formáty, méně často datum, čas, Timestamp;

Oblast použití: formuláře obecné i standardní

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
 | * Dotaz v combu


Označovací (zaškrtávací) čtverec

602SQL-Úplná dokumentace

Označovací (zaškrtávací) čtverec (Check Box)

Vlastnosti: Metody:

Využití pro datové typy: typ Boolean

Oblast použití: formuláře obecné i standardní

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


Přepínač

602SQL-Úplná dokumentace

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 obecné

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


Seznam

602SQL-Úplná dokumentace

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 a sestavy obecné i standardní

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


Přepínač

602SQL-Úplná dokumentace

Text (neformátovaný)

Vlastnosti: Metody:

Využití pro datové typy: text

Oblast použití: formuláře a sestavy obecné i standardní

K čemu se používá:

- k zpřístupnění obsahu sloupce typu Text;

Poznámky:

- ve standardním formuláři/sestavě je zobrazen pouze počátek obsahu v jedné řádce, v obecném formuláři/sestavě je vidět několik řádků textu;

- 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;

- 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ě.

Viz také: * Složky - přehled


Formátovaný text (RTF)

Vlastnosti: Metody:

Využití pro datové typy: text

Oblast použití: formuláře, sestavy obecné

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


Editační pole víceřádkové

602SQL-Úplná dokumentace

Editační pole víceřádkové (Edit Box)

Vlastnosti: Metody:

Využití pro datové typy: text

Oblast použití: formuláře, sestavy pouze obecné

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


Kalendář

Vlastnosti: Metody:

Využití pro datové typy: datum

Oblast použití: formuláře obecné

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


Datum čas

602SQL-Úplná dokumentace

Datum čas (DateTime Picker)

Vlastnosti: Metody:

Využití pro datové typy: datum, čas, Timestamp

Oblast použití: formuláře obecné

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


Obrázek

Vlastnosti: Metody:

Využití pro datové typy: obrázek

Oblast použití: formuláře obecné i standardní, sestavy obecné

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;

- ve standardním formuláři se zobrazí pouze nápis <Obrázek>, který lze jen otevřít poklepáním

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


Podpis

Vlastnosti: Metody:

Využití pro datové typy: podpis

Oblast použití: formuláře obecné , 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


OLE složka

602SQL-Úplná dokumentace

OLE

Vlastnosti: Metody:

Využití pro datové typy: OLE

Oblast použití: formuláře obecné, 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

- ve standardním formuláři se zobrazí pouze nápis <OLE> bez možnosti OLE server spustit

Viz také: * Složky - přehled


Hodnotová složka

Vlastnosti: Metody:

Oblast použití: formuláře a sestavy obecné i standardní

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 4090

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)

- zobrazení hodnoty můžete upravit použitím tzv. masky

Viz také: * Složky - přehled


Nápis

Vlastnosti: Metody:

Oblast použití: formuláře a sestavy obecné i standardní

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


Tlačítko

Vlastnosti: Metody:

Oblast použití: formuláře obecné i standardní

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;

- změnit nápis na tlačítku v době otevření formuláře lze pomocí vlastnosti Text.

Viz také: * Složky - přehled


Subformulář

602SQL-Úplná dokumentace

Subpohled

Oblast použití: formuláře a sestavy pouze obecné

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


Rám a čára

Vlastnosti: Metody:

Oblast použití: formuláře, sestavy, pouze obecné

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, je tedy nevhodná pro použití na přepínatelných záložkách;

- čára se zobrazí i na fiktivním záznamu;

Viz také: * Složky - přehled


Posuvník

Vlastnosti: Metody:

Využití pro datové typy: Integer

Oblast použití: formuláře obecné

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


Krokovač

Vlastnosti: Metody:

Využití pro datové typy: Short, Integer, Tinyint a Bigint

Oblast použití: formuláře obecné

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 ovládané složky, s níž bude krokovač svázán, Dolní a Horní mez hodnot, Krok.

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


Indikátor postupu

Vlastnosti: Metody:

Využití pro datové typy: Short, Integer, Tinyint a Bigint

Oblast použití: formuláře obecné

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 (Short, Tinyint či Bigint) 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 obecné

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


ActiveX složka

602SQL-Úplná dokumentace

ActiveX

Vlastnosti: Metody:

Oblast použití: formuláře obecné, 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


Čárový kód

602SQL-Úplná dokumentace

Čárové kódy

Vlastnosti: Metody:

Oblast použití: sestavy, formuláře obecné

K čemu se používá:

- ke generování a tisku čárových kódů;

Poznámky:

602SQL 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

Seznam subsekcí:

  • Typy čárových kódů
  • Vlastnosti čárových kódů


Druhy čárových kód

602SQL-Úplná dokumentace

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 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 602SQL, 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


Seznam vlastností - okno návrháře pohledu

Seznam vlastností je pomocné okno návrháře pohledů, které umožňuje nastavovat statické vlastnosti pohledu nebo jeho složek (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ě).

Okno má tři záložky:

  • 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 návrháře pohledů 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;

  • 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, 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

Seznam subsekcí:

  • Vlastnosti pohledu - přehled
  • Vlastnosti složek pohledu - přehled


Popis jednotlivých vlastností pohledu

602SQL-Úplná dokumentace

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 602SQL.

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 602SQL. V poli je pak nápis Font 602SQL. 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 602SQL (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 602SQL (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.

Nezobrazovat lištu

Zapnutý přepínač způsobí, že formulář se otevře bez standardní lišty v hlavním okně 602SQL. Předpokládá se, že formulář má svou ovládací lištu.

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)

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.

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 602SQL.

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.

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í.

Multiselect

Ve formulářích s tímto nastavením (převážně standardní) lze označit (vybrat) více záznamů, a poté programově tyto záznamy zjistit. Vybrání se provádí z klávesnice Shift+mezera a dále Shift+šipka dolů/nahoru, nebo pomocí myši Shift+klik nebo Ctrl+klik na záhlaví řádku.

ESC zavírá pohled

Formuláře s tímto nastavením se budou zavírat stiskem klávesy ESC

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.

Čí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 602SQL, 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.

Zamčení

Zvolíte-li z nabídky Zamčení variantu Nic, docílíte tím normální práce 602SQL, během níž se záznam automaticky zamyká 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 602SQL 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 602SQL 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.

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.

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ů 602SQL.

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

602SQL-Úplná dokumentace

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 602SQL. 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.

Poloha v ose X

Vlastnost umožňuje měnit šířku či horizontální umístění složky v závislosti se změnou šířky okna formuláře. Volba Pevná znamená, že složka se nijak nemění, volba Pružná - souřadnice X složky se mění podle změny šířky formuláře, volba Pružná šířka - šířka složky se mění podle změny šířky formuláře. Vlastnost se využije zvláště pro složky typu Subformulář, Text, Obrázek apod.

Poloha v ose Y

Vlastnost umožňuje měnit výšku či vertikální umístění složky v závislosti se změnou výšky okna formuláře. Volba Pevná znamená, že složka se nijak nemění, volba Pružná - souřadnice Y složky se mění podle změny výšky formuláře, volba Pružná výška - výška složky se mění podle změny výšky formuláře. Vlastnost se využije zvláště pro složky typu Subformulář, Text, Obrázek apod.

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 602SQL, 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í 602SQL tak, aby se neshodovala s číslem žádné existující složky.

Čísla složek využívají aplikační programy ve 602SQL, 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 602SQL 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


Nabídkový panel - okno návrháře pohledu

602SQL-Úplná dokumentace

Nabídkový panel okno návrháře pohledu

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ů
 | * Nabídka složek pro obecný pohled
 | * Nabídka složek pro standardní pohled

Seznam subsekcí:

  • Nabídla složek pro obecný pohled
  • Nabídka složek pro standardní pohled


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.

 | 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í


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.

 | 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 (x)
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í


Návrh uživatelské lišty

602SQL-Úplná dokumentace

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, 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.

Seznam subsekcí:

  • Parametry tlačítek


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 602SQL se standardním významem - např. tisk, 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 18 x 18 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 602SQL, 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ž 18 x 18 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í - tlačítko bude od svého levého souseda poněkud oddělené svislou čarou a trochu odsazené.

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ě.

Stlačením tlačítka Hotovo se nové tlačítko vloží do návrhu lišty.


Š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ěly 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. V existujícím pohledu lze šablonu zvolit ve vlastnosti Šablona.

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í


Barvy ve formulářích

602SQL-Úplná dokumentace

Barvy 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í BackColor a TextColor, barvu textu standardního formuláře vlastností TextColor a pozadí vlastností 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 |
červená | 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.


Nastavení fontů ve formulářích;formulář,nastavení fontů

602SQL-Úplná dokumentace

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.

Při volbě fontu složky platí následující pravidla:

  • 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 602SQL. Ten se nastavuje pomocí příkazu Nastavení klienta ze submenu Nástroje (zvlášť pro formuláře a zvlášť pro sestavy).

Pozor na přenositelnost: použijte-li při návrhu "příliš exoticky" font, může se stát, že při přenosu aplikace na jiný počítač se tento font nenajde a Windows jej nahradí podle sebe fontem "podobným", což může rozhodit layout formuláře apod.

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ář.


Vstupní maska

602SQL-Úplná dokumentace

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 ( _ ).


Čtení dat do formuláře a ukládání změn

Když otevřete formulář vedoucí do databáze, ten si buď vytvoří vyrovnávací paměť pro přístup k datům serveru, anebo (přejete-li si to) použije vyrovnávací paměť jiného formuláře. Do vyrovnávací paměti se data dostávají z databázového serveru prostřednictvím kurzoru (odpovědi na dotaz) nebo přímým čtením obsahu některé tabulky. Mimo to mohou být ve formuláři také data z proměnných právě otevřeného projektu (používáte-li vnitřní programovací jazyk).

Cesta změn z formuláře do databáze

Při přepsání dat ve formuláři se nový obsah editované složky zapíše do vyrovnávací paměti po ukončení editace (ve standardním formuláři) nebo po opuštění složky (v obecném formuláři). Ve formuláři se překreslí ty složky, z nichž je nastavena vlastnost Obnovit po změně v záznamu. Zároveň se překreslí všechny formuláře sdílející stejnou vyrovnávací paměť.

Změněná data se přenesou z vyrovnávací paměti do databáze při opuštění záznamu nebo při provedení akce Uložit změny v formuláři (nebo funkce Commit_view nebo metody Commit_view). Okamžitý přenos změněných dat do databáze lze zajistit nastavením příznaku Ukládat po změně složky.

Vlastnosti ovlivňující zápis změn

Je-li nastavena vlastnost 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. Tento způsob zápisu nazýváme složková synchronizace. Není-li vlastnost nastavena, 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. 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. Pokud ano, nastavte vlastnost Ukládat při deaktivaci.

Při zápisu změn v záznamu do databáze je možno vyžadovat dodatečné potvrzení - vlastnosti Tázat se před uložením. Je-li zapnuta, 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.

Zjistit, zda ve formuláři došlo k editační změně, lze funkcí IsViewChanged.

Odvolání změn

Změny ve vyrovnávací paměti lze odvolat bez zápisu do databáze buď stiskem kombinace kláves Shift+Esc nebo akcí Odvolat změny ve formuláři (nebo metodou Roll_back_view nebo funkcí Roll_back_view).

Zavření formuláře bez uložení

Při zavření formuláře se změny provedené ve složkách přenesou do vyrovnávací paměti (neplatí pro speciální formulář s vlastností Pouze pro vstup záznamu). Pokud s touto vyrovnávací paměti nepracuje žádný jiný formulář, zaznamenají se do databáze, v opačném případě zůstanou ve vyrovnávací paměti a o jejich případné zaznamenání se musí postarat formulář, který tuto paměť také používá.

Aktualizace formuláře

Potřebujete-li aktualizovat obsah formuláře na obrazovce, musíte uvážit rozsah akcí, které je nezbytné provést:

  • pokud pouze chcete zobrazit nový obsah vyrovnávací paměti nebo proměnných projektu, pak provedete akci Překreslit formulář nebo zavoláte proceduru nebo metodu Reset_view s posledním parametrem RESET_CONTROLS;

  • pokud chcete naplnit vyrovnávací paměť novými daty z databáze a překreslit formulář, pak provedete akci Načíst data a překreslit formulář nebo zavoláte proceduru nebo metodu Reset_view s posledním parametrem RESET_CACHE+RESET_CONTROLS;

  • pokud chcete aktualizovat množinu záznamů vybraných do kurzoru, naplnit vyrovnávací paměť novými daty a překreslit formulář, pak provedete akci Přebudovat kurzor a překreslit formulář nebo zavoláte proceduru nebo metodu Reset_view s posledním parametrem RESET_CURSOR.

  • pokud chcete aktualizovat obsah relačně synchronizovaných formulářů provedete akci Překreslit formulář a synchronizovat subformulář nebo zavoláte proceduru nebo metodu Reset_view s posledním parametrem RESET_SYNCHRO+ RESET_CONTROLS.

V druhém a třetím případě z vyrovnávací paměti zmizí změny, které dosud nebyly zaznamenány do databáze.

Seznam subsekcí:

  • Sdílení zdroje dat ve formulářích


Sdílení zdroje dat (kurzoru) a vyrovnávacích pamětí ve formulářích

Otevíráte-li další formuláře akcí Otevřít na stejný záznam nebo otevíráte-li další formuláře z programu funkcí Open_view s použitím příznaku PARENT_CURSOR, pak původní a nově otevíraný formulář budou sdílet stejný kurzor i vyrovnávací paměti pro komunikaci s databázovým serverem. Změny prováděné v jednom z formulářů se automaticky promítnou do všech ostatních. Kurzor se zavře až po uzavření všech těchto formulářů.

Pozor: Podmínkou tohoto způsobu práce je, že kurzor výchozího formuláře obsahuje všechny sloupce použité ve všech dalších formulářích - jinak se formuláře nepodaří otevřít. Zrušené záznamy se mohou zobrazovat buď ve všech formulářích nebo v žádném z nich.

Promítání změn z formuláře do formuláře bez sdílení kurzoru a vyrovnávací paměti

Otevřete-li dva formuláře vedoucí (zčásti nebo zcela) do stejných dat a nepoužijete-li přitom akci Na stejný záznam otevřít (modální) formulář ani volání funkce Open_view s parametrem PARENT_CURSOR, pak se 602SQL nedokáže automaticky postarat o přenášení změn z jednoho formuláře do druhého. Důvodem k volbě tohoto řešení je zpravidla situace, v níž se nedá v obou formulářích použít stejný kurzor.

Pokud uživatel provede změny v formuláři nesdílejícím kurzor, ostatní formuláře se o nich nemohou dozvědět dříve, dokud nejsou zaznamenány do databáze. Pokud tedy dva formuláře vedou do stejných dat, může se stát, že změny provedené v jednom z nich nejsou v druhém vidět. Jak tedy přenést změny mezi formuláři?

Možných řešení promítnutí změn je několik. Nejprve je nutno zajistit přepsání změn z vyrovnávací paměti formuláře do databáze některou z těchto metod:

  1. specifikovat složkovou synchronizaci změn ve formuláři, tedy zajistit, že hodnota každé složky se zapíše do databáze ihned po dokončení její editace;

  2. v okamžiku, kdy je nutno zajistit promítnutí změn, volat akci Uložit změny ve formuláři (nebo metodu či funkci Commit_view);

  3. pokud stačí přenesení změn do databáze při opouštění formuláře, nastavit v návrhu formuláře příznak Ukládat při deaktivaci; deaktivace způsobená otevřením jiného formuláře však nastává až poté, co si tento formulář načetl data;

  4. pokud stačí přenesení změn do databáze při zavření formuláře, stane se tak automaticky.

Tato řešení jsou dostatečná, pokud druhý formulář bude teprve otevřen. Pokud již otevřen je (častější případ), je třeba navíc znovu naplnit jeho vyrovnávací paměť provedením akce Načíst data a překreslit formulář (nebo procedurou či metodou Reset_view s posledním parametrem RESET_CACHE). To lze provést například jako Akci po změně, Akci při zavření nebo akci vyvolanou tlačítkem ve formuláři, který provedl změnu dat.


Vkládání záznamů do formuláře

Existují tři cesty, jak bez podpory programu umožnit uživateli vkládat záznamy do formuláře:

  1. Vybavit formulář trvalým fiktivním záznamem.

  2. Požadovat, aby uživatel, který chce vložit nový záznam, vytvořil fiktivní záznam stiskem klávesy Insert.(resp. provedení metody Insert nebo provedení akce Vložit záznam do běžného formuláře)

  3. Vytvořit zvláštní formulář sloužící pouze pro vstup dat. Tento formulář obsahuje pouze fiktivní záznam.

Kromě toho existuje mnoho cest, jak záznamy vkládat pomocí konstrukcí programovacího jazyka.

Formulář bez možnosti vkládat nové záznamy

Ve formuláři se vkládání záznamů zakáže tak, že se ve skupině Chování formuláře zatrhnou vlastnosti Bez fiktivního a Zákaz vkládání Insert.

Formulář s trvale zobrazeným fiktivní záznamem

Toto je standardní chování formuláře. Poté, co do něj uživatel zapíše hodnoty do fiktivního záznamu, záznam se vloží a v formuláři se objeví nový fiktivní záznam. Okamžik, v němž se nový záznam zapíše do databáze, závisí na nastavení příznaků ve skupině Ukládání. Záznam se může vložit buď hned po zapsání hodnoty první složky, nebo při deaktivaci formuláře, anebo až při opouštění fiktivního záznamu. Chování prvních dvou způsobů závisí na tom, zda se změny v formuláři promítají do databáze už po změně složky nebo až po opuštění záznamu - nový záznam se do databáze skutečně vloží tehdy, když se do ní mají zapsat změny provedené na obrazovce. Formulář pro vstup dat zapisuje nový záznam do databáze až na explicitní žádost (a také umožňuje vložení jako celek odvolat).

Formulář s fiktivním záznamem vytvářeným na žádost

Tento případ se od předchozího liší pouze tím, že fiktivní záznam se vytvoří až na žádost uživatele a po vložení záznamu zanikne. Ve formuláři se tento režim vkládání zapne zatržením vlastnosti Bez fiktivního ve skupině Chování formuláře.

Speciální formulář pro vstup dat

Formulář pro vstup dat slouží pouze pro vkládání nových záznamů do tabulky a nedovoluje listovat v záznamech.

Seznam subsekcí:

  • Formulář pouze pro vstup dat


Formulář pouze pro vstup dat

Formulář pro vstup dat slouží pouze pro vkládání nových záznamů do tabulky a nedovoluje listovat v záznamech. Používá se tehdy, pokud je v aplikaci vhodné oddělit vkládání nových záznamů od manipulace s existujícími záznamy.

Formulář změníte na formulář sloužící pouze pro vstup dat tak, že v seznamu vlastností zatrhnete čtverec Pouze pro vstup dat. Formulář pro vstup dat má tyto vlastnosti:

  • v formuláři je jediný záznam;

  • po otevření formuláře budou jeho složky prázdné nebo naplněny svými implicitními hodnotami;

  • zadáte-li hodnoty složek, přidáte je jako nový záznam do databáze stiskem klávesy Insert, voláním metody Insert, nejčastěji však provedením standardní akce Vložit záznam do běžného formuláře;

  • před vložením záznamu se prověří integritní omezení všech složek a to i těch, do nichž jste nic nezapsali;

  • po vložení záznamu se složky vyprázdní resp. naplní implicitními hodnotami a formulář je připraven pro vstup nového záznamu;

  • pokud formulář zavřete (akce Zavřít formulář, metoda Close nebo funkce Close_view) před vložením záznamu do databáze, obsah databáze zůstane nezměněn;

  • pokud provedete akci Zrušit běžný záznam nebo zavoláte metodu DelRec, formulář se vyprázdní a naplní implicitními hodnotami. Do databáze se nevloží nic, ani se v ní nic nezruší.

  • pokud provedete akci Odvolat změny ve formuláři nebo zavoláte metodu či funkci Roll_back_view, změny provedené od otevření formuláře se zahodí.

  • pokud provedete akci Uložit změny ve formuláři nebo zavoláte metodu či funkci Commit_view, změny provedené od otevření formuláře se zapíší do databáze.

Formulář pro vstup dat se v aplikacích typicky otevírá stiskem tlačítka v formuláři pro listování v datech. Chcete-li, aby se vložený záznam ihned objevil ve výchozím formuláři bez explicitního překreslování, musí oba formuláře sdílet kurzor a vyrovnávací paměť. Formulář pro vstup dat tedy musíte otevřít akcí Na stejný záznam otevřít (modální) formulář nebo volat funkci Open_view s příznakem PARENT_CURSOR. I když výchozí formulář bude nový záznam obsahovat, nebude tento nový záznam aktuální – je-li to potřeba, je nutné to naprogramovat.

Běžný formulář pro vstup dat obsahuje typicky dvě tlačítka: OK a Storno. Na OK se nejprve provede test zadaných údajů a jsou-li v pořádku, poté se provede akce Uložit změny ve formuláři a Zavřít formulář (resp. metoda Close resp. funkce Close_view). Na tlačítku Storno stačí akce Zavřít formulář, k odvolání změn dojde při zavření (tedy i při zavření okna jiným způsobem).


Rušení záznamů ve formuláři

Ke zrušení běžného záznamu ve formuláři slouží kombinace kláves Shift+F8, akce Zrušit běžný záznam nebo metoda DelRec. Akce a metoda umožňují rušit záznam stiskem vhodně definovaného tlačítka ve formuláři nebo na liště, případně příkazem z menu.

Ve formuláři může být rušení záznamů povoleno nebo zakázáno, je-li povoleno, může se vyžadovat potvrzení tohoto úmyslu. Při návrhu formuláře nastavíte možnost rušení pomocí vlastnosti Rušení záznamů ve skupině Chování formuláře. Programově lze nastavit pomocí vlastnosti formuláře Deletable.

Poznámka: Při navrhování formuláře s přehledovým (listovacím) subformulářem nezapomeňte nastavit tuto vlastnost shodně pro oba formuláře!!

Ve složitějších aplikacích se záznamy v tabulkách ruší spíše příkazem jazyka nebo SQL přímo ze zdroje dat (tabulky, dotazu) a poté se formulář překreslí, čímž se změna přenese z tabulky do cache formuláře.


Přecházení po záznamech a výběr záznamu

Listování v záznamech formuláře lze ovládat z klávesnice, myší pomocí posuvníku (táhla), pomocí tlačítek na ovládací liště nebo pomocí tlačítek ve formuláři. Programově lze listovat pomocí metod FirstRec; LastRec; NextRec; PrevRec; NextPage a PrevPage;

Listování versus pevný záznam

Formulář může být buď určen buď pro zpřístupnění jednoho určitého záznamu, anebo pro volné listování v množině záznamů. Při návrhu formuláře lze tyto schopnosti nastavit pomocí vlastnosti Zákaz přechodů ve skupině Chování formuláře, programově lze nastavit pomocí vlastnosti formuláře Movable.

Prohlížení a výběr záznamů versus přístup ke složkám

Formulář může být buď určen buď pro prohlížení záznamů a případně výběr jednoho z nich, anebo pro práci se složkami a editaci. Při návrhu formuláře lze tyto varianty přepínat pomocí vlastnosti Pouze pro výběr záznamu ve skupině Chování formuláře.

Formulář určený pouze pro prohlížení a výběr záznamů nedovoluje editaci. Je-li navržen jako standardní formulář (typický případ), pak se v něm zvýrazňuje vždy celý vybraný záznam a nikoli pouze jedna složka. Takovýto formulář obvykle obsahuje tlačítko, které s vybraným záznamem provede vhodnou akci nebo se využije akce na poklepání na záznamu. Typickým příkladem může být formulář (resp. listovací subformulář) pro výběr záznamu, v němž uživatel rychle najde (např. pomocí dotazových polí) hledaný záznam a poklepáním myší nebo tlačítkem Detail otevře akcí Otevřít na stejný záznam modální formulář obsahující editační složky daného záznamu. Tento formulář má typicky zakázán přechod na jiný záznam a tedy uživatel, poté co upraví hodnoty záznamu, formulář zavře a zavolá akci Načíst data a překreslit formulář pro nadřízený formulář, změny se projeví v původním formuláři (tj. superformuláři).


Provádění akcí vztahujících se k formuláři

Při práci s formulářem lze spouštět řadu akcí, ať už explicitně (ty zde nepopisujeme) nebo jako vedlejší efekt prováděných operací. Tyto akce se definují v seznamu vlastností formuláře a jeho složek.

A) Akce lze definovat pro tyto situace vztahující se k formuláři jako celku:

  • otevření formuláře

  • zavření formuláře

  • přechod na nový záznam ve formuláři

  • poklepání na záznam ve standardním formuláři

  • kliknutí pravým tlačítkem myši na pozadí formuláře

Akce při otevření formuláře

Akce při otevření se automaticky provede pokaždé, když je formulář otevřen, a to nezávisle za způsobu otevření. Při provádění této akce jsou již vytvořeny a naplněny složky formuláře.

Akce při zavření formuláře

Akce při zavírání 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 pohled zavřen (akcí uživatele, programem, atd.). Akce se provádí před zrušením složek formuláře, je tedy možné se na ně odkazovat. 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 pohled a Akci při zavírání pohledu nepoužívat.

Akce při vstupu na záznam

Akce při vstupu na záznam dovoluje například nestandardním způsobem synchronizovat obsah dvou nebo více formulářů. Pokud ji využijete tím způsobem, doporučujeme vypnout vlastnost Automatické synchronizování.

Akce při poklepání

Akce při poklepání na záznam se používá zejména ve standardních formulářích sloužících pro výběr záznamu ze seznamu a spouští akcí související s tímto záznamem. Není-li formulář pouze pro výběr záznamu, lze poklepat na libovolném sloupci s výjimkou Textu a Obrázku, kde má již poklepání svůj význam - otevření.

Akce při kliknutí pravým tlačítkem myši

Akce se zavolá, pokud uživatel klikne pravým tlačítkem myši mimo složky. Dle konvencí by se mělo vyvolat popup menu.

Akce před zápisem do databáze

Ve formuláři se nedefinuje žádná explicitní akce, která by se provedla před zápisem změn do databáze. Před uložením změn se prověří všechna integritní omezení definovaná na složkách. Pokud potřebujete provést nějaké dodatečné akce, naprogramujte je v některé funkci, která prověřuje integritní omezení.

B) Tyto akce lze vyvolávat manipulací se složkami formuláře:

  • stisk tlačítka ve formuláři nebo na jeho ovládací liště (běžné naprogramování reakce na stisk tlačítka)

  • změna hodnoty editační složky provedena uživatelem

  • chyba při zapisování nové hodnoty složky do cache formuláře

  • kliknutí pravým tlačítkem myši na složce

Akce po změně ve složce

Akce po změně umožňuje reagovat za 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.

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ě zacyklení a možnému k pádu systému.

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 pohledu.

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 při kliknutí pravým tlačítkem

Dle konvencí ovládání Windows by tato akce (je-li definována) měla vyvolávat popup menu vztahující se ke kontextu.


Přehled a detail při listování v datech

Při prohlížení a editaci dat často stojí proti sobě dva požadavky:

  • chceme současně vidět mnoho záznamů a listovat v nich;

  • chceme mít přístup ke každému z mnoha údajů v záznamu.

Problém spočívá v tom, že obrazovka má jen omezenou velikost. Popíšeme zde dvě řešení tohoto problému:

  1. otevírání dalšího formuláře na zobrazení detailů vybraného záznamu;

  2. použití subformuláře synchronizovaného na stejný záznam;

Pokud se v detailním formuláři má zobrazit velké možství údajů, může být výhodné použít tzv. Záložek, které umožňují mít údaje ve vrstvách nad sebou a mezi těmito vrstvami přepínat - podrobnosti zde.

Seznam subsekcí:

  • Detailní formulář na vybraný záznam
  • Přehledový (listovací) subformulář ve formuláři
  • Formulář se záložkami


Detailní formulář na vybraný záznam

Tento model předpokládá spolupráci dvou formulářů vedoucích do stejných dat. V prvním (přehledovém) formuláři je řada záznamů, ale z každého jen několik údajů. V druhém (detailním) formuláři je jediný záznam se všemi údaji - ten záznam, který je právě vybraný v přehledovém formuláři.

Poté, co navrhnete detailní formulář, vložíte do přehledového formuláře tlačítko s akcí Na stejný záznam otevřít (modální) formulář a zadáte jméno detailního formuláře.

Otevřete-li detailní formulář jako modální, bude po dobu jeho otevření zbytek 602SQL klienta blokován. V opačném případě budete moci listovat v přehledovém formuláři a v detailním formuláři se vždy objeví data z právě vybraného záznamu. Obsah obou formulářů bude tedy synchronizován. Tuto synchronizaci lze vypnout pomocí vlastnosti Automatické synchronizování ve skupině Chování formuláře.

Obvykle přehledový formulář obsahuje pouze hodnotové složky a editovat data lze pouze v detailním formuláři. Nezbytné to však není. V detailním formuláři obvykle není možno přecházet mezi záznamy a není zobrazen svislý posuvník. Je zvykem umožnit zavírat takovýto modální formulář klávesou Esc (vlastnost Esc zavírá formulář).


Přehledový (listovací) subformulář ve formuláři

Dva formuláře na stejná data - přehledový s množstvím záznamů a detailní se všemi sloupci jednoho záznamu - se dají uspořádat do soustavy, v niž je přehledový formulář vložen do detailního. Detailní formulář se stává superformulářem, přehledový formulář jeho subformulářem sloužícím k pohodlnému listování. Postupujte takto:

  1. Nejprve navrhněte přehledový formulář, typicky jako standardní formulář.

  2. Pak vytvořte detailní formulář - musí to být obecný formulář - a na volné místo do něj vložte složku typu Subformulář (Subpohled).

  3. V seznamu vlastností této složky vyberte ve vlastnosti Subpohled jméno přehledového formuláře,

  4. Způsob synchronizace subformuláře ve skupině Subpohled nastavte na Stejný záznam.

Takto vytvoříte subformulář synchronizovaný na stejný záznam. To znamená, že při listování v jednom z formulářů se zároveň automaticky listuje v druhém formuláři, takže oba mají stále vybraný tentýž záznam. Přehlednost se zvýší, pokud ze superformuláře odstraníte svislé táhlo (skupina Okno formuláře, vlastnost Svislé táhlo).

Kurzor ze superformuláře v subformuláři

Ve vlastnosti subformuláře Použít kurzor ze superpohledu lze zvolit, zda subformulář má převzít kurzor (resp. tabulku) od superformuláře nebo zda má mít svůj vlastní zdroj dat, dle své definice. Doporučujeme používat kurzor ze superformuláře.

Bude-li tento označovací čtverec zatržen, pak superformulář i subformulář pak budou trvale sdílet stejný kurzor i vyrovnávací paměti. Tento stav má několik důsledků:

  • ušetří se čas i paměť při otevírání superformuláře, protože není třeba otevírat další kurzor pro subformulář a znovu načítat data;

  • ušetří se čas při listování v formulářích, protože bude snadnější najít odpovídající záznam v druhém formuláři;

  • záznamy budou v obou formulářích stejně setříděny;

  • změny v datech, vložení i zrušení záznamů se okamžitě promítne do obou formulářů;

  • při zadání dotazu v superformuláři se zadaná omezení a setřídění promítnou i do subformuláře;

  • je-li superformuláři předán nový kurzor pomocí funkce Set_fcursor (resp. vlastností CursNum), předá se zároveň i do subformuláře.

Stejný kurzor lze použít pouze za předpokladu, že obsahuje všechny sloupce použité v obou formulářích.

V některých výjimečných případech, může mít smysl požadovat, aby superformulář i subformulář nevedly do téhož zdroje dat, např. jeden může být uspořádaný a druhý nikoliv apod. V praxi to ale není běžný případ. Pokud k němu dojde, je nutno použít metody promítání změn z formuláře do formuláře popsané v předchozí sekci.

Tisk formuláře se subformulářem synchronizovaným na stejný záznam

Formulář se subformulářem synchronizovaným na stejný záznam není příliš vhodný pro tisk. Obsah sestavy se subformulářem se bude lišit od vzhledu formuláře na obrazovce. Ze subformuláře (tištěného jako součást superformuláře) se vytiskne v každém záznamu superformuláře pouze jeden záznam - ten samý, který je v superformuláři.

Toto chování může být nežádoucí v případech, kdy superformulář tvoří pouze jakýsi rámec pro data obsažena v subformuláři nebo subformulářích. V takovém případě zajistěte, aby superformulář vedl do proměnných projektu, nebo vypněte automatickou synchronizaci. V obou případech pak k synchronizaci nedojde a subformuláře se vytisknou celé.


Formulář se záložkami

Pokud je i v jediném záznamu více údajů, než lze přehledně umístit do okna formuláře, lze rozčlenit obsah formuláře do více stránek přepínaných pomocí záložek

Rozdělení složek formuláře mezi přepínatelné záložky

Chcete-li v jednom formuláři zobrazit více údajů, než kolik se jich vejde na plochu obrazovky, lze část formuláře využít vícenásobně pomocí přepínatelných záložek. Ve vymezené části formuláře lze pak přepínat několik variant obsahu. Přepínanými variantami mohou být jak subformuláře, tak i ostatní složky a skupiny složek (s výjimkou složky typu Rám a čára).

Formulář s obsahem přepínatelným pomocí záložek navrhnete takto:

Do formuláře vložíte složku Záložky. Na panelu vlastnosti v kolonce Nápis zadejte nadpisy všech záložek oddělené čárkami. Do oblasti formuláře pod záložky vložíte všechny složky, jejichž viditelnost ve formuláři má být podmíněna přepínáním záložek. Do podmínky viditelnosti každé z přepínaných složek napíšete:

Tab_page(!!,číslo_složky_záložky)=pořad_číslo_záložky

kde číslo_složky_záložky je číslo opsané ze seznamu vlastností této složky a pořad_číslo_záložky je pořadové číslo té záložky, na níž má být složka viditelná, počítáno od nuly. Je-li v formuláři pouze jedna složka typu záložky, pak se parametr číslo_složky_záložky ignoruje. Kdo si nepamatuje syntaxi funkce Tab_page může použít tří následujících vlastností složky: zvolit číslo záložky pomocí Zobrazovat na stránce, zvolit složku Záložka pomocí Přepínat podle záložky jménem nebo Přepínat podle záložky číslo. Podmínka aktivity se doplní automaticky.

Již během návrhu formuláře budou viditelné pouze ty složky, které patří na aktivní stránku.


Vyhledávání a selekce dat, setřídění záznamů

Vyhledání záznamu nebo záznamů splňujících určité podmínky a jejich setřídění podle hodnot určitých sloupců patří mezi nejběžnější operace při práci s daty. Tyto akce mohou být implementovány v aplikaci pomocí dotazu na databázi a zobrazení kurzoru ve formuláři. Lze však také poskytnout uživateli možnost vybírat a třídit data podle potřeby.

Jako univerzální nástroj pro řešení tohoto úkolu má každý uživatel k dispozici možnost kdykoli otevřít dotazové okno QBE (Query By Example) a v něm zadat omezující podmínky. Tento nástroj je velmi silný a obecný, ale v aplikacích může mít dvě nevýhody:

  1. dotazové okno obsahující všechny složky původního formuláře může uživatelům připadat příliš složité v situaci, kdy chtějí hledat podle jednoho konkrétního sloupce;

  2. uživatel může chtít vyhledávat bez otevírání dalších oken.

Nyní popíšeme několik cest, jak připravit aplikaci, která uživateli nabídne dokonalejší způsoby výběru a třídění dat.

Cesty k výběru dat

Data lze vybírat (filtrovat) těmito způsoby:

  • zadáním omezení ve standardním dotazovém okně QBE, jehož obsah může být oproti výchozímu oknu mírně upraven;

  • zadáním omezení v okně speciálně navrženém pro kladení určitých výběrových podmínek;

  • vyplněním omezení do dotazových polí;

  • sestrojením kurzoru a jeho vložením do formuláře (s podporou programu).

Cesty k třídění dat

Data lze setřídit těmito způsoby:

  • zadáním třídícího pořadí (čísla 1 až 8) ve standardním okně pro třídění, jehož obsah může být oproti výchozímu oknu mírně upraven (možno třídit podle více sloupců);

  • poklepáním na záhlaví sloupce ve standardním formuláři (pouze podle jednoho sloupce);

  • provedením akce Setřídit podle hodnot sloupce (pouze podle jednoho sloupce);

  • sestrojením kurzoru a jeho vložením do formuláře (s podporou programu).

Použití dotazových polí v superformuláři lze kombinovat s tříděním záznamů pomocí záhlaví sloupců ve standardním subformuláři.

Třídění poklepáním na záhlaví sloupce lze při návrhu formuláře zakázat pro jednotlivé sloupce pomocí podmínky aktivity složky (obvykle Nápis) v záhlaví sloupce.

Sestrojení kurzoru a jeho vložení do formuláře dovoluje nejobecnější výběr a třídění dat podle libovolných podmínek. Otevřený kurzor se buď předá otevíranému formuláři funkcí Open_view nebo se vloží do již otevřeného formuláře zapsáním do vlastnosti Cursnum nebo funkcí Set_fcursor.

Výběr dat a setřídění, provedené všemi způsoby kromě předání kurzoru, se skládají. Lze proto například zadávat některá omezení ve speciálních dotazových oknech a jiná pomocí dotazových polí.

Povolení a zákaz QBE

Využití standardního QBE k výběru a třídění záznamů lze při vytváření nového formuláře povolit nebo zakázat při návrhu nastavením vlastnosti Zákaz QBE a třídění ve skupině Chování formuláře a Omezené menu ve skupině Okno formuláře.

Seznam subsekcí:

  • Vyhledávání dat pomocí QBE
  • Kladení dotazů v samostatném okně
  • Dotazová pole
  • Kladení dotazů ve formláři se subformulářen


Úprava dotazových formulářů QBE

Vzhled QBE formuláře pro kladení dotazu nebo omezení je přímo odvozen ze vzhledu výchozího formuláře. Snadno lze dosáhnout toho, aby některé složky formuláře byly viditelné resp. aktivní pouze ve výchozím formuláři nebo pouze ve zvoleném dotazovém formuláři.

K dosažení selektivní viditelnosti a aktivity slouží metoda nebo funkce QBE_state. Její hodnota je 0 pro normální formulář, 1 pro QBE formulář pro zadávání omezení a 2 pro formulář pro zadávání pořadí. Lze ji použít (mimo jiné) v podmínkách viditelnosti nebo aktivity složek.

Pokud některá složka formuláře nemá být viditelná v dotazovém formuláři, pak do její podmínky viditelnosti napíšete:

QBE_state(!!) = 0 nebo thisform.QBE_state=0

Pokud některé tlačítko má být neaktivní v dotazových formulářích, pak stejný výraz napíšete do jeho podmínky aktivity.

Pokud některé pole se má objevit pouze v formuláři pro zadávání třídění, napíšete do jeho podmínky viditelnosti výraz:

QBE_state(!!) = 2 nebo thisform.QBE_state=2


Kladení dotazu v samostatném okně

Pro kladení dotazu lze navrhnout zvláštní formulář, který obsahuje pouze ty složky, na něž mají být kladena omezení. Navrhnete jej jako každý jiný formulář. Musí vést do stejného zdroje dat, jako formulář, v němž se bude používat.

Do formuláře, ve kterém chcete klást dotazy, vložte tlačítko s akcí Zadat omezení ve speciálním okně a v popisu akce zadejte jméno předem navrženého dotazového formuláře. Stiskem tohoto tlačítka otevřete dotazové okno v modálním režimu.

Potvrzení dotazu

Zadávání dotazu v dotazovém okně ukončíte jako obvykle, tedy buď klávesou F3 nebo příkazem Dotaz/pořadí zadáno ze systémového menu. Nejpřehlednější cestou je však vložit do dotazového okna tlačítko s akcí Uplatnit omezení nebo uspořádání nebo voláním metody AcceptQuery a kladení dotazu ukončovat tímto tlačítkem.

Odvolání dotazu

Pokud dotazové okno zavřete jinak, např. příkazem Zavřít ze systémového menu, kombinací kláves Ctrl+F4, tlačítkem s akci Zavřít formulář nebo voláním metody Close, pak se zadaný dotaz neuplatní.

Pokud by v dotazovém formuláři byla složka, která není v formuláři, z něhož dotaz otevřete, pak se její omezení neuplatní. Pokud potřebujete tuto vlastnost obejít, musíte do výchozího formuláře vložit neviditelnou složku.

Formulář sloužící k zadání dotazu lze také otevřít pomocí funkce Open_view s příznakem QUERY_VIEW.


Dotazová pole

Do obecného formuláře lze vložit speciální složky, které budou sloužit pouze k zadávání omezení na záznamy, které se v 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í.

Vytvoření dotazových polí lze předepsat při vytváření nového obecného formuláře na třetí stránce průvodce zatržením u příslušného údaje čtverce Dotazové pole. Do hotového formuláře se nové dotazové pole vloží jako každá jiná složka, ale mezi vlastnostmi složky vyberete v combu Dotazové pole buď Statické nebo Dynamické dotazové pole a případně vyplníte také Dotazovou podmínku.

  • Dynamické dotazové pole ovlivní obsah formuláře, jakmile je v něm změněn jakýkoli znak. Hodí se tudíž zejména pro vyhledávání pomocí prefixu řetězce. Postupným zapisováním např. jména se neustále zužuje množina vyhovujících záznamů v formuláři, až se objeví to hledané. Tento typ dotazového pole zatěžuje server podstatně více než pole statické.

  • 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 (např. identifikačního čísla).

Dotazová podmínka

Pokud Dotazová podmínka vyplněna není, pak o funkcí dotazového pole rozhoduje jméno sloupce zadané jako vlastnost Obsah složky. Přepokládejme, že dotazové pole má obsah Integer 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.

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ý QBE dotaz (např. tlačítkem na ovládací liště). Obvykle se však někde poblíž dotazových polí nachází vlastní tlačítko se standardní akcí Zrušit omezení a upořádání, protože standardní lišta formuláře je nahrazena lištou vlastní.


Kladení dotazu ve formuláři se subformulářem

Položíte-li ve formuláři dotaz, pak chování jeho subformulářů záleží na způsobu, kterým je subformulář propojen se superformulářem. Přitom nehraje roli, zda dotaz byl položen pomocí standardního QBE, v samostatném okně nebo pomocí dotazového pole.

Pokud je subformulář synchronizován relačně, pak položení dotazu změní množinu záznamů zobrazenou v superformuláři, ale obsah subformuláře závisí pouze na právě vybraném záznamu v superformuláři.

Pokud je subformulář synchronizován na stejný záznam, pak pokud nesdílí kurzor se superformulářem, nebude položením dotazu dotčen. Pokud je však pro subformulář nastaven příznak, že má používat kurzor ze superformuláře, pak se položení dotazu projeví v superformuláři i v subformuláři stejným způsobem.

Těchto vlastností lze v aplikacích vhodně využít. Zadáte-li v superformuláři výběrové podmínky (např. vyplněním dotazového pole), pak pokud formuláře nesdílejí kurzor, budete v subformuláři nadále vidět všechny záznamy, ale při listování v superformuláři budete přecházet pouze mezi záznamy splňujícími zadané podmínky. Naopak pokud se kurzor sdílí, budou v subformuláři jen ty záznamy, které podmínkám vyhovují.

Pozor: Pokud zadáte podmínku, které nevyhovuje žádný záznam, a formulář nemá fiktivní záznam, pak všechny jeho složky z datových oblastí zmizí. Zmizí tedy i případný subformulář. Doporučujeme proto buď povolit trvalý fiktivní záznam v superformuláři, anebo umístit dotazová pole i subformulář do záhlaví nebo paty okna superformuláře.


Vybírání (označování) záznamů

602SQL-Úplná dokumentace

Vybírání (označování) více záznamů

V některých situacích je vhodné, aby se aplikace chovala následujícím způsobem:

  • nechat uživatele, aby sám označil nějaké záznamy (více než jeden, nemusí to být souvislá oblast),

  • s těmito označenými záznamy pak provést nějakou akci.

Vždy se jedná o takové výběry, které nelze zadat nějakou relační podmínkou a je tedy nutná interakce (ruční označení) uživatele aplikace. Pro tyto situace nabízí 602SQL dva rozdílné nástroje:

  • označovací režim formuláře (obecného i standardního)

  • režim Multiselect formuláře (pouze standardního)

Do označovacího režimu se formuláře dostane pouze tak, že se otevře pomocí speciální funkce Select_records. V levé horní části formuláře se objeví (v každém záznamu) přepínací tlačítko Označeno / Neoznačeno (při návrhu je třeba s tímto čtvercovým tlačítkem počítat, resp. s tím, že ostatní složky se odsunou doprava). Uživatel označuje záznamy tím, že tlačítko u záznamu, který chce označit, přepne do polohy Označeno (zelená “fajfka”). Po uzavření formuláře jsou čísla označených záznamů vrácena v poli Integerů.

Poznámka: stejného způsobu označování se používá v tzv. relačních formulářích nebo v tzv. vázacích formulářích při přivazování záznamů pomocí ukazatelů.

Oproti tomu režim Multiselect se zapíná již při návrhu (standardního) formuláře (vlastností Multiselect ve skupině Chování formuláře). Multiselect bývá obvykle spojen typem formuláře Pouze pro výběr záznamu, který umožňuje jednodušší výběr. Vybráním se rozumí inverze celého řádku; ručně ji lze provést kliknutím na záhlaví řádku nebo kombinací Shift+mezera (v případě multiselectu také Shift+šipka dolů/nahoru nebo v kombinaci myš+Shift nebo myš+Ctrl stejně jako vybírání souborů v Exploreru Windows). Vybrat záznam lze také programově (funkcí SelectIntRec nebo metodou SelectIntRec). Testovat vybrání konkrétního záznamu či množiny záznamů lze (pouze před uzavřením formuláře) pomocí funkce IsIntRecSelected nebo metody IsIntRecSelected.


Relačně propojené formuláře

Relační vazba mezi formuláři je takový způsob vazby mezi dvěma formuláři, že každému záznamu v prvním formuláři je přiřazena množina záznamů zobrazena v druhém formuláři. Mechanismus synchronizace obou formulářů zajišťuje, že při listování v prvním formuláři se v druhém formuláři vždy zobrazují záznamy svázané s právě vybraným záznamem.

Relační synchronizace formulářů, o níž zde budeme hovořit, funguje tedy jedním směrem a také tím se liší od synchronizace na stejný záznam.

Záznamy v obou formulářích se propojují na základě vztahu mezi hodnotami sloupců. Nejjednodušší (a nejběžnější) případ je propojení záznamů při rovnosti hodnot ve dvou sloupcích, ale mechanismus relační synchronizace zvládne i složitější případy. Obecně je třeba, aby na základě hodnot v superformuláři bylo možno zadat podmínku pro výběr záznamů v subformuláři.

Dvojice relačně synchronizovaných formulářů může být vytvořena jako superformulář se subformulářem nebo jako dva samostatné formuláře, z nichž první otevírá v novém okně druhý.

Seznam subsekcí:

  • Formulář s relačním subformulářen
  • Relační synchronizace samostatných formulářů


Formulář s relačním subformulářem

Při vytváření formuláře s relačně synchronizovaným subformulářem postupujte takto:

  1. navrhněte subformulář - obvykle jako standardní formulář;

  2. navrhněte superformulář jako obecný formulář a vložte do něj (dostatečně velkou) složku Subpohled;

  3. nastavte ve vlastnosti Subpohled této složky jméno subformuláře;

  4. zadejte způsob synchronizace obou formulářů jedním ze dvou níže popsaných způsobů.

Propojení záznamů pomocí relace

Propojení záznamů ve formulářích relací znamená využití dříve navržené relace mezi tabulkami použitými ve zdrojích dat formulářů. Relace obsahuje jednu nebo více dvojic sloupců z obou tabulek. Do relace budou uvedeny ty záznamy, které mají v každé dvojici sloupců stejné hodnoty.

Propojení pomocí relace zadáte ve skupině vlastností Subpohled. Vlastnost Způsob synchronizace nastavíte na Záznamy propojené relací a Jméno relace vyberte z nabídky existujících relací v aplikaci..

Propojení záznamů výběrovou podmínkou

Tento způsob propojení dovoluje vybrat záznamy v subformuláři pomocí libovolné podmínky využívající hodnotu jednoho sloupce ze superformuláře.

Ve skupině vlastností Subpohled nastavte Způsob synchronizace na Záznamy propojené podmínkou. Jako Propojovací hodnotu v superpohledu zadejte jméno propojujícího sloupce superformuláře, jako Výběrovou podmínku na subpohled uveďte podmínku, na jejímž základě se budou vybírat záznamy do subformuláře. Tato podmínka musí mít tyto vlastnosti:

  • použijí se v ní pouze jména sloupců ze subformuláře a znak %, který symbolizuje hodnotu sloupce superformuláře uvedeného jako Propojovací hodnota;

  • po zápisu hodnoty propojovacího sloupce na místo znaku % musí vzniknout podmínka v jazyce SQL vyhodnotitelná na serveru;

  • do subformuláře se vyberou ty záznamy, pro něž je tato podmínka splněná.

Jednoduchá výběrová podmínka, která propojuje záznamy na základě rovnosti hodnot dvou sloupců, má tvar:

    sloupec_subformuláře = %

Lze však použít i složitější podmínky, např.

    ABS(sloupec_subformuláře - %) <= 20

Vkládání záznamů do subformuláře

Stisknete-li v relačně synchronizovaném subformuláři klávesu Insert a jsou-li oba formuláře propojeny rovností sloupců, pak se do nově vkládaného záznamu v subformuláři automaticky zapíše propojovací hodnota.

Při návrhu subformuláře je proto vhodné zajistit, aby se v něm fiktivní záznam nezobrazoval trvale, a objevil se až po stisku Insert, s již zapsanou propojovací hodnotou. Pokud by uživatel vložil záznam zapsáním hodnot do trvale zobrazeného fiktivního záznamu, nebyl by nový záznam automaticky propojen s žádným záznamem nadřazeného formuláře.


Relační synchronizace samostatných formulářů

Množinu záznamů relačně propojených s vybraným záznamem ve formuláři lze zobrazit v samostatném formuláři, který se z prvního formuláře otevře.

Pro otevření závislého formuláře použijete akci Otevřít relačně synchronizovaný formulář. V ní zadáte jméno formuláře a jméno relace, která uvádí obsah obou formulářů do souvislosti.

Pokud druhý formulář není modální, pak přechody mezi záznamy v prvním formuláři budou vyvolávat nové naplnění druhého formuláře.


Relačně propojené tabulky

Téměř každá netriviální databázová aplikace pracuje s více tabulkami, které jsou v určitém vzájemném vztahu. 602SQL vztahy mezi tabulkami řeší dvěma způsoby: propojením relačním a propojením ukazatelovým. Zatímco propojování dat pomocí ukazatelů obvykle přináší rychlejší výsledky v jednoduchých aplikacích, relačnímu propojení dáme přednost ve složitějších případech.

V dalším budeme předpokládat, že relace mezi tabulkami jsou již definovány a pojmenovány v aplikaci. Na jména relací se budete odvolávat v akcích otevírajících relační formuláře.

Jaké vztahy rozlišujeme

Uvažujme dvě tabulky TA a TB, jejichž záznamy chceme propojovat. V první řadě je nutno rozlišit druh vazby mezi jejich záznamy. Může nastat jeden ze tří případů:

Vztah 1:1: Každému záznamu v tabulce TA odpovídá právě jeden záznam v tabulce TB a naopak.

Vztah 1:N: Každému záznamu v tabulce TA odpovídá množina záznamů z tabulky TB, ale každý záznam z tabulky TB přísluší k nejvýše jednomu záznamu z tabulky TA (v "silnější" variantě každý záznam z tabulky TB přísluší k právě jednomu záznamu z tabulky TA, v tabulce TB tedy nejsou záznamy, které by nepatřily k žádnému záznamu z TA).

Vztah M:N: Každému záznamu v tabulce TA odpovídá množina záznamů z tabulky TB a naopak každému záznamu v tabulce TB odpovídá množina záznamů z tabulky TA.

Vztahem 1:1 se nebudeme podrobněji zabývat. Tabulky TA a TB lze totiž spojit do jedné tabulky, buď fyzicky anebo pomocí SQL. Pokud by platilo, že každému záznamu v tabulce TA odpovídá nejvýše jeden záznam v tabulce TB, pak jde o speciální případ vztahu 1:N a lze s ním takto pracovat.

V ostatních případech přepokládejme, že pro vyjádření vztahu mezi záznamy slouží sloupec A v tabulce TA a sloupec B v tabulce TB. Obecně v relaci může být definováno více dvojic sloupců, ale na podstatně věci to nic nemění.

Pozor: Pro efektivní práci s relačně propojenými záznamy je třeba, aby v tabulce TA byl index ke sloupci A a v tabulce TB index ke sloupci B.

Seznam subsekcí:

  • Vztah 1:N
  • Vztah M:N


Relační vztah 1:N

602SQL-Úplná dokumentace

Vztah 1:N

Propojovací sloupce A a B jsou stejného typu a propojují dva záznamy právě tehdy, pokud v nich mají stejnou hodnotu. Na propojení záznamů v tomto vztahu lze hledět třemi způsoby a všechny tři způsoby lze libovolně kombinovat.

Spojení tabulek

Pomocí dotazu SELECT * FROM TA, TB WHERE TA.A=TB.B lze získat celkový přehled o všech vazbách mezi záznamy. Ve formuláři do odpovědi na tento dotaz:

  • lze klást dodatečné omezující podmínky, které vyberou z jedné nebo druhé tabulky pouze určité záznamy;

  • lze editovat hodnoty, avšak pokud editací změníte propojení záznamů, projeví se to až při novém položení dotazu;

  • nelze vkládat ani rušit záznamy.

Formulář na propojení od TA k TB

V formuláři vedoucím do tabulky TA (nebo do dotazu, který z ní bere záznamy) lze vytvořit relačně propojený subformulář se záznamy z tabulky TB. V každém záznamu z TA budou v subformuláři ty záznamy z TB, které jsou k němu připojené.

Subformulář navrhnete do tabulky TB. Při navrhování hlavního formuláře do TA v popisu složky Subpohled zadáte kromě jména subformuláře:

  • buď Druh propojení jako Záznamy propojené relací a vyberete Jméno relace;

  • anebo Druh propojení jako Záznamy propojené podmínkou, Propojovací hodnota bude sloupec A a Výběrová podmínka bude sloupec B resp. výraz B=%.

Vkládání záznamů s propojováním

V hlavním formuláři (superformuláři) lze vkládat záznamy do TA nebo je rušit. V subformuláři lze vkládat záznamy do TB nebo je rušit. Pokud vložíte záznam do TB stiskem klávesy Insert, pak se v něm do sloupce B zapíše hodnota sloupce A z vybraného záznamu v hlavním formuláři. Tím automaticky vznikne propojení mezi záznamem vloženým do subformuláře a záznamem, v němž se subformulář nachází. (Tento mechanismus však funguje pouze tehdy, je-li výběrová podmínka subformuláře ve výše uvedeném tvaru.)

Tento způsob práce je velmi názorný. Hodí se zejména pro "silnější" verzi vztahu 1:N, v níž v TB neexistují záznamy, které by nepatřily k žádnému záznamu v TA. Pomocí subformuláře nelze totiž záznam v TB "odpojit" od záznamu v TA (leda přepsáním hodnoty sloupce B), ani "připojit" již existující, ale dosud nepřipojený záznam z TB.

Sloupec A musí mít v záznamech v TA unikátní hodnoty. Toho lze dosáhnout například automatickým přidělováním unikátních hodnot zajištěným v návrhu tabulky TA.

Samostatné formuláře

Alternativně je možno zobrazovat záznamy z TB v samostatném formuláři, nevloženém do hlavního formuláře, nýbrž otevíraném tlačítkem s akcí Otevřít relačně synchronizovaný formulář. Parametry této akce jsou jméno formuláře do TB a jméno propojující relace.

Formulář na propojení od TB k TA

V formuláři vedoucím do tabulky TB (nebo do dotazu, který z ní bere záznamy), lze vytvářet propojení na záznamy z TA. Lze tak činit dvěma cestami:

  • pomocí složky combo plněné dotazem, která obsahuje texty identifikující záznamy z TA a po vybrání některé položky provádí přepis hodnoty sloupce A do sloupce B;

  • pomocí tlačítka, které otevírá relační formulář do TA (a případně subformuláře, který obsahuje právě připojený záznam z TA). Jméno relace mezi TA a TB se uvede v parametrech akce otevírající relační formulář.

Hlavní formulář do TB umožňuje vkládání a rušení záznamů v TB. Pomocí relačního formuláře lze také vkládat a rušit záznamy v TA. Lze pracovat i se záznamy z TB, které nejsou spojeny s žádným záznamem z TA. Propojovat lze i fiktivní záznam v TB, propojení se pak zapíše do databáze při opuštění záznamu.

Relační formulář se z programu dá otevřít funkcí Relate_records.


Relační vztah M:N

602SQL-Úplná dokumentace

Vztah M:N

Pro vyjádření tohoto vztahu pomocí nástrojů relační algebry potřebujeme kromě tabulek TA a TB ještě třetí spojovací tabulku, kterou nazveme TSPOJ. TSPOJ musí obsahovat nejméně dva sloupce SPOJA a SPOJB. SPOJA je stejného typu jako sloupec A, SPOJB jako B. Dva záznamy v tabulkách TA a TB jsou propojeny právě tehdy, pokud existuje záznam v tabulce TSPOJ takový, že A=SPOJA a zároveň B=SPOJB.

Vytváření a rušení vazeb

Vazby mezi záznamy v TA a TB se vytvářejí tak, že se do tabulky TSPOJ vkládají nové záznamy, a ruší se tak, že se v TSPOJ ruší záznamy. Na rozdíl od vztahu 1:N se tedy při vytváření a rušení vazeb nepřepisují údaje v TA nebo TB.

Na vazby mezi záznamy lze hledět buď globálně, anebo od jedné tabulky směrem k druhé. Formuláře od TA k TB a od TB k TA jsou zcela symetrické, proto je nebudeme popisovat zvlášť.

Spojení tabulek

Pomocí dotazu SELECT * FROM TA, TSPOJ, TB WHERE TA.A=TSPOJ.SPOJA and TSPOJ.SPOJB=TB.B lze získat celkový přehled o všech vazbách mezi záznamy. V formuláři do odpovědi na tento dotaz:

  • lze klást dodatečné omezující podmínky, které vyberou z tabulek pouze určité záznamy;

  • lze editovat hodnoty, avšak pokud editací změníte propojení záznamů, projeví se to až při novém položení dotazu;

  • nelze vkládat ani rušit záznamy.

Formulář od jedné tabulky k druhé

Při pohledu od jedné tabulky k druhé vidíme v hlavním formuláři záznamy z jedné tabulky a každý z těchto záznamů má v subformuláři připojené záznamy z druhé tabulky. Situace vypadá podobně, jako při vazbě 1:N, avšak pro různé záznamy hlavního formuláře se v subformulářích mohou opakovat stejné záznamy.

Realizace subformuláře je poněkud složitější, než v případě 1:N. Subformulář totiž vede do spojení dvou tabulek. Předpokládejme, že hlavní formulář vede do TA. Pak vytvoříte dotaz SELECT * FROM TSPOJ, TB WHERE TSPOJ.SPOJB=TB.B a subformulář vytvoříte nad tímto dotazem. Při navrhování hlavního formuláře v popisu složky Subpohled zadáte jako propojovací hodnotu sloupec A a jako výběrovou podmínku sloupec TSPOJ.SPOJA resp. výraz TSPOJ.SPOJA=%.

Relační formulář pro editaci vazeb

Do subformuláře nelze vkládat záznamy ani rušit je, lze ovšem přepisovat hodnoty v záznamech. Editace propojení mezi záznamy z TA a TB se děje pomocí speciálního relačního formuláře, který otevřete stiskem tlačítka. V tomto relačním formuláři jsou zatržené ty záznamy, které jsou připojeny k vybranému záznamu v hlavním formuláři (tj. ty, které vidíte v subformuláři). Kliknutím na označovací tlačítka (nebo stiskem klávesy F8) můžete vytvářet a rušit vazby. Lze zde také vkládat záznamy do TB a rušit je. Na rozdíl od relačního formuláře při vazbě 1:N zde může být současně zatržen více než jeden záznam.

Při zadávání parametrů akce, kterou se otevírá relační formulář, je nutno vyplnit dvě relace: jméno relace od TA k TSPOJ a jméno relace od TSPOJ k TB.

Další sloupce spojení

Tabulka TSPOJ může mít i další sloupce, které doplňují informace o vazbě mezi TA a TB. Tyto sloupce lze editovat v subformuláři. Například pokud TA je tabulka pacientů, TB tabulka léků a tabulka TSPOJ vyjadřuje vztah "pacientu byl předepsán lék", pak další sloupec tabulky TSPOJ může obsahovat datum předepsání a počet předepsaných balení.

Pozor: Propojování relačním formulářem se nehodí pro případ, kdy mezi záznamy z TA a TB lze vytvářet multivazby (vícenásobné vazby - jeden pacient dostal tentýž lék vícekrát). Stiskem propojovacího tlačítka v relačním formuláři by se nedala vytvořit druhá a další vazba ani zrušit jedna z mnoha vazeb. Zobrazení připojených záznamů v subformuláři však funguje i v tomto případě: záznamy vícenásobně připojené se zobrazí vícekrát, pokaždé s jinými hodnotami dodatečných sloupců z TSPOJ.

Relační formulář nelze otevřít na fiktivním záznamu v hlavním formuláři. Propojováním na fiktivním záznamu by totiž došlo k porušení referenční integrity databáze.


Ukazatele a 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. Případy, řešené ukazatelovými vazbami, lze ve většině případů nahradit obecnějším a snáze přenositelným propojením relačním.

Tabulky s ukazateli nejde exportovat v jiném než interním formátu, tyto tabulky nelze replikovat, nelze s nimi pracovat pomocí SQL, nelze se připojit na ně přes ODBC, nelze je zkompaktnit.

V 602SQL jsou k dispozici jednosměrné a obousměrné ukazatele. Je-li v tabulce TA sloupec typu obousměrný ukazatel do tabulky TB, pak v tabulce TB musí být sloupec typu obousměrný ukazatel do tabulky TA. Každá změna jednoho z těchto ukazatelů vyvolá automatickou změnu protisměrného ukazatele. 602SQL zajistí, že kdykoli ukazatel v záznamu X z tabulky TA ukazuje na záznam Y v tabulce TB, pak také ukazatel v záznamu Y v tabulce TB ukazuje na záznam X z tabulky TA. U obou-směrných ukazatelů stačí tedy vkládat do databáze údaje o propojení záznamů jedním směrem a automaticky získáte obousměrné propojení.

Pozor: Při použití obousměrných ukazatelů je nebytné, aby buď oba ukazatele byly multiatributy, anebo žádný z nich.

Vázací formuláře

Vytváření ukazatelových vazeb neboli editace hodnot ukazatelů se děje v formulářích prostřednictvím tzv. vázacích formulářů, které se otevírají buď standardní akcí Otevření vázacího formuláře nebo funkcí Bind_records. Předpokládejme, že máme formulář obsahující záznamy z tabulky TA, a že TA má mezi svými sloupci ukazatel do tabulky TB. Součástí formuláře do TA je tlačítko, kterým se dá otevřít formulář do tabulky TB. Předpokládejme, že tlačítkem v záznamu X z tabulky TA takový formulář otevřete. Zjistíte, že má jednu zvláštnost: v levé části každého záznamu je přepínač, kterým se dá kterýkoli záznam vybrat, nebo vybrání zrušit. Zapnutím tohoto přepínače v záznamu Y vytvoříte ukazatelovou vazbu ze záznamu X do záznamu Y. Pokud je ukazatel obousměrný, současně vznikne vazba z Y do X.

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č). V opačném případě lze ke každému záznamu přivázat jediný záznam.

Je-li ve vázacím formuláři mnoho záznamů, použijte pro vybrání toho, který chcete přivázat, možnost položit dotaz nebo záznamy uspořádat.

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.

V průběhu práce s vázacím formulářem je na stavové řádce údaj o počtu přivázaných záznamů.

Odkazy na zrušené záznamy

Rušením záznamů nezanikají ukazatelové vazby mezi nimi. Proto se snadno může stát, že záznam ukazuje na zrušený záznam. Takové ukazatele mohou být (a zpravidla jsou) nežádoucí. Například při použití multiukazatelů odkazy na zrušené záznamy zbytečně zabírají místo a překážejí při práci.

Pokud je v formuláři složka, jejíž hodnota se získává prostřednictvím ukazatele na zrušený záznam, pak se v této složce objeví text Odkaz na zrušený záznam (resp. jeho začátek, pokud se tam nevejde celý).

Odkazy na zrušené záznamy se nadají odstranit pomocí běžných vázacích formulářů, protože v nich zpravidla zrušené záznamy nejsou vidět, a tudíž se nedají odvázat. Pro odvazování zrušených záznamů existuje zvláštní funkce, kterou spustíte pomocí ovládacího tlačítka Odvázat zrušené nebo klávesovým povelem Ctrl+F8. Akce je přístupná pouze ve vázacím formuláři. Na obrazovce se objeví okno, které vám nabídne odvázaní zrušených záznamů buď pouze od toho záznamu z prvního formuláře, na němž jste otevřeli vázací formulář, anebo od všech záznamů z prvního formuláře; vyberte si a stiskněte některé tlačítko v tomto okně. Odvázání zrušených záznamů od všech záznamů rozsáhlé tabulky může chvíli trvat.


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(##)


Objektové programování a práce s formuláři - úvod

602SQL-Úplná dokumentace

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í

602SQL-Úplná dokumentace

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

Seznam subsekcí:

  • 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

Height - 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ářů


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

SelectIntRec - vybere (označí) záznam ve standardním formuláři

IsIntRecSelected - vrátí stav vybrání záznamu

RecCount - spočítá záznamy ve 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

IsViewChanged - zjistí, byla-li ve formuláři provedena editační změna

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ářů


Vlastnosti a metody složek formulářů - objektové programování

602SQL-Úplná dokumentace

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

Seznam subsekcí:

  • Vlastnosti složek
  • Metody složek


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


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


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.

Menu se navrhuje v prostředí návrháře menu, základní operace s menu se provádějí z řídicího panelu.

Menu patří do klientské části aplikace.

Seznam subsekcí:

  • Návrhář menu
  • Vytváření nových menu


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.

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.

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 602SQL (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
 | * Menu návrháře menu


Vytváření a úprava menu

Menu tvoříte tak, že v levé části návrháře 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.

Jakmile vložíte novou položku, zadáte v dialogovém okně v pravé části návrháře její parametry.

Povinné parametry jsou:

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.

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.

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.

Alternativně můžete místo nápisu vybrat obrázek z aplikace (pokud v aplikaci již nějaké obrázky máte).

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.

Nepovinné parametry položky menu:

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á;

Příklad:

            ID_POHLED1 <> 0
            Who_am_I = "HONZA"
            Am_I_db_admin

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 602SQL 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.


Posloupnost akcí a jejich parametry - popis dialogu

602SQL-Úplná dokumentace

Posloupnost akcí a jejich parametry - okno návrháře pohledu (menu)

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 602SQL, 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.

Seznam subsekcí:

  • Nabídka standardních akcí
  • Nabídla proměnných, podprogramů a metod


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 602SQL. 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í podle hodnot z cache. Odpovídá funkci nebo metodě Reset_view() s parametrem RESET_CONTROLS. O aktualizacích formulářů se můžete více dozvědět zde.

Načíst data a překreslit formulář - cache formuláře se naplní daty z databáze, záznamy se překreslí. Neobjeví se nové a nezmizí smazané záznamy. 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.

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 602SQL. 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ářů


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ářů


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 funkcí Open_sql_cursor). 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 (globální) proměnné klientské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.

Viz také informace o způsobu optimalizace dotazu.

Seznam subsekcí:

  • Vytváření nových dotazů


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.

Seznam subsekcí:

  • Menu návrháře dotazů
  • Ovládací lišta návrháře dotazů
  • Výběr tabulek do části FROM dotazu pomocí návrháře
  • Relační propojení tabulek pomocí návrháře dotazů
  • Výběr sloupců do části SELECT dotazu pomocí návrháře
  • Vytvoření výběrové podmínky WHERE dotazu pomocí návrháře
  • Setřídění dotazu (ORDER BY) pomocí návrháře
  • Změna alternativního jména (aliasu) tabulky pomocí návrháře
  • Druh propojení v návrháři dotazů
  • Podmínka na skupiny (HAVING) pomocí návrháře
  • Dodefinování skupin v dotazu (GROUP BY)
  • Změna jména sloupce v dotazu pomocí návrháře
  • Syntaxe textového zápisu


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í


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.


Výběr tabulek pro dotaz pomocí návrháře

602SQL-Úplná dokumentace

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 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 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.


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í.

602SQL 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í


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.


Vytvoření podmínky WHERE dotazu pomocí návrháře

602SQL-Úplná dokumentace

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.


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.


Změna aliasu tabulky v dotazu

602SQL-Úplná dokumentace

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.


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í.

  1. Normální, vnitřní propojení

  2. Vnější propojení (OUTER JOIN)

  3. Vnější propojení opačným směrem

  4. Ú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.


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ě 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.


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ě 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.


Změna jména sloupce dotazu pomocí návrháře

602SQL-Úplná dokumentace

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.


Textová definice dotazu v návrháři

602SQL-Úplná dokumentace

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.


Obrázky v aplikaci

602SQL-Úplná dokumentace

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 (JPG, GIF, TIF, PCX a BMP, 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 18 x 18 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


Nákres části aplikace

Nákresy 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 nákresu a volat akce pomocí menu, které se objeví po stisku pravého tlačítka myši,

Nákres aplikace 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 z nákresu. 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. 602SQL nabízí autorům aplikací toto řešení:

  • pro jednotlivé logicky související části aplikace vytvořit složky a nákresy;

  • do těchto nákresů (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 s nákresem
 | * Definování relačních vztahů

Seznam subsekcí:

  • Práce s nákresem
  • Vztahy mezi WWW objekty v nákresu


Práce s nákresem

Do nákresu 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.

V nákresu 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 a mají různé barvy podle svého významu. O barvách šipek mezi WWW objekty je samostatná stránka nápovědy.

  • 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.

Zobrazení automaticky generovaných šipek lze vypnout tlačítkem na liště. Překreslení těchto šipek se provede dalším tlačítkem na liště.

Popup menu nákresu:

Okno nákresu 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 nákresu.

Popup menu má tyto položky:

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 nákres, jakýkoliv objekt je libovolný objekt z aplikace. Pokud v nákresu již je vložen závislý objekt, vygeneruje se automaticky šipka.

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í nákres (např. konkrétní proceduru, pomocí níž se otevírá z jednoho formuláře formulář druhý znázorníte pohled1 -> pom. objekt -> pohled2).

Vytisknout - vytiskne nákres, je možné zvolit zvětšení nebo zmenšení.

Uložit - uloží objekt do databáze;

Zobrazovat šipky - přepínač pro skrytí nebo ukázání automatických vazeb (šipek);

Obnovit - překreslí nákres, aby se obnovily automaticky generované šipky.

Popup menu komponent

Každá komponenta vložená do nákresu 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 z nákresu - 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ů).

Lišta okna nákresu:

Význam tlačítek (zleva):

- uložit nákres do aplikace;

- upravit označenou relaci;

- vytisknout nákres v různém zvětšení;

- překreslit automatické vazby (šipky);

- skrýt / ukázat automatické vazby;

- odstranit ze nákresu (nikoliv z aplikace!!) vyselektované objekty;

- ukončit práci se schématem.

Viz také: * Definování relačních vztahů


Šipky mezi WWW objekty

Automaticky generované šipky v nákresu mezi objekty typu WWW (šablony, konektory a selektory) se liší barvou podle vztahu, v jakém jsou spojené objekty. Rozlišujeme tyto vztahy:

šipka vychází ze šablony:

odkaz na jiný WWW objekt je pomocí A HREF= nebo A onClick= | hnědá
odkaz je ve FORM ACTION | světle zelená
odkaz je v BODY onLoad= | černá
odkaz je v INPUT onClick= | černá
odkaz je v definici frejmů ve FRAME SCR= | N/A

šipka vychází z konektoru:

odkaz na šablonu či chybovou šablonu v bloku Template či ErrorTemplate modrá

šipka vychází ze selektoru:

odkazy uvedené v selektory tmavě zelená


Relace

Definování relačních vztahů mezi tabulkami je důležitou součástí netriviálních databázových aplikací. Ve 602SQL doporučujeme využívat relací ze dvou hlavních důvodů:

  • relace znázorněné pomocí nákresu 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ů

Seznam subsekcí:

  • Definování relace


Definování relačních vztahů

602SQL-Úplná dokumentace

Definování relací

Nové relace se definují dvojím způsobem: jako objekt typu relace nebo propojením tabulek v nákresu.

Vytvoření relačního vztahu v nákresu 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. 602SQL 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.

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.

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
 | * Nákres části aplikace


Programy v klientském jazyce - úvod

Jádrem samostatné aplikace může být program vytvořený ve klientském programovacím jazyce 602SQL nebo v jazyce externím. Klientský 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. Kromě hlavního programu lze spouštět také programy vnořené (např. tlačítkem z formuláře, akcí při otevření formulářem položkou menu apod.). Vnořené programy jsou jednotlivé procedury hlavního programu.

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 602SQL 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 (také se jim říká syntaktické chyby). Dojde-li k takové chybě, 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 ladicí 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. Ladit lze hlavní program i vnořené podprogramy.

Programy, vytvořené ve 602SQL, 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 globální proměnné a podprogramy, 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 602SQL 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 programu, pak 602SQL 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 602SQL 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.

Seznam subsekcí:

  • Programovací jazyk klienta 602SQL
  • Struktura programu ve vnitřním programovacím jazyce
  • Symboly vnitřního programovacího jazyka
  • Typy jazyka
  • Deklarace v programu
  • Výrazy a operátory
  • Příkazy jazyka
  • Kompilační direktivy a makra
  • Ostatní


Klientský programovací jazyk

Programovací jazyk 602SQL je strukturovaný programovací jazyk velmi podobný standardnímu neobjektovému 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 rozhraní 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 klientský 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.

Související témata:

* Programy - úvod

* Struktura programu v klientském jazyce

* Kompilační direktivy a makra


Struktura programu v klientském jazyce

Program v klientské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ář.


Symboly klientského programovacího jazyka

602SQL-Úplná dokumentace

Lexikální symboly klientské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

Seznam subsekcí:

  • Klíčová slova
  • Identifikátory
  • Čísla
  • Znakové konstanty
  • Binární konstanty
  • Řetězce znaků
  • Speciální symboly
  • Oddělovače


Klíčová slova (klientský jazyk)

602SQL-Úplná dokumentace

Klíčová slova klientského jazyka

Klíčová slova jazyka 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 | BINARY
CASE | COLLATE | CONST | CSISTRING
CSSTRING | CURSOR | DIV | DO
DOWNTO | ELSE | END | FILE
FOR | FORM | FUNCTION | HALT
IF | INCLUDE | MOD | NOT
OF | OR | PROCEDURE | RECORD
REPEAT | RETURN | STRING | TABLE
THEN | THISFORM | 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.


Identifikátory (klientský jazyk)

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!


Čísla (klientský jazyk)

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


Znakové konstanty (klientský jazyk)

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: ''''.


Binární konstanty (klientský jazyk)

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.


Řetězce znaků (klientský jazyk - symbol jazyka)

602SQL-Úplná dokumentace

Řetězce znaků (klientský jazyk)

Ř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" <


Speciální symboly jazyka

602SQL-Úplná dokumentace

Speciální symboly jazyka (klientský jazyk)

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í }


Oddělovače (klientský jazyk)

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í.


Typy klientského programovacího jazyka - přehled

602SQL-Úplná dokumentace

Typy klientského programovacího jazyka

Mezi standardní typy klientské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) - popis viz objektové programování

Seznam subsekcí:

  • 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)


Jednoduché typy jazyka (IPJ)

602SQL-Úplná dokumentace

Jednoduché typy jazyka (klientský jazyk)

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.
Tinyint | Celá čísla v rozsahu -127 až 127. Hodnota zabírá 1 bajt.
Bigint | Celá čísla v rozsahu -2^63-1 až 2^63-1 (cca +/-9223372036854775000). Hodnota zabírá 8 bajtů.
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ů.
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.
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
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

* Vnitřní programovací jazyk


Typ jazyka řetězec znaku (IPJ)

602SQL-Úplná dokumentace

Typy řetězec znaků (klientský jazyk)

Typy řetězec znaků se v klientském programovacím jazyce popisují takto:

    String [ délka ] třídění

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ů. Operátor + pro spojování řetězců ořezává řetězce na cca 4000 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).

Údaj třídění nemusí být uveden – řetězce se pak třídí podle ASCII kódů svých znaků. Pokud uveden je, pak má tvar:

COLLATE jméno_jazyka

nebo

COLLATE jméno_jazyka IGNORE_CASE

kde jméno_jazyka je označení některého z podporovaných jazyků – viz seznam jazyků . INGORE_CASE znamená, že se při třídění nemá přihlížet k velikostí písmen.


Typ jazyka binární řetězec (IPJ)

602SQL-Úplná dokumentace

Typ binární řetězec (klientský jazyk)

V klientské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.

Příklad:

Funkce Get_aplId vrátí binární id aktuální aplikace jako string dvojnásobné délky

function Hex(i : integer) : string[1];
/****************************************/
begin
  case i of
     0 : Hex := "0";
     1 : Hex := "1";
     2 : Hex := "2";
     3 : Hex := "3";
     4 : Hex := "4";
     5 : Hex := "5";
     6 : Hex := "6";
     7 : Hex := "7";
     8 : Hex := "8";
     9 : Hex := "9";
    10 : Hex := "A";
    11 : Hex := 'B';
    12 : Hex := 'C';
    13 : Hex := 'D';
    14 : Hex := 'E';
    15 : Hex := 'F';
  end;
end;

function ToHex(var zn : char) : string[2];
/****************************************/
var
  pom1,pom2 : integer;
  r1, r2 : string[1];
begin
  r1 := Hex(Ord(zn) div 16);
  r2 := Hex(Ord(zn) mod 16);
  ToHex := r1+r2;
end;

function Get_aplId : string[24];
/****************************************/
var
  j,objnum : short;
  bin : binary[12];
  str : string[24];

begin
// zjištění čísla některého objektu z aktuální aplikace
  if not Find_object("about",CATEG_VIEW,objnum) then begin
// přečtení binárního id z tabulky objektů
    bin := ObjTab[objnum].apl_uuid;
// převod na string
    for j := 1 to 12 do begin
      str := str+ToHex(bin[j]);
    end;
    Get_aplId := str;
  end;
end;


Popis typu pole (ARRAY)

602SQL-Úplná dokumentace

Popis typu pole (klientský jazyk)

Popis typu pole má v klientské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.


Popis typu záznam (RECORD)

602SQL-Úplná dokumentace

Popis typu záznam (klientský jazyk)

Popis typu záznam má v klientské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.

Proměnné typu záznam lze využít k deklaraci tzv. typových kurzorů (tj. proměnných kurzorů, které mají již v době deklarace jasno o typech sloupců), narozdíl od (častějších) beztypových kurzorů, kde typ sloupců není znám - viz kurzory.

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;


Typ soubor (FILE)

602SQL-Úplná dokumentace

Typ soubor (klientský jazyk)

Typ soubor se v klientské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.


Nespecifikovaný typ (IPJ)

602SQL-Úplná dokumentace

Nespecifikovaný typ (klientský jazyk)

V klientském jazyce 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;
...


Deklarace v programech klientského jazyka

602SQL-Úplná dokumentace

Deklarace v programech (klientský jazyk)

Program v klientském jazyce může obsahovat tyto deklarace:

Deklarace konstant | Deklarace typů
Deklarace proměnných |
Deklarace procedur | Deklarace funkcí
Předsunutá deklarace procedur a 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.

Seznam subsekcí:

  • Definice konstant
  • Definice typů
  • Deklarace proměnných
  • Deklarace procedur
  • Deklarace funkcí
  • Předsunutá deklarace funkcí a procedur
  • Deklarace externích procedur a funkcí
  • Deklarace tabulek
  • Deklarace kurzorů


Deklarace konstant v klientském jazyce

602SQL-Úplná dokumentace

Deklarace konstant (klientský jazyk)

Deklarace konstant má v klientské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;


Deklarace typů v klientském jazyce

602SQL-Úplná dokumentace

Deklarace typů (klientský jazyk)

Deklarace typů má v klientském programovacím jazyce tento tvar:

type identifikátor = popis_typu;
     ...
     identifikátor = popis_typu;

Deklarace typu označí identifikátorem datový typ specifikovaný popisem.

Popisem typu může být např. popis typu pole, popis typu záznam, popis typu řetězec znaků nebo popis jednoduchých typů aj.. - viz přehled 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;


Deklarace proměnných v klientském jazyce

602SQL-Úplná dokumentace

Deklarace proměnných (klientský jazyk)

Deklarace proměnných má v klientské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;


Deklarace procedury v klientském jazyce

602SQL-Úplná dokumentace

Deklarace procedury (klientský jazyk)

Procedura se v klientské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;


Deklarace funkce v klientském jazyce

602SQL-Úplná dokumentace

Deklarace funkce (klientský jazyk)

Funkce se v klientské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;


Předsunutá deklarace procedur a funkcí v klientském jazyce

602SQL-Úplná dokumentace

Předsunutá deklarace procedur a funkcí (klientský jazyk)

V některých programech je účelné volat podprogram ještě před jeho deklarací. Nezbytné je to při použití nepřímé rekurze. V takových případech je nutno před voláním funkce umístit tzv. předsunutou deklaraci a později podprogram deklarovat se zkrácenou hlavičkou.

Předsunutá deklarace procedury a funkce má tvar:

procedure  identifikátor (skupina_par ... skupina_par);  forward;
function  identifikátor (skupina_par ... skupina_par) : typ; forward;

Deklarace se zkrácenou hlavičkou vypadá takto:

procedure identifikátor;   blok;
function identifikátor;  blok;


Deklarace externích procedur a funkcí v klientském jazyce

602SQL-Úplná dokumentace

Deklarace externích procedur a funkcí (klientský jazyk)

Klientský programovací jazyk 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 602SQL ve stejném adresáři, jako její programy, a můžete jej importovat do své aplikace a poté includovat do programu.

Příklad:

Některé složitější funkce z Win32 API, použití je ukázáno ve funkci FileDate, která vrátí datum souboru se zálohou

CONST
 MAX_PATH= 260;
 ALIAS=14;

type
 _WIN32_FIND_DATA=record
    dwFileAttributes      :integer;
    ft1CreationTime       :integer;
    ft2CreationTime       :integer;
    ft1LastAccessTime     :integer;
    ft2LastAccessTime     :integer;
    ft1LastWriteTime      :integer;
    ft2LastWriteTime      :integer;
    nFileSizeHigh         :integer;
    nFileSizeLow          :integer;
    dwReserved0           :integer;
    dwReserved1           :integer;
    cFileName             :string[MAX_PATH];
    cAlternateFileName    :string[ALIAS];
end;

type
_SYSTEMTIME=record
     wYear          :short;
     wMonth         :short;
     wDayOfWeek     :short;
     wDay           :short;
     wHour          :short;
     wMinute        :short;
     wSecond        :short;
     wMilliseconds  :short;
end;

function FindFirstFile(
    var  lpFileName:string;             // jméno hledaného souboru
    var  lpFindFileData:_WIN32_FIND_DATA // vrací info o souboru, pokud nalezen
 ) : integer;
external "KERNEL32";

function FileTimeToLocalFileTime(
    var lpFileTime:integer;         // pointer to UTC file time to convert
    var lpLocalFileTime:integer     // pointer to converted file time
 ):Boolean;
external "KERNEL32";

function FileTimeToSystemTime(
    var lpFileTime:integer;         // pointer to file time to convert
    var lpSystemTime:_SYSTEMTIME    // pointer to structure to receive system time
 ):Boolean;
external "KERNEL32";
function FileDate(var fname : string) : Boolean;
/*********************************************************************/
// do globální řetězcové proměnné "zaldatum" dosadí datum souboru
var
  lpFindFileData : _WIN32_FIND_DATA ;
  hFindFile,lpLocalFileTime,lpFileTime : integer;
  lpSystemTime : _SYSTEMTIME;

begin
  hFindFile:= FindFirstFile(fname, lpFindFileData);
  if hFindFile<>-1 then begin
    FileTimeToLocalFileTime(lpFindFileData.ft1LastWriteTime,lpLocalFileTime);
    FileTimeToSystemTime(lpLocalFileTime, lpSystemTime);
    zaldatum:= Int2str(lpSystemTime.wDay)+"."+ Int2str(lpSystemTime.wMonth)+"."+ Int2str(lpSystemTime.wYear);
     Info_box(lpFindFileData.cFileName , zaldatum);
  end;
end;


Deklarace tabulky v klientském jazyce

602SQL-Úplná dokumentace

Deklarace tabulky (klientský jazyk)

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`;


Deklarace kurzoru v klientském jazyce

602SQL-Úplná dokumentace

Deklarace kurzoru (klientský jazyk)

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;


Výrazy a operátory (klientský jazyk)

Výrazy se v klientské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 String.

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 cca 4090 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.

Seznam subsekcí:

  • Vyhodnocování výrazů
  • Výraz typu Boolean
  • Podmíněný výraz


Vyhodnocování výrazu a priorita operátoru (klientský jazyk)

602SQL-Úplná dokumentace

Vyhodnocování výrazů a priorita operátorů (klientský jazyk)

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ů klientského jazyka s prioritou operátorů v SQL, která je odlišná!


Výraz typu Boolean (podmínka) - klientský jazyk

602SQL-Úplná dokumentace

Výraz typu Boolean (klientský jazyk)

Výraz typu Boolean je speciálním případem výrazu. Používá se všude tak, kde dle syntaxe klientské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!


Podmíněný výraz

602SQL-Úplná dokumentace

Podmíněný výraz (klientský jazyk)

Klientský jazyk 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)


Příkazy klientského programovacího jazyka

V klientské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. |

Seznam subsekcí:

  • 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


Přiřazovací příkaz (klientský jazyk)

Přiřazovací příkaz v klientské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ů Tinyint, 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, Tinyint, Bigint a Money do typu Real (nikoli naopak);

- hodnoty ukazatelů do typu Integer a naopak;

- všechny řetězce znaků navzájem;

- 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.


Složený příkaz a tělo bloku (klientský jazyk)

Složený příkaz klientské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.


Cyklus REPEAT - UNTIL (klientský jazyk)

Cyklus REPEAT - UNTIL je příkazem klientské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");


Cyklus WHILE (klientský jazyk)

Cyklus WHILE je příkazem klientské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 ;


Cyklus FOR (klientský jazyk)

Cyklus FOR je příkazem klientské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;
         ...


Podmíněný příkaz IF (klientský jazyk)

602SQL-Úplná dokumentace

Podmíněný příkaz (klientský jazyk)

Podmíněný příkaz je příkazem klientské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);


Příkaz CASE (klientský jazyk)

Příkaz CASE slouží k rozvětvení klientského 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.


Volání procedury a funkce (klientský jazyk)

Procedury a funkce se v klientské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
...


Příkaz WITH

602SQL-Úplná dokumentace

Příkaz WITH (klientský jazyk)

Příkaz WITH má v klientské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. V klientské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.


Příkaz HALT

602SQL-Úplná dokumentace

Příkaz HALT (klientský jazyk)

Příkaz HALT způsobí ukončení běhu programu (nebo vnořeného programu). Zapíše se prostě:

    Halt

Vnořený program je procedura (tedy končí ... end;) spuštěná např. tlačítkem z formuláře nebo vybráním položky menu apod. Vnořený program může i nemusí být spuštěn za běhu hlavního programu (který končí ... end.).

Příkaz halt je také jediný způsob, jak přerušit vykonávání posloupnosti akcí vytvořenou v návrháři formulářů - viz příklad 2.

Příklad1:

V úvodu programu (hlavního) lze testovat dostatek práv přihlášeného uživatele, nejsou-li potřebná práva, pak je vhodné skončit.

begin
...
if not TestPrav then Halt;

Příklad2:

Ve formuláři do proměnných je tlačítko OK s obvyklým významem. Posloupnost akcí může být následující:

 if not TestVybrano then halt;
 zrusitAkci :=false;
 Zavřít formulář Novy_zaznam

První akce provede test naplnění. Zavolá proceduru TestVybráno, která zkontroluje, je-li výběr kompletní a pokud ne, ohlásí chybu (pomocí funkce Info_box) a vrátí FALSE. Tím se zavolá příkaz halt, který provádění akcí zastaví (tedy formulář se nezavře).

Druhý řádek nastaví hodnotu proměnné a třetí řádek pomocí standardní akce zavře formulář.


Příkaz RETURN (klientský jazyk)

Příkaz RETURN má v klientské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 602SQL 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.

POZOR: význam příkazu Return v klientském jazyce je zcela odlišný od SQL příkazu RETURN!

Příklad:

Položka menu Konec volá následující proceduru, která pomocí return -1 ukončí cyklus zpracovávání zpráv v hlavní smyčce programu (funkcí Get_ext_message)

procedure Konec;
{**************************************}
begin
  if YesNo_box('Dotaz','Má se provést záloha dat?') then
     ZalohujTabulky;
  return -1;
end;


Kompilační direktivy a makra

602SQL-Úplná dokumentace

Kompilační direktivy a makra (klientský jazyk)

Do programu v klientské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,...) | Vložení programu do programu (#include)
Definice maker (#define) | Vložení příkazů SQL do programu (#sql, #sqlbegin, #sqlend)

Seznam subsekcí:

  • Podmíněný překlad
  • Definice maker
  • Vložení programu do programu
  • Vložení SQL příkazu do programu


Podmíněný překlad (klientský jazyk)

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Í


Definice maker (klientský jazyk)

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

V klientském programovacím jazyce jsou předdefinována tato makra:

_602SQL_ - hodnotou je řetězec obsahující číslo verze klienta 602SQL, např. "8.0". Pomocí této direktivy lze překládat program pro různé verze 602SQL.

_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

_WINBASE602_ - totožné s makrem _602SQL_.

Příklad:

#if _LANGUAGE_ = "english"
    PrepocetNaPalce;
#elif _LANGUAGE_ = "cestina"
    PrepocetNaMetry;
#endif


Vložení programu do programu (klientský jazyk)

Direktiva include umožňuje, aby se na určité libovolné 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
nebo "Pascalsky":
    {$I jméno programu}

Pokud existuje v aplikaci program tohoto jména, vloží se do hlavního programu na pozici určenou znakem # (nebo 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ě (nejde přeložit) - 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.

Příklad:

#i I_deklarace

je totéž co

{$I I_deklarace}


Číselník chyb 602SQL serveru

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. Podrobnější informace o chybě včetně kontextu, v němž vznikla viz Programové zjišťování detailů poslední chyby.

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 - v klientské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
THREAD_START_ERROR | 132 | systém nespustil DETACHED rutinu
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
OBJECT_DOES_NOT_EXIST | 137 | vybraný objekt neexistuje v aplikaci
INDEX_OUT_OF_RANGE | 138 | zadaný index multiatributu je mimo rozsah daný definicí tabulky
NOT_FOUND_02000 | 139 | záznam v kurzoru nenalezen
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
INDEX_NOT_FOUND | 148 | požadovaný index nenalezen v aplikaci
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
 | 156 | rezervováno
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 | server nemůže splnit požadavek (např. proto, že uživatel není přihlášen - správce ho odpojil, server byl ukončen apod.)
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 a příznaky
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 nebyla nalezena v zadané knihovně (DLL nebo so)
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 (povoluje se zápisem do registru)
LIBRARY_NOT_FOUND | 224 | externí knihovna DLL nebo so nebyla nalezena
LANG_SUPP_NOT_AVAIL | 225 | pro fulltext není instalována podpora pro zvolený jazyk
CONVERSION_NOT_SUPPORTED | 226 | fulltextový engine neumí zkonvertovat zadaný text
NO_FULLTEXT_LICENCE | 227 | SQL server nemá licenci pro fulltextový systém
WONT_RUN_AS_ROOT | 228 | SQL server na Linuxu běží s právy roota, odmítnuto používání externích funkcí
NOTHING_TO_REPL | 229 | replikace neproběhla protože není co replikovat - toto není chybový stav, pouze oznámení protější straně, proč nedošlo k replikaci
OBJECT_VERSION_NOT_AVAILABLE | 230 | definice tabulky, rutiny, triggeru byla změněna jiným klientem v době, kdy je používána její zkompilovaná verze; znovu přeložte danou rutinu
NO_REPL_UNIKEY | 231 | tabulka nemá unikátní klíč pro replikace nebo primární klíč
FRAMES_EXHAUSTED | 232 | vyčerpány rámy na diskové bloky, nutno zvětšit vlastnost Frame Space (Cache databázového souboru v Provozních parametrech)
NO_CONF_RIGHT | 233 | provádíte akci vyhrazenou Provoznímu správci (a nejste jím)
NO_SECUR_RIGHT | 234 | provádíte akci vyhrazenou Bezpečnostnímu správci (a nejste jím)
ACCOUNT_DISABLED | 235 | hlásíte se jako uživatel, který má dočasně zakázaný účet

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.


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é:

* Číselník chyb 602SQL


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é:

* Číselník chyb 602SQL


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é:

* Číselník chyb 602SQL


Tabulky a kurzory jako parametry procedur a funkcí

Při programování 602SQL 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 602SQL je možno použít tyto parametry:

  • parametr typu ttablenum

  • parametr typu tcursnum

  • parametr typu tcurstab

  • parametr typu cursor

Viz také:

* Vnitřní programovací jazyk

Seznam subsekcí:

  • Parametr typu ttablenum
  • Parametr typu tcursnum
  • Parametr typu tcurstab
  • Parametr typu cursor


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. V klientské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;
...


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
...


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);


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);
...


Standardní konstanty klientského jazyka

602SQL-Úplná dokumentace

Standardní konstanty klientského programovacího jazyka

V klientské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_...: označení kategorie objektu, viz konstanty kategorií.

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

Seznam subsekcí:

  • Konstanty NONE...
  • Konstanty označující kategorie objektů
  • Konstanty popisující fungování formulářů


Konstanty označující hodnoty NONE (klientský jazyk)

602SQL-Úplná dokumentace

Konstanty označující hodnotu NONE (klientský jazyk)

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.

V klientské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)
NONETINY (typ Tinyint)
NONEBIG (typ Bigint)
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).


Konstanty kategorií objektu

602SQL-Úplná dokumentace

Konstanty kategorií objektů

Tyto konstanty označují jednotlivé kategorie objektů 602SQL. Jsou to konstanty typu Integer:

kategorie objektů aplikace |  |
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 | nákres (dříve 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_FOLDER | složka (folder) | 19
CATEG_SEQ | sekvence | 20
IS_LINK | příznak spojovacího objektu | 128
kategorie objektů databáze |  |
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))


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 602SQL 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 602SQL 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.


Čtení a zápis dat v klientském jazyce

K vyznačení záznamu, s nímž chcete pracovat, připojíte k identifikátoru tabulky nebo kurzoru hranaté závorky obsahující číslo záznamu. Pokud chcete odkázat na určitý sloupec, připojíte tečku a jméno sloupce:

tabulka_nebo_kurzor[číslo_záznamu].jméno_sloupce

Sloupec databázového záznamu lze v programech použít všude tam, kde lze použít proměnnou (není-li to explicitně popřeno). Lze tedy provádět aritmetické operace nad hodnotami sloupců nebo sloupci hodnotu přiřazovat. Manipulace s databázovými sloupci se přeloží jako volání různých služeb databázového serveru.

Příklady:

přiřazení z i-tého záznamu kurzoru c do proměnné (čtení dat)

idunique:=c[i].id;

čtení dat ve výrazu a přiřazení do 1. záznamu tabulky (zápis dat)

if Sys_par[0].id_last_od<idunique then Sys_par[0].id_last_od:= idunique;

zápis dat do tabulky

Obchodni_partneri[irec].id:= idunique ;

Sloupec databázového záznamu nelze použít v případě parametru podprogramu předávaného odkazem. Z tohoto pravidla platí jedna užitečná výjimka: je-li formální parametr typu řetězec znaků, pak skutečným parametrem předávaným odkazem smí být i sloupec typu řetězec znaků. Pokud však do formálního parametru přiřadíte v podprogramu novou hodnotu, hodnota databázového sloupce se tím nezmění.

Sloupec proměnné velikosti

Při čtení nebo zápisu z (do) sloupce proměnné velikosti (typu Text) musí 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]).

Velikost 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 Tab je sloupec Pozn typu Text. Příkaz

    delka := Tab[cis].pozn#;

přečte délku tohoto sloupce v záznamu cis, příkaz

Tab[cis].pozn# := 2048;

změní délku (velikost) tohoto sloupce v záznamu cis.


Práce s multiatributy (klientský jazyk)

S celými multiatributy najednou se nedají v programovacím jazyce 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.


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 | -- | CHAR(31) | jméno tabulky
OBJ_NAME | ano | -- | -- | CHAR(31) | jméno objektu
LOGNAME | -- | -- | ano | CHAR(31) | jméno uživatele nebo skupiny
CATEGORY | ano | ano | ano | CHAR | kategorie objektu
APL_UUID | ano | ano | -- | BINARY(12) | identifikace aplikace
USR_UUID | -- | -- | ano | BINARY(12) | identifikace uživatele (skupiny)
DEFIN | ano | ano | -- | BLOB | 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"

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 "602PREZ.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;   // 602SQL od 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.


Přenosy dat mezi dvěma zdroji

602SQL 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. Nazýváme jej Návrhář přenosů 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 formulářů a změnu pomocí standardní akce Provést přenos dat nebo z programu pomocí funkce Move_data.

Využití přenosu dat

  • přenos dat z prostředí 602SQL ven (Export dat),

  • přenos dat z jiného prostředí do tabulky 602SQL (Import dat),

  • přenos z tabulky do jiné tabulky s případnými změnami hodnot,

  • přenos dat z dotazu do nově vytvořené tabulky,

  • úpravu tabulek a záznamů v jedné tabulce 602SQL (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.

Formáty dat pro přenosy jsou následující:

Tabulka ve 602SQL - tabulka, uložená v databázi jako komponenta aplikace.

Datový soubor v interním formátu 602SQL - 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ů. 602SQL 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.

Seznam subsekcí:

  • Návrhář přenosů
  • Varianty přenosů
  • Příklady použití přenosů dat
  • Popis konverze dat při přenosu


Návrhář přenosů dat

602SQL-Úplná dokumentace

Návrhář přenosu dat

Návrhář přenosů dat 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 (také pro dotaz) 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 602SQL 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 602SQL nebo v cizím zdroji dat);

  • nebo zadáte jméno tabulky, která se má vytvořit (je-li zdrojem dotaz, takto vytvoříte tabulku z dotazu);

  • 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 602SQL (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 Přenosy dat - popis přenosu.

Pro textové formáty dat můžete pomocí tlačítka Textový formát nastavit některé parametry: oddělovač polí v CSV formátu a omezovač, který ohraničí pole obsahující oddělovač, první řádek jako záhlaví, formáty data, času a reálného čísla.

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 602SQL 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í: Příklady přenosů dat


Varianty přenosů a jejich specifika

602SQL-Úplná dokumentace

Varianty přenosu a jejich specifika

Interní formát 602SQL

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 602SQL nebo jak přenést data z jedné instalace 602SQL 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 602SQL 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 602SQL, 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 602SQL by měl mít příponu TDT.

Přenos z 602SQL do 602SQL

Speciálním případem přenosu dat je přenos, kdy zdroj i cíl jsou tabulky 602SQL. 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 602SQL

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 602SQL (resp. zdrojem je odpověď na dotaz z téže tabulky).

Textové formáty a jejich parametry

602SQL 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 602SQL, 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 602SQL 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 602SQL 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 602SQL, 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 602SQL 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 602SQL získat nebo do 602SQL 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 602SQL je Windows EECS.

Pokračování: | Příklady přenosů dat
 | Přenosy dat


Příklady použití přenosů dat

Příklad 1: Import dat z DBF souboru do nové tabulky 602SQL.

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 602SQL 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 602SQL - 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 602SQL - 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).
Pokračování: | Návrhář přenosů dat
 | Přenosy dat


Popis přenosu dat při hromadných operacích

602SQL-Úplná dokumentace

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.

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.

Pokračování: | Návrhář přenosů dat
 | Přenosy dat


Programování uživatelského rozhraní

Tato část nápovědy popisuje, jak pomocí standardních procedur a funkcí, objektových metod a vlastností ovládat chování formulářů, menu, sestav a dalších prvků tvořících uživatelské rozhraní databázové aplikace.

Funkce jazyka versus vlastnosti a metody versus akce

K integrací formulářů a dalších objektů do uživatelského rozhraní lze využít tří způsobů práce:

  • používat funkce a procedury jazyka

  • používat metody a vlastnosti formuláře a jeho složek - viz Objektové programování;

  • používat předdefinované akce;

Některé činnosti lze vyjádřit všemi způsoby (např. otevřít formulář lze funkcí Open_view, metodou Open či akcí Otevřít formulář), jiné jen některými (velikost okna formuláře lze nastavit jen vlastností formuláře Width a Heigth) apod.

Všechny tři způsoby lze vhodně kombinovat.

Pro úplnost dodejme, že s obsahem databáze ve 602SQL lze pracovat i bez použití jejích vizuálních objektů například některou z těchto cest:

  • volat z programu v externím jazyce pouze funkce serveru a pro případnou komunikaci s uživatelem využít Windows API;

  • využít objekty pro přístup do databází přes rozhraní ODBC nebo dbExpress nabízené např. ve vývojových prostředích Borland Delphi, MS Visual C, v dotazovacích systémech jako Crystal Report, MS Query apod.;

  • vstupovat do databáze po Internetu pomocí WWW prohlížeče přes rozhraní CGI (resp PHP aj.).

Seznam subsekcí:

  • Principy řízení uživatelského rozhraní
  • Vstup a výstup ve standardních oknech
  • Ovládání formulářů
  • Tisk sestav
  • Ovládání menu
  • Interaktivní návrh objektů za běhu aplikace
  • Další funkce pro vytváření aplikací


Principy řízení uživatelského rozhraní

Databázové aplikace, jejichž uživatelské rozhraní je vytvořeno nástroji 602SQL, lze podle způsobu naprogramování tohoto rozhraní rozdělit do 3 druhů:

  • Aplikace řízena menu nebo formulářem

  • Aplikace řízena programem s pevnou posloupností akcí

  • Aplikace řízena programem se smyčkou zpráv

Seznam subsekcí:

  • Aplikace řízena menu nebo formulářem
  • Aplikace řízena programem s pevnou posloupností akcí
  • Aplikace řízena programem se smyčkou zpráv


Aplikace řízená menu nebo formulářem

602SQL-Úplná dokumentace

Aplikace řízena menu nebo formulářem

Je-li startovním objektem aplikace menu nebo formulář, pak se tento objekt při spuštění aplikace otevře a další činnost aplikace je řízena tím, co dělá uživatel. Tím, že uživatel například provede příkaz z menu nebo stiskne tlačítko ve formuláři, vyvolá další akce, například otevírání jiných formulářů, přenosy dat, tisk sestav, změnu menu atd. Uzavřením startovního objektu aplikace skončí.

Pokud aplikace obsahuje program, pak pouze jako projekt, tedy proto, aby v něm byly deklarovány proměnné a naprogramovány procedury a funkce, které budou z formulářů a menu zavolány.

Hodí se pro aplikace menšího rozsahu.


Aplikace řízená programem s pevnou posloupností akcí

602SQL-Úplná dokumentace

Aplikace řízena programem s pevnou posloupností akcí

Tento druh aplikace obsahuje program, jehož struktura odpovídá posloupnosti akcí, které má aplikace provést. Program může například napřed provést inicializaci, pak si vyžádat od uživatele vstupní údaje, na jejich základě provést změny v databázi nebo vypsat některá data a pak se rozhodnout, zda bude žádat další údaje nebo skončí. Během práce program otevírá tzv. modální formuláře, tedy formuláře, která pozastaví jeho běh a umožní uživateli zadávat nebo prohlížet si data, a po zavření každého takového formuláře pokračuje v činnosti.

Menu a nemodální formuláře se za běhu takového programu nedají použít - na obrazovce by se sice otevřely, ale nezastavily by běh programu, a proto by s nimi uživatel nemohl pracovat.

Tento typ programu se hodí pro ty aplikace, které předpokládají pevnou posloupnost akcí. Hodí se také, chcete-li uživateli poskytnout omezenou svobodu tím, že mu z jednoho modálního formuláře umožníte otevřít některé z dalších modálních formulářů a takto volit postup práce až do uzavření výchozího formuláře. Nehodí se pro situace, kdy uživatel potřebuje volně přecházet mezi současně otevřenými formuláři nebo vybírat si další činnost z menu.

Je vhodné pro nejjednodušší jednoúčelové aplikace.


Aplikace řízená programem se smyčkou zpráv

Pružné interaktivní aplikace se nejčastěji budují s využitím konstrukce, které se říká smyčka zpráv. Smyčka zpráv je cyklus, v němž program čeká na zprávu od uživatele, a když přijde, pak na ní předepsaným způsobem reaguje. Jednotlivým zprávám jsou přiřazeny reakce programu, mezi nimiž je jedna, která způsobí opuštění smyčky a ukončení programu.

Typická smyčka zpráv

Aplikační program začíná pracovat v situaci, kdy je na obrazovce prázdné hlavní okno bez menu. Zpravidla nejprve provede potřebné inicializační akce a pak umístí na obrazovku výchozí ovládací objekty - menu nebo formuláře. Poté vstoupí do smyčky zpráv, v níž pomocí funkce Get_ext_message získává další čekající zprávu a zpracovává ji. Ve smyčce setrvává do té doby, dokud si v reakci na vhodnou zprávu nenastaví příznak ukončení běhu. Typická struktura programu vypadá takto:

const
  zpráva_1 = 1001;
  zpráva_2 = 1002;
  zpráva_konec = 1999;
var
  konec : Boolean;
  msg : integer;  handle : window_id;
.............................................
begin
  { inicializace }
  ...........................................
  { otevření výchozího menu nebo formuláře: }
  Main_menu("*hlavní_mn");
  ...........................................
  konec := FALSE;
  while not konec and
    Get_ext_message(msg, handle, nil) do
  begin
      case msg of
       zpráva_1: ...zpracování zprávy 1 ...
         zpráva_2: ...zpracování zprávy 2 ...
       ....................................
       zpráva_konec: konec := TRUE
      end;
  end;
  { úklid }
  ...........................................
end.

Funkce Get_ext_message čeká, dokud nepřijde další zpráva, a poté vrátí její číslo ve výstupním parametru msg. Během čekání zároveň doručuje běžné služební zprávy oknům na obrazovce a tím umožňuje uživateli s nimi interaktivně pracovat, provádět příkazy z menu a vůbec komunikovat s aplikací. Funkce Get_ext_message vrátí hodnotu FALSE, když dostane zprávu s číslem -1, čehož lze také využít k ukončení smyčky.

Činnost vzorového programu ukončí příchod zprávy zpráva_konec. Ostatní zprávy jsou zpracovávány v příslušné větvi příkazu CASE nebo jsou ignorovány.

Při použití smyčky zpráv není nutné, aby přes ní procházeny všechny operace, a zpravidla tomu tak není. Většina operací se v aplikací provádí tak, že formulář, menu nebo ovládací lišta přímo provedou potřebnou akci nebo zavolají vhodný podprogram.

Jaké zprávy dostává aplikační program?

Aplikační program dostává prostřednictvím funkce Get_ext_message zprávy vznikající různým způsobem:

  • Provedením akce Zaslat programu zprávu. Taková akce může být vyvolána např. příkazem z menu, stiskem tlačítka ve formuláři nebo na liště, provedením změny ve složce formuláře, otevřením nebo zavřením formuláře apod. Akce tohoto druhu se příliš často nepoužívá, protože místo posílání zpráv je jednodušší přímo zavolat vhodnou funkci programu.

  • provedením příkazu jazyka Return. Příkaz se příliš často nepoužívá, protože místo posílání zpráv je jednodušší přímo zavolat vhodnou funkci programu.

  • Provedením operace, které je přiřazena automaticky generovaná (notifikační) zpráva, např. otevřením textového editoru.

  • Stiskem klávesy, které je přiřazena zpráva pomocí funkce Register_key.

Zprávy použité v aplikaci (kromě zpráv automaticky generovaných) označuje její autor čísly v rozsahu od 1001 do 60000. 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 602SQL a není dovoleno jich používat.

Pro označení zpráv je výhodné použít konstant definovaných v programu ve vnitřním jazyce. Je-li tento program nastaven jako projekt (viz kapitola o programovacím prostředí), lze identifikátory zpráv využít v návrhu formulářů a menu.

Smyčka zpráv s funkcí Peek_message

Funkce Peek_message se od Get_ext_message liší tím, že pokud na vstupu žádná zpráva není, pak nečeká, skončí a vrátí FALSE. Hodí se k implementaci tzv. aktivního čekání, když program si zároveň dělá svou práci a zajišťuje funkčnost uživatelského rozhraní.

V některých situacích program potřebuje umožnit uživateli práci s formulářem pouze po určitou dobu a pak pokračovat ve výpočtu. Pokud okamžik, kdy má výpočet pokračovat, není ohlášen žádnou zprávou, pak je nutno místo funkce Get_ext_message použít Peek_message.

Příklad:

View_open('*form_x');
while not ... podmínka ukončení ...
    do Peek_message;
View_close('*form_x');

Tento úsek programu otevře formulář, umožní uživateli s ním pracovat do doby, dokud není splněna podmínka ukončení, pak formulář zavře a pokračuje.

Princip programování se smyčkou zpráv

Při programování aplikací se smyčkou zpráv musíte respektovat toto pravidlo:

Pokud má program reagovat na činnost uživatele, musí v cyklu volat funkce Get_ext_message nebo Peek_message. Během provádění cyklu neobsahujícího opakované volání žádné z těchto funkcí počítač na činnost uživatel nereaguje.

Dobu, po kterou není k dispozici žádná zpráva určená programu, program tráví uvnitř funkce Get_ext_message, kde vyřizuje služební zprávy a tím umožňuje uživateli normální práci s menu a okny na obrazovce.

Pokud při práci s formulářem nebo menu uživatel vyvolá nějaké akce (např. stiskne tlačítko, které volá proceduru), pak provádění těchto akcí se vnoří do volání funkce Get_ext_message nebo Peek_message - proběhne uvnitř ní.

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. Při příjmu těchto zpráv funkce Get_ext_message vrátí v parametru handle hodnotu handle okna, které zprávu vyslalo.

Označení události je dáno tabulkou:

Číslo zprávy | 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 (QBE)
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

Na tyto zprávy program reaguje pouze tehdy, pokud chce ošetřit určitou situaci, která je zprávou signalizována. Ostatní zprávy program ignoruje.

Příklad:

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 }


Vstup a výstup ve standardních oknech

Předávání informací mezi aplikací a uživatelem může probíhat dvěma cestami: buď prostřednictvím formulářů (které si vývojář sám navrhne), anebo pomocí jednoduchých standardních oken, jejichž typy jsou popsány níže.

Výstup zprávy

Pro výstup zprávy, kterou uživatel musí před pokračováním programu potvrdit, se hodí akce Zobrazit okno se zprávou nebo procedura Info_box. Otevře na obrazovce okno se zprávou a počká, dokud uživatel nestiskne potvrzující tlačítko. Text zprávy lze členit do řádek pomocí oddělovacího znaku s kódem 10 (LF).

Příklad:

strpom :="V aplikaci je zaveden obchodník > "+jmeno+" < s přihlašovacím jménem > "+logname+" <, které není v seznamu uživatelů na serveru."+Chr(10)+"Požádejte administrátora aplikace o jeho vytvoření.";
Info_box("Chyba",strpom);

Otázka typu ANO - NE

Pro položení otázky a získání odpovědi ano nebo ne slouží funkce Yesno_box. Otevře okno s otázkou a dvěma tlačítky a dá uživateli možnost kladné nebo záporné odpovědi.

Příklad:

if pocet>0 then
   DelableRab := YesNo_box("UPOZORNĚNÍ", "V tabulce Skupin zboží je odkaz na vybranou slevu,"#10" chcete označenou položku opravdu smazat?");

Vstup jednoduchého údaje

Pro vstup údaje jednoduchého nestrukturovaného údaje (např. čísla, data, jména) slouží funkce Input_box. Umožní uživateli zadat v dialogovém okně řetězec znaků. Program si jej pak může konvertovat na vhodný typ.

Potřebujete-li, aby uživatel zadal více než jeden údaj, pak použijte místo tohoto standardního okna formulář do proměnných projektu.

Příklad:

repeat
  a := Input_box("Zadejte seriové číslo",ss,8);
until (a = false) or (KontrolaSerCis(ss));
if a then begin
  ...

Informační řádek

Na informační řádek může program psát pomocí akce Na stavový řádek vypsat zprávu nebo procedur Set_status_text a Set_status_nums.

Příklad:

name:=Seznam_tab[i].tab_name;
infostr:="Uvolňuji zrušené záznamy v tabulce: "+name;
Set_status_text(infostr);

Hlášení chyby

Zprávu o poslední chybě při provádění databázové operace podává procedura Signalize.

Příklad:

if Open_cursor(Seznam_tab) then Signalize
 else begin
   ...


Ovládání formulářů

Základní jednotkou komunikace mezi uživatelem na jedné straně a programem nebo obsahem databáze na straně druhé je formulář. Existuje několik alternativních cest, jak programově manipulovat s formuláři. Tyto cesty lze kombinovat.

Práce s formuláři pomocí standardních funkcí

602SQL nabízí řadu standardních funkcí vnitřního programovacího jazyka, které dovolují otevřít formulář, manipulovat s ním a s jeho obsahem a zavřít jej. Každý otevřený formulář je identifikován číslem typu window_id, kterému říkáme handle formuláře. Funkce otevírající formulář vrací jeho handle. Funkce, které s formulářem manipulují, dostávají handle jako vstupní parametr. V příkazech, které jsou součástí formuláře, lze místo jeho handle použít symbol !!.

Pro tento způsob práce je charakteristické, že formulář existuje právě tehdy, když je otevřeno jeho okno na obrazovce.

Příklad:

Open_view("*Init_form",-1,0,0,0,id_init_form);
Reset_view(id_init_form,-1,RESET_CONTROLS);
Close_view(id_init_form);

Práce s formuláři deklarovanými jako objekty v programu

Objekty typu formulář deklarované v programu nabízejí nejsilnější a zároveň nejjemnější způsob práce. Formulář se v programu deklaruje takto:

VAR identifikátor_formuláře : FORM jméno_návrhu_formuláře;

Tato deklarace zavádí nový objekt označený identifikátorem_formuláře, vytvořený podle návrhu uloženého v databázi pod jménem_návrhu_formuláře.

Objekt typu formulář (formulářový objekt) lze deklarovat buď na úrovni programu nebo jako lokální v podprogramu, anebo jej lze vytvářet dynamicky procedurou New.

Vlastnosti a metody

Formulářový objekt lze ovládat pomocí jeho metod a vlastností. Vlastnost je hodnota sdružená s formulářem. Hodnotu vlastnosti lze přečíst a do vlastnosti lze také zapsat hodnotu novou. Metoda je podprogram sdružený s formulářem. Může mít parametry a může vracet hodnotu. Vlastnosti a metody se označují tak, že za identifikátorem formuláře se uvede tečka a jméno vlastnosti či metody.

Existence a otevření

Při práci s objekty typu formulář je oddělena existence formuláře od jeho otevření v okně na obrazovce. V existujícím objektu lze nastavit různé vlastnosti, například rozměry okna, vybraný záznam atd., a až pak jej otevřít. Formulář lze zavřít tedy odstranit z obrazovky, aniž by se ztratily jeho nastavené vlastnosti, a později jej opět otevřít. Při ukončení programu tyto objekty nezanikají a jejich okna se neuzavírají. Objekt definitivně zaniká až při zavření projektu (pro objekty deklarované v hlavním program), při opuštění podprogramu (pro objekty deklarované jako lokální v podprogramu) nebo při provedení procedury Dispose (pro dynamicky alokované objekty).

Nespecifikované formuláře

Formulářové objekty nelze mezi sebou přiřazovat, do podprogramu je lze předávat pouze referencí. Pokud deklarujete referenční parametr podprogramu nebo ukazatel typu formulářový objekt, pak lze jméno návrhu formuláře z deklarace vypustit. Ukazateli nebo referenčnímu parametru deklarovanému bez jména návrhu formuláře lze přiřadit libovolný formulář, ukazateli nebo referenčnímu parametru deklarovanému se jménem návrhu formuláře lze přiřadit pouze formulář se stejným návrhem.

Práce s nedeklarovanými formulářovými objekty

S formulářovými objekty lze pracovat i zjednodušeným způsobem, bez jejich deklarace v programu. V takové případě objekt nemá vlastní identifikátor a místo něj se používá jméno, pod nimž je navržený formulář uložen v databázi jakou součást aplikace.

Tato cesta nevyžaduje deklarování objektů, má však jistá omezení:

nelze současně otevřít více instancí formuláře podle stejného návrhu;

nelze manipulovat s formulářem předtím, než je zobrazen na obrazovce, protože jakmile se pokusíte odkázat na neotevřený formulář, automaticky se otevře.

Odkazování na sebe sama

Příkazy, které jsou součástí návrhu formuláře, mohou odkazovat na tento formulář pomocí klíčového slova THISFORM. Toto slovo nahrazuje identifikátor objektu nebo jméno návrhu a hraje podobnou roli, jako symbol !! při manipulaci prostřednictvím standardních funkcí.

Seznam subsekcí:

  • Otevření formuláře na obrazovce
  • Manipulace s otevřeným formulářem
  • Způsob číslování záznamů ve formulářích
  • Programové ovládání obsahu formuláře


Otevření formuláře na obrazovce

K otevření formuláře slouží metoda Open.

Je-li v aplikaci uložen navržený formulář Evid_list, pak v programu můžete deklarovat objekt:

VAR evid_list_form : FORM Evid_list;

a otevřít jej příkazem

evid_list_form.Open(nil)

Jednodušeji lze stejný formulář otevřít i bez deklarace objektu příkazem

Evid_list.Open(nil)

Formulář se dá na obrazovce otevřít také řadou akcí nebo funkcí podle toho, k jakému účelu je otevírán. Při otevírání formuláře pomocí funkce lze jeho vzhled a chování ovlivnit předáním různých (níže popsaných) příznaků v parametru flags. Jednotlivé příznaky lze libovolně kombinovat tím, že jako parametr předáte jejich součet.

Jméno akce | Jméno funkce | Výsledek
Otevřít (modální) formulář, Na stejný záznam otevřít (modální) formulář | Open_view, případně s příznaky MODAL_VIEW nebo PARENT_CURSOR | Otevření normálního formuláře
Otevřít relační formulář | Relate_record | Otevření relačního formuláře
Otevřít vázací formulář | Bind_records | Otevření vázacího formuláře
 | Select_records | Výběr záznamů
 | View_open | Otevření normálního formuláře (zastaralé)

Funkce Relate_record a Bind_records se volají pouze z formuláře, který chce otevřít další formulář za účelem editování relace mezi záznamy (viz kapitola o vytváření aplikace). Nevolají se nikdy z programu.

Dynamické vytvoření návrhu formuláře

Kromě formulářů, jejichž návrh je uložen v databázi jako součást aplikace, lze otevírat i formuláře, jejichž návrh byl vytvořen dynamicky a v databázi není.

Text návrhu formuláře lze předat jako první parametr všem funkcím, které otevírají formulář, například Open_view. Alternativně lze v programu deklarovat formulářový objekt bez uvedení jména návrhu a text návrhu mu dynamicky přiřadit voláním metody Set_source. Tyto možnosti se však příliš běžně nepoužívají, protože struktura zdrojového textu formuláře není dokumentována.

Výjimkou je standardní formulář zobrazující obsah tabulky, odpovědi na dotaz nebo kurzoru otevřeného v programu. Jeho zdrojový text lze zapsat jednoduše takto:

pro tabulky | 'DEFAULT jméno_tabulky TABLEVIEW
pro pevný kurzor | 'DEFAULT jméno_kurzoru CURSORVIEW'
pro proměnný kurzor | 'DEFAULT číslo_otevřeného_kurzoru'

Otevření formuláře s takovýmto zdrojovým textem odpovídá provedení akce Otevřít standardní formulář do tabulky a Otevřít standardní formulář do dotazu.

Příklad:

VAR
  c : cursor;
  s : string[20];
  id : window_id;

BEGIN
  Open_view('DEFAULT TAB1 TABLEVIEW',no_redir,MODAL_VIEW,0,0,nil);
  Open_view('DEFAULT CURS CURSORVIEW',no_redir,MODAL_VIEW,0,0,nil);
  IF NOT Open_sql_cursor(c,'select * from TAB1 order by A')
  THEN BEGIN
    s :='DEFAULT '+int2str(c);
    Open_view(s,no_redir,MODAL_VIEW,0,0,nil);
    Close_cursor(c);
  END;
END.

Nastavení zdroje dat pro formulář

Jméno zdroje dat je součástí návrhu formuláře. Formuláři lze však přiřadit jiný zdroj dat a tím dosáhnout například zpřístupnění záznamů z odpovědi na dynamicky vytvořený dotaz.

Funkce Open_view, Print_view, Relate_record, Bind_records a Select_records umožňují pomocí parametru base zadat číslo otevřeného kurzoru, který bude zdrojem dat. Pokud se má použít zdroj dat uvedený v návrhu, pak se jako parametr base uvede konstanta NO_REDIR.

Zdroj dat lze zjišťovat a měnit také v existujícím formuláři, viz dále.

Varianty chování formuláře na obrazovce

Formulář lze otevřít na obrazovce třemi způsoby: jako normální okno uvnitř hlavního okna aplikace (MDI-child), jako plovoucí okno (popup, modeless) nebo jako modální okno blokující zbytek aplikace (modal).

Způsob otevření formuláře je popsán ve vlastnostech jeho návrhu. Mimo to lze otevření normálního formuláře v plovoucí nebo modální podobě vynutit pomocí příznaku MODELESS_VIEW nebo MODAL_VIEW předaného jako parametr funkci otevírající formulář, případně voláním akce Otevřít modální formulář.

Funkce, akce nebo metoda, která otevřela modální formulář, neskončí, dokud tento formulář není zavřen. Proto taková funkce či metoda nikdy nevrací handle tohoto formuláře (byl by již neplatný), ale hodnotu 1 při úspěchu a 0 při chybě.

Příklad:

Open_view("*NOVA_KNIHA",NO_REDIR,MODAL_VIEW,0,0,id_nk);

Omezení uživatelovy manipulace s formulářem

Rozsah dovolených manipulací s formulářem je součástí jeho návrhu, dá se však dodatečně změnit. Při otevírání formuláře lze pomocí příznaků zakázat některé činnosti, které jsou v návrhu povoleny.

NO_EDIT - v formuláři je znemožněna editace

NO_INSERT - v formuláři je znemožněno vkládání nových záznamů

NO_DELETE - v formuláři je znemožněno rušení záznamů

NO_MOVE - v formuláři je znemožněno přecházení ze záznamu na záznam.

Je-li povoleno vkládání nových záznamů, pak nedoporučujeme zakazovat editaci, jinak by se do nově vložených záznamů nedalo nic zapsat.

V formulářích, které vedou do kurzoru, se automaticky uplatní omezení na vkládání, rušení a přepisování podle charakteru kurzoru.

Ve formulářových objektech lze omezení manipulací dynamicky zjišťovat a měnit pomocí vlastností Editable, Insertable, Deletable a Movable.

Zrušené záznamy ve formuláři

Otevřete-li formulář s příznakem DEL_RECS, budou v něm obsaženy i zrušené záznamy.

Formulář do tabulky

Pokud formulář otevřený s tímto příznakem vede do tabulky, pak zrušené i nezrušené záznamy vypadají zcela stejně, a jedinou cestou, jak je odlišit, je využít sloupce DELETED, který je součástí každé tabulky. Tento sloupec může mít ve formuláři vlastní složku nebo například může ovlivňovat viditelnost nebo aktivitu jiných složek - třeba viditelnost nápisu “Tento záznam je zrušený”.

Formulář do odpovědi na dotaz

Pokud formulář vede do dotazu, pak se při konstrukci odpovědi použijí pouze nezrušené záznamy z tabulky resp. z tabulek, bez ohledu na přítomnost parametru DEL_RECS. Pokud však během práce s formulářem některý záznam zrušíte, pak:

  • není-li použit parametr DEL_RECS, zrušený záznam zmizí z formuláře

    •

  • je-li použit parametr DEL_RECS, zrušený záznam sice zůstane v formuláři, ale bude mít ve svých složkách nápis Zrušeno.
    •

Použití parametru DEL_RECS poněkud zrychluje práci z formulářem vedoucím do zdroje dat obsahujícího velmi mnoho záznamů. Doporučujeme využít tento parametr zejména tehdy, pokud program otevře formulář na určitém záznamu a nedává uživateli možnost přejít na záznam jiný. Pak je vypouštění zrušených záznamů zcela zbytečné.

Ostatní příznaky

Další příznaky, které lze také předat otevíranému formuláři, jsou:

AUTO_CURSOR - způsobí, že při zavírání formuláře se automaticky zavře také kurzor předaný jako zdroj dat pomocí parametru base; kurzor se uzavře i v případě, že se formulář nepodaří otevřít;

COUNT_RECS - při otevření formuláře se spočítají všechny jeho záznamy; tím je zajištěna správná poloha táhla na pravém rámu formuláře a vypsání celkového počtu záznamů ve formuláři na stavové řádce; otevření formuláře může trvat delší dobu;

PARENT_CURSOR - formulář použije kurzor a vyrovnávací paměti formuláře, předaného jako parametr hParent, a nastaví se záznam, který je v něm vybrán (k trvalé synchronizaci obou formulářů nedojde). Viz detailní popis v kapitole o vytváření aplikací.

QUERY_VIEW - otevře formulář sloužící pro položení QBE dotazu vztahujícího se k formuláři, jehož handle je předán jako parametr hParent.

Závislá okna

Pokud při otevírání okna B předáte otevírající funkci jako parametr hParent handle formuláře A, pak se formulář B bude stále nacházet nad formulářem A a dokud bude otevřen, bude blokovat změny v A. Toto nastavení je nutné v případě, že z modálního formuláře otevíráte další modální formulář.

Příklad:

Formulář Edit_kniha se otevře nad formulářem s handle rovno idk.

Open_view('*EDIT_KNIHA',cx,MODAL_VIEW,-irec,idk,id_ek);


Manipulace s otevřeným formulářem

Polohu formuláře na obrazovce a jeho rozměry definují vlastnosti X, Y, Width a Height. Nadpis okna je ve vlastnosti Caption. Handle okna vrací metoda Handle.

Příklad:

Pokud máte deklarovaný formulářový objekt evid_list_form, pak pomocí příkazů:

evid_list_form.Caption := "Evidenční list";
evid_list_form.Height := 2 * evid_list_form.Height;

mu přiřadíte nadpis “Evidenční list” a zdvojnásobíte jeho výšku proti návrhu. Tyto operace lze provést před otevřením formuláře na obrazovce nebo po něm.

Zavření

Formulář se zavírá akcí Zavřít formulář nebo funkcí Close_view (příp. View_close ) nebo metodou formuláře Close. Všechny otevřené formuláře lze současně zavřít funkcí Close_all_views.

Pomocí funkce nebo metody Pick_window lze aktivovat a vysunout do popředí vybraný formulář. Funkce Active_view vrací handle toho formuláře, který je právě aktivní.

Dva formuláře lze uvést do synchronizovaného stavu (ukazují tentýž záznam) pomocí funkce Register_rec_syn.

Zdroj dat

Číslo kurzoru, který je zdrojem dat, a nastavení příznaků v otevřeném formuláři zjišťuje funkce Get_fcursor a nastavuje funkce Set_fcursor. Číslo kurzoru lze také číst a měnit pomocí metody Cursnum.

Metoda Help vyvolá nápovědu definovanou pro formulář nebo jeho vybranou složku.

Dotazy

Pro otevření formuláře na kladení QBE dotazu resp. uspořádání slouží metody OpenQBE resp. OpenSort. Zadaný dotaz lze potvrdit voláním metody AcceptQuery. Je-li obsah formuláře ovlivněn položeným dotazem, zde dotaz odstranit metodou CancelQuery. Funkce nebo metoda QBE_state zjistí, zda formulář právě slouží ke kladení QBE dotazu nebo zadání uspořádání. Využívá se zejména v podmínkách viditelnosti a aktivity.

Příklad:

Program zjistí číslo kurzoru (zdroje dat), číslo aktuálního záznamu a otevře nový formulář do tohoto zdroje dat a na tento záznam:

if Get_fcursor(idc,cx,NIL) then
    if Get_view_pos(idc,irec,erec) then
        Open_view('*EDIT_CTEN',cx,MODAL_VIEW,-irec,0,id_ec)

Sledování, zda je formulář otevřen

Funkce, které otevírají formulář, stejně jako metoda Open, umožňují zadat adresu proměnné, do níž se při otevření formuláře zapíše jeho handle a při uzavření formuláře nula. Díky tomu program může snadno rozpoznat okamžik, kdy je formulář uživatelem uzavřen.

Příklad:

Do proměnné id_vc je předán handle formuláře:

Open_view('*VybrCtenar',NO_REDIR,0,0,0,id_vc);
repeat Peek_message until id_vc=0;

Pokud je proměnná id_vc, která byla předána tímto způsobem do formuláře, lokální v podprogramu, pak podprogram nesmí skončit dříve, dokud formulář nebude uzavřen. Jinak by při uzavírání formuláře došlo k přepsání již neexistující proměnné, což může přivodit vážnou chybu aplikace.

Zjistit, zde určitý formulář je otevřen, lze také pomocí metody Is_open nebo funkce View_state. Využívají se například v podmínkách aktivity nebo zatržení příkazů menu otevírajících formulář.

Označování záznamů

Ve standardním (sub)formuláři s vlastností Multiselect (a vlastností Pouze pro označení záznamu) je možné označovat záznamy podobně jako v Exploreru Windows (i nesouvislé oblasti). Čísla vybraných záznamů lze zjistit (před uzavřením) pomocí funkce IsIntRecSelected nebo metody IsIntRecSelected.


Způsob číslování záznamů ve formulářích

Záznamy ve formulářích jsou vzestupně očíslovány dvojím způsobem: absolutně a interně. Některé funkce vyžadují předání absolutního a jiné interního čísla záznamu.

Absolutní číslování

První číslování je nezávislé na formulářích - každý záznam má svoje absolutní číslo ve zdroji dat, kam patří. absolutní (externí) číslo záznamu v tabulce je neměnné po celou dobu existence záznamu s výjimkou zkompaktnění tabulky. Absolutní číslo záznamu v kurzoru je záznamu přiděleno v okamžiku otevření kurzoru. Absolutní (externí) čísla záznamů se používají při přímém čtení a zápisu dat do tabulek a kurzorů.

Interní číslování

Jakmile otevřete formulář, pak záznamy obsažené v formuláři se dají očíslovat tak, jak se ve formuláři objevují: první shora má číslo 0, druhý 1 a tak dále. Tomu říkáme vnitřní (interní) číslování záznamů ve formuláři. Pokud ve formuláři do tabulky zrušíte nějaký záznam, pak záznam zmizí a vnitřní čísla všech záznamů následujících za ním se zmenší o jedničku.

Změna číslování po vložení záznamu

Vložením nového záznamu do formuláře se změní pořadová (interní) čísla těch záznamů, před nimiž se nový záznam objeví (to se může stát pouze ve formuláři do tabulky; ve formuláři do kurzoru se přidává vždy na konec). Absolutní čísla záznamů se tím nezmění. Jak pořadová tak i absolutní čísla záznamů ve formuláři rostou směrem od začátku formuláře k jeho konci.


Programové ovládání obsahu formuláře

Pokud formulář obsahuje více než jeden záznam, pak se při použití metod a vlastností složek vždy pracuje se složkami ve vybraném záznamu. Před manipulací se složkou je proto třeba interaktivně vybrat záznam nebo přiřazením do vlastnosti Curpos.

Nový záznam lze vložit metodou Insert, běžný záznam zrušit metodou DelRec. Zrušit všechny záznamy (s potvrzovacím dotazem) umožňuje metoda DelAsk.

Výběr záznamu a složky ve formuláři

Vlastnost Curpos obsahuje interní číslo vybraného záznamu ve formuláři, vlastnost Curextrec externí číslo vybraného záznamu. Obě čísla se dají přečíst také funkcí Get_view_pos a nastavit funkcemi Set_int_pos a Set_ext_pos. Uvnitř formuláře lze na absolutní číslo běžného záznamu odkazovat symbolem @ na interní číslo symbolem @@

V obecném formuláři vlastnost CurItem obsahuje číslo vybrané složky a umožňuje tedy vybrat složku na základě čísla. Číslo vybrané složky vrací také funkce Current_item. Vybrat složku lze také pomocí metody složky SetFocus.

Pohyb po záznamech ve formuláři umožňují metody FirstRec, LastRec, PrevRec, NextRect, PrevPage a NextPage. K pohybu po složkách v rámci běžného záznamu slouží metody FirstItem, LastItem, PrevTab a NextTab. Na nejbližší vyšší resp. nižší složku se lze dostat metodami UpItem a DownItem.

Každá složka obecného formuláře (kromě čáry a rámu) je z hlediska Windows oknem a má svůj handle. Handle složky v aktuálním záznamu lze zjistit pomocí metody složky Handle.

Přepisování obsahu a ovládání složek

Přepisování obsahu složek formuláře je způsobem, jak může program paralelně ovlivnit obsah databáze i obsah formuláře. Zapisovat hodnoty do databáze lze také přímo, bez účasti formuláře. Přepis hodnot složek se využívá zejména tehdy, pokud je třeba ve formuláři přednastavit některé hodnoty nebo pokud se některé hodnoty mají zkontrolovat a dopočíst na základě jiných uživatelem zadaných hodnot.

Metody a vlastnosti složek

Jednotlivé složky formuláře jsou označeny jménem uvedeným v návrhu formuláře. Složky mají své metody a vlastnosti, z nichž některé jsou společné zatímco jiné jsou specifické po konkrétní druh složky (třeba combo). Při dokazování na vlastnosti a metody složky uvedete identifikátor formuláře, tečku, jméno složky, tečku a jméno vlastnosti či metody.

Obsah složek lze přepisovat pomocí jejich vlastností Text a Value. Obě vlastnosti se vztahují ke stejným datům, ale jsou rozdílného typu. Zatímco Text obsahuje textový zápis hodnoty tak, jak se objevuje na obrazovce, Value je hodnota stejného typu, jako ve zdroji dat. V překládaném combu obsahuje vlastnost Text text napsaný na obrazovce, zatímco vlastnost Value obsahuje hodnotu zapisovanou do databáze. Nápisy a tlačítka mají vlastnost Text, ale nikoli Value.

Příklad:

Nechť ve formulářovém objektu evid_list_form je tlačítko jménem STORNO a dvě editační pole typu datum se jmény ZAHÁJENÍ a UKONČENÍ. Pak příkazy:

evid_list_form.UKONČENÍ.Value:=evid_list_form.ZAHÁJENÍ.Value+20;
evid_list_form.STORNO.Text := 'Konec';

nastaví datum UKONČENÍ na 20 dnů po datu ZAHÁJENÍ a změní nápis na tlačítku STORNO na “Konec”. Jméno vlastnosti Value (a tečku před nim) lze vypustit a psát:

evid_list_form.UKONČENÍ := evid_list_form.ZAHÁJENÍ + 20;

Metoda IsNull zjišťuje, zda ve složce je hodnota NULL, metoda SetNull zapisuje NULL do složky. Hodnotě NULL odpovídá prázdný řetězec ve vlastnosti Text.

Pro čtení nebo přepis hodnoty lze také využít funkcí Set_item_value a Get_item_value spolupracujících s proměnnou typu Untyped. Přečíst nebo přepsat text ve složce obecného formuláře lze také pomocí zastaralých funkcí Get_view_item resp. Set_view_item, takto provedená změna se však nezapisuje do databáze a proto má velmi omezené použití.

Způsob zobrazení složek lze řídit pomocí vlastností Format a Precision.

Specifika složek

Stav označovacích čtverců a přepínačů se řídí vlastností Checked. V editačním poli, editovatelném combu a ve formátovaném textu lze pozici kurzoru nebo zvýrazněný úsek textu nastavit metodou Selection. Pro práci se složkou Podpis se používají metody Signature_check, Signature_sign a Signature_state. Ve složce Seznam (ListBox) lze zjistit nebo nastavit vybraný řádek pomocí vlastnosti SelIndex. Nabídku ve složce Combo lze aktualizovat metodou ResetCombo. Ve složce Záložky lze nastavit nebo zjistit číslo vybrané stránky pomocí vlastnosti Page. Nad složkou obsahující datum lze otevřít měsíční kalendář pomocí metody Calendar.

Hodnoty proměnné velikosti

Složky pracující s hodnotami proměnné délky dovolují zjistit nebo přepsat aktuální délku hodnoty pomocí vlastnosti Length, načíst obsah složky ze souboru pomocí metody ReadFile, zapsat obsah složky do souboru pomocí metody WriteFile. Obsah složek Raster, Text a OLE lze otevřít v samostatném okně pomocí metody Open.

Pokud složka obsahuje hodnotu proměnné velikosti, pak pomocí vlastnosti Value lze s ní pracovat také 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.

Zápis změn do databáze a aktualizace obsahu formuláře

Po zapsání nové hodnoty do formuláře se záznamovou synchronizací je nutno pomocí funkce nebo metody Commit_view explicitně zapsat změny do databáze. Jinak by se snadno mohly ztratit. Změny provedené programem nebo uživatelem ve formuláři lze odvolat funkcí nebo metodou Roll_back_view.

Pokud byl obsah databáze změněn jinak než prostřednictvím formuláře, pak obsah formuláře lze aktualizovat funkci nebo metodu Reset_view s příznakem RESET_CACHE. Obsah jednotlivých složek formuláře ve vybraném záznamu lze aktualizovat metodou Refresh.

Příklad: v záznamově synchronizovaném formuláři je tlačítko volající proceduru, která v databázi přepíše některou hodnotu zobrazenou ve formuláři. V záznamu provedete nějaké změny a stisknete toto tlačítko. Jím vyvolaná změna se ve formuláři neprojeví. Při přechodu na jiný záznam nebo zavření formuláře se však může objevit varování signalizující, že se hodnota za dobu otevření formuláře změnila:

Aby tato matoucí situace nenastala, je nutno po změně hodnoty programem zavolat na složku metodu Refresh nebo na formulář funkci nebo metodu Reset_view s příznakem RESET_CACHE, která uvede do souladu obsah formuláře s hodnotami v databázi.

Přepočty čísel záznamů

Kurzor a tabulka

Absolutní číslo záznamu ve formuláři do editovatelného kurzoru lze převést na absolutní čísla záznamů z tabulek, z nichž daný záznam vznikl, pomocí funkce serveru Translate.

Příklad:

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 KOD="""+kod+"""";
  if Open_sql_cursor(ck,podm2) then Exit;
  Rec_cnt(ck,pocet);
  if pocet = 1 then begin
    Translate(ck,0,0,cisloVTab);
    Exists := true              {OK}
  end
  else begin
    Info_box("Upozornění","Zadaný kód nebyl nalezen!");
    b := true;
    Exists := false;
  end;
  Close_cursor(ck);
end;

Subkurzor a superkurzor

Předpokládejme, že jeden kurzor je subkurzorem jiného kurzoru (budeme mu říkat superkurzor). Absolutní číslo záznamu v subkurzoru pak lze převést na absolutní číslo téhož záznamu v superkurzoru pomocí funkce Super_recnum. To je potřeba udělat např. v situaci, když uživatel stiskem tlačítka žádá provedení akce se záznamem, na němž se právě nachází. Pokud totiž předtím položil dotaz (např. QBE setřídění), pak jeho formulář vede do subkurzoru. Program musí pomocí funkce Get_fcursor získat od formuláře jeho kurzor, pomocí funkce Get_view_pos získat číslo záznamu v subkurzoru a funkcí Super_recnum je přepočíst na číslo záznamu v superkurzoru (anebo provést požadovanou akci s pomocí získaného subkurzoru).


Tisk sestav

Tisk navržené sestavy

K vytištění sestavy lze použít akci Vytisknout sestavu (s pevně daným zdrojem dat) nebo akci Vytisknout stejný záznam v sestavě (volanou z vybraného záznamu ve formuláři pro tento jeden záznam) nebo akci Vytisknout stejné záznamy v sestavě (volanou z formuláře pro právě zobrazený zdroj dat). Funkce Print_view vytiskne všechny záznamy nebo jejich vybraný úsek, a to buď ze zdroje dat uvedeného v sestavě nebo z kurzoru předaného funkci jako parametr. Funkce View_print nabízí nejjednodušší tisk sestav.

Tisk formuláře jako sestavy

Akce Vytisknout aktivní formulář a metoda Print tisknou aktuální formulář a přitom respektují provedený výběr a setřídění záznamů a případně také provedené úpravy vzhledu. Před tiskem vyvolají dialog pro volbu parametrů tisku. V praxi se ale používá málo, protože formuláře na obrazovku se od sestav velmi liší. Pokud má formulář sloužit k výběru a setřídění dat pro připravenou tiskovou sestavu (mnohem častější případ), použijte akci Vytisknout stejné záznamy v sestavě.

Tisk je ovlivněn řadou parametrů, které se dají nastavit dvěma cestami - buď interaktivně prostřednictvím dialogových oken nebo neinteraktivně předáním vhodných parametrů funkcím prezentační vrstvy.

Seznam subsekcí:

  • Interaktivní volba parametrů tisku
  • Neinteraktivní volba parametrů tisku


Interaktivní volba parametrů tisku

Základní dialogové okno pro volbu tiskárny a parametrů tisku se otevírá akcí Nastavit parametry tisku nebo funkcí Print_opt.

Stiskem tlačítka Formát lze z tohoto okna otevřít další dialogové okno umožňující nastavení formátu stránky.

Okno pro nastavení formátu stránky se dá otevřít také přímo, a to akcí Nastavit formát stránky nebo funkcí Page_setup.

Nákres obsahu stránky v tomto dialogu slouží při přípravě tisku štítků také k výběru pozice toho štítku na stránce, který má být vytištěn první. Aby rozvržení štítků v nákresu odpovídalo formátu štítků zvolenému v návrhu sestavy, je nutno před otevřením tohoto okna zavolat funkci View_pattern a předat ji číslo sestavy (číslo lze zjistit funkcí Find_object).

Zvolit tiskárnu a orientaci, zdroj a rozměry jejího papíru lze také ve specializovaném dialogovém okně, které se otevírá akcí Zvolit tiskárnu nebo funkcí Printer_dialog.

Příklad:

Složitějším případem je situace, kdy si program musí definici zdroje dat sám sestavit podle zadaných údajů. Sestava s názvem Pujceno je navržena do tabulky obsahující výpůjčky z knihovny. Uživatel za běhu programu vybere, že chce vypsat jen výpůjčky od ledna do března. Do proměnných programu (např. vyp_od a vyp_do) typu Date se zapíší hodnoty 1.1.1998 a 31.3.1998. Část programu pak může vypadat takto:

strpom := "SELECT * FROM Knihy WHERE dat_vyp>="+Date2str(vyp_od,1)+" AND dat_vyp<="+Date2str(vyp_do,1)+" ORDER BY dat_vyp" ;
if Open_sql_cursor(ctisk,strpom) then Signalize
else begin
  if Print_opt(0) then Print_view("*Pujceno",ctisk,-1,-1);
  Close_cursor(ctisk);
end;


Neinteraktivní volba parametrů tisku

Základní parametry tisku - rozsahy stránek a záznamů, výstupní zařízení - lze zadat funkcí Set_printer. Počet kopií a snášení kopií se nastavuje funkcí Print_copies. Velikost okrajů definuje funkce Print_margins. Pořadové číslo prvního tištěného štítku na stránce se nastavuje funkcí Set_first_label.

Zvolit tiskárnu, nastavit druh, zdroj a orientaci papíru a další parametry lze pomocí funkce Printer_select. U některých tiskáren však existují navíc specifické parametry, které lze nastavovat pouze interaktivně.

Velikost spodního okraje papíru

Zadání spodního okraje papíru je nutné, pokud ve vytištěné sestavě chybí spodní konec každé stránky. K tomuto efektu dochází u některých ovladačů tiskáren v důsledku špatné spolupráce mezi tiskárnou a Windows. Pokud například pro laserovou tiskárnu nastavíte na ovládacím panelu Windows rozměr papíru A4, může se stát, že si Windows myslí, že mohou využít celý rozměr A4, tedy 210 krát 297 milimetrů. Ve skutečnosti však tiskárna neumí tisknout až k okrajům stránky. Zadáte-li ve 602SQL spodní okraj stránky, zajistíte tím, že se 602SQL nebude pokoušet využít plné rozměry stránky, které ji sdělil operační systém, a bude tisknout pouze tam, kam to připouští tiskárna.

Štítky

Zvláště při tisku štítků na nekonečný pás je nutné přesně nastavit okraje - většinou je nutné zadat dolní okraj roven nule.

U štítků věnujte zvýšenou pozornost také správné velikosti papíru. Chybná volba může způsobit například to, že na každé stránce bude scházet poslední řádka štítků. Pro tisk jmenovek. na nekonečný pás je rozumné používat formát papíru "Skládaný papír (Fanfold) 8.5 x 12 palců".

Příklad:

V následujícím příkladu bude tisknuto na zadané tiskárně na formát A4 na výšku (zřejmě na standardní arch se štítky). Uživatel má možnost zvolit pouze počet kopií, směřování výstupu (preview nebo tiskárna) – to vše je zapsáno v pomocné tabulce Parametry a v dialogu Formát stránky pro štítky může zvolit pozici prvního tisknutého štítku na stránce:

if Get_fcursor(id_prehled,ctiskst,NIL) then begin
  Print_margins(0,0,0,0);         //u štítků vždy nulujte
  preview := Parametry[0].preview;
  Set_printer(0,99999,1,999,preview,'',0); //zvolit preview
  kolikrat := Parametry[0].kolikrat;
  Print_copies(kolikrat,true);             //zvolit počet kopií
  Printer_select('HP LaserJet IIP','',1,9,1,-4,1,2,1);
  if Find_object("Stitek3x7",CATEG_VIEW,objnum) then Signalize
  else begin
    View_pattern(objnum);
    if Page_setup(0) then       // nastavit pozici štítku
       Print_view("*Stitek3x7",ctisk,-1,-1);
  end;
end;

Výběr záznamů pro tisk

Obsahem sestavy je zpravidla buď jeden záznam nebo množina záznamů vybraná jako odpověď na dotaz. Pokud se výběr záznamů, které chcete vytisknout, nedá vyjádřit dotazem, můžete v programu postupovat takto:

  1. Otevřete prázdný kurzor tj. kurzor neobsahující žádné záznamy. Použijte k tomu nesplnitelnou výběrovou podmínku, např. SELECT * FROM tab WHERE FALSE

  2. Pomocí funkce Add_record přidejte do tohoto kurzoru ty záznamy, které chcete vytisknout.

  3. Přesměrujte tištěnou sestavu na tento kurzor.

  4. Po vytištění sestavy kurzor uzavřete.

Příklad složitějšího tisku štítků:

tiskne se "kolikrat" kopií s vynecháním "kolikpred" pozic vpředu

strpom := 'SELECT * FROM '+tabul+' WHERE false';
if Open_sql_cursor(curtisk, strpom) then Signalize;

if Get_fcursor(idx,cf,nil) then begin
  for i := 1 to kolikpred do          // prázdná místa před tiskem prvního
    Insert(curtisk);
  Rec_cnt(cf,pocet);
  for i := 0 to pocet-1 do begin
    Translate(cf, i, 0, icislo);      // přepočet na číslo v tabulce
    if icislo <> -1 then
      for j := 1 to kolikrat do
        Add_record(curtisk,icislo,1); // přidání záznamu do kurzoru curtisk
  end;
  Print_view(labelname,curtisk,-1,-1);
end;


Ovládání menu

Menu je tradičním ovládacím prvkem aplikací pod Windows. Menu navržená a uložená jako součást aplikace ve 602SQL lze zobrazovat a přepínat z programu.

Programové ovládání se netýká obsahu, funkce, aktivity ani zatržení položek v menu, neboť tyto vlastnosti jsou pevně definovány v návrhu. Chcete-li tedy například změnit nezatrženou položku menu na zatrženou, pak nevoláte žádnou funkcí, ale postaráte se, aby se podmínka zatržení vyhodnotila jako splněná.

Zobrazení menu

Je-li některé menu označeno jako startovní objekt aplikace, zobrazí se automaticky při spuštění aplikace. Jinak je aplikace při svém startu bez menu. K zobrazení horizontálního menu slouží akce Otevřít menu nebo funkce Main_menu.

Opětovným zavoláním této akce nebo funkce lze stávající menu nahradit novým.

Odstranění menu

Akce Odstranit menu nebo funkce Main_menu zavolaná s parametrem NIL odstraní horizontální menu hlavního okna 602SQL. Stane-li se tak v aplikaci, v níž je toto menu startovním objektem, aplikace skončí. Jinak aplikace pokračuje po provedení této akce v činnosti bez menu. Pokud menu bylo otevřeno přímo z vývojového prostředí 602SQL, pak se po jeho odstranění na obrazovku vrátí standardní vývojové menu.

Překreslení menu

Akce Překreslit menu nebo funkce Main_menu zavolaná s prázdným řetězcem jako parametrem způsobí pouze překreslení hlavního menu. Tuto akci je třeba zavolat tehdy, pokud se změnily podmínky aktivity položek umístěných na nejvyšší úrovní v menu - jinak se změna aktivity neprojeví na viditelné podobě menu.

Dynamické vytvoření návrhu menu

Kromě menu, jejichž návrh je uložen v databázi jako součást aplikace, lze otevírat i menu, jejichž návrh byl vytvořen dynamicky a v databázi není.

Text návrhu menu lze přímo předat jako parametr funkci Main_menu. Tato možnost se však příliš často nepoužívá, protože struktura zdrojového textu menu není dokumentována.

Přepínání horizontálních menu

Pokud se během práce s aplikací otevře nebo aktivuje vnitřní textový editor, je menu aplikace dočasně nahrazeno menu editoru. Jakmile se však stane aktivním některý formulář nebo jakmile je okno editoru zavřeno, hlavní okno získá zpět menu nastavené naposled volanou funkcí Main_menu.

Popup menu

K zobrazení popup menu slouží akce Nabídnout popup menu. Popup menu nelze volat přímo z programu pomocí funkce. Zpravidla se volá v reakci na stisk prvého tlačítka myši na složce formuláře nebo na pozadí formuláře a definuje se v návrhu formuláře ve vlastnosti Akce na pravé tlačítko myši.


Interaktivní návrh objektů za běhu aplikace

Objekty, tvořící návrh aplikace, nemusejí nutně všechny pocházet z pera autora aplikace. Některé databázové aplikace jsou do té míry pružné, že poskytují svým uživatelům možnost vytvářet nové objekty nebo upravovat stávající.

Vytvořit objekt lze pomocí funkce serveru Insert_object, přepsat objekt lze pomocí příkazů SQL nebo přepsáním definice objektu v systémové tabulce objektů. Mimo to existuje možnost využít k vytváření a modifikování objektů vizuální návrháře, které jsou součástí vývojového prostředí 602SQL.

Přehled funkcí

Vizuální návrháře se dají volat pomocí funkcí Edit_view (formuláře a sestavy), Edit_query (dotazy) a Edit_impexp (přenosy dat). Tyto funkce otevřou příslušný vizuální návrhář a skončí poté, co uživatel ukončí návrh.

Výchozí stav

Vytváření nového objektu může začínat buď od prázdného návrhu, anebo od výchozího návrhu připraveného aplikací. V druhém případě aplikace na uživatelovu žádost vytvoří výchozí definici objektu, uloží ji do databáze a poté na ní otevře příslušný návrhář. Tento přístup je vhodný zejména tehdy, když uživatel nemá kompletní znalost ovládání návrháře a jeho cílem je pouze mírně upravit stávající návrh, například umístění složek ve formuláři či v sestavě.


Další funkce pro vytváření aplikací

Reakce na stisk klávesy

Aplikace běžící pod Windows se zpravidla ovládají myší, pevně danými klávesami a jejich kombinacemi (mezerník, šípky) nebo tzv. horkými klávesami vyznačenými podtržením znaku v menu či v nadpisech složek, na něž klávesa působí. Mimo to je možno použít starší styl ovládání, při němž aplikace předepíše jednotlivým klávesám (zejména tzv. funkčním klávesám) určitý význam a funkci.

602SQL podporuje ve vnitřním jazyce i tento styl pomocí funkce Register_key. Tato funkce umožňuje programátorovi aplikace přiřadit klávese nebo kombinaci kláves zprávu. Zpráva pak bude zaslána programu v okamžiku stisku kláves. Program získá zprávu voláním funkce Get_ext_message a může na ní vhodně reagovat.

Časovač

Aplikace může pomocí funkce Set_timer nastavit časovač, který ve stanovené periodě posílá programu zvolenou zprávu. Program tuto zprávu přijme funkcí Get_ext_message a může na ní vhodně reagovat. Takto lze naprogramovat akce, které budou prováděny "na pozadí" běžící aplikace. Zprávy od časovače se nezpracovávají, když je otevřeno modální okno.

Práce se soubory

Pro interaktivní výběr souboru slouží funkce Select_file, pro výběr adresáře funkce Select_directory.

Pro manipulace se soubory z prostředí vnitřního programovacího jazyka jsou k dispozici funkce:

Delete_file - zrušení souboru;

Make_directory - vytvoření adresáře;

Seek - nastavení pozice v souboru;

Filelength - zjištění délky souboru;

Reset, Rewrite, Close, Read, Write, Writeln, Eof - funkce pro práci s textovými soubory - význam jako v jazyce Pascal.

Pro práci s binárními soubory je nutno volat funkce patřící do Windows API.

Různé

Exec - spuštění jiného programu v prostředí Windows.

Set_cursor - nastavení tvaru kurzoru myši (šipka nebo hodiny).


Debugger ve 602SQL

602SQL-Úplná dokumentace

Debugger klientských programů

Součástí vývojového prostředí 602SQL 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 tlačítko s "broukem" na ovládací liště. 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ě.

Spuštění debuggeru

V ladícím režimu si ze submenu Překlad/Běh vyberte položku Běh. 602SQL 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.


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 602SQL, 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.

Seznam subsekcí:

  • Zahájení ladění
  • Vlastnosti ladění


Zahájení ladění

602SQL-Úplná dokumentace

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 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.


Vlastnosti ladění

602SQL-Úplná dokumentace

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ů.


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ů

Seznam subsekcí:

  • Tlačítka debuggeru
  • Krokování programu
  • Body zastavení
  • Práce s hodnotami proměnných
  • Sledovače
  • Prohlížení zásobníku


Tlačítka na liště debuggeru

602SQL-Úplná dokumentace

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


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 na liště 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 na liště 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.


Body zastavení (breakpointy)

602SQL-Úplná dokumentace

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 na liště 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 ma liště 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.


Prohlížení a měnění hodnot proměnných

602SQL-Úplná dokumentace

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 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 (první kurzor má číslo -32768 (0xffff8000), každý další je o 1 větší), nebo hodnotu -1 (0xffffffff), 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.


Sledování hodnot proměnných

602SQL-Úplná dokumentace

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 na liště 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.


Prohlížení zásobníku

602SQL-Úplná dokumentace

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.


Editor textů

Editor slouží ve 602SQL 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í: | * Ovládání editoru z klávesnice
 | * Řídící menu editoru

Seznam subsekcí:

  • Vlastnosti editoru
  • Ovládání editoru


Vlastnosti editoru

602SQL-Úplná dokumentace

Vlastnosti editoru textů

Editor textů ve 602SQL 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). Z řídicího panelu lze otevřít více označených objektů najednou.

Každá záložka si pamatuje provedené editační změny, takže je možné se pomocí příkazu Odvolat vrátit do stavu před editací. Pomocí příkazu Zopakovat je možné odvolat odvolané úpravy.

Každý si může zvolit font a jeho velikost, na které je zvyklý. Celý text nebo jednotlivé stránky nebo vybranou oblast je možné vytisknout.

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í i práce s myší jsou uzpůsobeny 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 klienta z menu Nástroje vývojového prostředí. Tyto hodnoty se zapíší do WINBASE.INI souboru a tudíž se zachovají i pro další spuštění.

Viz také: | * Ovládání editoru z klávesnice
 | * Řídící menu editoru


Ovládání editoru z klávesnice

602SQL-Úplná dokumentace

Ovládání textového editoru

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;

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í a uložení souboru na disku na místo, kde je kurzor;

Ctrl+K, W - zápis označeného bloku do souboru na disku;

Ctrl+F - vyhledání řetězce v textu;

Ctrl+H - nahrazení řetězce v textu;

Ctrl+N - doplnění slova podle použitých identifikátorů (hledáno od slova nahoru)

Ctrl+M - doplnění slova podle použitých identifikátorů (hledáno od začátku textu)

F3 (Ctrl+L) - zopakování posledního vyhledávání nebo nahrazování;

Ctrl+S - uložení textu do databáze;

Ctrl+Shift+S - zápis textu do databáze pod jiným jménem;

Ctrl+P - otevření standardního pro tisk textu nebo bloku textu;

Ctrl+F4 - ukončení práce s editorem jako celek, zavření okna editoru;

Ctrl+Shift+F4 - zavření aktuální záložky 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.) ;

Ctrl+B - přeformátování odstavce od řádky, na níž je kurzor (pouze při editaci sloupce typu Text);

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.

Práce s myší

kliknutí způsobí přesun kurzoru na dané místo;

poklepání označí slovo do bloku;

přesun se stisknutým levým tlačítkem označuje průběžně blok textu;

kliknutí na označený blok a posun se stisknutým levým tlačítkem způsobí přesun bloku na místo, kde se tlačítko uvolní

totéž + klávesa Ctrl způsobí zkopírování bloku

pravé tlačítko vyvolá popup menu s nabídkou akcí pro slovo či blok pod kurzorem


Knihovny funkcí

602SQL-Úplná dokumentace

Elektronická encyklopedie funkcí

Abecední seznam všech funkcí a procedur 602SQL

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

Seznam subsekcí:

  • Vnitřní jazyk
  • Externí jazyky
  • Funkce a procedury přístupné z SQL (implementované na serveru)


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_config_admin - test, je-li uživatel členem skupiny CONFIG_ADMIN

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

Bigint2str - konverze velkého celého čísla na řetězec

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

Fulltext_index_doc - fultextové zaindexování dokumentů z klienta

-- G --

Get_data_rights - zjištění práv uživatele k datům

Get_error_num_text - vrací popis chyby

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

Get_property_value – zjištění vlastnosti SQL serveru

Get_server_error_context - informace o kontextu chyby

Get_server_error_suppl - informace o proměnné části popisu chyby

Get_server_info - informace o typu serveru

Get_sql_option – zjištění příznaků kompatibility SQL

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

GetSet_fil_blocks - zjištění či nastavení velikosti databázového souboru

GetSet_fil_size - zjištění 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.

-- 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ů

Invalidate_cached_table_info - vymazání klientské keše struktur tabulek

Isqr - druhá mocnina celého čísla

Is_repl_destin - pomocná funkce pro řízení replikací

IsIntRecSelected - vrací stav vybrání (označení) záznamu ve standardním formuláři

IsViewChanged - zjistí, byla-li ve formuláři provedena editační změna

-- K --

-- L --

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

LetterAddBLOBr -přidání souboru vytvořeného obsahu BLOBu z k zásilce

LetterAddBLOBs -přidání souboru vytvořeného obsahu BLOBu z k zásilce (SQL)

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

MailBoxGetMsgEx - získání textu došlé zásilky (rozšířené)

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

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

MailBoxSaveFileDBr - uložení k zásilce připojených souborů do databáze

MailBoxSaveFileDBs - uložení k zásilce připojených souborů do databáze (SQL)

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

SelectIntRec - označí (vybere) záznam ve standardním formuláři

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_property_value – nastavení vlastnosti SQL serveru

Set_sql_option - nastavení kompatibility 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

Skip_repl - zamezení replikování dat

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

Str2bigint - konverze řetězce znaků na velké celé číslo

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 602SQL

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_config_admin - test, je-li uživatel členem skupiny CONFIG_ADMIN

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_error_num_text - vrací popis chyby

Get_logged_user - zjištění jmen připojených klientů

Get_server_error_context - informace o kontextu chyby

Get_server_error_suppl - informace o proměnné části popisu chyby

Get_server_info - informace o typu serveru

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

Invalidate_cached_table_info - vymazání klientské keše struktur tabulek

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 602SQL

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

Get_property_value – zjištění vlastnosti SQL serveru

Get_sql_option – zjištění příznaků kompatibility SQL

Set_property_value – nastavení vlastnosti SQL serveru

Set_sql_option - nastavení kompatibility 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á

Is_repl_destin - pomocná funkce pro řízení replikací

Repl_control - programové řízení replikací

Replicate - okamžité replikování nebo vyžádání replikace - neinteraktivní varianta

Skip_repl - zamezení replikování dat

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í

Fulltext

Fulltext_index_doc - fultextové zaindexování dokumentů z klienta

Konverzní procedury

Bigint2str - konverze velkého celého čísla na řetězec

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

Str2bigint - konverze řetězce znaků na velké celé číslo

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

IsIntRecSelected - vrací stav vybrání (označení) záznamu ve standardním formuláři

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

SelectIntRec - označí (vybere) záznam ve standardním formuláři

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

IsViewChanged - zjistí, byla-li ve formuláři provedena editační změna

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

LetterAddBLOBr -přidání souboru vytvořeného obsahu BLOBu z k zásilce

LetterAddBLOBs -přidání souboru vytvořeného obsahu BLOBu z k zásilce (SQL)

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

MailBoxGetMsgEx - získání textu došlé zásilky (rozšířené)

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

MailBoxSaveFileDBr - uložení k zásilce připojených souborů do databáze

MailBoxSaveFileDBs - uložení k zásilce připojených souborů do databáze (SQL)

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_config_admin - test, je-li uživatel členem skupiny CONFIG_ADMIN

Am_I_db_admin - test, je-li uživatel členem skupiny DB_ADMIN

Am_I_security_admin - test, je-li uživatel členem skupiny SECURITY_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

Assign_to_tread - přiřadí cdp vláknu (ve vícevláknových aplikacích)

ASkip_repl - otevře dialog pro výběr serveru a pak zabrání replikaci dosud lokálně provedených změn na tento server

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

Backup_database_file - vytvoření zálohy databáze

Break - zrušení právě prováděného požadavku na server

Break_user - přerušení dlouhé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

connect - navázání spojení klienta se serverem

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

disconnect - ukončení spojení klienta se serverem

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í sloupců tabulky

Enum_attributes_ex - zjištění sloupců tabulky

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

Export_appl_param - rozšířený export aplikace z programu od verze 7

-- 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

Fulltext_index_doc - fultextové zaindexování dokumentů z klienta

-- G --

GetClient - handle MDI klienta aplikace

Get_data_rights - zjištění práv uživatele k datům

Get_error_num_text - vrací popis chyby

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

Get_property_value – zjištění vlastnosti SQL serveru

Get_server_error_context - informace o kontextu chyby

Get_server_error_suppl - informace o proměnné části popisu chyby

Get_server_info - informace o typu serveru

Get_sql_option – zjištění příznaků kompatibility SQL

Get_var_address - Přístup k proměnným projektu

Get_view_pos - zjištění čísla vybraného záznamu ve formuláři

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.

-- H --

Help_file - nastavení souboru nápověd

Hours - extrakce hodin z časového údaje

-- I --

Import_appl - import aplikace z programu

Import_appl_ex - import aplikace z programu bez interakce s uživatelem

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

Insert_record_ex - vložení záznamu do tabulky společně s hodnotami

interf_close - ukončení komunikace se serverem

interf_init - inicializace spojení klienta se serverem

Invalidate_cached_table_info - vymazání klientské keše struktur tabulek

IsIntRecSelected - vrací stav vybrání (označení) záznamu ve standardním formuláři

IsViewChanged - zjistí, byla-li ve formuláři provedena editační změna

-- 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

LetterAddBLOBr -přidání souboru vytvořeného obsahu BLOBu z k zásilce

LetterAddBLOBs -přidání souboru vytvořeného obsahu BLOBu z k zásilce (SQL)

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

MailBoxGetMsgEx - získání textu došlé zásilky (rozšířené)

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

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

MailBoxSaveFileDBr - uložení k zásilce připojených souborů do databáze

MailBoxSaveFileDBs - uložení k zásilce připojených souborů do databáze (SQL)

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 602SQL o změně menu hlavního okna 602SQL.

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

Replicate - okamžité replikování nebo vyžádání replikace - neinteraktivní varianta

Repl_abandon_sharing - ukončí sdílení zadané aplikace

Repl_accept_share_req - přijme resp. zamítne došlý požadavek na sdílení aplikace

Repl_cancel_packet – programová reakce na chybu replikací

Repl_direct_register_server - požádá server, aby navázal spojení s replikačním serverem na zadané adrese

Repl_edit_application_properties - otevře dialog pro nastavení parametrů aplikace, včetně parametrů sdílení s jinými servery

Repl_edit_local_server_options - otevře dialog pro nastavení parametrů replikací

Repl_edit_relation - otevře okno pro návrh replikačního vztahu

Repl_edit_sharing_parameters - otevře dialog na editaci replikačních pravidel

Repl_GetSet_appl_props - umožňuje zjistit a nastavit replikační vlastnosti aplikace

Repl_GetSet_local_server_props - umožňuje zjistit nebo nastavit replikační parametry lokálního serveru

Repl_GetSet_server_props - umožňuje zjistit příp. nastavit parametry zadaného vzdáleného replikačního serveru

Repl_Get_state - funkce vrací informace o stavu sdílení zadané aplikace se zadaným serverem

Repl_refresh_server_info - požádá server, aby získal aktuální informace o zadaném replikačním serveru

Repl_register_new_remote_server - otevře dialog pro navázání spojení se vzdáleným replikačním serverem

Repl_resend_packet – programová reakce na chybu replikací

Repl_send_share_req - požádá server, aby odeslal paket s žádostí o sdílení zadané aplikace

Repl_synchronize - zajistí, že se při příští replikaci přenesou na protější server všechna sdílená data, pro která je nastaveno replikování směrem ven

Repl_unregister_remote_server - vymaže informace o vzdáleném replikačním serveru

Reset_replication - zastaví a spustí replikace tak, aby se mohly projevit

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

SelectIntRec - označí (vybere) záznam ve standardním formuláři

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_preview_type - nastavení okna pro zobrazení preview

Set_printer - nastavení parametrů tisku sestav

Set_progress_report_modulus - nastavení frekvence zpráv ze serveru

Set_property_value – nastavení vlastnosti SQL 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

Skip_repl - zamezení replikování dat

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_host_execute - provedení SQL příkazu s předáním klientských proměnných ext. jazyka

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 --

unassign -

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 602SQL

WinBaseFrameProc - zpracování zpráv, které přišly hlavnímu oknu aplikace 602SQL

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_record_ex - přepsání záznamu tabulky

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)

602SQL-Úplná dokumentace

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

Insert_record_ex - vložení záznamu do tabulky společně s hodnotami

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_record_ex - přepsání záznamu tabulky

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_config_admin - test, je-li uživatel členem skupiny CONFIG_ADMIN

Am_I_db_admin - test, je-li uživatel členem skupiny DB_ADMIN

Am_I_security_admin - test, je-li uživatel členem skupiny SECURITY_ADMIN

Appl_inst_count - zjištění počtu současně běžících aplikací

Available_memory - zjištění velikosti volné paměti

Backup_database_file - vytvoření zálohy databáze

Break_user - přerušení dlouhého požadavku na server

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_error_num_text - vrací popis chyby

Get_info - všeobecné informace o stavu databáze a serveru

Get_logged_user - zjištění jmen připojených klientů

Get_server_error_context - informace o kontextu chyby

Get_server_error_suppl - informace o proměnné části popisu chyby

Get_server_info - informace o typu serveru

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

Invalidate_cached_table_info - vymazání klientské keše struktur tabulek

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 602SQL

Who_am_I - zjištění jména přihlášeného uživatele

Obálka aplikace v externích jazycích

assign_to_tread - přiřadí cdp vláknu (ve vícevláknových aplikací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

connect - navázání spojení klienta se serverem

disconnect - ukončení spojení klienta se serverem

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

unassign -

unlink_kernel - rozvázání spojení klienta se serverem

SQL server

Get_sql_option – zjištění příznaků kompatibility SQL

Get_property_value – zjištění vlastnosti SQL serveru

Set_property_value – nastavení vlastnosti SQL serveru

Set_sql_option - nastavení kompatibility 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_host_execute - provedení SQL příkazu s předáním klientských proměnných ext. jazyka

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ů tabulky

Enum_attributes_ex - zjištění sloupců tabulky

Podpisy a koloběh dokumentů

GetSet_next_user - zjištění nebo zápis do kolujícího dokumentu označení uživatele, na nějž dokument čeká

Signature_state - zjištění stavu digitálního podpisu

Atoken_control - správa pešků

Token_control - manipulace s peškem

Replikace

AReplicate - interaktivní odeslání replikačních paketů / žádosti o replikaci

ASkip_repl - otevře dialog pro výběr serveru a pak zabrání replikaci dosud lokálně provedených změn na tento server

Replicate - okamžité replikování nebo vyžádání replikace - neinteraktivní varianta

Replicate - okamžité replikování nebo vyžádání replikace - neinteraktivní varianta

Repl_abandon_sharing - ukončí sdílení zadané aplikace

Repl_accept_share_req - přijme resp. zamítne došlý požadavek na sdílení aplikace

Repl_cancel_packet – programová reakce na chybu replikací

Repl_direct_register_server - požádá server, aby navázal spojení s replikačním serverem na zadané adrese

Repl_edit_application_properties - otevře dialog pro nastavení parametrů aplikace, včetně parametrů sdílení s jinými servery

Repl_edit_local_server_options - otevře dialog pro nastavení parametrů replikací

Repl_edit_relation - otevře okno pro návrh replikačního vztahu

Repl_edit_sharing_parameters - otevře dialog na editaci replikačních pravidel

Repl_GetSet_appl_props - umožňuje zjistit a nastavit replikační vlastnosti aplikace

Repl_GetSet_local_server_props - umožňuje zjistit nebo nastavit replikační parametry lokálního serveru

Repl_GetSet_server_props - umožňuje zjistit příp. nastavit parametry zadaného vzdáleného replikačního serveru

Repl_Get_state - funkce vrací informace o stavu sdílení zadané aplikace se zadaným serverem

Repl_refresh_server_info - požádá server, aby získal aktuální informace o zadaném replikačním serveru

Repl_register_new_remote_server - otevře dialog pro navázání spojení se vzdáleným replikačním serverem

Repl_resend_packet – programová reakce na chybu replikací

Repl_send_share_req - požádá server, aby odeslal paket s žádostí o sdílení zadané aplikace

Repl_synchronize - zajistí, že se při příští replikaci přenesou na protější server všechna sdílená data, pro která je nastaveno replikování směrem ven

Repl_unregister_remote_server - vymaže informace o vzdáleném replikačním serveru

Reset_replication - zastaví a spustí replikace tak, aby se mohly projevit

Skip_repl - zamezení replikování dat

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

Fulltext_index_doc - fultextové zaindexování dokumentů z klienta

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

IsIntRecSelected - vrací stav vybrání (označení) záznamu ve standardním formuláři

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

SelectIntRec - označí (vybere) záznam ve standardním formuláři

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

IsViewChanged - zjistí, byla-li ve formuláři provedena editační změna

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_preview_type - nastavení okna pro zobrazení preview

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 602SQL o změně menu hlavního okna 602SQL.

WinBaseFrameProc - zpracování zpráv, které přišly hlavnímu oknu aplikace 602SQL

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á

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

LetterAddBLOBr -přidání souboru vytvořeného obsahu BLOBu z k zásilce

LetterAddBLOBs -přidání souboru vytvořeného obsahu BLOBu z k zásilce (SQL)

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

MailBoxGetMsgEx - získání textu došlé zásilky (rozšířené)

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

MailBoxSaveFileDBr - uložení k zásilce připojených souborů do databáze

MailBoxSaveFileDBs - uložení k zásilce připojených souborů do databáze (SQL)

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

Export_appl_param - rozšířený export aplikace z programu od verze 7

Import_appl - import aplikace z programu

Import_appl_ex - import aplikace z programu bez interakce s uživatelem

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


Parametry klienta na příkazové řádce

602SQL-Úplná dokumentace

Parametry příkazové řádky klienta

Programu 602CLI8 .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;

/Ljméno - v logovacím dialogu se přednastaví zadané uživatelské jméno (má význam, když je zakázán anonymní přístup a v logovacím dialogu je prázdné combo), použití předpokládá uvedení & a jména serveru;

/B - klientské prostředí nebude automaticky překládat startovní program v aplikaci, což značně urychlí přecházení mezi aplikacemi (zvláště při vývoji)

Žá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:\602SQL\602cli8.exe &jméno_serveru jméno_aplikace /S

nebo

    c:\602SQL\602cli8.exe &jméno_serveru jméno_aplikace /Cpokus.EXX

Viz také: Parametry příkazové řádky serveru


Instalace 602SQL na Windows

Funkční instalaci 602SQL pod Windows lze vytvořit třemi cestami:

  1. pomocí instalačního programu 602SQL;
  2. pomocí instalačního programu jiného produktu, do něhož je začleněna instalace 602SQL pomocí tzv. instalačního objektu (tuto techniku podporuje InstallShield od verze 6.0);
  3. zkopírováním souborů 602SQL na vhodná místa a vytvořením potřebných záznamů v registru.

Standardní instalační program lze parametrizovat a proto jej lze využít i pro instalaci databázových aplikací.

Instalační objekt 602SQL je samostatně instalovatelný produkt. Jeho dokumentace je obsažena přímo v něm. Má vlastní programové rozhraní, které dovoluje jej pružně začleňovat do jiných instalací.

Pro provoz klientů 602SQL je nutná přítomnost ODBC Driver Manageru. Tato komponenta je na většině počítačů s Windows instalována jako součást základního programového vybavení. Na počítačích, na nichž ODBC DM není, je třeba jej instalovat před instalací 602SQL, a to například pomocí programu ODBC.exe.

Pro práci s nápovědou 602SQL je potřebná přítomnost prohlížeče HTML nápověd. Ten je zpravidla součástí základního programového vybavení počítače s Windows. Instaluje se automaticky spolu s novějšími verzemi MS Internet Exploreru.

Pro využití fulltextového indexování a vyhledávání v 602SQL jsou potřebné další nástroje, které zde nejsou popsány.

Níže je uveden přehled souborů a záznamů v registru potřebných pro provoz 602SQL.

Soubory v adresáři 602SQL

Většina souborů souvisejících s 602SQL se při instalaci zkopíruje do zvláštního adresáře, který budeme označovat jako adresář 602SQL. Potřeba těchto souborů souvisí s požadovanými funkcemi 602SQL:

  • SQL server běžící jako úloha (task) - 602SQL8.EXE
  • SQL server běžící jako služba (service) - 602SVC8.EXE
  • Klient (soubory potřebné pro všechny klientské operace) - 602KRNL8.DLL, 602PREZ8.DLL
  • Návrháře (tabulek, formulářů, dotazů, WWW objektů) - 602DVLP8.DLL, 602WED8.DLL
  • Provozní systém a vývojové prostředí - 602CLI8.EXE
  • OLE server a ActiveX control - WBOLE602.EXE, WBVIEW.OCX
  • Nápověda - 602SQL.CHM
  • Soubory nutné pro všechny operace - WBED.DLL, 602SEC8.DLL, M602OU32.DLL
  • Konfigurační panel, vytváření nové databáze - 602CONF8.EXE
  • Generování čárového kódu - soubory TAL*.DLL
  • Poštovní funkce - M602INET.DLL, WM*.DLL, NW*.DLL

Soubory v systémovém adresáři Windows

Do systémového adresáře Windows se umisťují soubory, které jsou používány jinými systémovými komponentami Windows, např. ODBC Driver Managerem nebo ODMA Managerem. Jména těchto souborů závisejí na verzi 602SQL. Jsou to (ve verzi 8.0):

  • Pro konfiguraci ODBC driveru a přístup do 602SQL přes ODBC - 602ODBC8.DLL, WBED.DLL, 602SEC8.DLL
  • Pro využití 602SQL jako skladu dat přes rozhraní ODMA - 602ODMA8.DLL, WBED.DLL, 602SEC8.DLL, ODMA32.DLL

Soubory v adresářích web serveru

Pro přístup do databáze z webových stránek je třeba do vhodného adresáře web serveru zkopírovat soubory internetových klientů: 602CGI8.EXE, 602FCGI8.EXE (resp. 602FCSVC.EXE), 602INET8.EXE, 602ISAP8.DLL, LIBFCGI.DLL, PHP_602SQL.DLL.

Záznam v registru o instalaci

Instalaci verze 8.0 produktu 602SQL odpovídá v registru klíč:

HKEY_LOCAL_MACHINE\SOFTWARE\Software602\602SQL\8.0

Pod tímto klíčem se nacházejí tyto hodnoty:

Jméno hodnoty | Typ | Význam | Příklad
Path | String | Cesta k adresáři 602SQL | c:\Program Files\Software602\602SQL
Version | String | Číslo verze | 8.0
Release | String | Číslo vydání | B
FIL version supported | String | Číslo verze databázového souboru | 8
Client Protocol | String | Síťový protokol klienta (bez rozlišení serveru) | TCP/IP

Další možné hodnoty jsou nepovinné.

Záznam v registru o serveru a databázi

Každé lokální databází a každému síťovému serveru odpovídá v registru klíč:

HKEY_LOCAL_MACHINE\SOFTWARE\Software602\602SQL\Database\jméno

kde jméno je jméno databáze resp. serveru. Například databáze Sklad_dat má klíč:

HKEY_LOCAL_MACHINE\SOFTWARE\Software602\602SQL\Database\Sklad_dat

Pod tímto klíčem se nacházejí tyto hodnoty:

Jméno hodnoty | Typ | Význam | Příklad | Využívá
Path | String | Cesta k databázovému souboru | d:\databaze\sklad | Server
IP address | String | IP adresa serveru | 192.168.1.25 | Klient využívající TCP/IP
IPPort | DWORD | Číslo portu server | 6000 | Klient i server (TCP/IP)
Version | String | Číslo verze databázového souboru | 8 | Klient
Client Protocol | String | Síťový protokol klienta pro přístup na tento server | TCP/IP | Klient
Through Firewall | DWORD | Přítomnost Socks Firewallu mezi klientem a serverem | 0 nebo 1 | Klient
Firewall IP address | String | Adresa Socks Firewallu | 192.168.3.115 | Klient

Adresa Socks Firewallu ležícího mezi klientem a serverem může být také uvedena společně pro více serverů pod klíčem:

HKEY_LOCAL_MACHINE\SOFTWARE\Software602\602SQL

Další možné hodnoty jsou nepovinné.

Seznam subsekcí:

  • Provozní systém
  • Instalace provozního systému
  • Parametry instalace v souboru SETUP.INI
  • Nestandardní způsoby instalace


Provozní systém (Runtime)

Provozní systém (Runtime) 602SQL je režim provozu, který umožní spuštění připravené aplikace, nepovolí však žádné její úpravy. Šíření aplikací 602SQL s runtime modulem nepodléhá žádné registrační ani oznamovací povinnosti vůči distributorovi (ale to platí i o šíření Vývojového prostředí, které je nadmnožinou Provozního prostředí). 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. Omezení přístupu ke zdrojovým textům programů a objektů lze lépe zajistit pomocí šifrovaných objektů v zamčené aplikaci.

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í 602SQL

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.


Vytvoření instalace provozního systému s importem aplikace

602SQL-Úplná dokumentace

Instalace vlastní aplikace s provozním klientem 602SQL

Aplikace se šíří spolu s instalací provozního systému 602SQL upravenou tak, že na konci instalace proběhne import aplikace do databáze.

Postup při vytváření těchto instalačního CD je následující:

1. Vytvořte kopii instalačního programu 602SQL - je potřeba mít instalaci v "rozbalené" formě, tedy obsahující mj. SETUP.EXE, SETUP.INI a DATAn.CAB (na rozdíl od formy "sbalené" do jediného EXE souboru, určené pro stahování z webu; i v případě, že máte jen EXE, lze zíkat rozbalenou podobu v TEMP adresáři, informujte se na Hotline).

2. Vyexportovanou aplikaci umístěte aplikaci do podadresáře adresáře se SETUP.EXE, včetně případných souborů *.HLP (nápověda), *.ICO (vlastní ikona) a .EXX (zkompilovaný program), případně upravte APL soubor.

3. Pomoci textového editoru (například NOTEPAD) otevřete soubor SETUP.INI a začněte upravovat (nemažte ty údaje, které jsou v něm již obsaženy!).

Zejména v sekci [602SQL] na řádku začínajícím

    IMPORT=

připište bezprostředně za rovnítko adresář (z bodu 2) a jméno aplikace (jméno APL souboru bez přípony), např.

    IMPORT=/podaresář/Majetek

4. Pokud chcete provozovat klienta v režimu Runtime, doplňte další řádek Rtonly=1;

5. Upravte případné další parametry importu pomocí editace SETUP.INI - podrobnosti, především přidejte AskInsert=0;

Program SETUP.EXE nyní instaluje provozní systém 602SQL 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


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 [602SQL]:

Import=jméno aplikace (jméno APL souboru aplikace bez přípony)

po instalaci 602SQL 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 1 pro kompletní instalaci (SQL server + klienti), 4 pro samostatného klienta, 5 pro samostatné ODBC a ODMA drivery.

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. Je-li AskProduct=0, nesmí být vynecháno 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žití 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. 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 (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ém databázovém souboru. 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četně případných parametrů klienta na příkazové řádce (v praxi se použije /S pro spuštění aplikace, možná /L pro anonymní přístup). V ikoně (umístěné ve ShortcutFolder) se vytvoří příkazový řádek (cíl) ve tvaru TargetDir\602CLI8.EXE &ServerName CreateApplIcon1

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 602SQL, předpokládá se připojení na již existující (nejspíš síťový) 602SQL 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 602SQL, předpokládá se přístup k datům již existujícího 602SQL 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 602SQL 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)
 | * Instalace vlastní aplikace s provozním klientem 602SQL


Nestandardní způsoby instalace

Instalace aplikace pomocí zkopírování databázového souboru

V některých případech bývá pro vývojáře jednodušší při instalaci 602SQL včetně aplikace 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 právy atd.) a pouze ho při instalaci zkopírovat.

V tomto případě použijte SETUP.INI v následující podobě:

...
[602SQL]
Title=Instalace naší aplikace
WelcomeTitle=Vítejte
WelcomeText=Instalujete naší aplikaci Diář
InstallProduct=0
AskProduct=0
TargetDir=c:\diar
AskTarget=1
ServerName=DIAR_DB
AskDb=0
ShortcutFolder=Diář 2000
AskFolder=0
ShowSummary=0
CopyFIL=1
CreateApplIconNum=1
CreateApplIcon1=diar /S
CreateApplIconCapt1=Diář 2000
CopyFilesNum=2
CopyFile1=diar.hlp
CopyFile2=cti_mne.txt
NoFinishDialog=1
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 do adresáře se SETUP.INI v případě instalace z CD; při CD instalaci přidáte ještě hodnotu AskInsert=0. Mají-li se aplikace spouštět jen v provozním režimu, přidejte ještě hodnotu Rtonly=1.

Pro instalaci z disket je tento způsob nevhodný, protože se databázový soubor většinou nevejde na volnou část poslední diskety.

Instalace Klienta 602SQL

Je-li třeba nainstalovat pouze klientské prostředí 602SQL a připojovat se k již existujícímu SQL serveru, je to možné buď přímo z originálního CD s 602SQL nebo z instalačního programu Runtime (Provozního systému). V tomto druhém případě je nutné do SETUP.INI přidat hodnotu ClientOnly=1.

SETUP.INI může mít následující podobu

...
[602SQL]
TargetDir=d:\602SQL
AskTarget=1
ShortcutFolder=602SQL klient
AskFolder=1
ClientOnly=1

Instalace ODBC driveru 602SQL

Je-li třeba nainstalovat pouze 602SQL 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 602SQL nebo z upraveného instalačního programu. V tomto druhém případě je nutné do SETUP.INI přidat hodnotu ODBCOnly=1.

SETUP.INI může mít následující podobu

...
[602SQL]
TargetDir=d:\602SQL
AskTarget=1
ShortcutFolder=602SQL ODBC klient
AskFolder=1
ODBCOnly=1
Viz také: | * Parametry SETUP.INI
 | * Instalace vlastní aplikace s provozním klientem 602SQL
 | * Databáze umístěné na CD ROM


Instalace 602SQL pod Linuxem

602SQL pro Linux se distribuuje formou rpm balíčků. Jejich instalaci musí provádět root.

Balíček 602SQL (soubor 602sql-8.0-*.i386.rpm) obsahuje tyto soubory:

  • /usr/bin/602sql8 - SQL server
  • /usr/bin/602cli8 - řádkový testovací klient
  • /usr/bin/602inst8 - skript pro registraci nových serverů / databází
  • /usr/bin/602cgi8 - CGI klient
  • /usr/bin/602odbcdsn - skript pro registraci ODBC zdroje dat
  • /etc/602sql - komentovaný konfigurační soubor 602sql
  • /etc/init.d/602sql8 - skript pro hromadné spouštění serverů na pozadí
  • /usr/lib/libwb602.so - odkaz na knihovnu funkcí pro přístup klienta na server
  • /usr/lib/libcgi602.so - odkaz na knihovnu funkcí pro CGI klienty
  • /usr/lib/602sql8/libwb602.so* - knihovna funkcí pro přístup klienta na server
  • /usr/lib/602sql8/libsecure.so* - knihovna šifrovacích funkcí
  • /usr/lib/602sql8/libodbc602.so* - ODBC driver
  • /usr/lib/602sql8/m602ou32.so* - pomocná knihovna
  • /usr/lib/602sql8/getpps - pomocný program
  • /usr/lib/602sql8/writepps - pomocný program
  • /usr/lib/apache/mod_602sql8.so - modul pro přístup z Apache web serveru na 602sql server
  • /usr/include/602sql8/*.h - hlavičkové soubory pro vývoj klientů v C/C++
  • /usr/share/602sql8/spl___cz.dat - lematizační slovník pro fulltextové nástroje
  • /usr/share/doc/602sql8/html/* - plná dokumentace v HTML formátu
  • /usr/share/man/man1/* - manuálové stránky k programům

Instalace základního balíčku 602SQL provede kromě kopírování souborů tyto akce:

  • Pokud neexistuje, pak vytvoří se uživatel sql602, na jehož účet lze spouštět SQL server.
  • Pokud již existuje konfigurační soubor /etc/602sql, pak se zachová (nepřepíše se souborem z balíčku).
  • Je-li k dispozici program chkconfig, pak zajistí volání skriptu /etc/init.d/602sql8 při startu a ukončení operačního systému a tím automatické spouštění a vypínání skupiny SQL serverů provozovaných jako deamony.
  • Doplní se informace o databázovém souboru 602sql do dat programu file.
  • Je-li instalováno unixODBC, pak v něm zaregistruje ODBC driver pro 602sql server.

Vzorový konfigurační soubor /etc/602sql obsahuje registraci databáze jménem testdb umístěné v adresáři /var/lib/602sql/testdb. Vlastní databázový soubor vznikne při prvním spuštění serveru s parametrem -ntestdb. O spouštění a provozu SQL serveru na Linuxu se dočtete zde.

Na instalacích LINUXu neobsahujících rpm lze soubory 602sql vybalit z 602sql-binary-8.0.tar.gz.

Knihovny pro přístup z PHP na 602sql server (php_602sql8.so) existují v mnoha verzích pro různé verze PHP, proto nejsou zahrnuty do balíčku a dají se stáhnout samostatně (i ve zdrojové formě).

Grafická konfigurační konzole pod X

Pro správu a konfigurování SQL serveru lze s výhodou využít grafickou konzoli pracující v prostředí X. Tako konzole je téměř shodná s konzolí pro Windows.

Konzole se instaluje z balíčku 602sql-Xconsole-8.0-*.i386.rpm. Její soubory jsou alternativně v 602sql-Xconsole-binary-8.0.tar.gz.

Linuxová Řídicí konzole se spouští příkazem c602conf8.


Šíření aplikací

Hotová databázová aplikace se šíří tak, že se na počítači autora exportuje do souborů a uživatel si ji importuje do své databáze.

Je-li třeba omezit přístup uživatele do interních úrovní aplikace, aplikace se exportuje jako zamčená.

Po importu aplikace se provede standardní obsazení uživatelů a skupin do rolí.

Seznam subsekcí:

  • Export aplikace
  • Import aplikace
  • Zamčená aplikace
  • Definiční soubor aplikace (.APL)
  • Parametry importu a exportu
  • Výběr zdroje dat při importu aplikace


Export aplikace

Export aplikace jako celku, tj. přenesení všech složek otevřené aplikace z prostředí řídicího panelu 602SQL na disk 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í. U tabulek můžete jednotlivě označit ty, u nichž se nemají exportovat data. Exportují-li se i data z tabulek, proběhne jejich export ve vnitřním tvaru 602SQL.

Po vybrání varianty exportu musíte zadat cestu a jméno pro definiční soubor exportované aplikace (tzv. 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. Jména souborů vznikají jako jméno objektu a definovaná přípona. Je-li potřeba vytvářet soubory podle konvencí DOSu (tj. 8.3), použijte volbu v Nastavení parametrů klienta. Pokud ve stejném adresáři již existuje stejně pojmenovaný soubor, budete varováni.

Popis exportu (a následného importu) aplikace z hlediska práv ke standardním rolím je na stránce Role a práva v aplikaci .

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.

Seznam subsekcí:

  • Export aplikace - popis dialogu
  • Export vybraných komponent aplikace


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, triggerů , sekvencí a replikačních vztahů s výjimkou těch, které jsou na řídicím panelu označeny, aby se neexportovaly; využití viz Sdílení datové základny aplikace.

Exportovat pouze kód programů - výsledkem exportu je pouze soubor(y) s příponou EXX obsahující přeložený program(y). Použije se tehdy, když autor šíří aplikaci bez zdrojového kódu klientského programu a nechce při každé změně v kódu exportovat celou aplikaci.

Exportovat pouze objekty změněné od: - provede se export jen těch objektů, které byly modifikovány nebo vytvořeny po zadaném datu (včetně), s výjimkou těch, které jsou na řídicím panelu označeny, aby se neexportovaly;

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. I v případě, že se neexportují data z tabulek (předchozí přepínač), budou se exportovat práva k těmto datům.

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 jako zamčenou - 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. Tuto volbu je též třeba použít, exportuje-li se již dříve zašifrovaná aplikace. Podrobnosti - viz Zamčená aplikaci.

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 602SQL. 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.


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 (u tabulek) dvou označovacích čtverců skrytých pod pravým sloupcem tlačítek (Exportovat objekt v aplikaci, Exportovat data v aplikaci).

Každý nově vytvořený (u duplikací) nebo importovaný objekt má nastaven příznak exportu. Stav příznaku se trvale pamatuje. Změna příznaku ovlivní datum poslední editace objektu.

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 602SQL 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.


Import aplikace

Import aplikace jako celku, tj. přenesení všech složek aplikace ze souborů do prostředí 602SQL se provádí akcí Importovat z řídicího panelu aplikací. Aplikace, kterou chcete importovat, musí být na disku a musí být popsána svým definičním souborem (tento soubor má příponu APL a vznikl pravděpodobně exportem aplikace z jiného 602 SQL serveru).

Pokud import aplikace zahrnuje také import tabulek včetně 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. V poslední fázi importu probíhá překlad klientských programů.

Po importu je nová 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 formuláři a editorem.

Byl-li před exportem aplikace obsahující ODBC spojení na externí zdroj dat 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 602SQL nebo je vytvořit ve zmíněném zdroji dat.

Je-li v databázi již aplikace téhož jména (nebo téže binární identifikace), 602SQL vás na to upozorní. Budete mít na výběr tři možnosti:

  • zrušit import

  • přejmenovat importovanou aplikaci (dát ji nové jméno odlišné od jména původního) - tlačítko Nová instance; nová unikátní identifikace se vytvoří automaticky;

  • nahradit komponenty existující aplikace komponentami importovanými (tato varianta může selhat při nahrazování tabulek, které jsou vázány pravidly referenční integrity). POZOR! Pokud APL soubor obsahuje tabulky (i bez dat), původní data se při importu s narazením ztratí.

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ů kliena 602SQL v okně Export a Import.

Popis importu (a předchozího exportu) aplikace z hlediska práv ke standardním rolím je na stránce Role a práva v aplikaci .


Zamčené aplikace

Požadavky na zajištění aplikace

Při distribuci aplikací uživatelům je třeba naplnit několik bezpečnostních cílů:

  1. umožnit ochranu know-how autora aplikace a znemožnit volné čtení definic její komponent;
  2. znemožnit změnu vnitřní logiky aplikace (např. kontrolu vnitroaplikačních licencí) pozměněním aplikace;
  3. chránit data v aplikaci přístupovými právy nejen proti neoprávněným uživatelům ale případně i proti administrátorovi aplikace.

Tyto cíle jsou splněny v zamčených aplikacích. O tom, zda aplikace bude zamčená, se rozhoduje při jejím exportu: aplikace, která byla exportována jako zamčená, bude zamčená i po importu.

Ochrana citlivých komponent aplikace před vyzrazením

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á právo je používat. 602SQL nabízí možnost uložení komponent v šifrovaném tvaru, aby se zamezilo riziku zneužití zdrojových textů z dohotovených aplikací distribuovaných uživatelům.

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 zamčenou.

Po importu zamčené 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;
  • při dalším exportu aplikace se zašifrované objekty exportují zašifrovaně (nutno zvolit znovu Exportovat zamčenou aplikaci, v opačném případě export skončí chybou při nalezení prvního zašifrovaného objektu);
  • 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í.

Ochrana neměnnosti a provozuschopnosti aplikace

V importované aplikaci má právo modifikovat její komponenty pouze uživatel obsazený do role Author. To se týká zašifrovaných i nezašifrovaných komponent.

Je-li importována zamčená aplikace, pak žádný uživatel není a nemůže být obsazen do role Author, proto její komponenty nemohou být modifikovány. Nové komponenty lze vytvářet i později modifikovat.

Pokud je záměrem autora aplikace umožnit uživateli, aby za provozu směl modifikovat některé komponenty, pak práva k jejich modifikování přidělí některé jiné roli.

Ochrana dat v aplikaci

Žádná z rolí v aplikaci nemusí mít plná práva ke všem datům. Záleží na záměru autora aplikace, jak přidělí práva k datům rolím definovaným v aplikaci. Proto uživatelé aplikace mohou mít v některých tabulkách soukromá data, která nemůže číst nebo modifikovat ani administrátor aplikace.

Triggery v aplikaci mají neomezený přístup k datům a totéž platí o dotazech a procedurách uložených na serveru, pokud jsou označeny pro provádění v administrátorském režimu.

Je-li aplikace zamčená, pak jsou zablokovány tyto čtyři cesty neoprávněného přístupu k datům:

  • nelze překonat systém přístupových práv vytvořením nového triggeru nebo pozměněním existujícího;
  • nelze přidělit příznak provádění v administrátorském režimu žádným dalším procedurám nebo kurzorům;
  • nelze pozměnit procedury nebo kurzory provozované v administrátorském módu;
  • nelze nepřímo změnit některou komponentu aplikace tím, že se zruší a znovu vytvoří.

Všechna výše vyjmenovaná oprávnění má pouze uživatel obsazený do role Author, a nikdo takový v zamčené aplikaci neexistuje. Administrátor zamčené aplikace nemůže do role Author nikoho obsadit.

Upgrade zamčené aplikace

Přechod na novou verzi aplikace se obvykle realizuje importem nových a pozměněných komponent do starší verze aplikace.

Při importu upgrade je importující klient dočasně obsazen do role Author, takže může vytvářet i modifikovat komponenty nad rámec oprávnění uživatelů aplikace.


Definiční soubor aplikace

602SQL-Úplná dokumentace

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 [příznaky] jméno_tabulky  [soubor] [práva]
Data jméno_tabulky   [soubor] [práva]
Dataprv jméno_tabulky   [soubor] [práva]
View [příznaky] jméno_pohledu  [soubor] [práva]
Cursor [příznaky] jméno_dotazu  [soubor] [práva]
Program [příznaky] jméno_programu   [soubor] [práva]
Code [příznaky] jméno_programu   [soubor] [práva]
Menu [příznaky] jméno_menu   [soubor] [práva]
Picture [příznaky] jméno_obrázku   [soubor] [práva]
Connect [příznaky] jméno_ODBC_zdroje_dat   [soubor] [práva]
Relat [příznaky] jméno_relace   [soubor] [práva]
Drawing [příznaky] jméno_schématu   [soubor] [práva]
Graph [příznaky] jméno_pomocného_objektu   [soubor] [práva]
Replrel [příznaky] jméno_replikačního_vztahu   [soubor] [práva]
Proc [příznaky] jméno_procedury [soubor] [práva]
Trigger [příznaky] jméno_triggeru [soubor] [práva]
Www [příznaky] jméno_WWW_objektu [soubor] [práva]
Sequen [příznaky] jméno_sekvence [soubor] [práva]
Folder [příznaky] jméno_složky
Role jméno_role  [obsazení_do_role]
Icon jméno_zástupce:jméno_složky  parametry_pro_602SQL

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).

Položky odpovídající objektům připojeným do aplikace z jiných aplikací 602SQL (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ě.

Případné "příznaky" před jménem objektu obsahují určité interní údaje o objektu.

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:

  • je-li zapnut export s krátkými jmény vezme se prvních osm znaků jména objektu, odstraní se diakritika a nealfanumerické znaky se nahradí znakem _ (podtržítko), při exportu s dlouhými jmény se vezme celé jméno objektu

  • 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 (může nastat jen při exportu s krátkými jmény).

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. Práva jsou ve tvaru

({U|G|R} identifikace binární_práva)

pro uživatele (U) skupinu (G) a roli (R). Do těchto symbolů nezasahujte.

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 602CLI8.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, 602SQL 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ů 602SQL na tom počítači, kde import proběhne (volba Vytvářet / Nevytvářet ikonu aplikace).

Seznam subsekcí:

  • Úprava APL pro import aplikace pouze s EXX


Použití programu v přeloženém tvaru

602SQL-Úplná dokumentace

Ú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 602SQL 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_602SQL 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 602SQL a do příkazové řádky zástupce se doplní parametr /C, cesta a jméno souboru.

Při spuštění 602SQL 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 602SQL, která má programy v adresáři C:\602SQL, 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 602CLI8.EXE s parametry:

&"Hlavní_server" "Majetek_sklady" /CC:\602SQL\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.


Nastavení ikony importované aplikace

602SQL-Úplná dokumentace

Nastavení parametrů import a exportu

Okno Import a export umožní nastavit globální parametry klienta vztahující se k exportu objektů a importu aplikace. Nastavení platí až do příští změny pro celý server.

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.


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 602SQL 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.


Přístup k datům pomocí WBIK

602SQL-Úplná dokumentace

Přístup k datům pomocí 602SQL Internet Klientů

Součástí dodávky kompletu 602SQL server je i sada programů 602SQL Internet klienti, pomocí kterých je možné vytvářet databázové aplikace napojené na libovolný webserver (který podporuje dané rozhraní).

Jednotliví Internet klienti se liší tím, v jakém prostředí běží (Windows, Linux) a komunikačním protokolem, který používají ke spojení s webserverem. Jejich název je odvozen z názvu (zkratky) komunikačního protokolu v nich použitého. S 602SQL serverem se dodávají: CGI klient, ISAPI klient, FastCGI klient a speciální klient pro webserver Apache:

  • CGI klient pro Win32 (602cgi8.exe) na WindowsNT/2000/XP, na Windows95/98.

  • CGI klient pro Linux - binární soubor (602cgi8)

  • FastCGI klient (602fcgi8.exe, resp. 602fsvc8.exe) - možné používat na WindowsNT/2000/XP.

  • ISAPI klient (602isap8.dll) - možné používat na Windows NT/2000/XP.

  • Internet klient pro Apache (modul pro Apache) - existuje pro Linux (mod_602sql8.so) i pro Windows (mod_602sql8.dll); pro verzi Apache 1.3.x; verze pro Apache 2.0.x se jmenuje mod2_602sql8.so resp. mod2_602sql8.dll. Viz - konfigurace .

Popis vytváření aplikací je shodný pro všechny tyto klienty - všichni klienti používají tytéž konektory a šablony. Autor se bude rozhodovat podle toho, co zvládne příslušný webserver (tj. které z komunikačních protokolů má webserver implementovány).

Uživatel aplikace (majitel připojení na Internet) vyplňováním údajů na stránce může (např. právě pomocí CGI klienta) generovat a odesílat SQL příkazy pro databázový server, příslušný webserver z odpovědi databázového serveru zhotoví podle zadané šablony odpověď ve formátu HTML a pošle ji zpět uživateli.

Podobným principem pracují internetové aplikace jako jízdní řád, vyhledávání jmen, elektronický obchodní dům apod.

Na tomto místě se nebudeme zabývat problematikou vytváření HTML dokumentů ani tvorby HTML formulářů, zaměříme se pouze na správné provázání formuláře s WBIK. Předpokladem zvládnutí následujícího textu je základní znalost HTML.

Kromě těchto Internet klientů existuje i další způsob vytváření dynamických stránek - PHP modul pro 602SQL . Vytváření stránek s využitím PHP je odlišné od popisu uvedeného zde v této kapitole.

Seznam subsekcí:

  • Sestavení dynamické stránky
  • Internet Klient jako modul Apache
  • Novinky verze 2.0 (s verzí 602SQL 5.1)
  • Novinky verze 6.0 (s verzí 602SQL 6.0)
  • Novinky verze 6.1 (s verzí 602SQL 6.1)
  • Novinky verze 7.0 (s verzí 602SQL 7.0)
  • Novinky verze 8.0 (s verzí 602SQL 8.0)


Sestavení dynamické HTML stránky

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 602SQL Internet klientovi (WBIK), přebírá od něj sestavenou stránku a odesílá ji browseru

3. 602SQL Internet klient

  • přebere od webserveru požadavek na sestavení dynamické HTML stránky;

  • vyhledá a z WWW objektu přečte WBC KONEKTOR 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 (konektor i šablona mohou být součástí jediného WWW objektu aplikace); (ve specifických případech se výstupní dokument negeneruje podle šablony, ale browseru se zasílá proud binárních dat, na něž browser reaguje např. otevřením asociovaného programu - viz příkaz SendFile)

  • výslednou stránku předá webserveru;

4. 602SQL 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í:

602SQL 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). WWW objekty jsou v databázi pojmenovány bez přípon. Při jejich volání (v rámci URL) je třeba příponu uvést (WBC pro konektor, HTW pro šablonu, WBS pro selektor).

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 jednotlivých prvcích (tagy <INPUT>) HTML formuláře (tag <FORM>). 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í.

Bližší představu o mechanismu tvorby dynamické HTML stránky Vám dá následující obrázek:


602 Internet klient jako modul Apache

Kromě samostatných CGI klientů lze ve Windows i Linuxu volat šablony a konektory pomocí modulu Apache. Při instalaci systému na Linuxu by se měla knihovna mod_602sql8.so s CGI klientem automaticky nainstalovat do odpovídajícího adresáře. Na Windows je třeba modul mod_602sql8.dll (pro Apache 1.3.x), resp. mod2_602sql8.dll (pro Apache 2.0) zkopírovat do adresáře s moduly Apache.

Do souboru httpd.conf je třeba doplnit tyto konfigurační direktivy:

# pro Windows
LoadModule module_602sql8 mod_602sql8.dll
AddModule mod_602sql8.c

# pro Linux
LoadModule module_602sql8 mod_602sql8.so
AddModule mod_602sql8.c
Pokud není mod_602sql8.dll, resp. mod_602sql8.so, zkopírován do standardního adresáře pro moduly webserveru Apache (na Windows typicky C:\Program Files\Apache Group\Apache\modules), je nutno v direktivě LoadModule uvést úplné jméno souboru mod_602sql8.dll včetně adresáře (na Windows včetně disku a místo obrácených lomítek použít normální lomítka - např. C:/602sql/mod_602sql8.dll). Direktiva AddModule je nutná pouze v případě použití direktivy ClearModuleList.

Zpracování URI podle Prefix602SQL8

Po instalaci je možné nastavit, na jaký začátek URI má modul reagovat - default je /602sql8/. K tomu se použije direktiva Prefix602SQL8. Tu je vhodné ''obalit'' do testu přítomnosti modulu, aby v případě jeho zrušení nedocházelo k problémům:

# mod_602sql8
<IfModule mod_602sql8.c>
Prefix602SQL8 /602/
</IfModule>

Po změně konfiguračního souboru Apache nezapomeňte také běžící server uvědomit o tom, že má znovu konfiguraci znovu načíst.

Webové objekty 602SQL jsou volány stejně jako při použití ostatních klientů, pouze místo názvu CGI klienta s plnou cestou (tedy např. /cgi-bin/602cgi8) se uvede registrovaný prefix.

Například, objekt vstup.htw aplikace anketa na databázovém serveru mojedb se bude volat s výše uvedeným nastavením Apache jako http://mujserver/602/mojedb/anketa/vstup.htw.

Zpracování URI podle handleru

Do httpd.conf je třeba přidat

<IfModule mod_602sql8.c>
  <Location "/mojedb/">
    SetHandler 602sql8-script
  </Location>
</IfModule>

Případně lze v <Location> uvést pouze jednu konkrétní aplikaci (tj. <Location "/mojedb/mojeapl/">). Je nezbytné, aby mojedb byl registrovaný název SQL serveru (databáze), tj. aby tento název byl uveden v Řídící konzoli 602SQL v seznamu SQL serverů.

Pak bude modul vykonávat všechny URI, které začínají na /mojedb/, resp. /mojedb/anketa/, tedy http://mujserver/mojedb/anketa/vstup.htw.


Novinky WBIK ve verzi 2.0

602SQL-Úplná dokumentace

Novinky ve verzi klienta 2.0 (s verzí WinBase602 5.1)

WBC konektory

  • Vývoj a správa aplikace se výrazně zjednoduší tím, že WBC konektory a HTW šablony mohou nyní tvořit jediný soubor (obsah WBC konektoru se vkládá přímo do šablony) - viz HTW šablona;

  • Nové parametry WBC sekce udávající IP adresy počítačů, z nichž je povolen / zakázán přístup - není zatím implementováno;

  • V hlavičce bloku #repeat přibyla možnost notemptyvar=jméno_proměnné. Daný #repeat blok bude generován pouze s neprázdnými hodnotami dané proměnné - viz blok #repeat.

  • Vstupní proměnné lze nyní uvést kdekoliv ve WBC konektoru (včetně např. sekce User a Password) - viz WBC konektor;

  • V příkazu SELECT v bloku SQLStatement může být upřesněno, kolik záznamů od kterého záznamu se má přečíst - viz blok SQLStatement;

  • Nový blok RunProgram umožní generovat ve vnitřním jazyce na speciální návěští šablony libovolný text - viz blok RunProgram;

HTW šablony

  • Přibyla možnost vyhodnocení složitějších výrazů - viz Výrazy;

  • Přibyla možnost určení způsobu zobrazení výsledku v HTML - viz Citace výrazu;

  • Probíhá automatická konverze typu vstupní proměnné z řetězce na Integer, je-li to třeba - viz Výraz-proměnná;

  • Je možno citovat počet hodnot a jednotlivé hodnoty multiatributu nebo počet a jednotlivé hodnoty proměnných přečtených z formuláře vícekrát - viz Výraz s # nebo Výraz s [ ];

  • Byly zavedeny nové proměnné select.TotalCount a select.Offset, které se využijí, je-li SELECT příkaz omezen pouze na některé záznamy (viz 5. novinka WBC konektorů) - viz Systémové proměnné;

  • Příkaz for byl rozšířen o možnost stanovení velikosti kroku (step) a směru vyhodnocování (to a downto) - viz příkaz for;

Přes značné množství nových rysů by aplikace napsané pro verzi 1.0 měly bez jakýchkoliv změn fungovat i ve verzi 2.0.

Změny ve verzi 2.0d:

  • Úpravy pro běh s WinBase602 5.1 - Internet klienti od této verze jsou použitelní pouze s WinBase602 5.1.

  • Pokud jsou ve webserveru asociovány selektory, konektory a šablony s některým z Internet klientů, pak tento Internet klient správně nastavuje hodnotu proměnné wb_client - viz proměnná wb_client


Novinky WBIK ve verzi 6.0

602SQL-Úplná dokumentace

Novinky Internet klientů verze 6.0 (s verzí WinBase602 6.0)

  • Bylo sjednoceno číslování verzí WinBase602 a WB Internet Klienta (nyní 6.0).

  • Existují Internet Klienti pro LINUX a FreeBSD.

  • Konektory, šablony a selektory jsou uloženy přímo v databázi. Existuje nový typ objektů v aplikaci – WWW objekty, lze jim přidělovat práva, exportovat je a importovat spolu s aplikací.

  • WBIK se k databázi vždy přihlašuje jako uživatel __web (dvě podtržítka), tento uživatel musí být před prvním použitím WBIK vytvořen, přičemž mu lze nastavit libovolné heslo.

  • WWW objekty jsou v databázi pojmenovány bez přípon. Při jejich volání (v rámci URL) je třeba příponu uvést (konektor vstup se volá jako vstup.wbc). Tímto je možno asociovat tyto přípony s odpovídajícím WBIK – je využíváno hlavně s MS IIS.

  • URL, kterým bude proveden konektor vstup, je
    http://www.server.cz/cgi-bin/602cgi8.exe/název_databáze/název_aplikace/vstup.wbc

  • WBIK nastavují tři nové systémové proměnné: wb_database, wb_application a wb_url. Jejich hodnoty jsou po řadě: název databáze, název aplikace a <%wb_client%>/<%wb_database%>/<%wb_application%>. Hodnoty těchto proměnných jsou připraveny pro vložení do URL, tzn. znaky, které nesmějí být v URL (např. mezera), jsou v hodnotách těchto proměnných nahrazeny tzv. escape sekvencí (v případě mezery je to %20).

  • V souvislosti s tímto se bude v šablonách jako akce formuláře, nebo link na další stránku (A HREF) uvádět:
    <%wb_url%>/název_konektoru.wbc resp.
    <%wb_url%>/název_šablony.htw

  • Konektory dále už nesmějí obsahovat bloky Datasource, Username a Password (WWW objekty jsou součástí aplikace).

  • V konektorech lze uvést v blocích Template a ErrorTemplate pouze názvy šablon, které patří do stejné aplikace, ve které je daný konektor. V těchto blocích mohou (ale nemusí) být šablony uváděny s příponou (.htw).

  • V selektorech lze uvést pouze názvy WWW objektů ze stejné aplikace, do které patří daný selektor. Názvy WWW objektů mohou (ale nemusí) být uváděny včetně přípony.

  • Nastavování globálních parametrů WBIK se provádí v Konfiguraci WinBase602, na záložce WWW objekty. Nastavují se pouze parametry: adresář, do kterého se vytváří logfile; úroveň podrobnosti logfile; zda logfile mazat před každým spuštěním WBIK; a alias adresáře s CGI a ISAPI skripty. Pokud nejsou parametry nastaveny, nebo jsou nastaveny špatně, WBIK je správně nastaví a zapíše. Prakticky to znamená, že není nutno nastavovat tyto parametry před prvním spuštěním WBIK.

  • Parametry ”úroveň podrobnosti logfile” a ”mazat logfile před každým spuštěním WBIK” lze nastavovat odděleně pro každou aplikaci. Tyto parametry se nastavují v dialog Vlastnosti aplikace, na záložce WWW objekty.

  • Logfile je zapisován odděleně pro každou aplikaci do adresáře:
    adresář_z_konfigurace\název-databáze\název-aplikace
    V tomto adresáři je vytvořen soubor RRRRMMDD.log.
    LCGI klient upraví názvy databáze a aplikace tak, aby tento adresář vyhovoval konvencím MS-DOSu o délce jména souboru (8 znaků + 3 znaky přípona).

  • Standardní chybová šablona:
    Pokud je v konektoru předepsána DefaultErrorTemplate: XXX, použije se tato.
    Pokud je v aplikaci WWW objekt jména deferr, použije se tento jako standardní chybová šablona.
    Jinak se použije obecná chybová šablona, která je obsažena v každém WBIK (”Chyba při běhu WBIK …”)

  • Nově podporovaný typ sloupce a proměnné: timestamp. Sloupce tohoto typu lze mezi sebou porovnávat a lze je citovat v šabloně. Při citaci se uplatňuje také upřesnění citace (formát).

Změny ve verzi 6.0f:

  • Nová funkce SetUserError pro vyvolání uživatelské chyby za běhu procedury vnitřního jazyka

  • Zaveden nový operátor zbytek po celočíselném dělení modulo (operátor % - tvar podle jazyka C - příklad (sudé záznamy): <%if CurrentRecord % 2 = 1%> ...)

Změny ve verzi 6.0h:

  • Nová chybové proměnné HTWErrorWWWobjectName a HTWErrorTimestamp.

Změny ve verzi 6.0j:

  • Zavedeno upřesnění citace textu (teoreticky i řetězce) - defaultní hodnota = 0, hodnota = 1 - konce řádků se v textu nahradí <BR>, aby se zachovalo rozlámání.

  • Nový operátor v HTW - celočíselné dělení DIV, zbytek po celočíselném dělení MOD

Změny ve verzi 6.0k:

  • Zavedeno upřesnění citace textu a řetězce - hodnota 2 (nebo ASCII) - převede text do 7 bitového ASCII (bez diakritiky)


Novinky WBIK ve verzi 6.1

602SQL-Úplná dokumentace

Novinky Internet klientů verze 6.1 (s verzí WinBase602 6.1)

  • Implementováno ukládání a načítání COOKIES;

  • nový způsob citace timestampu a data - COOKIEEXPIRES;

  • nový operátor exists;

  • nové systémové proměnné šablon CURRENT_TIME, CURRENT_DATE, CURRENT_TIMESTAMP;

  • nový příkaz WBC preprocesoru if;
    • nový blok ve WBC - DeclareVariable;

    • nový blok ve WBC - SetVariable;
  • nové nepovinné ukončení bloku SQLStatement - EndSQLStatement;


Novinky WBIK ve verzi 7.0

602SQL-Úplná dokumentace

Novinky Internet klientů verze 7.0 (s verzí WinBase602 7.0)

  • Embedded variables v konektorech - viz popis bloku SQLStatement

  • Rozšíření množiny typů proměnných v konektoru, možnost deklarace proměnné typu BLOB -

  • Rozšíření deklarace proměnné o explicitní zadání typu - viz DeclareVariable

  • Příkaz Location v konektorech - přesměrování browseru na jinou stránku

  • Příkaz Content-type v konektorech - nastavení typu vygenerovaného dokumentu

  • Příkaz IgnoreBlanks v konektorech - nastavení práce s mezerami, konci řádků apod.

  • Příkaz Error v konektorech - vyvolání chyby

  • Příkaz Set-Cookie v konektorech - nastavení cookies

  • Zpřístupnění souboru zaslaného z HTML formuláře pomocí INPUT TYPE="file" v konektoru - podrobnosti

  • Odeslání souboru do browseru příkazem konektoru SendFile

  • Nové formátovací funkce řetězců Str2WBConstStr ,Str2HTMLConstStr a Str2URLStr, funkce pro převod formátovaného výrazu na řetězec ToString

  • Příkaz Include v šablonách - vložení vygenerovaného textu podle jiné šablony

  • Drobné vylepšení detail sekce šablony

  • Rozšíření podmíněného příkazu if v konektorech i šablonách

  • Nový Internet Klient pro Apache ve formě tzv. Apache modulu - mod_wb602

Změny ve verzi 7.0.3

  • Odeslání souboru z disku do browseru příkazem SendDiskFile

  • Přehlášení WB Internet klienta z účtu __web na jiný účet příkazem Relogin

  • ISAPI a FastCGI Internet klienti nyní uchovávají a znovu používají jednou vytvořené spojení na SQL server. Počet takových permanentních spojení na SQL server lze nastavit. Bližší popis tohoto je zde.

  • FastCGI klient byl přepsán pomocí knihovny FastCGI verze 2.0. Zároveň byl upraven tak, aby využíval vláken pro provádění souběžných požadavků - podrobnosti

Změny do verze 7.0.8

  • Nová systémová proměnná wb_www_object

  • Nová funkce GetVersion

Změny do verze 7.0.11

  • Nová systémová proměnná QUERY_STRING

  • Nová systémová proměnná HTTP_REFERER

  • Nová systémová proměnná wb_suffix_path

  • Nová funkce FormatStr - obecné formátování stringu podle zadaného vzoru

  • Nová funkce GetURLPart - vrátí vyseparovanou část URL

  • Nový příkaz konektoru SelectLanguage: - výběr jazyka pro překlad metařetězců

  • Zabudována podpora metařetězců - vícejazyčné aplikace dle tabulky _multiling

  • Nový příkaz konektoru HTTPHeader: - přidání HTTP hlavičky pro browser

Změny do verze 7.0.13

  • Lze nastavit adresář, ve kterém Internet klienti vytvářejí přechodné (temporary) soubory. Adresář se nastavuje klíčem TempDirectory v sekci Performance v konfiguračním souboru wbcgi.ini, resp. 602sql. Klíč musí obsahovat úplné jméno adresáře a nesmí končit na \, resp. /. Toto nastavení ovlivňuje, kde budou vytvářeny přechodné soubory s velkými údaji (viz. klíč TempFileMinDataSize) a také ovlivňuje, kde budou vytvářeny přechodné soubory při provádění příkazu ImportFile. Adresář musí existovat a uživatel, pod kterým běží Internet klient, musí mít právo číst, vytvářet soubory a zapisovat do nich, jinak se nepodaří vytvořit žádný přechodný soubor. Pokud tento klíč neexistuje, nebo pokud má prázdnou hodnotu, pak se přechodné soubory vytvářejí jako doposud, tj. na Windows v adresáři, který je určen proměnnou prostředí TMP, případně TEMP, a na Linuxu v adresáři /tmp.

  • Změněna reakce Internet klientů na chybu při přihlašování k SQL serveru kvůli nedostatku volných licencí. Dříve se vypsalo chybové hlášení, nyní se Internet klient nejvýše N-krát zkusí znovu přihlásit k SQL serveru po prodlevě 3 sekundy, přičemž N je hodnota klíče NoLicenceTryCount v sekci Performance v souboru wbcgi.ini/602sql. Podrobnosti zde.

  • Internet klienti vytvářejí nový log vyřízených požadavků (access log). V konfiguračním souboru wbcgi.ini/602sql je v sekci AccessLog klíč Enabled, který musí být 1, aby se log vytvářel. Klíč Filename ve stejné sekci udává úplné jméno souboru, ve kterém se access log bude vytvářet. Podrobnosti zde.

  • Internet klienti podporují nový loglevel EXTENTED. V něm zapisují do provozního logu pouze hodnoty vstupních proměnných, výsledky SQL příkazů a hodnoty proměnných po provedení konektoru. Zapne se tak, že se do klíče Level v sekci Logging v konfiguračním souboru wbcgi.ini/602sql nastaví hodnota EXTENDED. Podrobnosti zde.


Novinky WBIK ve verzi 8.0

602SQL-Úplná dokumentace

Novinky Internet klientů verze 8.0 (s verzí 602SQL 8.0)

Internet Klienti verze 8 se mohou připojit pouze na 602SQL Server verze 8. Vzhledem ke změně jména SQL serveru z WinBase602 na 602SQL došlo k několika úpravám:

  • konfigurační soubor pro Linux se nyní nazývá 602sql (konfigurace WBIK je jen jeho částí).

  • i pro Linux existuje grafická Řídicí konzole, v níž se parametry nastavují pomocí dialogů.

  • chybové proměnné HTWWinBaseErrorCode a HTWWinBaseErrorMessage se přejmenovaly na HTW602SQLErrorCode a HTW602SQLErrorMessage. Původní proměnné je však možné používat stále.

POZOR! Došlo také ke změně názvů Internet klientů, přečtěte si úvodní stránku . Je nutné opravit pevné odkazy na dynamické stránky.

Verze samotná nepřináší žádné novinky, pouze nastavování parametrů provozu bylo z různých míst sjednoceno na Řídicí konzoli.


Vstupní HTML formuláře

Když chceme, aby internetový uživatel mohl pomocí svého WWW browseru interaktivně pracovat s databází (vyhledávání, vkládání apod.), musíme pro něj vytvořit HTML stránku, ve které bude formulář (HTML tag <FORM>) s prvky, do kterých může uživatel údaje zapsat (editační řádky, přepínače a další), a kde bude tlačítko, kterým zadané údaje odešle programu WBIK. WBIK se už postará o uložení údajů do databáze a vytvoří nový HTML dokument (případně s FORM tagem a tlačítkem SUBMIT), který bude odeslán do uživatelova browseru a cyklus se opakuje.

V tomto manuálu se nebudeme zabývat problematikou vytváření HTML dokumentů ani tvorby HTML formulářů, zaměříme se pouze na správné provázání formuláře s WBIK.

Rozšíření HTML komentářů:

HTML komentáře začínající <!--hide ... --> se nekopírují do sestavované stránky, kterou Internet klient odešle browseru. Nezáleží na velikosti písmen ve slově "hide" následujícím těsně za otevírací komentářovou závorkou.


Statický a dynamický formulář (WBIK)

Pro potřeby WBIK rozlišujme dva způsoby vytvoření HTML (HTW) dokumentů obsahujících formulář (HTML tag <FORM>).

Statický formulář – typicky se jedná o HTML dokument, který je neměnný; při každém otevření bude zobrazovat tentýž obsah - např. úvodní formulář pro zadání jména a hesla. Na statický formulář se lze dostat obvyklým HTML způsobem -

<P>Zde naleznete 1.příklad napojení se na 602SQL server pomocí rozhraní <A HREF=vstup.htm>CGI.</A> Skok je na statický formulář. </P>

Ve statickém formuláři samozřejmě nejde použít nic nad rámec HTML, tedy rysy popisované v tomto manuálu. Proto se statický formulář samostatně používá pouze jako první (úvodní) stránka posloupnosti stránek aplikace.

Na této úvodní stránce je nutné specifikovat také použitého klienta (CGI, FastCGI nebo ISAPI), na ostatních je již možné využít systémové proměnné wb_XXX. Po přenesení do jiného prostředí se musí upravit pouze tedy tato úvodní stránka.

Dynamický formulář – HTW šablona, která zobrazuje údaje z databáze a jejíž vzhled se mění podle obsahu databáze; při každém otevření se obsah vygeneruje podle databáze - např. nabídka obchodního domu podle aktuálního ceníku.

Dynamický formulář nutně potřebuje, aby dříve, než začne být generován, proběhl příslušný WBC konektor, který připraví data pro šablonu. Je-li dynamický formulář otevírán z jiného formuláře (po stisku tlačítka SUBMIT), je WBC konektor definován v ACTION parametru tagu INPUT formuláře (v případě, že WBC je samostatný objekt):

<FORM METHOD=GET ACTION="/cgi-bin/602cgi8.exe/moje_db/Anketa/anketa.wbc">

nebo
<FORM METHOD=GET ACTION="/cgi-bin/602cgi8.exe/moje_db/Anketa/anketa.htw">

je-li WBC sekce součástí HTW šablony.

Za jménem Internet Klienta následuje nejdříve název databáze a název aplikace, ke které se má WBIK připojit, a teprve poté název WWW objektu, který má WBIK použít pro vygenerování výsledné HTML stránky. Obsahuje-li název databáze nebo aplikace nebo WWW objektu znaky, které by mohly zapříčinit chybné provedení analýzy URL (interpunkce, diakritika apod.), je třeba takový název uzavřít do obrácených apostrofů (`), např.

<FORM METHOD=POST ACTION="/cgi-bin/602cgi8.exe/`moje databáze`/`Anketa 1.2000`/anketa.htw">

Má-li být dynamický formulář otevřen z HTML dokumentu (ne z formuláře tlačítkem SUBMIT), je nutné zadat jméno konektoru (resp. šablony s konektorem) přímo v linku (platí rozlišení objektů WBC x HTW z předešlého příkladu podle verzí klienta):

<P>Zde naleznete 2.příklad napojení se na 602SQL server pomocí rozhraní <A HREF="/cgi-bin/602cgi8.exe/moje_db/anketa/anketa1.htw">CGI</A> Skok je na dynamický formulář.<P>

Má-li v tomto případě dostat WBC konektor některé parametry, uvedou se za jménem konektoru za otazníkem:

<P>Zde naleznete 3.příklad napojení se na 602SQL server pomocí rozhraní <A HREF="/cgi-bin/602cgi8.exe/moje_db/anketa/anketa2.htw?param1=100">CGI</A> Skok je na dynamický formulář s předáním parametru.<P>


Vstupní prvky HTML formuláře

Vstupními prvky formuláře myslíme editační pole, označovací čtverce, přepínače, textová pole a další.

Při vytváření těchto prvků ve formuláři musíme pečlivě volit jejich jména, tzn. parametry NAME jednotlivých INPUT nebo SELECT tagů (blíže viz popis HTML). Různé vstupní prvky musíme pojmenovat jednoznačnými jmény v rámci daného formuláře, nesmí tedy v jednom formuláři existovat dva vstupní prvky se stejným jménem (rozdílná jména prvků se netýkají samozřejmě skupiny označovacích čtverců (CheckBoxů) nebo přepínačů (RadioButtonů), kde se naopak shodnost jmen vyžaduje). Tato jména vstupních prvků pak budeme používat při sestavování WBC konektorů.

Má-li být vstupní prvek formuláře naplněn daty (např. combo nebo listbox), musí v šabloně předcházet konektor s vhodným blokem SQLStatement obsahující zdroj (viz příklad 2 a 3).

Příklad 1:

Ve (statickém) formuláři jsou tři editační pole (druhé a třetí má přednastavenou implicitní hodnotu):

<FORM METHOD=GET ACTION="/cgi-bin/602cgi8.exe/moje_db/anketa/vstup.htw">
<TABLE>
<TR><TD>jméno zákazníka:</TD><TD><INPUT TYPE="TEXT" NAME="jmeno" VALUE="" SIZE=10 MAXLENGTH=10></TD></TR>
<TR><TD>e-mail:</TD><TD><INPUT TYPE="TEXT" NAME="email" VALUE="@" SIZE=20 MAXLENGTH=100><BR></TD></TR>
<TR><TD>počet instalací:</TD><TD><INPUT TYPE="TEXT" NAME="pocet" VALUE="1" SIZE=6 MAXLENGTH=6><BR></TD></TR>
</TABLE>
<INPUT TYPE="SUBMIT" VALUE="Odeslat">
<INPUT TYPE="RESET" VALUE="Vymazat">
</FORM>

Po stisku tlačítka Odeslat (tj. Submit tlačítko) webserver spustí 602SQL CGI klienta, který se připojí na databázový server ”moje_db”, otevře aplikaci ”anketa” a vykoná příkazy z konektoru, který je zadán ve WBC sekci šablony VSTUP.HTW (tzn. že ve výše uvedené aplikaci existuje WWW objekt ”vstup”, který je typu šablona), použije přitom hodnoty zadané do editačních polí.

Příklad 2:

Formulář pro přihlášení (zadání jména a hesla), který je potřeba, má-li se zavést systém oprávnění na úrovni aplikace (na úrovni serveru nelze, všichni se přihlašují jako __WEB), obsahuje nepřekládané combo s nabídkou jmen uživatelů v aplikaci a editační pole pro heslo.

<%WBC%>
SQLStatement: LogNames
+ SELECT id, jmeno, heslo
+ FROM Logtable
+ ORDER BY jmeno
<%/WBC%>

<HTML>
<HEAD>
<TITLE>Přihlašte se:</TITLE>
</HEAD>
<BODY>
<H1>Přihlašte se:</H1>
<FORM ACTION="<%wb_url%>/next.htw" METHOD="POST">
<TABLE>
<TR>
    <TD>Vyberte jméno:</TD>
    <TD><SELECT NAME="name">
<%begindetail LogNames%>
    <OPTION VALUE="<%jmeno%>"><%jmeno%>
<%enddetail%>
    </SELECT></TD>
</TR>
<TR>
    <TD>Zadejte heslo:</TD>
    <TD><INPUT TYPE="Password" NAME="passw"></TD>
</TR>
</TABLE>
<INPUT TYPE="Submit" VALUE="Odeslat">
</FORM>
</BODY>
</HTML>

Příklad 3:

Část šablony obsahující listbox naplněný z číselníku:

<%WBC%>

SQLStatement: OkresList
+ SELECT nazevo, cisloo
+ FROM Okresy
+ ORDER BY nazevo

SQLStatement: Kolik
+ SELECT Count(*) AS kol
+ FROM Reality
<%/WBC%>

<BR><BR>
<B>Zadejte omezující podmínky na výběr:</B><BR>
<BR>
<HR WIDTH="60%" ALIGN="LEFT">

<FORM METHOD="POST" ACTION="<%wb_url%>/20.htw">
<TABLE WIDTH="70%">
<TR>
<TD VALIGN="TOP">Typ:</TD>
<TD><SELECT NAME="typ">
    <OPTION VALUE="1">prodej
    <OPTION VALUE="0">pronájem
    <OPTION VALUE="-1">oboje
    </SELECT></TD>
<TD>&nbsp;</TD>
<TD VALIGN="TOP">Okres:</TD>
<TD><SELECT NAME="okr" MULTIPLE SIZE="3">
    <%begindetail OkresList%>
    <OPTION VALUE=<%cisloo%>><%nazevo%>
    <%enddetail%>
    </SELECT></TD>
<TD>vyberte jeden nebo více okresů</TD></TR>

</TABLE>
<BR>
Dnes je v nabídce <%Kolik.kol%> nemovitostí.

<BR> <BR>
<HR WIDTH="60%" ALIGN="LEFT">
<TABLE BORDER="0" WIDTH="60%"><TR>
<TD WIDTH="50%" ALIGN="RIGHT"><INPUT TYPE="SUBMIT" VALUE="Vybrat podle zadání"></TD>
<TD WIDTH="50%" ALIGN="LEFT"><INPUT  TYPE="RESET"  VALUE="Reset zadání"></TD>
</TR></TABLE>

</FORM>

Příklad 4:

Formulář má mj. obsahovat checkbox pro editaci sloupce typu Boolean.

a) je třeba zobrazit checkbox zatržený či nezatržený podle současného stavu:

<TR valign=top>
<TD VALIGN="TOP">Potvrzovat objednávku mailem?&nbsp;</TD>
<TD>
<%if syspar.mailovat%>
<INPUT NAME="mailovat" TYPE="CHECKBOX" VALUE="dummy" CHECKED>
<%else%>
<INPUT NAME="mailovat" TYPE="CHECKBOX" VALUE="dummy">
<%endif%>
</TD>
</TR>

b) v následném konektoru je třeba reagovat na konečný stav (pozná se podle délky proměnné MAILOVAT):

SQLStatement: upd
+ UPDATE Sys_par
+ SET `platnost_cen_od` = %platnost_cen_od%,
+ `mailovat` = (CASE WHEN CHAR_LENGTH("%?mailovat%")>0 THEN TRUE ELSE FALSE END),
+ `profil` = "%profil%",
+...


Akce HTML formuláře

Akcí formuláře myslíme činnost, která se má provést, pokud uživatel v browseru stlačí tlačítko typu SUBMIT (tzn. <INPUT TYPE="SUBMIT" ...>). Tuto akci zapisujeme do parametru ACTION tagu FORM.

Jako akci formuláře uvedeme:

/cesta_k_602CGI8/602CGI8.EXE/název_databáze/název_aplikace/jméno_WWW_objektu,

kde jméno_WWW_objektu je název databázového objektu kategorie WWW objekty (konektor, šablona nebo selektor), který existuje v dané databázi v dané aplikaci. Tento WWW objekt má být použit pro zpracování údajů, které uživatel zadal pomocí tohoto formuláře. Dále, /cesta_k_602CGI8 je adresář, ve kterém je uložen program 602CGI8.EXE. Tento adresář musí být v podstromu, ve kterém má webserver uloženy CGI skripty (typicky bude tento adresář /cgi-bin).

Na parametru TYPE nezáleží, přesněji řečeno: WBIK při startu zjistí, kterou metodou mu webserver předává parametry (zda používá metodu GET, nebo POST) a údaje, které zadal uživatel pomocí formuláře, si WBIK zjistí momentálně použitou metodou.

Příklad

Výchozí adresář Mail602 Internet Serveru je C:\mail602\inetsrv, adresář s CGI skripty (v URL označovaný /cgi-bin) je C:\mail602\inetsrv\cgi-bin, v něm je program 602CGI8.EXE. Kořenový adresář Internet serveru je C:\mail602\inetsrv\docs. Jméno a doména počítače s Mail602 Internet Serverem je www.firma.cz a z tohoto počítače je přístup na 602SQL server.

Vytvoříme HTML dokument s URL http://www.firma.cz/test/vstupni.htm (tzn. tento dokument je v souboru C:\mail602\inetsrv\docs\test\vstupni.htm), který obsahuje formulář. Chceme, aby se údaje vložené do formuláře zpracovaly pomocí HTW šablony vstup, která se nachází v aplikaci anketa v databázi moje_db. Parametr ACTION tagu FORM musí mít tedy hodnotu

    /cgi-bin/602cgi8.exe/moje_db/anketa/vstup.htw.

Konkrétně (uvedeme pouze hlavičku tagu FORM):

    <FORM METHOD=POST ACTION="/cgi-bin/602cgi8.exe/moje_db/anketa/vstup.htw">

Po odeslání údajů tlačítkem SUBMIT WebServer pozná, že má spustit CGI skript 602CGI8.EXE (ACTION odkazuje na soubor v podstromu /cgi-bin). 602CGI8.EXE si zjistí název databáze, aplikace a WWW objektu, Připojí se k databázi jako uživatel __web (dvě podtržítka na začátku) a přečte obsah WBC sekce šablony vstup a začne pracovat podle údajů v ní uvedených.

Kromě HTW šablony lze také uvést název WBC konektoru, či WBS selektoru, který se nachází ve výše uvedené aplikaci.

Způsob zápisu akce formuláře se může lišit podle typu webserveru - při použití MS IIS a protokolu ISAPI je možné asociovat přípony WBC, HTW a WBS s konkrétní ISAPI komponentou (knihovna 602ISAP8.DLL), takže v tomto případě se cesta k ISAPI klientovi vůbec neuvádí, protože MS IIS ji zdá díky asociaci. Podrobný popis asociace je obsažen zde.


WBC konektory (WBIK)

WBC konektory jsou buď samostatné databázové objekty (kategorie WWW objekt), nebo sekce v HTW šabloně ohraničená tagy <%WBC%> a <%/WBC%> s údaji, jaké příkazy má WBIK s databází provést, případně dále jakou šablonu použít pro vytvoření výstupního HTML dokumentu při úspěšném průběhu všech operací a jakou šablonu použít při výskytu chyby atd.

Každý konektor musí stanovit, jak bude sestaven výsledný dokument, který se odešle browseru. Nejčastější možností je určit HTW šablonu, která se použije pro sestavení výsledného dokumentu po vykonání příkazů obsažených v konektoru. Je-li konektor samostatný objekt, určí se šablona pomocí bloku Template, je-li konektor jako WBC sekce částí šablony, použije se tato šablona. Další možností je použít příkaz Location. Tento příkaz způsobí přesměrování browseru na jinou stránku, přičemž Internet klient odešle browseru pouze pokyn k přesměrování a cílové URL. Poslední možností je použít příkaz SendFile. Do browseru se odešle zvolený proud bajtů (hodnota typu BLOB) a způsob zobrazení závisí pouze na browseru (Internet Explorer může spustit příslušný ActiveX control apod.).

V textu WBC konektoru může být na libovolném místě citace vstupní proměnné z formuláře nebo proměnné vytvořené pomocí příkazů GetVariable či DeclareVariable v konektoru před tímto místem. K tomuto stačí napsat na dané místo jméno proměnné a bezprostředně před a bezprostředně za toto jméno napsat znak procenta (%).Při zpracování konektoru bude tato citace nahrazena aktuální hodnotou proměnné.

Vstupní proměnné jsou vždy typu String, vytvořené proměnné mohou být libovolného typu.

Konektor lze větvit pomocí příkazů preprocesoru, které začínají v prvním sloupci znakem #.

Do konektorů lze zapisovat komentáře.

Příkazy konektoru musí začínat již od prvního sloupce, jinak bude při zpracování generována chyba č. 9.

Příklad: Uživatel v browseru v HTML formuláři zadá pomocí editačních polí hodnoty intervalu datumů a např. pomocí comba kód zboží a provedl SUBMIT. Formulář do konektoru předal tři vstupní formulářové proměnné (a sadu systémových proměnných). Tyto proměnné (a případné další proměnné vytvořené za běhu konektoru) se použijí k sestavení SQL příkazů, které má konektor vykonat.

Blok SQLStatement (příkaz SELECT) v konektoru vybere záznamy vyhovující zadaným hodnotám (dosadí za jméno formulářové proměnné v procentech její hodnotu - pozor na uvozovky pro řetězcový sloupec kod_zbozi). V šabloně je pak možné zobrazit odpověď na tento SELECT.

<%WBC%>
RequiredValues: datod datdo kod

SQLStatement: polobjC
+ SELECT B2.nazev_zbozi,B2.datum, B2Count, COALESCE(B3Count,0) AS B3Count
+ FROM (SELECT Obj_header.datum,COUNT(Obj_header.id_dobj) AS B2COUNT, Cenik.nazev_zbozi
+    FROM Obj_header, Obj_polozky, Cenik
+    WHERE Obj_polozky.id_cnk=Cenik.id_cenik AND Obj_polozky.id_dobj=Obj_header.id_dobj
+    AND datum>=%datod% AND datum<=%datdo% AND Cenik.kod_zbozi="%kod%"
+    GROUP BY Obj_header.datum) AS B2
+ LEFT OUTER JOIN
+    (SELECT Obj_header.datum,COUNT(Obj_header.id_dobj) AS B3COUNT, Cenik.nazev_zbozi
+    FROM Obj_header, Obj_polozky, Cenik
+    WHERE Obj_polozky.id_cnk=Cenik.id_cenik AND Obj_polozky.id_dobj=Obj_header.id_dobj
+    AND datum>=%datod% AND datum<=%datdo% AND Cenik.kod_zbozi="%kod%"
+    AND Obj_header.potvrzena
+    GROUP BY Obj_header.datum) AS B3
+ ON (B2.datum=B3.datum)
+ ORDER BY B2.datum
<%/WBC%>

V šabloně, která má konektor jako zdroj dat, pak lze pracovat

  • s daty odpovědi na dotaz z bloku SQLStatement, v detail sekci šablony je může v cyklu zobrazit;

  • s dalšími proměnnými vytvořenými v konektoru pomocí GetVariable, DeclareVariable;

  • s formulářovými vstupními proměnnými (v příkladu uvedeny tři s jednou hodnotou, v případě výběru z listboxu mohou mít více hodnot);

  • se systémovými proměnnými (IP adresa browseru apod.);

Bezchybová citace proměnné

Pokud není jisté, zda bude či nebude určitá vstupní proměnná přečtena z formuláře, použijte tzv. bezchybovou citaci dané proměnné. Tato bezchybová citace vstupní proměnné se od normální citace liší tím, že mezi prvními procenty a názvem proměnné je znak otazník (?). Mezi procenty a otazníkem, resp. otazníkem a názvem proměnné může být libovolný počet mezer a tabulátorů. Při vyhodnocení citace se postupuje takto: pokud je daná proměnná přečtena z formuláře, bude citace nahrazena její hodnotou, pokud proměnná není přečtena z formuláře, bude citace nahrazena prázdným řetězcem a nebude generována chyba. Bezchybové proměnné lze s výhodou použít u INPUT typu CHECKBOX (pokud totiž uživatel ve formuláři checkbox nezatrhne, CGI skriptu by nebyla předána odpovídající proměnná - pokud se ovšem použije bezchybová citace, předá se buď hodnota nebo prázdný string a podle délky je možné rozlišit dva stavy - TRUE a FALSE).

Hlášení uživatelských chyb

Cílem je umožnit vývojáři dynamických HTML stránek reagovat na nečekaný stav, který nastal

  • při vykonávání bloků konektoru nebo

  • při běhu procedury ve vnitřním jazyce (volané z bloku Program nebo RunProgram)

a ukončit provádění WBC konektoru (neprovádět následující bloky) a nastavit požadované chybový stav, na nějž zareaguje WBIK chybovou šablonou. Toho vývojář dosáhne

  • provedením bloku Error v konektoru nebo

  • zavoláním funkce SetUserError z knihovny 602INET8.DLL v bloku Program (resp. v proceduře volané z tohoto bloku), nebo v proceduře RunProgram volané pomocí příkazu RunProgram.

Tato akce nastaví chybu č. 90 (chyba vyvolaná z programu) a jako chybové hlášení nastaví obsah předaného řetězce. Bezprostředně po bloku Error nebo po ukončení bloku Program (nebo RunProgram), ve kterém byla tato funkce zavolána, Internet klient ukončí provádění WBC konektoru a vygeneruje chybovou HTML stránku dle nastavené chybové šablony.

Následující tabulka ukazuje abecední seznam příkazů, které může WBC konektor obsahovat:

  • Content-type - změna nastavení typu vystupujícího dokumentu

  • DeclareVariable - deklarace proměnné

  • Error - vyvolání uživatelské chyby

  • ErrorTemplate - volba chybové šablony

  • GetVariable - vytvoření proměnné podle proměnné projektu

  • HHTPHeader - vytvoří HTTP hlavičku, která bude zaslána browseru

  • IgnoreBlanks - způsob práce s prázdnými znaky v šabloně

  • ImportFile - upload souboru z browseru do databáze

  • Location - přesměrování browseru

  • MaxRecords - nastavení max. počtu přenášených záznamů ze SELECTu

  • Program - zavolání procedury vnitřního jazyka

  • Relogin - přehlášení se z účtu __web na jiný uživatelský účet

  • RequiredValues - stanovení, které vstupní proměnné jsou nezbytné

  • RunProgram - odlišný způsob generování výstupu

  • SelectLanguage - vybere jazyk, podle kterého se budou překládat metařetězce

  • SendDiskFile - odeslání souboru z disku do browseru

  • SendFile - odeslání binárního souboru z databáze do browseru

  • Set-cookie - nastavení cookies

  • SetVariable - změna hodnoty proměnné

  • SQLStatement - SQL příkazy, které se mají vykonat

  • Template - volba šablony, která se má vygenerovat po skončení konektoru


Komentáře ve WBC konektorech

Formát:

; komentář
// komentář

Význam:

Všechny řádky ve WBC konektorech, které začínají znakem středník (;), nebo dvojicí znaků lomeno (//), jsou považovány za komentáře a WBIK je přeskakuje. Znaky středník, příp. dvojice lomítek, musí být uvedeny bezprostředně na začátku řádku. Komentářové řádky můžete vložit kamkoliv do WBC konektoru (např. také do bloku SQLStatement, nebo do bloku Program).


Přehled příkazů WBC preprocesoru

WBC konektor lze podmíněně větvit (resp. cyklit) pomocí příkazů preprocesoru. Nejedná se o příkazy konektoru, jsou to pomocné příkazy, které umožní sestavovat výsledné konektory podle předaných parametrů nebo předcházejících stavů.

Příkazy preprocesoru jsou if, ifexists a repeat (začínají v prvním sloupci znakem #)

Příkazy ifexists a repeat mohou být pouze součástí bloku SQLStatement, příkaz if může být i mimo něj.

Příklad:

DeclareVariable: logged:Boolean := FALSE
SQLStatement: Login
+ SELECT name,password,id_obchodnika,titl,prijmeni,jmeno
+ FROM obchodnici
+ WHERE name="%name%" AND password ="%psw%"
EndSQL
#if exists Login[0].logname
SetVariable: logged :=TRUE
#endif

#if logged
SQLStatement:obj
+ SELECT ...
...

#endif

Seznam subsekcí:

  • #if - větvení konektoru
  • #ifexists
  • #repeat


if

602SQL-Úplná dokumentace

if (v konektoru) - větvení konektoru

Formát:

#if výraz
 větev then
#elseif výraz
 větev elseif
#else
 větev else
#endif

Význam:

Příkaz umožňuje podmíněně větvit WBC konektor.

Příkaz if musí končit direktivou #endif a může mít několik částí #elseif a jednu část #else.

Výraz musí být typu Boolean a musí být uveden na stejném řádku jako je uvedeno #if (resp. #elseif). Výraz je konstruovaný podle pravidel pro výrazy v šabloně, který může obsahovat názvy vstupních formulářových proměnných, názvy selectů a sloupců, které byly vyhodnoceny před tímto příkazem #if a názvy proměnných získaných pomocí GetVariable nebo DeclareVariable a názvy systémové proměnné šablony.

Příkaz if může být uvnitř bloku SQLStatement nebo také vně:

#if podmínka
SQLStatement: abcd
+SELECT * FROM Tab
#else
SQLStatement: efgh
+SELECT * FROM JinaTab
#endif

Příklad:

V HTML formuláři je combo s názvem "typ" a listbox s názvem "kateg" (SELECT NAME=kateg). V konektoru následující šablony se reaguje na to, co je v combu vybráno a je-li v listboxu vybrána žádná nebo jedna a více hodnot:

<%WBC%>
SQLStatement: Vyber
+ SELECT Reality.cislo,Reality.nazev,Reality.popis,Reality.dat,
+ Kategorie.nazevk
+ FROM Reality JOIN Okresy ON (Reality.okres=Okresy.cisloo)
+              JOIN Kategorie ON (Reality.kategorie=Kategorie.cislok)
+ WHERE TRUE
// je-li v combu vybrána položka se zápornou hodnotou, nedělat nic,
// jinak přidat podmínku
#if typ > -1
+ AND prodej = %typ%
#endif
// je-li vybrána v listboxu alespoň jedna hodnota, přidat podmínku
#if exists kateg
+ AND (
#repeat var=kateg delimiter=OR
+ (kategorie=%kateg%)
#endrepeat
+ )
#endif

Další příklad:

z aplikace Anketa ve FormWizardu, kdo ještě nehlasoval, nemá dosud cookie:

#if exists HTTP_COOKIE_anketa
; pokud existuje cookie pro tuto anketu uživatel v této anketě už hlasoval, přepsat jeho volbu
SQLStatement: Akce
+ UPDATE Odpovedi
+ SET volba=%hodnota%,ipadr="%REMOTE_ADDR%"
+ WHERE id=%HTTP_COOKIE_anketa%;
#else
; ještě nehlasoval, vložit nový záznam
SQLStatement: Akce
+ START TRANSACTION;
+ INSERT INTO Odpovedi(ipadr,volba,anketaid)
+ VALUES ("%REMOTE_ADDR%",%hodnota%,%anketaid%);
; sloupec id tabulky Odpovedi má implicitní hodnotu sekvencí Odpoved_id,
; vloženou unikátní hodnotu přečteme pomocí sekvence.CurrVal
SQLStatement: id_odpovedi
+ SELECT id FROM Odpovedi WHERE id=Odpoved_id.CURRVAL;
+ COMMIT;
EndSQLStatement;
#endif


ifexists

Formát:

#ifexists
+ SQL_příkaz_SELECT (= podmínka)
#then
+ řádek_SQL_příkazu (= větev then)
#else
+ řádek_SQL_příkazu (= větev else)
#endif

Význam:

Lze použít pouze uvnitř bloku SQLStatement.

Pokud odpověď na příkaz SELECT z podmínky obsahuje aspoň jeden záznam, pak budou pro sestavení SQL příkazů v bloku SQLStatement použity řádky ve větvi then, pokud výše zmíněná odpověď neobsahuje žádný záznam, bude pro sestavení SQL příkazů použito řádků ve větvi else.

Příkaz ifexists musí končit direktivou #endif a musí mít buď část #then, nebo část #else, nebo obě části.

Podmínku, větev then i větev else lze rozepsat na více řádků (začínajících znakem plus). V podmínce, větvi then i větvi else lze citovat libovolnou vstupní proměnnou (%jméno_proměnné%) a lze také použít libovolný příkaz WBC preprocesoru (např. vnořit ifexists do libovolné části jiného ifexists).

Vyhodnocením podmínky musí vzniknout právě jeden SQL příkaz SELECT.

Větev then i větev else může obsahovat více SQL příkazů. V tom případě musí být jednotlivé příkazy od sebe odděleny středníkem (;).

Příklad:

Jestliže uživatel vyplní ve formuláři pole Datum od a Datum do, vyberou se jeho objednávky v tomto intervalu, nevyplní-li je, vyberou se všechny

SQLStatement: SeznamObjednavek
+ SELECT *
+ FROM INP_TAB
#ifexists
+ SELECT *
+ FROM MAIN_DOD
+ WHERE (Str2Date("%obj_od%") <> NONEDATE AND Str2Date("%obj_do%") <> NONEDATE);
#then
+ WHERE (CIS_LIC="%lic%" AND DATUM >= Str2date("%obj_od%") AND DATUM <= Str2date("%obj_do%"))
#else
+ WHERE (CIS_LIC="%lic%")
#endif
+ ORDER BY DATUM;


repeat (WBIK)

Formát:

#repeat var|notemptyvar=řídící_proměnná delimiter=oddělovač
+ řádek_SQL_příkazu
#endrepeat

Význam:

Lze použít pouze uvnitř bloku SQLStatement.

Umožňuje automaticky generovat SQL příkazy (nebo jejich části) podle toho, kolikrát byla určitá proměnná (říkejme jí řídící proměnná repeat bloku) přečtena z HTML formuláře (použito var=proměnná) nebo kolikrát byla přečtena neprázdná hodnota proměnné (použito notemptyvar=proměnná). WBIK zjistí, kolik hodnot řídící proměnné bylo přečteno z formuláře na vstupní WWW stránce (resp. kolik z těchto hodnot je neprázdných) a tolikrát budou za sebou vygenerovány řádky SQL příkazů uzavřené mezi #repeat a #endrepeat. Pokud je v těchto řádcích citace řídící proměnné, bude při prvním generování nahrazena první hodnotou z formuláře, při druhém generování druhou hodnotou až při posledním generování řádků bude citace řídící proměnné nahrazena poslední hodnotou řídící proměnné, která byla přečtena z formuláře na vstupní WWW stránce.

Vygenerované řádky budou odděleny oddělovačem (delimiter). Tento parametr je nepovinný, pokud není uveden, řádky budou odděleny mezerou. Pokud chceme oddělit jednotlivé řádky od sebe skupinou znaků, ve které je i jiný znak, než písmeno, číslice, nebo podtržítko ( _ ), musíme takový oddělovač uzavřít do obrácených apostrofů ( ` ).

Pokud je v řádcích uvedena citace proměnné, která není řídící proměnnou repeat bloku, pak tato citace bude nahrazena první hodnotou této proměnné, která byla přečtena z formuláře (i kdyby bylo přečteno z formuláře více hodnot této proměnné).

Repeat blok může mít více řídících proměnných. Počet opakování řádků je stanoven podle řídící proměnné s nejmenším počtem přečtených hodnot.

Uvnitř repeat bloku lze použít libovolný další příkaz WBC preprocesoru. Nelze však vnořit do sebe dva repeat bloky, které mají shodnou aspoň jednu řídící proměnnou.

Příklad:

Uživatel ve WWW browseru zatrhne několik označovacích čtverců z dynamicky vygenerované tabulky podle následující části šablony (použije se SQLStatement Skupiny z předchozího WBC). Jedná se o označení skupin zboží.

<FONT SIZE="2">Zatržením vyberte skupiny zboží, ze kterých budete objednávat</FONT>
<BR>
<TABLE WIDTH="35%">
<TH ALIGN="Center" WIDTH="30%">Skupina</TH>
<TH ALIGN="Center" WIDTH="5%">Výběr</TH>
<%begindetail Skupiny%>
<TR><TD ALIGN="LEFT"><B><%Occis_skup%></B></TD><TD ALIGN="Center"><input type=checkbox name="Ridici" value="<%Cis_skup%>"></TD></TR>
<%enddetail%>
</TABLE>

Po stisku tlačítka SUBMIT se vykoná následující SQL příkaz SELECT, který vybere zboží pouze z označených skupin. Kolik skupin bylo zatrženo, tolikrát se provede repeat cyklus a vygeneruje podmínku WHERE. Delimiter oddělí vzniklé podmínky spojkou OR.

SQLStatement: Cenik
+ SELECT OUT_DECNK.CIS_SKUP,OUT_DECNK.CIS_CNK,
+ OUT_DECNK.CEN_PROD,Real2Str(C_012_DPH.CHPROCENTO,-2) AS DPHCKO
+ FROM OUT_DECNK,C_012_DPH
+ WHERE (OUT_DECNK.OC012_DPH=C_012_DPH.CH012_DPH) AND (
#repeat var=Ridici delimiter=` OR `
+ (CIS_SKUP= "%Ridici%")
#endrepeat
+ )
+ GROUP BY OUT_DECNK.CIS_CNK

Byly-li zatrženy dvě skupiny s číslem 4 a 6, podmínka SELECTu bude vypadat

...
WHERE (OUT_DECNK.OC012_DPH=C_012_DPH.CH012_DPH) AND ((CIS_SKUP=4) OR (CIS_SKUP=6))


Content-type (WBIK)

Formát příkazu:

Content-type: výraz_typu_string

Příkaz umožní změnit MIME type sestavovaného dokumentu ze standardního "text/html" na jiný (např. "text/plain" apod.). Šablona náležející ke konektoru, který mění typ dokumentu, musí být vytvořena ve struktuře zvoleného typu.

Příkaz se použije například v těchto situacích:

  • když mají být výstupem data v určitém textovém formátu (viz příklad);

  • když je třeba specifikovat typ binárních dat zasílaných browseru příkazem SendFile.

Chování browserů v případě jiného typu než "text/html" je velmi individuální a značně se liší i mezi verzemi téže značky.

Příklad:

Export výsledku statistiky e-Shopu v CSV, pro formátování výstupu je zapotřebí přesně pracovat s konci řádků:

<%WBC%>
// export výsledku statistiky Obraty v čase v CSV
RequiredValues: interval ord ds typ obch pocet

Content-type: "application/unknown; charset=windows-1250"
HTTPHeader: "Content-Disposition: inline; filename=exp_stat_cas.csv"
IgnoreBlanks: all

DeclareVariable: podmstr:String[250]=""

SQLStatement:
+ CALL Podminka_cas(%interval%,%pocet%,%ds%,%typ%,%obch%,:>podmstr)

SQLStatement: PoSkupinach
#if interval=1
+SELECT Date2str(OH.datum,1) AS dat,
+ SUM(OH.sum_obj) AS bezdph, COUNT(OH.id_dobj) AS pocet_obj, SUM(OH.k_uhrade) AS sdph, OH.datum
+ FROM Obj_header AS OH, Obchodni_partneri AS OP
+ WHERE %podmstr%
+ GROUP BY OH.datum
#endif
#if interval=2
+ SELECT Int2str(Month(OH.datum))||"_"||Int2str(Year(OH.datum)) AS dat,
+ SUM(OH.sum_obj) AS bezdph, COUNT(OH.id_dobj) AS pocet_obj, SUM(OH.k_uhrade) AS sdph, OH.datum
+ FROM Obj_header AS OH, Obchodni_partneri AS OP
+ WHERE %podmstr%
+ GROUP BY Month(OH.datum)
#endif
#if ord=1
+ ORDER BY datum
#endif
#if ord=2
+ ORDER BY sdph DESC
#endif
<%/WBC%>

<%if parametry.exp_firstline%>
<%if interval="1"%>Dny<%elseif interval="2"%>Mesice<%endif%>,Pocet_obj,Objem_bez_dane,Objem_s_dani<%#13#10%>
<%endif%>

<%begindetail PoSkupinach%>
<%dat%>,<%pocet_obj%>,<%bezdph;-101%>,<%sdph;-101%><%#13#10%>
<%enddetail%>


DeclareVariable (WBIK)

Formát příkazu:

DeclareVariable: jméno_nové_proměnné:typ_proměnné:=výraz_definující_proměnnou

Význam:

Tento blok slouží k vytvoření nové lokální proměnné, která lze použít v konektoru od místa, kde proměnná vznikla - např. pro podmíněné větvení WBC konektoru pomocí #if, pro sestavení podmínky WHERE a která je předána do šablony.

Jméno nově vytvořené proměnné musí být složeno z písmen, číslic a znaku podtržení ´_´, nerozlišuje se velikost písmen. Jméno nesmí být stejné jako automaticky vytvářené proměnné (CurrentRecord, MaxRecords apod. a chybové proměnné HTW šablony), ani nesmí být stejné jako už vytvořené proměnné.

V zápisu musí být uveden buď typ_proměnné nebo výraz_definující_proměnnou nebo oboje. Je-li uveden pouze typ, pak se hodnota nové proměnné nastaví na hodnotu NONE, pokud není typ uveden, odvodí se z typů výrazu. Jako typ lze použít libovolný jednoduchý typ vnitřního (klientského) jazyka 602SQL (Boolean, Integer, Short,Money, String[15] apod), navíc lze deklarovat také proměnnou proměnné velikosti typem Blob.

Výraz_definující_proměnnou je konstruovaný podle pravidel pro výrazy v šabloně, může obsahovat názvy vstupních formulářových proměnných, názvy selectů a sloupců, které byly vyhodnoceny v pojmenovaném SQLStatement před tímto blokem a názvy proměnných získaných pomocí GetVariable a DeclareVariable před tímto blokem.

Příklad:

<%WBC%>
RequiredValues: hodnota anketaid

#if exists HTTP_COOKIE_anketaid%anketaid%
; pokud existuje cookie pro tuto anketu, zkopirujeme jej do proměnné 'anketacookie'
DeclareVar: anketacookie:=HTTP_COOKIE_anketaid%anketaid%
#endif

Příklad 2:

Na začátku konektoru se vytvoří proměnná typu Boolean s hodnotou FALSE, podle výsledku SELECTu se případně změní na TRUE:

<%WBC%>
DeclareVariable: Logged:Boolean :=FALSE
SQLStatement: Login
+ SELECT id,jmeno,heslo
+ FROM Logtable
+ WHERE jmeno="%name%" AND heslo="%passw%"
EndSQL
#if exists Login[0].id
SetVariable: Logged :=TRUE
#endif
<%/WBC%>

Následující šablona může vypadat:

<%if Logged = TRUE%>
  Přihlášen jako <B><%Login.jmeno%></B>.<BR>

...

<FORM ACTION="<%wb_url%>/next.htw" METHOD="POST">
<INPUT TYPE="Submit" VALUE="Předat parametry">
<INPUT TYPE="Hidden" NAME="name" VALUE="<%login.jmeno%>">
<INPUT TYPE="Hidden" NAME="passw" VALUE="<%login.heslo%>">
</FORM>
<%else%>
  Přihlášení neúspěšné.<BR>
<%endif%>


Error (WBIK)

Formát příkazu:

Error: výraz_libovolného_typu

Příkaz vyvolá uživatelskou chybu č. 90 a tím ukončí provádění konektoru a šablony. Text chybového hlášení bude odvozen ze zadaného výrazu.

Příkazem lze např. ukončit jednu větev konektoru při nesplnění určitých podmínek a v chybové šabloně na to adekvátně reagovat, lze jej také použít k vypsání hodnoty nějakého výrazu ze složitějšího konektoru.

Příklad:

Error: "3 krát nezadáno heslo!"

nebo

SQLStatement: params
+ SELECT param1
+ FROM Systém_tab

Error: params[0].param1


ErrorTemplate (WBIK)

Formát příkazu:

ErrorTemplate: HTW_šablona

Význam:

HTW_šablona je jméno databázového objektu typu WWW objekt, která má být použita pro vytvoření HTML dokumentu, který bude odeslán WWW browseru uživatele, pokud nastane jakákoliv chyba při práci s 602SQL Serverem. Databázový objekt se musí nacházet v té samé aplikaci, ve které je daný WBC konektor. Název šablony lze uvést s příponou (.htw), není to však povinné. Není-li v konektoru tento údaj uveden, použije se standardní chybová šablona.

Příklad:

ErrorTemplate: ErrAnk.htw

Poznámka:

Obsahuje-li chybová šablona WBC sekci, je při generování chybové HTML stránky WBC sekce zcela ignorována.


GetVariable (WBIK)

Formát příkazu:

GetVariable: jméno_nové_proměnné:=jméno_proměnné_projektu

Význam:

Tento blok slouží k předání hodnoty proměnné aktuálně nastaveného projektu ve vnitřním jazyce do HTW šablony a do následujících bloků tohoto konektoru. Bloku GetVariable obvykle předchází blok Program, který potřebné proměnné projektu nastaví.

Provedením bloku bude vytvořena nová proměnná stejného typu a hodnoty jako proměnná projektu. Lze předat hodnoty proměnných pouze jednoduchých typů a typů řetězec. Lze tedy předat proměnné následujících typů: Short, Integer, Money, Real, Char, Boolean, Date, Time, Timestamp, String. V HTW šabloně můžeme takto vytvořenou proměnnou citovat (zobrazit), nebo ji použít v podmínce v příkazu if. V následujících blocích tohoto konektoru můžeme tuto proměnnou použít, změnit pomocí SetVariable, větvit konektor pomocí #if, případně také použít v hlavičce příkazu repeat apod.

Jméno_nové_proměnné musí být složeno z písmen, číslic a znaku podtržení ´_´, nerozlišuje se velikost písmen. Jméno nesmí být stejné jako automaticky vytvářené proměnné (CurrentRecord, MaxRecords apod. a chybové proměnné HTW šablony), ani nesmí být stejné jako už vytvořené proměnné. Pokud jméno proměnné projektu obsahuje speciální znaky (jiné, než písmena, číslice a znak podtržení ´_´), musí být uzavřeno ve dvojici obrácených apostrofů.

Blokem GetVariable získáme hodnotu jedné proměnné aktuálně nastaveného projektu. Pokud chceme získat hodnotu další proměnné projektu, musíme ji přečíst v dalším bloku GetVariable (v jednom bloku GetVariable je možno přečíst hodnotu právě jedné proměnné projektu).

V případě, že nemáme projekt nastaven (tzn. pokud není před blokem GetVariable nějaký blok Program, který provádí nastavení projektu), musíme před blokem GetVariable nastavit projekt, ze kterého chceme přečíst hodnotu proměnné. K tomuto použijeme blok Program, v jehož těle neuvedeme žádný příkaz vnitřního jazyka 602SQL. Takový blok Program pouze nastaví projekt. Upozorňujeme, že tento projekt zůstane nastaven až do té doby, než některým z následujících bloků Program nastavíme projekt jiný.

Příklad 1:

Chceme přečíst hodnotu globální proměnné nazvané vnitrni_promenna v projektu vnitrni_projekt do HTW proměnné moje_promenna. Není nastaven projekt. Tuto operaci provedeme pomocí následujících příkazů:

BeginProgram: vnitrni_projekt
EndProgram;
GetVariable: moje_promenna:=vnitrni_promenna

Příklad 2:

V konektoru se zavolá procedura Soucet_obj z projektu Sumace a předá se jí parametr. Vypočtené hodnoty se pomocí GetVariable dostanou zpět jako nově vytvořené proměnné a je možno je použít v následujících příkazech konektoru nebo v HTW šabloně.

BeginProgram: Sumace
    Soucet_obj(%id_obj%);
EndProgram;
GetVariable: w_bez0:=Nr_bez0
GetVariable: w_bez1:=Nr_bez1
GetVariable: w_bez2:=Nr_bez2
GetVariable: w_dph0:=Nr_dph0
GetVariable: w_dph1:=Nr_dph1
GetVariable: w_dph2:=Nr_dph2
GetVariable: w_sum0:=Nr_sum0
GetVariable: w_sum1:=Nr_sum1
GetVariable: w_sum2:=Nr_sum2

Poznámka:

Z důvodu rychlosti odezvy Internet klienta se vždy pokoušejte vytvářet složitější procedury v jazyce SQL. Natahování velkých projektů spotřebovává hodně času a paměti, výpočty na serveru pomocí uložených procedur jsou mnohem rychlejší.


HTTPHeader (WBIK)

Formát příkazu:

HTTPHeader: výraz-typu-string

Příkaz vyhodnotí výraz a jeho hodnotu přidá k HTTP hlavičkám, které budou zaslány browseru. Hodnota výrazu musí mít formát HTTP hlavičky, tj. "název-http-hlavičky: hodnota-http-hlavičky" a nesmí být ukončena dvojicí znaků 0xD 0xA, protože tyto znaky připojí na konec hlavičky Internet klient.

Musí se nastavovat právě jedna HTTP hlavička, případné další hlavičky je třeba nastavit dalšími příkazy HTTPHeader. Tímto příkazem se nesmí nastavovat HTTP hlavičky Content-type a Location., pro něž existují samostatné příkazy konektoru.

Příklad:

HTTPHeader: "Pragma: no-cache"
HTTPHeader: "Cache-control: no-cache"
HTTPHeader: "Status: 404 Not Found"


IgnoreBlanks (WBIK)

Formát příkazu:

IgnoreBlanks: { none | CRLFonly | all }

Příkaz umožňuje zvolit způsob práce s tzv. prázdnými znaky (white spaces, tj. znaky s ASCII kódem 9 - horizontální tabulátor, 10 - odřádkování LF, 11 - vertikální tabulátor, 12 - odstránkování - form feed, 13 -odřádkování CR, 32 - mezera) v šablonách mimo HTW závorky (tj. mimo <%...%>). V konektoru se zvolí právě jedna z nabízených možností. Není-li blok použit, použije se none.

  • Defaultní způsob práce (volba none) znamená, že všechny tyto znaky se předávají nezměněny do výstupního dokumentu (jediný způsob až do verze 7). To přestává vyhovovat v případech, kdy lze pomocí Content-type zvolit jiné formáty výstupu, kde na těchto znacích více záleží.

  • Volba all znamená, že všechny prázdné znaky se ignorují a je třeba do šablony přidat speciální výrazy, které je nahradí. Pro tabelátor se používá <%#9%>, pro konec řádku v DOSu <%#13#10%>, pro mezeru <%#32%> nebo <%" "%> apod. Přesněji řečeno se tyto znaky do výsledného dokumentu dostanou jedině tehdy, pokud jsou součástí citovaného výrazu, tak jako ve výše uvedených příkladech. Odstraňují se i znaky z HTML tagů (toto není příkaz primárně určený pro použití s content-typem "text/html").

  • Volba CRLFonly je kompromisem, ignorují se pouze znaky konce řádků (znaky s kódem 13 a 10).

Ještě jednou zdůrazněme, že při volbě all, nebo CRLFOnly se tyto znaky do výsledného dokumentu dostanou jedině tehdy, pokud jsou součástí citovaného výrazu.

Příklad:

Export výsledku statistiky e-Shopu v CSV, pro formátování výstupu je zapotřebí nastavit typ a přesně pracovat s konci řádků:

<%WBC%>
// export výsledku statistiky Obraty v čase v CSV
RequiredValues: interval ord ds typ obch pocet

Content-type: "application/unknown; charset=windows-1250"
HTTPHeader: "Content-Disposition: inline; filename=exp_stat_cas.csv"
IgnoreBlanks: all

DeclareVariable: podmstr:String[250]=""

SQLStatement:
+ CALL Podminka_cas(%interval%,%pocet%,%ds%,%typ%,%obch%,:>podmstr)

SQLStatement: PoSkupinach
#if interval=1
+SELECT Date2str(OH.datum,1) AS dat,
+ SUM(OH.sum_obj) AS bezdph, COUNT(OH.id_dobj) AS pocet_obj, SUM(OH.k_uhrade) AS sdph, OH.datum
+ FROM Obj_header AS OH, Obchodni_partneri AS OP
+ WHERE %podmstr%
+ GROUP BY OH.datum
#endif
#if interval=2
+ SELECT Int2str(Month(OH.datum))||"_"||Int2str(Year(OH.datum)) AS dat,
+ SUM(OH.sum_obj) AS bezdph, COUNT(OH.id_dobj) AS pocet_obj, SUM(OH.k_uhrade) AS sdph, OH.datum
+ FROM Obj_header AS OH, Obchodni_partneri AS OP
+ WHERE %podmstr%
+ GROUP BY Month(OH.datum)
#endif
#if ord=1
+ ORDER BY datum
#endif
#if ord=2
+ ORDER BY sdph DESC
#endif
<%/WBC%>

<%if interval="1"%>Dny<%elseif interval="2"%>Mesice<%endif%>,Pocet_obj,Objem_bez_dane,Objem_s_dani<%#13#10%>

<%begindetail PoSkupinach%>
<%dat%>,<%pocet_obj%>,<%bezdph;-101%>,<%sdph;-101%><%#13#10%>
<%enddetail%>


ImportFile (WBIK)

Formát příkazu:

ImportFile: prom_file prenos

Příkaz umožňuje pomocí HTML formuláře odeslaný datový soubor prom_file načíst do databáze (do tabulky). Pro vlastní import musí být v aplikaci připravený objekt typu Přenos dat nazvaný prenos, který předem počítá s formátem (většinou textového, např. CSV) souboru.

POZOR! Nezaměňujte tento vzdálený import dat s uložením obsahu souboru do jednoho záznamu tabulky (do sloupce typu BLOB), popisovaného zde.

Příklad:

v první šabloně je HTML form pro výběr souboru:

<form method="POST" action="<%wb_url%>/upload_zakaz.wbc" enctype="multipart/form-data">
Vyberte soubor se zákazníky : <input type="FILE" name="upl_file"> <br>
Soubor se zákazníky musí být v CSV formátu o struktuře dané dokumentací!<br><br>
<input type="HIDDEN" name="id_ob" value="<%id_ob%>">
<input type="SUBMIT" value="Poslat">
</form>

v následujícím konektoru se poslaný soubor načte do tabulky podle definovaného přenosu UPL_CSV_ZAKAZ:

// import dat do tabulky OP_upload podle přenosu `upl_csv_zakaz`
ImportFile: upl_file upl_csv_zakaz


Location (WBIK)

Formát příkazu:

Location: výraz_typu_String_jehož_hodnotou_je_URL

Příkaz přesměruje browser na zadané URL. Využívá k tomu HTTP hlavičku Location (HTTP header – viz norma HTTP/1.1 – RFC 2616). URL musí být uvedeno včetně názvu webserveru a protokolu (http://). Výraz je konstruován podle pravidel pro výrazy v šablonách.

Rozdíl mezi blokem Template a Location na dynamicku stránku je následující:

  • v případě Template se vykoná konektor obsahující Template a zobrazí se zadaná šablona. Pokud šablona volaná v Template obsahuje konektor, ten se ignoruje. Reload stránky s konektorem obsahujícím Template se provede s původním konektorem.

  • v případě Location se nejprve vykoná konektor obsahující Location, poté se vykoná konektor v zadané šabloně a poté se zobrazí šablona. Reload stránky s konektorem obsahujícím Location se provede již na přesměrované stránce (s novým konektorem).

Příkaz Location může být umístěn na libovolném místě konektoru, před přesměrováním se provedou všechny bloky konektoru (resp. s ohledem na výsledek #if) bez ohledu na jeho umístění. Pochopitelně pokud by byl příkaz Location součástí větve příkazu #if, která se neprovede, pak ani příkaz Location nebude proveden.


MaxRecords (WBIK)

Formát příkazu:

MaxRecords: počet_záznamů

Význam:

Při čtení odpovědi na jakýkoliv SQL příkaz SELECT bude přečteno nejvýše počet_záznamů záznamů. Počet_záznamů je nezáporné celé číslo. Není-li uvedeno, bude přečteno maximálně 2147483647 záznamů.

Doporučujeme omezit počet přečtených záznamů pro každý SELECT zvlášť, viz blok SQLStatement. Příkaz MaxRecords je zastaralý a zůstává zachován pouze z důvodu zpětné kompatibility.

Příklad:

MaxRecords: 1000


Program (WBIK)

Formát příkazu:

BeginProgram: název_projektu
  řádek_bloku_Program
EndProgram;

Příkazy BeginProgram a EndProgram musí být uvedeny na samostatných řádcích a musí být napsány bezprostředně na začátku řádku.

Název_projektu je nepovinný údaj. Je to název zdrojového programu v dané aplikaci 602SQL, v jehož kontextu má WBIK provést příkazy z tohoto bloku Program. Před provedením těchto příkazů WBIK nastaví uvedený zdrojový program jako projekt. Příkazy v bloku Program budou pak moci volat procedury a funkce z tohoto projektu a pracovat s globálními proměnnými tohoto projektu. Pokud název_projektu je vynechán, pak musí příkazy z bloku Program volat pouze standardní funkce a procedury a nesmí se odkazovat na proměnné zdrojových programů dané aplikace.

Řádek_bloku_Program může být kterýkoliv syntakticky a sémanticky správně napsaný řádek programu ve vnitřním programovacím jazyku 602SQL.

Význam:

Tento blok konektoru umožňuje provést libovolný zdrojový text ve formátu vnitřního programovacího jazyka 602SQL. Většinou se využije k zavolání procedury s parametrem tvořeným vstupní proměnnou formuláře a následně pomocí GetVariable se vypočtené hodnoty předají zpět mezi proměnné šablony.

Z hlediska optimálního výkonu aplikace je vhodnější místo klientských programů používat mnohem rychlejší uložené procedury. Klientské programy používejte jen tam, kde omezený jazyk SQL nestačí (struktury, pole, formátování apod.).

Pokud se může v prováděném programu vyskytnout chyba, na níž je třeba reagovat (např. změnou hodnoty ve formuláři nebo ukončením provádění konektoru), je třeba v programu volat proceduru SetUserError z knihovny 602INET8.DLL. Tato procedura nastaví chybu č. 90 (chyba vyvolaná aplikací) a jako chybové hlášení nastaví obsah předaného řetězce, takže chybová šablona na tuto chybu může reagovat. . Bezprostředně po ukončení bloku Program (nebo procedury RunProgram), ve kterém byla tato procedura zavolána, Internet klient ukončí provádění WBC konektoru a vygeneruje chybovou HTML stránku dle nastavené chybové šablony.

Pokud je v konektoru uvedeno několik bloků SQLStatement a Program, pak je WBIK provede v tom pořadí, v jakém jsou uvedeny ve WBC konektoru. Následující blok (SQLStatement i Program) bude pracovat s daty, do kterých budou zahrnuty výsledky všech příkazů v předchozích blocích SQLStatement a Program.

Před provedením zdrojového textu WBIK je většinou nutné nastavit projekt dané aplikace. Před provedením prvního bloku Program z daného WBC konektoru není nastaven projekt žádný. Po provedení prvního bloku Program, který požaduje nastavit projekt, zůstane projekt nastaven až do okamžiku, kdy další blok Program bude požadovat nastavení projektu. Tento fakt tedy znamená, že pokud první blok Program nastaví určitý projekt a druhý blok Program nebude požadovat nastavení projektu, pak příkazy druhého bloku Program budou provedeny v kontextu projektu, který nastavil první blok Program. Znamená to také, že globální proměnné projektu budou mít tu hodnotu, kterou měly při ukončení prvního bloku Program. Tímto způsobem můžeme předávat údaje mezi bloky Program.

Na tyto vlastnosti nemá vliv ani to, že mezi uvedenými bloky Program je (jeden, nebo několik) blok SQLStatement. Druhý blok Program bude v tomto případě pracovat s obsahem databáze, který bude obsahovat výsledky SQL příkazů v bloku (blocích) SQLStatement.

Pokud by druhý blok Program nastavoval ten samý projekt, budou všechny globální proměnné projektu inicializovány (vynulovány). Toto je způsobeno tím, že při nastavení projektu (i toho samého, který je momentálně nastaven) jsou inicializovány všechny globální proměnné daného projektu.

Pozor!!

V proceduře vnitřního jazyka prováděné v bloku Program nesmějí být prováděny akce, které vyžadují interakci s uživatelem nebo s prostředím klientského počítače (importy, tisky apod.)!! Především nesmí tato procedura otevírat jakákoliv informační okna (Info_box, YesNo_box, Input_box), okna se zprávou o chybě (Signalize), ani žádné prvky prezentační vrstvy (pohledy, menu atd.)!! Pokud by tyto akce procedura prováděla, bude po jejich zobrazení čekat na akci uživatele (stisknutí tlačítka ap.) a díky tomu WBIK, který byl použit k provedení tohoto konektoru, nikdy neskončí svůj běh. Spolu s tímto bude webserver a browser nekonečně dlouho (do vypršení timeoutu) čekat na ukončení internetového klienta.

Na chybu při vykonávání procedury je nutné reagovat pouze voláním funkce SetUserError.

Příklad 1:

V konektoru se zavolá procedura Soucet_obj z projektu Sumace a předá se jí parametr. Vypočtené hodnoty se pomocí GetVariable dostanou zpět (vytvoří se proměnné WBIK s hodnotami globálních proměnných projektu Sumace) a je možno je použít v následující HTW šabloně.

BeginProgram: Sumace
    Soucet_obj(%id_obj%);
EndProgram;
GetVariable: w_bez0:=Nr_bez0
GetVariable: w_bez1:=Nr_bez1
GetVariable: w_bez2:=Nr_bez2

Příklad 2:

V šabloně je třeba zobrazit datum ve speciálním formátu, kterého nelze dosáhnout prostředky HTW:

V programu nazvaném WWW_procs uloženém v aplikaci (jediný program => tvoří projekt) je vytvořena procedura Datum():

var
  prom_proj : string[200];

procedure Datum();
var
  i : integer;
  ss : string[20];
  pomstr : string[200];
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");
  pomstr := ss+", "+Date2str(Today,4);
  prom_proj := pomstr;
end;

begin
end.

Konektor může tuto proceduru zavolat a hodnotu v globální proměnné projektu překopírovat do nové HTW proměnné nazvané Datestr:

<%WBC%>
...

BeginProgram: WWW_procs
      Datum();
EndProgram:
GetVariable: Datestr:=prom_proj;
<%/WBC%>

V následující šabloně lze datum vypsat např.:

Vítejte na našich stránkách - <%Datestr%><BR>


RequiredValues (WBIK)

Formát příkazu:

RequiredValues: jméno_proměnné[povinný_počet_hodnot]

Význam:

WBIK zkontroluje, zda na vstupu obdržel proměnnou se jménem jméno_proměnné a zda je její hodnota různá od prázdného řetězce. Pokud není splněna aspoň jedna z těchto podmínek, vygeneruje chybu číslo 47 (viz seznam chyb). Použitá chybová šablona by pak měla na tuto chybu reagovat - většinou oznámením, aby se uživatel pomocí tlačítka Zpět v browseru vrátil a zadal parametry správně.

Parametr povinný_počet_hodnot, uzavřený v hranatých závorkách a následující bezprostředně za jménem proměnné, je nepovinný. Pokud jej uvedeme, pak povinný_počet_hodnot je celé kladné číslo, které udává, kolik hodnot dané proměnné musí být přečteno z formuláře, aby nebyla generována chyba. Všechny tyto hodnoty dané proměnné musí splňovat podmínku na různost od prázdného řetězce. Pokud aspoň jedna hodnota této proměnné je prázdná, pak je generována chyba číslo 47. Na témže řádku může být uvedeno více proměnných (případně následovaných povinným počtem hodnot), pak musí být jednotlivé proměnné od sebe odděleny mezerou, nebo tabulátorem. Pokud bychom chtěli psát další povinnou hodnotu na následující řádek, tento řádek musí začínat klauzulí RequiredValues:.

Příklad:

RequiredValues: jmeno heslo datx


Relogin (WBIK)

Formát příkazu:

Relogin: výraz-typu-String

Význam:

Pomocí příkazu Relogin se Internet klient přehlásí z aktuálního uživatelského účtu (typicky __web) na jiný uživatelský účet. Pokud se přehlášení nepovede, Internet klient se přihlásí opět jako __web a nastaví zpět původní aplikaci.

Výraz-typu-String musí mít formát "přihlašovací_jméno:heslo". Pokud je přihlašovací jméno nebo heslo prázdné, uvede se na patřičném místě prázdný řetězec (např. "vasek:" - uživatel vasek má prázdné heslo). V případě prázdného hesla lze také vynechat dvojtečku (výše uvedený příklad by byl tedy "vasek"). Anonymní uživatel je určen kterýmkoliv stringem z "anonymous", "anonymous:", ":", "" (má vždy prázdné heslo). Příkaz Relogin lze použít vícekrát v jednom konektoru. K opětovnému přihlášení jako uživatel __web stačí příkaz Relogin: "__web" bez zadání hesla, Internet klient zná heslo k účtu __web, protože už byl jako tento uživatel přihlášen při zpracování daného konektoru.

Pokud v databázi neexistuje uživatel zadaného jména, konektor vrátí chybu č. 113 Uživatel neexistuje.


RunProgram (WBIK)

Formát příkazu:

RunProgram: program_ve_vnitřním_jazyce

Program_ve_vnitřním_jazyce je název objektu typu program v aplikaci, který obsahuje proceduru s pevným jménem RunProgram, bez parametrů:

  procedure RunProgram;
  begin
    ...
  end;

Význam:

Význam tohoto bloku konektoru velmi poklesl a je zde uveden pouze z důvodu zpětné kompatibility aplikací.

Pomocí tohoto bloku lze provádět generování dynamických HTML stránek poněkud odlišným způsobem, než konektor šablona. Ke generování slouží procedura vnitřního jazyka, která umí přečíst vstupní formulářové a systémové proměnné a na určená místa HTW šablony dosazovat již hotové texty.

Generování textu

V HTW šabloně je definován libovolný počet návěští

    <%:název_návěští%>

Název_návěští musí být slovo začínající písmenem (i s diakritikou), nebo znakem _ a obsahující pouze písmena (včetně písmen s diakritikou), číslice a znak _ .

V proceduře RunProgram lze pomocí speciální funkce SendToWeb generovat na tato návěští libovolný text. Tento text může obsahovat i formátovací značky HTML - viz příklad.

Blok RunProgram může být v konektoru i na více místech, lze generovat text vícekrát na stejná návěští (starší text se vždy "odsune dopředu"). Bloky se provedou v tom pořadí, v jakém se naleznou v konektoru.

Čtení vstupních proměnných

V proceduře lze přečíst vstupní proměnné, které byly předány webserverem tomuto WBC konektoru.

Funkce, které lze použít v proceduře RunProgram, jsou uloženy v knihovně 602INET8.DLL, která je součástí dodávky 602SQL. Funkce je nutné proto deklarovat jako externí. V přiloženém includu I_WBINET.PGM (soubor v adresáři s 602SQL) jsou všechny potřebné deklarace již uvedeny, nejjednodušší cestou je tedy vložit include do Vašeho programu. Předtím pochopitelně musíme naimportovat tento soubor a tím vytvořit nový databázový objekt typu program.

POZOR!!:

  • 602INET8.DLL musí být v adresáři, který je součástí proměnné PATH!!! (nejlépe v adresáři s 602SQL)

  • V proceduře RunProgram nesmějí být prováděny akce, které vyžadují interakci s uživatelem!! Především nesmí tato procedura otevírat jakákoliv informační okna (Info_box, YesNo_box, Input_box), okna se zprávou o chybě (Signalize), ani žádné prvky prezentační vrstvy (pohledy, menu atd.)!! Pokud by tyto akce procedura prováděla, bude po jejich zobrazení čekat na akci uživatele (stisknutí tlačítka ap.) a díky tomu internetový klient 602SQL, který byl použit k provedení tohoto konektoru, nikdy neskončí svůj běh. Spolu s tímto bude webserver a WWW browser nekonečně dlouho čekat na ukončení internetového klienta.

Na chybu při vykonávání procedury RunProgram je nutné reagovat pouze voláním funkce SetUserError.

Blok RunProgram lze kombinovat s "obvyklým" způsobem generování dynamického HTML dokumentu (tj. pomocí SQLStatement, bloku Program a bloku GetVariable). Lze si představit situaci, kdy méně komplikované časti HTML dokumentu jsou generovány "klasicky" a pro generování např. komplikovanějších formulářů je použit blok RunProgram.

Provoz na Linuxu

Zdrojové texty procedury RunProgram mohou být stejné jako při provozu na platformě Windows. Je třeba naincludovat I_WBINET.PGM (bez ohledu na to, že v něm jsou výše zmíněné funkce označeny jako externí, nacházející se v knihovně 602INET8.DLL). CGI klient (Linux) při provádění procedury RunProgram poznají volání těchto funkcí a nehledá knihovnu 602INET8.DLL, ale tyto funkce zavolá přímo, protože se nacházejí v Internet klientovi pro tyto OS.

Díky tomuto řešení lze používat stejné konektory a procedury RunProgram beze změny jak na platformě Windows, tak na platformě Linux.

Příklad kombinující oba způsoby použití - na návěští v šabloně vypíše názvy a obsah vstupních proměnných:

HTW šablona

<%WBC%>
RunProgram: Test_runprogram
<%/wbc%>

<html><head><title>Titulek</title></head>
<body>
Seznam vstupních proměnných:<br>
<table border=0 cellpadding=0 cellspacing=2>
<%:promenne%>
</table>
<p>
Obsah prvního návěští: <%:navesti1%>
</body>
</html>

Program Test_runprogram

{$I I_wbinet}

procedure RunProgram;
var
    varcount,i:short;
    varname,varvalue:string[255];
begin
    // vypsat vstupní proměnné na návěští promenne
    varcount:=GetVarCount;
    for i:=0 to varcount-1 do
      begin
        varname:="";
        if( GetVar(i,varname) ) then
          begin
            GetVarValue(i,varvalue);
            SendToWeb("promenne","<tr><td>");
            SendToWeb("promenne",varname);
            SendToWeb("promenne","</td><td>");
            SendToWeb("promenne",varvalue);
            SendToWeb("promenne","</td></tr>");
          end
        else
            SetSTWError("GetVar failed");
      end;
    // vypsat libovolný další text na návěští navesti1 a navesti2
    SendToWeb("navesti1","text na návěští 1");
end;

begin
end.


Funkce SendToWeb

602SQL-Úplná dokumentace

SendToWeb (WBIK)

function SendToWeb(var label : string; var text_to_send : string) : Boolean;
external "602inet8.dll";

Popis:

Vloží programem vytvořený text text_to_send na místo definované v šabloně pomocí návěští se jménem label. Vytvořený text může (a často právě proto se tato procedura používá) obsahovat také HTML značky, které doplní zdrojový text v šabloně na výsledný HTML dokument.

Viz

  • Funkce v RunProgram


Funkce SetSTWError

602SQL-Úplná dokumentace

SetSTWError (WBIK)

function SetSTWError(var errmsg : string) : Boolean;
external "602inet8.dll";

Popis:

V reakci na to, že jiná funkce z 602INET8.DLL (GetVar, GetVarValue a GetValue apod.) skončí chybou, přeruší vykonávání procedury RunProgram a nahodí chybu č. 83 ( tj."chyba při běhu programu v bloku RunProgram") a jako text chyby nastaví řetězec errmsg. Tento řetězec nesmí být delší než 1024 znaků.

Při případné databázové chybě použijte funkci SetUserError, která nahodí chybu č. 90 (Uživatelská chyba).

Na obě chyby musí reagovat chybová šablona.

Viz

  • Funkce v RunProgram


Funkce GetValue

602SQL-Úplná dokumentace

GetValue (WBIK)

function GetValue(var varname : string; index : short; var value : string) : Boolean;
external "602inet8.dll";

Popis:

Do proměnné value zkopíruje index-tou hodnotu vstupní proměnné varname. Hodnoty proměnných jsou indexovány od 0.

Pokud proměnná jména varname existuje a pokud existuje její index-tá hodnota, bude tato hodnota zkopírována a bude vrácena hodnota TRUE.

V případě chyby (neexistence dané proměnné, resp. neexistence index-té hodnoty) je vrácena hodnota FALSE.

Počet hodnot proměnné varname zjistí funkce GetValueCount.

Viz

  • Funkce v RunProgram


Funkce GetValueCount

602SQL-Úplná dokumentace

GetValueCount (WBIK)

function GetValueCount(var varname : string) : short;
external "602inet8.dll";

Popis:

Vrátí počet hodnot vstupní proměnné varname. Pokud tato proměnná neexistuje,vrátí -1.

Hodnoty proměnné varname vrací funkce GetValue.

Viz

  • Funkce v RunProgram


Funkce GetVarCount

602SQL-Úplná dokumentace

GetVarCount (WBIK)

function GetVarCount : short;
external "602inet8.dll";

Popis:

Vrátí celkový počet hodnot vstupních proměnných, které byly získány od webserveru. Návratová hodnota je vždy větší, nebo rovna nule.

Jméno konkrétní vstupní proměnné vrací funkce GetVar.

Hodnotu konkrétní vstupní proměnné vrací funkce GetVarValue.

Viz

  • Funkce v RunProgram


Funkce GetVar

602SQL-Úplná dokumentace

GetVar (WBIK)

function GetVar(pos : short; var varname : string) : Boolean;
external "602inet8.dll";

Popis:

Do řetězce varname zkopíruje jméno vstupní proměnné, která byla předána jako pos-tá. Proměnné jsou číslovány od 0. Pokud pos-tá proměnná existuje, je vráceno TRUE, v případě chyby (pos-tá proměnná neexistuje, tj. bylo předáno méně proměnných) je vráceno FALSE.

Počet vstupních proměnných vrací funkce GetVarCount.

Hodnotu konkrétní vstupní proměnné vrací funkce GetVarValue.

Viz

  • Funkce v RunProgram


Funkce GetVarValue

602SQL-Úplná dokumentace

GetVarValue (WBIK)

function GetVarValue(pos : short; var varvalue : string) : Boolean;
external "602inet8.dll";

Popis:

Do řetězce varvalue zkopíruje hodnotu (!!ne jméno!!) pos-té vstupní proměnné.Proměnné jsou číslovány od nuly. Vrací pří úspěchu TRUE, při chybě (neexistuje pos-tá proměnná) FALSE.

Počet vstupních proměnných vrací funkce GetVarCount.

Jméno konkrétní vstupní proměnné vrací funkce GetVar.

Viz

  • Funkce v RunProgram


Procedura SetUserError

602SQL-Úplná dokumentace

SetUserError (WBIK)

procedure SetUserError(var errmsg : string);
external "602inet8.dll";

Popis:

Procedura nastaví chybu č. 90 (Uživatelská chyba vyvolaná aplikací) a jako chybové hlášení nastaví obsah řetězce errmsg. Tento řetězec nesmí být delší než 1024 znaků.

Bezprostředně po ukončení bloku Program (nebo procedury RunProgram), ve kterém byla tato procedura zavolána, Internet klient ukončí provádění WBC konektoru a vygeneruje chybovou HTML stránku dle nastavené chybové šablony. Proceduru lze volat vícekrát v jednom bloku Program (resp. RunProgram), uživateli se ohlásí poslední nastavené chybové hlášení.

Viz

  • Funkce v RunProgram


SelectLanguage (WBIK)

Formát:

SelectLanguage: { výraz_typu_integer | výraz_typu_string }

Význam:

Vybere jazyk, podle kterého se budou překládat metařetězce, které následují po tomto příkazu. Pokud je tento příkaz posledním příkazem SelectLanguage v konektoru, budou se do tohoto jazyka překládat také všechny metařetězce uvedené v šabloně. Jazyk se volí jedním ze dvou způsobů:

  • výraz_typu_integer je číslo zvoleného jazyka. Jazyky se číslují od 0 podle pořadí sloupců v tabulce _multiling (první jazyk má číslo 0, druhý jazyk má číslo 1 atd.).

  • výraz_typu_string je název zvoleného jazyka, přičemž v něm nezáleží na velikosti písmen.

Ve výrazech v konektorech a šablonách lze používat metařetězce pomocí konstrukce @string_id. Tato konstrukce je typu konstanta typu string a nabývá hodnoty metařetězce daného ID podle aktuálně zvoleného jazyka. Mezi @ a string_id nesmí být žádný znak (ani mezera). Při hledání metařetězce v tabulce _multiling se nebere ohled na velikost písmen v ID metařetězce.


SendDiskFile (WBIK)

Formát:

SendDiskFile: výraz_typu_string [and delete]

Význam:

Příkaz odešle soubor, jehož úplné jméno je hodnotou výrazu_typu_string do browseru. Používá se tehdy, kdy je třeba browseru poslat nějaká binární data známého formátu (obrázek, dokument apod.). Současně s tímto příkazem je třeba nastavit vhodný Content-type dokumentu.

Pokud je uvedeno and delete, bude soubor po odeslání smazán.

Viz

  • SendFile - odeslání binárních dat z databáze do browseru


SendFile (WBIK)

Formát příkazu:

SendFile: výraz_typu_string_nebo_BLOB

Význam:

Příkaz odešle výrazem zadanou hodnotu do browseru. Používá se tehdy, kdy je třeba browseru poslat nějaká binární data známého formátu (obrázek, dokument apod.). Současně s tímto příkazem je třeba nastavit vhodný Content-type dokumentu.

Více informací o ukládání souborů do databáze a odesílání souborů do browseru naleznete zde.

Příklad:

K odeslání souboru, který je uložen v tabulce, do browseru se použije následující HTW šablona. Pro následující výklad je pojmenována Getfile.htw, předpokládejme, že chceme poslat soubor, jehož jméno je předáváno do šablony ve vstupní formulářové proměnné filename:

<html>
<head>
<title>Soubor neexistuje</title>
</head>
<%wbc%>
SQLStatement: soubor
+ SELECT content,content_type FROM Files
+ WHERE filename="%filename%"
EndSQLStatement;
; pokud takový soubor existuje
#if soubor#>0
; zkontrolovat, zda není Content-type prázdný
#if soubor[0].content_type==""
; pokud ano, nastavit obecný Content-type
Content-type: "application/octet-stream"
#else
; nastavit Content-type
Content-type: soubor[0].content_type
#endif
; poslat soubor
SendFile: soubor[0].content
#endif
<%/wbc%>
<body>
<!-- tato stránka se sestaví a odešle jedině tehdy, pokud se neprovede SendFile -->
<h1>Soubor neexistuje</h1>
Soubor <%filename%> není v databázi!
</body>
</html>

Lokální šablona se použije jen tehdy, pokud se výsledný dokument negeneruje příkazem SendFile zasláním proudu bajtů přímo browseru.

Nastavení správného jména souboru při ukládání dokumentu browserem

HTTP protokol nedisponuje příkazem (HTTP hlavičkou), kterým by se browseru mohlo nastavit jméno souboru, do kterého se má dokument zobrazený browserem uložit. Jméno souboru browser odvozuje podle URL. V případě, že chceme zobrazit soubor "obrazek.jpg" z tabulky Files, browser zobrazí dokument s následujícím URL:

http://www.server.cz/cgi-bin/602cgi8.exe/db/app/getfile.wbc?filename=obrazek.jpg

Při pokusu o uložení dokumentu browser nabídne v "Uložit jako" dialogu jméno "getfile.wbc", ale ne správné "obrazek.jpg".

K očekávanému chování můžeme browser donutit tímto trikem: necháme browser zobrazit dokument s tímto URL:

http://www.server.cz/cgi-bin/602cgi8.exe/db/app/getfile.wbc/obrazek.jpg?filename=obrazek.jpg

Pak browser při ukládání nabídne jméno "obrazek.jpg". Internet klient při zjišťování jména WWW objektu čte postupně název databáze, název aplikace a název WWW objektu. To, co je v URL za názvem WWW objektu a před znakem "?", nečte a ignoruje. Narozdíl od toho browser považuje "getfile.wbc" za název podadresáře a teprve "obrazek.jpg" za název souboru.

Viz

  • SendDiskFile - odeslání souboru z disku do browseru


Set-cookie (WBIK)

Formát příkazu:

Set-cookie: name=hodnota [; expires=datum_a_čas ] [; path=cesta ]

COOKIES jsou informace uložené webserverem na počítači klienta, sloužící k identifikaci a zapamatování určitých konstant. Pomocí cookies lze v jisté omezené míře nahradit nemožnost sdílení proměnných mezi různými dynamickými stránkami.

Příkaz umožní nastavit cookie se jménem name (musí být identifikátorem z písmen, číslic a _) a hodnotou rovnou výsledku výrazu hodnota typu string (pozor na uvozovky!), dále může být nastaven čas vypršení platnosti - výraz datum_a_čas typu timestamp (v normální citaci, viz příklad) a parametr path - výraz cesta typu string.

Tento příkaz je rozšířením staršího způsobu práce s cookies - tím, že je součástí WBC konektoru a ne šablony, lze jej použít i tehdy, když vygenerovaná stránka není HTML dokument, nebo když se používají příkazy Location nebo SendFile.

Příklad:

vytváříme cookie jménem POK s dobou platnosti 1 minuta a hodnotou "x". Pokud se reloaduje do 1 minuty, k hodnotě se připojuje další "x". Po minutě vyprší platnost a začne se znovu s hodnotou "x".

<%wbc%>
DeclareVariable: hodnotacookie:string[20] :="x"
DeclareVariable: res:string[20]:=""
#if exists HTTP_COOKIE_pok
SetVariable:hodnotacookie:="%HTTP_COOKIE_pok%"+"x"
SetVariable:res:="už existuje"
Set-cookie: pok="%hodnotacookie%" ; expires=%current_timestamp%+60
#else
;neexistuje cookie, vytvořit jej
Set-cookie: pok="%hodnotacookie%" ; expires=%current_timestamp%+60
SetVariable:res:="dosud neexistuje"
#endif

<%/wbc%>

<body >
  čas: <%current_time%><br>
  hodnota: <%hodnotacookie%><br>
  existence: <%res%>
</body >


SetVariable (WBIK)

Formát příkazu:

SetVariable: jméno_existující_proměnné:=výraz_definující_novou_hodnotu

Význam:

Tento blok slouží ke změně hodnoty existující vstupní formulářové proměnné nebo proměnné získané pomocí GetVariable a DeclareVariable před tímto blokem konektoru.

Výraz_definující_novou_hodnotu je konstruovaný podle pravidel pro výrazy, může obsahovat názvy vstupních formulářových proměnných, názvy selectů a sloupců, které byly vyhodnoceny v pojmenovaném SQLStatement před tímto blokem a názvy HTW proměnných získaných pomocí GetVariable a DeclareVariable před tímto blokem. Výraz může obsahovat i starou hodnotu proměnné.

Typ existující proměnné a typ výrazu musí být kompatibilní (buď stejný, nebo lze přiřadit Integer do Real proměnné, případně naopak);

Příklad 1:

Na začátku konektoru se vytvoří proměnná typu Boolean s hodnotou FALSE, podle výsledku SELECTu se případně změní na TRUE:

<%WBC%>
DeclareVariable: Logged :=FALSE
SQLStatement: Login
+ SELECT id,jmeno,heslo
+ FROM Logtable
+ WHERE jmeno="%name%" AND heslo="%passw%"
EndSQL
#if exists Login[0].id
SetVariable: Logged :=TRUE
#endif
<%/WBC%>

Následující šablona může vypadat:

<%if Logged = TRUE%>
  Přihlášen jako <B><%Login.jmeno%></B>.<BR>

...

<FORM ACTION="<%wb_url%>/next.htw" METHOD="POST">
<INPUT TYPE="Submit" VALUE="Předat parametry">
<INPUT TYPE="Hidden" NAME="name" VALUE="<%login.jmeno%>">
<INPUT TYPE="Hidden" NAME="passw" VALUE="<%login.heslo%>">
</FORM>
<%else%>
  Přihlášení neúspěšné.<BR>
<%endif%>


SQLStatement (WBIK)

Formát příkazu:

SQLStatement: název_SQL_příkazu
řádek_SQLStatement_bloku
[EndSQL]

Význam:

Blok konektoru, podle kterého se sestaví jednotlivé SQL příkazy, které budou předány databázi.

Můžete použít libovolné SQL příkazy 602SQL Serveru, pouze následující příkazy však mají praktický význam: SELECT, INSERT INTO, DELETE FROM, UPDATE, CALL.

Do jednoho bloku SQLStatement lze zapsat více SQL příkazů, v tom případě jsou jednotlivé příkazy od sebe odděleny středníkem. Poslední SQL příkaz v bloku SQLStatement nemusí končit středníkem.

Název_SQL_příkazu je slovo z písmen, číslic a znaku podtržení ( _ ). V šabloně, která bude použita pro sestavení HTML dokumentu, se můžete na tento SQL příkaz odkazovat pomocí jména název_SQL_příkazu. Pojmenovat můžete libovolný SQL příkaz, ale praktický význam má pouze pojmenování příkazu SELECT. Tímto pojmenováním máte např. možnost zjistit, kolik záznamů obsahuje odpověď (název_SQL_příkazu.TotalCount), máte možnost se přímo odkazovat na sloupce odpovědi v detail sekci šablony atd.

Pokud blok SQLStatement obsahuje více SQL příkazů a zároveň je pojmenovaný, pak se název_SQL_příkazu vztahuje k prvnímu z uvedených SQL příkazů a ostatní SQL příkazy v bloku SQLStatement jsou nepojmenované.

Za pojmenováním příkazu SELECT v hlavičce bloku může následovat v hranatých závorkách výčet záznamů, které se mají přečíst. Výčet má formát

  [číslo_prvního_záznamu+počet_záznamů]

kde číslo_prvního_záznamu je pořadové číslo záznamu v odpovědi (číslováno od nuly), který má být přečten, počet_záznamů udává, kolik záznamů od výše uvedeného (včetně něho) má být přečteno. Část +počet_záznamů je nepovinná, není-li přítomna, předpokládá se, že má být přečten pouze záznam, jehož pořadové číslo je uvedeno (tzn. počet_záznamů=1). není-li výčet uveden, přečtou se všechny záznamy (s omezením daným blokem MaxRecords)

Blok může být nepovinně ukončen příkazem EndSQL; nebo EndSQLStatement;. Důvodem je případné nutné rozlišení případů s #if, jako:

SQLStatement: abcd
+ ...
#if podmínka
+ ...
#endif
EndSQL;

a

SQLStatement: abcd
+ ...
EndSQL;
#if podmínka
...
#endif

Příklady:

1) více SQL příkazů v jednom konektoru

SQLStatement: aplvers
+ SELECT apl_vers, apl_date
+ FROM Sys_par_2

SQLStatement: InfoProv
+ SELECT nazev1
+ FROM Info_provozovatel
+ WHERE id=%id%

DeclareVariable:  WBversion:string[5] := ""
SQLStatement:
+ CALL Version(:>WBversion)

2) pojmenovaný blok, na výsledek (jeden řádek, jedna hodnota) se lze v šabloně odkázat pomocí citace <%KolikVoleb.KolikV%>

SQLStatement: KolikVoleb
+ SELECT Count(*) AS KolikV
+ FROM Volby

Řádek_SQLStatement_bloku je buď řádek SQL příkazu, nebo příkaz WBC preprocesoru:

  • řádek SQL příkazu musí začínat znakem plus (+), za ním může být libovolný (i nulový) počet mezer a tabulátorů a za těmito znaky musí následovat text SQL příkazu.

  • každý příkaz WBC preprocesoru začíná znakem dvojitý křížek (#) - viz Přehled příkazů WBC preprocesoru.

Příklad:

3) blok využívající příkaz preprocesoru #ifexists; v příkazu citována proměnná REMOTE_ADDR vracející IP adresu uživatele

SQLStatement:
#ifexists
+ SELECT * FROM Anketa
+ WHERE (ipadr="%REMOTE_ADDR%");
#then
+ UPDATE Anketa
+ SET volba=Str2Int("%hodnota%")
+ WHERE (ipadr="%REMOTE_ADDR%");
#else
+ INSERT INTO Anketa(ipadr, volba)
+ VALUES ("%REMOTE_ADDR%", %hodnota%);
#endif

V SQL příkazech prováděných v bloku SQLStatement lze používat odkazy na proměnné (tzv. embedded variables), a to jak na proměnné deklarované v konektoru pomocí DeclareVariable, tak vstupní formulářové proměnné. SQL příkaz hodnotu proměnné buď přečte (přenos směrem k serveru) nebo pozmění (přenos od serveru ke klientovi). Druhá varianta je mnohem užitečnější.

Před každou takovou proměnnou 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 zrychlí práci. Proměnná (s názvem id) se tedy zapíše takto:

  • proměnná s obousměrným přenosem hodnoty::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

Příklad:

1) SQL příkaz SELECT INTO zapíše hodnotu do proměnné:

DeclareVariable: dat_smaz:String[12] := ""
SQLStatement: datum
+ SELECT CAST((CURRENT_DATE - del_obj) AS CHAR(12)) INTO :>dat_smaz
+ FROM Sys_par

2) Složitější SQL procedura vytvoří podle formulářových proměnných podmínku WHERE, která se uplatní v následujícím SELECTu:

DeclareVariable: podmstr:String[300]=""
SQLStatement:
+ CALL Podminka_polozky(%datx%,%?datod%,%?datdo%,%pocet%,%ds%,%typ%,%obch%,:>podmstr)

SQLStatement: PoPolozkach
+ SELECT OPol.id_cnk, SUM(OPol.cena_summn) AS cena, C.nazev_zbozi, COUNT(C.id_cenik) AS pocet_obj, CAST(SUM(OPol.mnozstvi) AS INT) AS mnoz, MAX(OH.datum) AS posledni
+ FROM Obj_polozky AS OPol, Cenik AS C, Obj_header AS OH, Obchodni_partneri AS OP, S_zbozi_sk AS SK
+ WHERE %podmstr%
+ GROUP BY C.id_cenik
#if pocet>1
+ HAVING SUM(OPol.mnozstvi)>=%pocet%
#endif;
+ ORDER BY cena DESC

Uložená procedura Podminka_polozky má následující hlavičku - do výstupního parametru zapíše vytvořenou podmínku:

PROCEDURE `PODMINKA_POLOZKY`(IN datx INT, IN datod DATE, IN datdo DATE, IN pocet INT, IN ds INT, IN typ INT, IN obch INT, OUT podmstr CHAR(300));


Template (WBIK)

Formát příkazu:

Template: HTW_šablona

Význam:

HTW_šablona je jméno WWW objektu typu šablona, která má být použita pro vytvoření HTML dokumentu, který bude odeslán WWW browseru uživatele, pokud nenastane žádná chyba při práci s 602SQL Serverem. Databázový objekt se musí nacházet v té samé aplikaci, ve které je daný WBC konektor. Název šablony doporučujeme uvést s příponou (.htw), není to však povinné. Lze také uvést případné vstupní parametry (za otazníkem).

Pokud volaná HTW_šablona obsahuje WBC sekci, konektor v této sekci se ignoruje.

Blok Template se může nacházet na libovolném místě konektoru, vyskytovat se může i vícekrát, pokud je struktura konektoru rozvětvená pomocí #if (viz příklad).

Přesměrování browseru na jinou stránku provádí blok Location.

Příklad:

Template: Anketa.htw?anketaid=%anketaid%

Další příklad:

// kontrola zadaného licenčního čísla
RequiredValues: liccis

BeginProgram: Lic
// program ve vnitřním jazyce, který ověří platnost čísla
  ValidLicNum("%lic%");
EndProgram
// v globální proměnné projektu res je výsledek
GetVariable: wres := res

#if wres
// platné lic. číslo
SQLStatement:
+ UPDATE Prametry
+ SET licence = "%liccis%"

Template: Main.htw

#else
// neplatné lic. číslo
DeclareVariable:zamitnuto := "TRUE"

// zpět na zadání lic. čísla
Template: Licence.htw
#endif


HTW šablony (WBIK)

HTW šablony jsou databázové objekty kategorie WWW objekty, které obsahují vedle normálního textu ve formátu HTML také výrazy a příkazy pro formátování údajů přečtených z databáze a větvení HTML. Tyto výrazy i příkazy jsou uzavřeny do HTW závorek <% a %>. To znamená, že uvnitř těchto závorek jsou pokyny pro 602SQL Internet klienty a vně je text ve formátu HTML, který bude pouze odeslán do WWW browseru internetového uživatele v nezměněné podobě. Příkaz může být uveden na libovolném místě HTML textu.

Výrazy a příkazy umístěné mezi značkami začátek a konec HTML komentáře (<!-- a -->) se ignorují.

Zdroj dat pro HTW šablonu je dán buď

  • samostatným WBC konektorem, který ve svém bloku Template volá tuto šablonu, nebo

  • tzv. WBC sekcí kdekoliv v této šabloně, což je sekce v HTW šabloně ohraničená tagy <%WBC%> a <%/WBC%>

Je-li blokem Template konektoru zavolána šablona s WBC sekcí, je tato sekce ignorována a uplatní se konektor, který šablonu volal.

Příklad části HTW šablony s konektorem (tučně jsou vyznačeny výrazy a příkazy HTW): podle počtu záznamů v odpovědi na SELECT z konektoru se vytvoří řádky HTML tabulky s přepínači.

...
<%WBC%>
SQLStatement: vstup
+ SELECT Volba, Popis
+ FROM Volby
+ ORDER BY Volba

SQLStatement: KolikVoleb
+ SELECT Count(*) AS KolikV
+ FROM Volby
<%/WBC%>

<FORM METHOD=POST ACTION="<%wb_url%>/anketawbs.wbs">
<HR>

<TABLE ALIGN=RIGHT BORDER=1 BGCOLOR=Silver BORDERCOLOR=Black WIDTH=40%>
<TR ALIGN=CENTER><TH COLSPAN=2>ANKETA</TH></TR>
<TR>
<TD ALIGN=CENTER ROWSPAN=<%KolikVoleb.KolikV%> WIDTH=60%>Zvolte jednu možnost</TD>
<%begindetail vstup%>
<TD ALIGN=LEFT WIDTH=40%><INPUT TYPE="RADIO" NAME="hodnota" <%if CurrentRecord=1%> CHECKED <%endif%> VALUE="<%Volba%>"> &nbsp;&nbsp;<%Popis%> </TD>
</TR>
<%enddetail%>
</TABLE>
...

V jazyce HTW šablon lze konstruovat výrazy a zobrazovat (citovat) je, v detail sekci vypisovat hodnoty sloupců v z odpovědi na dotaz položený v konektoru a pomocí příkazů if a for větvit HTML kód. Na kterékoliv místo šablony lze pomocí Include vložit text vygenerovaný podle jiné HTW šablony.


Citace výrazu (WBIK)

Formát:

<%výraz;výraz_typu_integer%>

Poznámka:

Část citace ;výraz_typu_integer se nazývá upřesnění citace (formát zobrazení). Upřesnění citace je nepovinné.

Význam:

Citace vypíše v šabloně hodnotu výrazu, způsob vypsání závisí na typu výrazu a na upřesnění citace.

Citovaný výraz je třeba vložit do HTW závorek <% %>, aby se odlišil od okolního HTML textu.

Možnosti upřesnění citace (= zobrazení) jsou uvedeny v následujícím přehledu:

Boolean, Integer

U těchto typů se upřesnění citace ignoruje. Boolean se vypíše jako text "ano", nebo text "ne".

Typ Short se automaticky konvertuje na Integer.

Real (Money se automaticky konvertuje na Real )

upřesnění citace | způsob vypsání
100+počet des. míst | použije se účetní zobrazení na daný počet des. míst - desetinné zobrazení, kde jsou tisíce odděleny oddělovačem nastaveným ve Windows.
-100 | 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,-)
-101 | 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)
-102 | bude zaokrouhleno na dvě des. místa; budou použity Windows separátory, a to jak oddělovač desetinných míst, tak oddělovač skupin číslic (např. tisíců)
-99 až 99 | absolutní hodnota udává počet desetinných míst; - je-li číslo kladné, výsledek bude v semilogaritmickém tvaru; - je-li číslo záporné, výsledek bude v desetinném tvaru.

Pokud není citace upřesněna, použije se citace <%hodnota;-3%>.

datum

upřesnění citace | způsob vypsání
0 | zápis data bude obsahovat pouze měsíc zapsaný číslicí, bez roku;
1 | zápis data bude obsahovat měsíc zapsaný číslicí a rok;
2 | zápis data bude obsahovat pouze měsíc zapsaný slovem, bez roku;
3 | zápis data bude obsahovat 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;
100 (cookieexpires) | pro zadání data při nastavování vypršení COOKIES;

Pokud není citace upřesněna, použije se citace <%hodnota;1%>.

čas

upřesnění citace | způsob vypsání
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;

Pokud není citace upřesněna, použije se citace <%hodnota;1%>.

Timestamp

upřesnění citace | způsob vypsání
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
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
100 (cookieexpires) | pro zadání data a času při nastavování vypršení COOKIES;

Pokud není citace upřesněna, použije se citace <%hodnota;5%>.

String a Text

Char se konvertuje na String[1].

upřesnění citace | způsob vypsání
0 | obsah se vypíše "tak jak je", beze změny
1 (NL2BR) | konce řádků v textu se naradí <BR>, aby se zachovalo rozlámání - uplatní se pouze pro vypisování hodnoty sloupců typu Text
2 (ASCII) | text se převede do 7 bitového ASCII - bez diakritiky

Pokud není citace upřesněna, použije se citace <%hodnota;0%>. Hodnoty lze sčítat.


Include v HTW šablonách (WBIK)

Formát:

<%include WWW_objekt%>

Význam:

Příkaz include vloží na dané místo HTW šablony vygenerovaný text podle WWW_objektu. WWW_objekt musí existovat ve stejné aplikaci, ve které je HTW šablona, která obsahuje příkaz include. Zadává se zde bez přípony. Includovaný WWW objekt nemůže být samostatnou HTML stránkou, protože tato stránka by ve výsledném dokumentu zdvojila základní HTML tagy (BODY, HTML apod.). Většinou se jedná o výsek HTML stránky, který se v mnoha objektech opakuje.

WWW_objekt dostane na vstupu ty vstupní formulářové proměnné, které dostala HTW šablona, a navíc dostane všechny proměnné vzniklé příkazy konektoru GetVariable a DeclareVariable v konektoru náležejícím k této šabloně (a nic víc - nedostane tedy např. odpověď na SELECT z pojmenovaného SQLStatement).

Po provedení příkazu include se také připojí případné HTTP hlavičky includovaného dokumentu k HTTP hlavičkám dokumentu, ve kterém se příkaz include nachází.

Pozn.: Nepřipojí se pouze hlavička Content-type, protože hodnota této hlavičky musí být určena hlavním dokumentem (ten, který obsahuje příkaz include).


Detail sekce (WBIK)

Formát:

<%begindetail název_příkazu_SELECT%>
 tělo_detailu
<%else%>
  tělo_pro_0_záznamů
<%enddetail%>

Význam:

Tato sekce šablony umožňuje vygenerovat do HTML dokumentu obsah odpovědi na SQL příkaz SELECT z bloku SQLStatement konektoru, jehož název je uveden v hlavičce sekce. Příkaz provede tělo_detailu pro každý záznam v SELECTu. Pokud je v odpovědi nula záznamů, tělo_detailu se nebude generovat ani jednou ale naopak se provede tělo_pro_0_záznamů). Část <%else%> lze vynechat, pak se při prázdné odpovědi nevygeneruje nic.

Pro vypsání hodnoty sloupce z odpovědi na dotaz SELECT v těle_detailu (což je asi nejčastější důvod, proč se CGI aplikace používají) použijte ve výrazu zápis sloupec (bez prefixování jménem SELECTu) - viz Výraz - sloupec.

Pořadové číslo aktuálně generovaného záznamu je obsažen v proměnné CurrentRecord. Tato proměnná nabývá postupně hodnot 1 až počet záznamů v SELECTu. Pokud bychom chtěli v těle detailu odkazovat na záznam pomocí zápisu název_SELECTu[index].sloupec, je třeba si uvědomit, že záznamy v SELECTu jsou indexovány od 0 do počet_záznamů_v_SELECTu-1. Na sloupec aktuálně generovaného záznamu se tedy odkazujeme pomocí zápisu název_SELECTu[CurrentRecord-1].sloupec.

Pokud v těle_detailu bude použit ve výrazu zápis název_příkazu_SELECT.sloupec (méně častý případ), bude vždy použita hodnota tohoto sloupce v prvním záznamu odpovědi (záznam s číslem 0).

Detail sekce lze do sebe zanořovat.

Příklad

<TABLE BORDER=1 WIDTH=30%>
<TH>Volba:</TH><TH>Počet hlasů:</TH>
<%begindetail Vysledek%>
<TR ALIGN=CENTER><TD WIDTH=70%><%popis%></TD><TD WIDTH=30%><%pocet%></TD></TR>
<%enddetail%>
</TABLE>

Předpokládejme, že v odpovídajícím WBC konektoru jsme zapsali příkaz

SQLStatement: Vysledek
+ SELECT Volby.popis,Count(ipadr) AS pocet
+ FROM Volby LEFT OUTER JOIN Anketa ON (Volby.volba=Anketa.volba)
+ GROUP BY Volby.popis
+ ORDER BY 1

a že jsme jej pojmenovali Vysledek. Pak výše uvedeným příkladem vytvoříme HTML tabulku, která bude v každém řádku zobrazovat údaje o jednom záznamu z daného SELECTu. Do těla detailu můžeme zapsat v podstatě cokoliv, čistý text, příkazy (tagy) jazyka HTML i příkazy HTW šablony.


Příkaz if (WBIK)

Formát:

<%if podmínka_if%>
 větev_then
<%elseif podmínka_elseif%>
 větev_elseif
<%else%>
 větev_else
<%endif%>

Význam:

Příkaz šablony umožňuje podmíněné generování HTML dokumentu. Vyhodnotí se podmínka_if a pokud je pravdivá , použije se větev_then, jinak se použije větev_elseif atd. V příkazu může být libovolný počet částí elseif, část else může být nejvýše jedna. Příkaz if musí vždy končit slovem <%endif%>. Ve všech větvích můžeme použít další příkaz if (lze je vnořovat), resp. libovolné jiné HTW příkazy.

Je nutné si uvědomit, že větvením dokumentu se ve zdrojovém textu mohou zdvojovat některé HTML tagy, což může splést validátory HTML textu.

Poznámka

podmínka je výraz typu boolean

Příklad:

<%if KolikHlasovalo.kolik=0%>
<P>V anketě nehlasoval dosud žádný volič </P>
<%else%>
<P>V anketě hlasovalo dosud <%KolikHlasovalo.kolik%> voličů </P>
<%endif%>

Další příklad:

Vytvoření záhlaví tabulky podle zadaného výběru

<TABLE BORDER="1">
<TR>
<TD><%if interval="1"%>Dny<%elseif interval="2"%>Měsíce<%elseif interval="3"%>Kvartály<%elseif interval="4"%>Roky<%endif%></TD>
<TD>Počet obj.</TD>
<TD>Objem bez daně</TD>
<TD>Objem s daní</TD>
</TR>

…


Cyklus for (WBIK)

Formát:

<%for proměnná:=počáteční_hodnota to|downto koncová_hodnota step hodnota_kroku%>
tělo_for
<%endfor%>

Význam:

Verze s to přiřadí do proměnné počáteční_hodnotu a pokud je menší nebo rovna koncové_hodnotě, provede tělo_for a zvětší proměnnou o hodnotu_kroku. Znovu zkontroluje, zda-li je hodnota proměnné menší nebo rovna koncové_hodnotě, a pokud ano znovu provede tělo_for a zvětší proměnnou o hodnotu_kroku atd.

Verze s downto se chová obdobně, proměnná se však o hodnotu_kroku zmenšuje.

Výrazy počáteční_hodnota, koncová_hodnota a hodnota_kroku musejí být typu Short nebo Integer.

Pokud je koncová_hodnota menší než počáteční_hodnota (resp. počáteční_hodnota menší než koncová_hodnota ve verzi cyklu s downto), pak nebude generován žádný text.

hodnota_kroku je nepovinný údaj, není-li uveden, je hodnota_kroku rovna 1

Mezi <%for ...%> a <%endfor%> může být jak normální HTML text, tak libovolné HTW příkazy (i další cyklus for, nebo citace proměnné cyklu).

Poznámka

proměnná by měla být nová HTW proměnná, která dosud nebyla v HTW šabloně použita; pokud tato proměnná existovala před cyklem for, bude její stará hodnota zničena a nahrazena číselnou hodnotou nastavovanou při generování cyklu for.

Příklad:

Emulace detail bloku pomocí příkazu for:

<%for i:=0 to název_SELECTu#-1 %>
... generování záznamu název_SELECTu[i] ...
<%endfor%>

Vytvoření dvou sloupců z výsledku SQLstatementu nazvaného Polozky:

<table>
 <tr>
  <td valign="top">
  <%for i:=0 to (Polozky# div 2)-1%>
    <%Polozky[i].nazev_zbozi%><br>
  <%endfor%>
  </td>
  <td valign="top">
  <%for i:=(Polozky# div 2) to Polozky#-1%>
    <%Polozky[i].nazev_zbozi%><br>
  <%endfor%>
  </td>
 </tr>
</table>


Chybové šablony (WBIK)

Chybové šablony jsou speciálně navržené HTW šablony, které se použijí místo příslušných HTW šablon v případě, že při zpracovávání konektoru dojde k chybě.

Při generování HTML dokumentu podle chybové šablony nemůžeme zaručit, zda se z databáze přečetly požadované údaje. Z tohoto důvodu se budou tyto šablony používat ke generování HTML dokumentů poněkud jiným způsobem, než šablony normální. V chybových šablonách také máme k dispozici speciální proměnné, které obsahují informace o chybě.

Je-li v chybové šabloně umístěna WBC sekce, je při generování HTML ignorována.

Není-li chybová šablona v konektoru specifikována (blok ErrorTemplate), použije se chybová šablona standardní (defaultní), která se nalezne podle následujících pravidel

  • pokud je v aplikaci WWW objekt typu šablona jména "deferr”, použije se tento jako standardní chybová šablona;

  • jinak se použije obecná chybová šablona, která je obsažena v každém WBIK (”Chyba při běhu WBIK …”).

Pokud dojde k chybě při navazování spojení se serverem (např. server neběží, není založen uživatel __WEB, není Internet licence apod.), není možné číst šablony z databáze a proto se použije chybová šablona obecná (”Chyba při běhu WBIK …”).


Generování HTML podle chybové šablony

602SQL-Úplná dokumentace

Generování HTML dokumentu podle chybové šablony

Pro generování HTML dokumentu podle chybové šablony platí následující odlišnosti od způsobu generování podle standardní HTW šablony:

1) Pokud je v chybové šabloně uvedena citace sloupce, který nebyl přečten z databáze (např. proto, že nešlo s databází navázat spojení), na místo této citace se nic nevygeneruje a do logfile se tato neznámá citace nezaznamená.

2) Pokud bude v podmínce HTW příkazu if uveden odkaz na neznámý sloupec, bude tato podmínka vyhodnocena jako ”nepravda" (tzn. že se bude generovat případná větev else příkazu if), a opět se tento odkaz na neznámý sloupec nezaznamená do logfile.

3) Pokud bude v hlavičce detail bloku uveden neznámý kurzor (nebo nebyl uvedený kurzor z databáze přečten), celý detail blok se nebude generovat a opět se informace o chybném jménu kurzoru v hlavičce detail bloku nezaznamená do logfile.


Seznam chybových proměnných (WBIK)

V chybové šabloně můžeme použít některé speciální proměnné - chybové proměnné.

HTWErrrorCode

Tato proměnná obsahuje číslo vzniklé WBIK chyby. Je typu celé číslo. Viz seznam chyb

HTWErrorMessage

Obsahem uvedené proměnné je text se standardním popisem vzniklé WBIK chyby. Je typu řetězec. Viz seznam chyb

HTWErrorLineNumber

Obsahuje číslo řádku, na kterém došlo k chybě. Tato informace se vztahuje buď k použitému WBC konektoru, nebo k použité HTW šabloně. Je typu celé číslo.

HTWErrorFileId

Tato proměnná obsahuje kód objektu, ve kterém nastala chyba. Možné hodnoty této proměnné jsou vypsány v následující tabulce:

hodnota | význam
0 | chyba nastala mimo zpracování jakéhokoliv WWW objektu (např. nelze najít WBC konektor, chyba 602SQL atd.)
1 | chyba nastala při zpracování WBC konektoru
2 | chyba nastala při zpracování HTW šablony

Tato proměnná je typu celé číslo.

HTWErrorWWWObjectName

Tato proměnná obsahuje název WWW objektu aplikace, v němž došlo k chybě. Je typu String.

HTWErrorTimestamp

Tato proměnná obsahuje datum a čas, kdy došlo k chybě. Je typu Timestamp. Lze využít k dodatečnému vyhledání informací o chybě v logu, pokud bylo logování WBIK zapnuto (Řídicí konzole 602SQL)

HTW602SQLErrorCode (dříve HTWWinBaseErrorCode)

V této proměnné je číslo chyby, kterou ohlásil 602SQL Server. Pokud komunikace s databází proběhla bezchybně, obsahuje tato proměnná hodnotu 0. Je typu celé číslo.

HTW602SQLErrorMessage (dříve HTWWinBaseErrorMessage)

Buď tato proměnná obsahuje text se standardním popisem chyby, kterou ohlásil 602SQL Server, nebo má prázdnou hodnotu (pokud komunikace s databází byla bezchybná). Je typu celé číslo.


WBS selektory (WBIK)

602SQL-Úplná dokumentace

WBS - selektory (WBIK)

Pomocí WBS selektorů lze umístit do HTML formuláře více tlačítek typu SUBMIT a definovat, který WBC konektor nebo HTW šablona s WBC sekcí budou použity, pokud bylo stlačeno určité tlačítko. Pokud ve svých HTML formulářích vystačíte s jedním SUBMIT tlačítkem pro jeden formulář (nebo používáte pro přechody A HREF), není nutné se WBS selektory vůbec zabývat.

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. Zde si vysvětlíme, jak umístit tato tlačítka do formuláře 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í ´_´.

Každý WBS selektor má následující obsah:

[Submit]
SubmitName=jméno-tlačítek-typu-submit
[WBClist]
hodnota-tlačítka-číslo-1=WWW_objekt-číslo-1
hodnota-tlačítka-číslo-2= WWW_objekt-číslo-2
...
hodnota-tlačítka-číslo-n= WWW_objekt-číslo-n

Jméno-tlačítek-typu-submit je jméno, kterým jsou pojmenované všechna tlačítka typu SUBMIT ve formuláři. Ve formuláři je 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). WWW_objekt-číslo-i je WBC konektor (nebo HTW šablona), který má být použit, pokud uživatel stlačí i-té tlačítko. Musíme zde zapsat pouze název daného WWW objektu. WWW objekt musí být ze stejné aplikace, ze které je daný selektor. Stejný konektor (šablonu) 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 jiný WW objekt. 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ů (HTW šablon).

Pokud máme vše správně nastaveno, WBIK zjistí, které tlačítko bylo uživatelem stlačeno, zjistí odpovídající obsah WWW objektu a pro připojení k 602SQL Serveru použije odpovídající WBC konektor.

Příklad:

[Submit]
SubmitName=BUTT
[WBClist]
Volba=anketa
Výsledek=vysledek


Výrazy v HTW šablonách a WBC konektorech (WBIK)

602SQL-Úplná dokumentace

Pravidla pro sestavování výrazů v HTW šablonách a WBC konektorech

V šablonách se výrazy vyskytují kdekoliv v HTW závorkách, v konektorech v podmínce #if a výrazu pro SetVariable.

Výrazem se rozumí zápis, ve kterém se mohou objevit následující elementy:

  • proměnná - podrobnosti;

  • konstanta - podrobnosti;

  • operátory (logické, aritmetické, porovnání) - podrobnosti;

  • operátor EXISTS - podrobnosti;

  • operátor # - počet prvků v multiatributu nebo počet hodnot vstupní proměnné - podrobnosti;

  • operátor [ ] - hodnota složky multiatributu nebo i-tá hodnota vstupní proměnné - podrobnosti;

  • kulaté závorky (v obvyklém významu);

  • funkce - podrobnosti;

  • hodnoty databázových sloupců - podrobnosti;

  • systémové proměnné WB Internet klienta - podrobnosti;

  • proměnné detail sekce - podrobnosti;

Ve výrazech platí precedence operátorů (od nejvyšší k nejnižší)

  • kulaté závorky

  • hranaté závorky

  • operátor #

  • unární –

  • * / div mod %

  • + -

  • relační operátory = == EQ <> != NE < LT <= LE > GT >= GE CONTAINS .=. .= ~

  • logické operátory not ! and && or ||

Při vyhodnocování výrazů s operátory AND nebo OR se používá částečné vyhodnocení, pokud je to možné. Tj. ve výrazu "FALSE AND podvýraz" se podvýraz nevyhodnotí, protože výsledek bude vždy FALSE, ve výrazu "TRUE OR podvýraz" se podvýraz nevyhodnotí, protože výsledek bude vždy TRUE. Výhodou tohoto způsobu vyhodnocování je to, že lze používat podmínky, ve kterých je druhý podvýraz v takovém tvaru, který by za normálního vyhodnocování skončil chybou.

Způsob zobrazení hodnoty výrazu v šabloně je dán tzv. upřesněním citace - viz citace výrazu.

Příklad:

různě citované výrazy v šabloně:

<TABLE BORDER=1 BGCOLOR=Silver BORDERCOLOR=Black WIDTH=60%>
<TH>Volba:</TH><TH>Počet hlasů:</TH><TH>Počet procent:</TH><TH>Vaše volba:</TH>
<%begindetail Vysledek%>
<TR ALIGN=CENTER>
<TD WIDTH=55%><%popis;1%></TD>
<TD WIDTH=15%><%pocet%></TD>
<TD WIDTH=15%><%pocet*100/KolikHlasovalo.pocet;-2%></TD>
<TD WIDTH=15%><INPUT TYPE="RADIO" NAME="hodnota" VALUE="<%Volba%>"></TD>
</TR>
<%enddetail%>
</TABLE>

Příklad v konektoru:

výrazy tvořené konstantami, proměnnými, operátory, hodnotou sloupce apod.

<%WBC%>
DeclareVariable: logged:Boolean := FALSE
DeclareVariable: id_ob:Integer := -2

SQLStatement: login
+ SELECT logname AS name,logpsw AS psw, id_obchodnika,role,prijmeni,jmeno
+ FROM obchodnici
+ WHERE logname="%name%" AND logpsw="%psw%"
EndSQL
#if exists Login.name
SetVariable: logged :=TRUE
#if Login[0].role="správce"
SetVariable: id_ob := -1
#else
SetVariable: id_ob := Login[0].id_obchodnika
#endif
#endif
<%/WBC%>


Proměnné ve výrazech (WBIK)

Význam:

Častým požadavkem při tvoření výrazů je vypsání hodnoty proměnné. Vstupní proměnné (tj. získané z HTML formuláře) jsou vždy typu string, proměnné získané z projektu 602SQL pomocí GetVariable jsou téhož typu jako odpovídající globální proměnná projektu, proměnné vytvořené pomocí DeclareVariable jsou dané typem výrazu, který proměnnou vytváří, resp. jsou toho typu, který je v příkazu uveden. Systémové proměnné jsou různých typů, většinou typu string.

Obsah proměnné se v šabloně vypisuje pomocí tzv. citace a HTW závorek ve tvaru <%proměnná[;formát]%> nebo v rámci výrazu <%výraz_s_proměnnou[;formát]%>.

Obsah proměnné se v konektoru vypisuje ve tvaru %proměnná%.

Je-li v šabloně použit výraz

   vstupní_proměnná operátor konstanta_typu_integer_nebo_real

a vstupní_proměnná je typu String, proběhne automatická konverze vstupní proměnné z řetězce na integer (nebo real), aby mohl být výraz vyhodnocen.

Příklad v šabloně:

Listování v záznamech po jednom na obrazovce vyžaduje, aby se měnila vstupní proměnná určující pozici zobrazovaného záznamu. Ve výrazech jako index>0 dochází ke konverzi proměnné index (z řetězce na Integer).

<%if index>0%>
<A HREF="/cgi-bin/602cgi8.exe/katalog/katmain.htw?index=<%index-1%>">Předchozí</A>
<%else%>
První záznam
<%endif%>
<%if index+1<VyberJeden.TotalCount%>
<A HREF="/cgi-bin/602cgi8.exe/katalog/katmain.htw?index=<%index+1%>">Další</A>
<%else%>
Poslední záznam
<%endif%>
<BR>
Záznam č. <%index+1%> z <%VyberJeden.TotalCount%> záznamů celkem.

Příklad v konektoru:

SQLStatement: detail_cen
+ SELECT *
+ FROM Cenik
+ WHERE id_cenik=%id_ceniku%


Konstanty ve výrazech (WBIK)

Význam:

Součástí výrazů mohou být také konstanty.

Konstanty se v šablonách vypisují pomocí tzv. citace a HTW závorek ve tvaru <%konstanta[;formát]%> nebo v rámci výrazu <%výraz_s_konstantou[;formát]%>.

Konstanta typu string může začínat citací znaku pomocí #ascii_kód_znaku_v_dekadickém_vyjádření, přičemž může (ale nemusí) pokračovat další citací znaku, nebo řetězcem uzavřeným do uvozovek, resp. apostrofů. Pokud má konstanta typu string obsahovat znak apostrof nebo uvozovka, musí se tento znak zdvojit. Např. "abc''def""ghi" je konstanta s hodnotou abc'def"ghi.

Konstanty se v konektorech vypisují jednoduše ve tvaru konstanta.

Příklad v šabloně:

vypsat datum ve formátu Windows:

<%1.1.1999;4%>

Další příklad (konektor i šablona):

export dat do CSV, díky příkazy IgnoreBlanks je nutno konce řádku vložit ručně, pomocí <%#13#10%>

<%WBC%>
// export výsledku statistiky Obraty v čase v CSV
RequiredValues: interval ord ds typ obch pocet

Content-type: "text/plain; charset=windows-1250"
IgnoreBlanks: all

DeclareVariable: podmstr:String[250]=""

SQLStatement:
+ CALL Podminka_cas(%interval%,%pocet%,%ds%,%typ%,%obch%,:>podmstr)

SQLStatement: PoSkupinach
#if interval=1
+SELECT Date2str(OH.datum,1) AS dat,
+ SUM(OH.sum_obj) AS bezdph, COUNT(OH.id_dobj) AS pocet_obj, SUM(OH.k_uhrade) AS sdph, OH.datum
+ FROM Obj_header AS OH, Obchodni_partneri AS OP
+ WHERE %podmstr%
+ GROUP BY OH.datum
#elseif interval=2
+ SELECT Int2str(Month(OH.datum))||"_"||Int2str(Year(OH.datum)) AS dat,
+ SUM(OH.sum_obj) AS bezdph, COUNT(OH.id_dobj) AS pocet_obj, SUM(OH.k_uhrade) AS sdph, OH.datum
+ FROM Obj_header AS OH, Obchodni_partneri AS OP
+ WHERE %podmstr%
+ GROUP BY Month(OH.datum)
#endif
#if ord=1
+ ORDER BY datum
#endif
#if ord=2
+ ORDER BY sdph DESC
#endif
<%/WBC%>

<%if interval="1"%>Dny<%elseif interval="2"%>Mesice<%endif%>,Pocet_obj,Objem_bez_dane,Objem_s_dani<%#13#10%>

<%begindetail PoSkupinach%>
<%dat%>,<%pocet_obj%>,<%bezdph;-101%>,<%sdph;-101%><%#13#10%>
<%enddetail%>


Operátory ve výrazech (WBIK)

Význam:

Při tvoření složitějších výrazů se uplatní operátory.

Mezi aritmetické operátory patří plus (+), minus (-), krát (*), lomeno (/), celočíselné dělení (DIV) a zbytek po celočíselném dělení modulo (MOD) - mají stejný význam a použití jako ve 602SQL (včetně např. přičtení čísla k datu ve významu přidání dnů apod.), modulo může být vyjádřeno také operátorem %;

Logické operátory lze použít ve tvaru AND OR NOT nebo ekvivalenty podle jazyka C, tj. && || !,

Mezi operátory porovnání patří kromě zřejmých i některé méně časté, zavedené ve 602SQL. Seznam všech je uveden v následující tabulce - pokud je na jednom řádku tabulky v prvním sloupci uvedeno více symbolů pro daný operátor, můžeme použít kterýkoliv z nich):

operátor | význam
EQ == = | operátor rovná se
LT < | operátor menší než
GT > | operátor větší než
LE <= =< | operátor menší, nebo rovno
GE >= => | operátor větší, nebo rovno
NE <> != | operátor nerovná se
CONTAINS .=. | operátor "obsahuje..."; lze použít pouze pro operandy typu String
.= | operátor "začíná..."; lze použít pouze pro operandy typu String
~ | operátor "je podobný..."; lze použít pouze pro operandy typu String

Příklady použití:

<%if logged = TRUE%>
  Přihlášen jako <B><%Login.jmeno%></B>.<BR>

nebo

<TR><TD><B><%if prodej=1%>Prodej<%else%>Pronájem<%endif%></TD></TR>
<TR><TD><B><%if prodej=1%>Cena za objekt:<%else%>Cena za měsíc:<%endif%>&nbsp;</B> <%cena;-102%>&nbsp;Kč</TD></TR>

nebo

<%begindetail zdroj%>
<TR <%if CurrentRecord % 2 = 1%>CLASS="txt" <%else%>CLASS="txtinvert" <%endif%>>
  <TD><%datum%></TD>
  <TD><%jmeno1%></TD>
  <TD><%if jmeno2=""%>&nbsp;<%else%><%jmeno2%><%endif%></TD>
  <TD><%problem%></TD>
  <TD><%if reseni=""%>&nbsp;<%else%><%reseni%><%endif%></TD>
</TR>
<%enddetail%>


Operátor EXISTS ve výrazech (WBIK)

Formát:

exists jméno_proměnné

Význam:

Lze použít ve výrazu pro zjištění existence vstupní proměnné nebo proměnné vytvořené pomocí DeclareVariable či GetVariable. Vrátí TRUE, pokud proměnná existuje, FALSE, pokud neexistuje.

Lze použít i pro zjištění existence sloupce v n-tém řádku (číslováno od 0) odpovědi na SELECT v pojmenovaném bloku SQLStatement ve tvaru

exists jmeno_selectu[n].sloupec

Operátor vrátí FALSE, pokud neexistuje sloupec nebo záznam s číslem n v odpovědi (viz příklad 2).

Příklad 1:

pokud ještě nebylo u klienta uloženo COOKIE s názvem ANKETAID, ulož ho nyní (použití v jazyce šablon):

<HTML>
<HEAD>
<TITLE>Anketa - <%anketa.nazev%></TITLE>
<%if exists id_odpovedi.id %>
<meta http-equiv="Set-Cookie" content="anketa=<%id_odpovedi.id%>; Expires=<%today.today+2;cookieexpires%> 00:00:00 GMT">
<%endif%>
</HEAD>
<BODY BGCOLOR="#FFFFFF" BACKGROUND="">
...

Anketa - pokud nebylo u klienta uloženo COOKIE s názvem ANKETA, dosud ještě klient nevolil (použití v konektoru)

#if exists HTTP_COOKIE_anketa
; pokud existuje cookie pro tuto anketu uživatel v této anketě už hlasoval, přepsat jeho volbu
SQLStatement: Akce
+ UPDATE Odpovedi
+ SET volba=%hodnota%,ipadr="%REMOTE_ADDR%"
+ WHERE id=%HTTP_COOKIE_anketa%;
#else
; ještě nehlasoval, vložit nový záznam
SQLStatement: Akce
+ START TRANSACTION;
+ INSERT INTO Odpovedi(ipadr,volba,anketaid)
+ VALUES ("%REMOTE_ADDR%",%hodnota%,%anketaid%);
; sloupec id tabulky Odpovedi má implicitní hodnotu sekvencí Odpoved_id,
; vloženou unikátní hodnotu přečteme pomocí sekvence.CurrVal
SQLStatement: id_odpovedi
+ SELECT id FROM Odpovedi WHERE id=Odpoved_id.CURRVAL;
+ COMMIT;
EndSQLStatement;
#endif
...

Příklad 2:

Ověření přihlašovacího jména hesla:

<%WBC%>
DeclareVariable: Logged :=FALSE

SQLStatement: Login
+ SELECT id,jmeno,heslo
+ FROM Logtable
+ WHERE jmeno="%name%" AND heslo="%passw%"
EndSQL
#if exists Login[0].id
SetVariable: Logged :=TRUE
#endif
<%/WBC%>


Funkce ve výrazech (WBIK)

Formát:

funkce(výraz)

Následující funkce lze volat ve výrazech v šablonách a konektorech.

StrLength - vrátí délku řetězce

Str2WBConstStr - vrátí řetězec ve tvaru vhodném pro 602SQL

Str2URLStr - vrátí řetězec ve tvaru vhodném pro použití v URL

Str2HTMLConstStr - vrátí řetězec ve tvaru použitelném v HTML textu

ToString - převede údaj na vstupu na řetězec podle zadané specifikace IK

FormatStr - provede konverzi zadaného parametru na řetězec podle formátovacího vzoru.

GetURLPart - vrátí část zadané URL adresy

GetVersion - vrátí verzi WBIK

function StrLength (vstup : string) : integer

Význam:

Funkce vrátí délku stringu vstup. Pokud je vstup rovno NULL, pak vrátí 0.

function Str2WBConstStr(vstup : string) : string

Význam:

Funkce převádí vstupní parametr na string, který obsahuje konstantní string podle SQL i vnitřního jazyka 602SQL. Provede se toto:

  • všechny uvozovky a apostrofy se zdvojí

  • znaky přechodu na konec řádku se napíší takto: '#13#10' (včetně apostrofů)

  • string se uzavře do apostrofů
function Str2URLStr(vstup : string [,upřesnění : integer]) : string

Význam:

Je-li upřesnění vynecháno nebo 0, funkce převádí vstupní parametr na string zakódovaný tak, aby se mohl stát součástí URL, tj. beze změny zůstanou znaky anglické abecedy, číslice a znaky - _ . ! ~ * ' ( ). Ostatní znaky se zakódují pomocí %hh - za procenty následuje ASCII kód znaku v hexadecimálním vyjádření.

Je-li upřesnění rovno 1, zakódují se všechny znaky kromě anglické abecedy, číslic a podtržítka ( _ ).

Příklad:

Sestavení parametrů URL v konektoru:

DeclareVar: searchwbc='namesearch'
DeclareVar: searchwbcparams='name='+Str2URLStr(name)
#if exists this_topic_only
SetVar: searchwbcparams=searchwbcparams+'&this_topic_only=TRUE&tid=%tid%'
#endif
function Str2HTMLConstStr(vstup : string) : string

Význam:

Převede vstup na řetězec, ve kterém jsou znaky ", <, >, & nahrazeny zápisy &quot;, &lt;, &gt;, &amp;. Výsledný string je vhodný pro jeho uvedení např. v parametru VALUE tagu <INPUT> a ve všech ostatních případech, kde je třeba uvést konstantní string podle pravidel jazyka HTML.

Příklad:

<form method="post" action="<%wb_url%>/cz_help_finder.wbc">
  <input type="hidden" name="start" value="0">
  Hledej: <input type="text" name="query" size="30" maxlength="254"<%if exists query%> value="<%Str2HTMLConstStr(query)%>"<%endif%>>
  <input type="submit" value="OK">
</form>
function ToString(vstup : libovolný_typ [,upřesnění : integer] ) : string

Význam:

Funkce převádí vstup na řetězec, přičemž použije upřesnění citace (ve stejném významu jako v citaci), upřesnění je nepovinný parametr.

Příklad:

je třeba do URL zakomponovat hodnotu typu real v účetním formátu:

<A HREF="...<%Str2URLStr(ToString(hodnota_money,-102))%>...">
function FormatStr(string,...):string

Význam:

Funkce provede konverzi zadaného parametru na řetězec podle formátovacího vzoru.

Funkce má první parametr formátovací řetězec typu string a za ním následuje libovolný (i nulový) počet parametrů libovolného typu. Výsledkem funkce je řetězec vzniklý z formátovacího řetězce a dalších parametrů podle následujících pravidel:

- znak různý od % bude zkopírován z formátovacího řetězce do výstupního řetězce

- dvojice znaků %% z formátovacího řetězce bude ve výstupním řetězci nahrazena jedním znakem %

- podřetězec %s formátovacího řetězce bude nahrazen ve výstupním řetězci textovým zápisem hodnoty parametru funkce, přičemž při prvním výskytu %s bude použit první parametr následující za formátovacím řetězcem, při druhém výskytu %s druhý parametr atd.

- podřetězec %<číslo>s bude nahrazen textovým zápisem hodnoty odpovídajícího parametru, přičemž při citaci hodnoty bude použito upřesnění citace <číslo> pokud je místo <čísla> uvedena hvězdička (tj. %*s), vyhodnotí se odpovídající parametr volání funkce, který musí být celočíselného typu, a jeho hodnota se použije jako upřesnění citace následujícího parametru volání funkce.

Příklady:

FormatStr("ab%%cd%sefgh","ab")="ab%cdabefgh"
FormatStr("%s-%s",58,62.14)="58-62.14"
FormatStr("%3s",1.1.2001)="1. leden 2001"
FormatStr("%*s",1,27.12.1998 12:45:56)="27.prosinec 1998 12:45:56"
function GetURLPart(url:string;part:integer):string

Význam:

Funkce vrátí část adresy URL, které je zadaná prvním parametrem. Označení (číslo) části URL, kterou má funkce vrátit, je ve druhém parametru.

Buď URL v následujícím tvaru:

url=http://username:password@www.server.cz/dir1/dir2/filename.ext?query=123#fragment
označení části | návratová hodnota funkce
1 | http
2 | username
3 | password
4 | www.server.cz
5 | /dir1/dir2/
6 | filename.ext
7 | ?query=123
8 | #fragment
ostatní | NULL

Pokud požadovaná část URL není v URL obsažena, návratová hodnota je NULL.

function GetVersion(param:string):integer

Význam:

Funkce vrátí verzi Internet Klienta.

Parametr string může být jedna z následujících hodnot: "major" "minor" "patch". Funkce vrací číslici z čísla verze Internet klienta, která odpovídá zadané hodnotě stringového parametru funkce, nebo -1 při chybě (tzn. pokud je hodnota stringového parametru funkce jiná než povolené hodnoty).

Příklad pro verzi 7.0.6:

GetVersion("major")=7
GetVersion("minor")=0
GetVersion("patch")=6


Systémové proměnné (WBIK)

Formát:

proměnná

Význam:

Používá se k získání hodnoty systémové proměnné, tj. proměnné, která existuje a naplní se v každém konektoru bez zásahu uživatele. Lze použít v konektoru i v šabloně. Viz také proměnné detail sekce

název proměnné | význam a vlastnosti proměnné
MaxRecords | - hodnota z WBC konektoru, maximální počet záznamů, který mohl být přečten z databáze - pokud v souboru WBC není hodnota MaxRecords zadána, pak tato proměnná má hodnotu 2147483647 (7FFFFFFF hexadecimálně) - je typu Integer
wb_client | - hodnota parametru cgi-binPath v INI souboru doplněná o typ klienta (např. /cgi-bin/602cgi8.exe) - viz podrobnosti - je typu řetězec
wb_database | název databáze, ke které se WBIK připojuje - viz podrobnosti - je typu řetězec
wb_application | název aplikace, se kterou WBIK pracuje - viz podrobnosti - je typu řetězec
wb_url | hodnota <%wb_client%>/<%wb_database%>/<%wb_application%>, tj. část URL připravená tak, aby v akcích bylo možno psát: <FORM ACTION="<%wb_url%>/název_www_objektu.htw"> - viz podrobnosti - je typu řetězec
wb_www_object | název WWW objektu (bez přípon .wbc, .htw, .wbs), který se právě provádí. Její hodnota se může měnit: v případě, že se provádí konektor (samostatný WWW objekt), obsahuje tato proměnná jméno konektoru, při provádění šablony, která je uvedena v údaji Template v konektoru, obsahuje tato proměnná jméno této šablony. Navíc pokud nastane při provádění WWW objektu chyba a generuje se dokument podle chybové šablony, obsahuje tato proměnná název chybové šablony; v případě standardní chybové šablony má tato proměnná hodnotu NULL
SERVER_NAME | doménové jméno webserveru - je typu řetězec
QUERY_STRING | obsahuje seznam všech vstupních formulářových proměnných ve formátu proměnná1=hodnota1&proměnná2=hodnota2&... Jména proměnných i hodnoty jsou "odescapované" (tj. podřetězce %hh jsou převedeny na znaky daného ASCII kódu). Proměnná QUERY_STRING má hodnotu NONESTRING, pokud daný konektor zpracovává vstup z formuláře <FORM ENCTYPE="multipart/form-data">, tj. pokud daný formulář odesílá do databáze aspoň jeden soubor pomocí <INPUT TYPE="FILE">.
wb_suffix_path | obsahuje část URL za názvem WWW objektu, který klienti provádějí. Např. pro URL /cgi-bin/602cgi8.exe/databaze/aplikace/www_objekt.wbc/folder1/folder2/file.ext má tato proměnná hodnotu /folder1/folder2/file.ext . Pokud v URL za názvem WWW objektu nic nenásleduje, má tato proměnná hodnotu prázdný řetězec (resp. NONESTRING, což je totéž).
CURRENT_DATE | aktuální datum - je typu datum (Date)
CURRENT_TIME | aktuální čas - je typu čas (Time)
CURRENT_TIMESTAMP | aktuální údaj o datu a čase - je typu datum a čas (Timestamp)
REMOTE_ADDR | IP adresa počítače s internetovým prohlížečem (browserem), který požaduje sestavení stránky; tento údaj se získává od WWW serveru - je typu řetězec
REMOTE_HOST | doménové jméno počítače s internetovým prohlížečem (browserem), který požaduje sestavení stránky; tento údaj se získává od WWW serveru - ne všechny WWW servery tuto hodnotu předávají - je typu řetězec
HTTP_USER_AGENT | řetězec obsahující informaci o použitém browseru; ne všechny WWW servery tuto hodnotu předávají, konkrétní hodnoty je třeba vyzkoušet - je typu řetězec
HTTP_COOKIE_xxx | existuje-li cookie jménem xxx, lze jeho hodnotu získat z této proměnné - je typu řetězec
HTTP_REFERER | obsahuje hodnotu HTTP hlavičky Referer (viz. norma HTTP/1.1), nebo NULL, pokud daná hlavička není pro daný dokument nastavena. - je typu řetězec

Příklad:

použití proměnné s konstantní částí URL

<FORM METHOD="POST" ACTION="<%wb_url%>/20f.htw" TARGET="hlava_frame">

atd.

Příklad:

jednoduché zjištění typu browseru:

<% if HTTP_USER_AGENT .=. "MSIE" %> MSIE <%else%> NN <%endif%><br>


Použití COOKIES

COOKIES jsou informace uložené webserverm na počítači klienta, sloužící k identifikaci a zapamatování určitých konstant.

Příkladem použití může být aplikace ANKETA. Při volbě je nutné pamatovat si, zda klient již nevolil dříve, aby při nové volbě se jeho stará volba přepsala a nezakládal se nový záznam s novou volbou. Při prvním přístupu do ankety se vytvoří COOKIE s názvem ANKETAID s unikátním číslem odpovědi. Při další volbě se tato hodnota přečte jakožto vstupní proměnná formuláře a ve WBC konektoru je možné na to reagovat.

Nastavení COOKIE:

Nastavení se prování příkazem konektoru

Set-cookie: name=value [; expires=date] [; path=cesta]

alternativní způsob při generování HTML dokumentů je použití tagu META v HTML hlavičce:

<META HTTP-EQUIV="Set-Cookie" CONTENT="NAME=VALUE; EXPIRES=DATE;…">
  • NAME - jméno cookie

  • VALUE - hodnota s tímto jménem spojená

  • DATE - doba, za jak dlouho vyprší platnost, lze s výhodou použít systémových proměnných CURRENT_DATE či CURRENT_TIME.

Čtení COOKIE:

Cookie jménem NAME patřící dané stránce je konektoru a šabloně k dispozici v systémové vstupní proměnné HTTP_COOKIE_NAME, vytvořené z prefixu HTTP_COOKIE_a jména cookie.

Pro existenci cookie je výhodné používat operátor exists.

Příklad:

<HTML>
<HEAD>
<TITLE>Anketa - výsledek</TITLE>
<%if NOT exists HTTP_COOKIE_ANKETAID %>
<META HTTP-EQUIV="Set-Cookie" CONTENT="anketaid=<%id_odpovedi.id%>; EXPIRES=<%CURRENT_TIME+432000;cookieexpires%>">
<!-- uložení COOKIE na počítači klienta -
  432000 je pocet sekund za 5 dní -->
<%endif%>
</HEAD>


Práce se soubory pomocí WBIK

602SQL-Úplná dokumentace

Práce se soubory pomocí WB Internet klientů

Zde se popisuje postup při uložení souboru do databáze prostřednictvím Internet klienta a HTML formuláře s formulářovým prvkem <INPUT TYPE="FILE"> a postup při zpřístupnění souboru, který je uložen v databázové tabulce, browseru pomocí Internet klienta.

Pro uchovávání souboru v databázové tabulce je třeba, aby v aplikaci existovala tabulka, do níž se název, typ i obsah souboru uloží. Typická tabulka pro uchovávání souborů bude vypadat takto:

CREATE TABLE `FILES` (
  FILENAME CHAR(254) ,
  CONTENT LONG VARBINARY ,
  CONTENT_TYPE CHAR(254)
)

Je možné přidat sloupec ID typu INT, který bude uchovávat primární klíč záznamu. Soubory by se z tabulky vyzvedávaly podle tohoto ID (a ne podle názvu, jak je to v příkladu dále v tomto dokumentu).

Pokračování:

Ukládání souboru do databáze

Odeslání souboru z databáze do browseru


Práce se soubory pomocí WBIK

602SQL-Úplná dokumentace

Ukládání souboru do tabulky

Pro upload souboru do databáze je třeba ve své aplikaci vytvořit:

HTML formulář

Je třeba vytvořit HTML formulář s aspoň jedním formulářovým prvkem <INPUT TYPE="FILE">. Např.:

<FORM METHOD="POST" ACTION="/cgi-bin/602cgi8.exe/db/app/addfile.wbc"
ENCTYPE="multipart/form-data">
Vyberte soubor: <INPUT TYPE="FILE" NAME="soubor"><BR>
<INPUT TYPE="SUBMIT" VALUE="Poslat">
</FORM>

Zároveň s <INPUT TYPE="FILE"> lze použít i libovolné další formulářové prvky. Lze také odeslat více souborů jedním HTML formulářem.

Pozor: Je třeba nastavit parametr METHOD na POST a parametr ENCTYPE na multipart/form-data!

WWW objekt

WWW objekt dostane na vstupu tyto vstupní formulářové proměnné:

název proměnné | typ proměnné | obsah proměnné
soubor | Blob | obsah odesílaného souboru
soubor_filename | String | jméno a přípona souboru
soubor_content_type | String | MIME-typ souboru

Jména proměnných se tvoří podle pojmenování <INPUT TYPE="FILE"> takto: obsah souboru je pojmenován přímo tímto jménem, k pojmenování jména a přípony a MIME-typu se přidává přípona "_filename", resp. "_content_type". K <INPUT TYPE="FILE" NAME="abc123"> budou vytvořeny proměnné abc123 s obsahem souboru, abc123_filename s jménem a příponou souboru a abc123_content_type s MIME-typem souboru.

SQL příkaz vytvářející nový záznam v tabulce Files může vypadat takto:

SQLStatement:
+ INSERT INTO Files(content,filename,content_type)
+ VALUES (:<soubor,"%soubor_filename%","%soubor_content_type%")

Obsah souboru je nutno předávat prostřednictvím embedded variable (popsaných u příkazu SQLStatement).

Poznámka: Bylo by možno použít způsob předání citací binárního řetězce (tj.

+ VALUES (%soubor%,"%soubor_filename%","%soubor_content_type%")

ale tento SQL příkaz by byl dvakrát delší, než délka vkládaného souboru (binární řetězce kódují jeden bajt jako hexadecimální dvojčíslí) a navíc současná verze SQL serveru není připravena na zpracování extrémně dlouhých SQL příkazů (pro ilustraci: při vkládání souboru délky 500KB by vznikl SQL příkaz délky větší než 1MB).

Pozor: Nezaměňujte tento upload souboru do jednoho záznamu tabulky se vzdáleným importem dat do tabulky pomocí příkazu ImportFile.


Odeslání souboru do browseru

K odeslání souboru, který je uložen v tabulce, do browseru se použije následující HTW šablona. Pro následující výklad je pojmenována Getfile.htw, předpokládejme, že chceme poslat soubor, jehož jméno je předáváno do šablony ve vstupní formulářové proměnné filename:

<html>
<head>
<title>Soubor neexistuje</title>
</head>
<%wbc%>
SQLStatement: soubor
+ SELECT content,content_type FROM Files
+ WHERE filename="%filename%"
EndSQLStatement;
; pokud takový soubor existuje
#if soubor#>0
; zkontrolovat, zda není Content-type prázdný
#if soubor[0].content_type==""
; pokud ano, nastavit obecný Content-type
Content-type: "application/octet-stream"
#else
; nastavit Content-type
Content-type: soubor[0].content_type
#endif
; poslat soubor
SendFile: soubor[0].content
#endif
<%/wbc%>
<body>
<!-- tato stránka se sestaví a odešle jedině tehdy, pokud se neprovede SendFile -->
<h1>Soubor neexistuje</h1>
Soubor <%filename%> není v databázi!
</body>
</html>

Lokální šablona se použije jen tehdy, pokud se výsledný dokument negeneruje příkazem SendFile zasláním proudu bajtů přímo browseru.

Nastavení správného jména souboru při ukládání dokumentu browserem

HTTP protokol nedisponuje příkazem (HTTP hlavičkou), kterým by se browseru mohlo nastavit jméno souboru, do kterého se má dokument zobrazený browserem uložit. Jméno souboru browser odvozuje podle URL. V případě, že chceme zobrazit soubor "obrazek.jpg" z tabulky Files, browser zobrazí dokument s následujícím URL:

http://www.server.cz/cgi-bin/602cgi8.exe/db/app/getfile.wbc?filename=obrazek.jpg

Při pokusu o uložení dokumentu browser nabídne v "Uložit jako" dialogu jméno "getfile.wbc", ale ne správné "obrazek.jpg".

K očekávanému chování můžeme browser donutit tímto trikem: necháme browser zobrazit dokument s tímto URL:

http://www.server.cz/cgi-bin/602cgi8.exe/db/app/getfile.wbc/obrazek.jpg?filename=obrazek.jpg

Pak browser při ukládání nabídne jméno "obrazek.jpg". Internet klient při zjišťování jména WWW objektu čte postupně název databáze, název aplikace a název WWW objektu. To, co je v URL za názvem WWW objektu a před znakem "?", nečte a ignoruje. Narozdíl od toho browser považuje "getfile.wbc" za název podadresáře a teprve "obrazek.jpg" za název souboru.

Doporučení

Seznam souborů zobrazujte takto:

<html>
<head>
<title>Seznam souborů</title>
</head>
<%wbc%>
SQLStatement: soubory
+ SELECT filename FROM Files ORDER BY filename
<%/wbc%>
<body>
<h1>Seznam souborů</h1>
Celkem <%soubory#%> souborů.
<p>
<%begindetail soubory%>
<a href="<%wb_url%>/getfile.wbc/<%filename%>?filename=<%filename%>">
<%filename%></a><br>
<%enddetail%>
</body>
</html>

V případě odeslání souboru přímo z disku (neuloženého v databázi) do browseru použijte příkaz SendDiskFile.


Seznam čísel chyb WBIK

602SQL-Úplná dokumentace

Seznam čísel chyb 602SQL Internet Klienta

Seznam obsahuje všechny chyby, které mohou nastat při běhu WBIK. Číslo chyby vrací chybová proměnná HTWErrorCode, popis chyby vrací chybová proměnná HTWErrorMessage. Použití - viz chybové šablony.

Číslo | popis chyby
1 | nelze nalézt WBC konektor
2 | rezervováno
3 | rezervováno
4 | rezervováno
5 | rezervováno
6 | chybí Template v samostatném WBC konektoru
7 | v konektoru chybí blok SQLStatement
8 | neznámá aplikace 602SQL
9 | neznámý příkaz WBC preprocesoru
10 | neočekávaný WBC příkaz #then
11 | neočekávaný WBC příkaz #else
12 | neočekávaný WBC příkaz #endif
13 | neočekávaný WBC příkaz #endrepeat
14 | neukončený WBC příkaz #ifexists
15 | neukončený WBC příkaz #repeat
16 | neznámá řídící proměnná repeat bloku v konektoru
17 | chybná hlavička repeat bloku v konektoru
18 | neznámá proměnná v SQLStatement bloku v konektoru
19 | nelze se spojit s 602SQL serverem
20 | chyba 602SQL, podrobnosti viz okno nebo log serveru
21 | nelze nalézt HTW šablonu
22 | neznámý HTW příkaz
23 | obecná chyba syntaxe HTW šablony
24 | neznámý operátor v HTW příkazu if
25 | neočekávaný HTW příkaz else
26 | neočekávaný HTW příkaz endif
27 | neočekávaný HTW příkaz enddetail
28 | neukončený HTW příkaz if
29 | neukončený HTW příkaz detail
30 | nesprávné vnoření detail sekcí v HTW šabloně
31 | citace neznámého sloupce, nebo proměnné v HTW šabloně
32 | nepojmenovaná detail sekce v HTW šabloně
33 | neznámé jméno SQL příkazu v detail sekci v HTW šabloně
34 | SQL příkaz v detail sekci v HTW šabloně není SELECT
35 | nekompatibilní typy hodnot v podmínce v HTW příkazu if
36 | neznámý adresář v parametru WBCRootDirectory v WBCGI.INI
37 | neznámý adresář v parametru HTWRootDirectory v WBCGI.INI
38 | neznámý adresář v parametru Directory v sekci Logging v WBCGI.INI
39 | nepřípustná hodnota parametru Level v sekci Logging v WBCGI.INI
40 | chybné jméno souboru v parametru DefaultHTWErrorTemplate v WBCGI.INI
41 | chybný formát vstupních formulářových proměnných
42 | příliš mnoho vnoření příkazů ifexists v konektoru
43 | syntaktická chyba v SQLStatement v konektoru
44 | nelze přečíst proměnnou prostředí SCRIPT_NAME
45 | stejné řídící proměnné ve dvou vnořených repeat blocích v konektoru
46 | citace sloupce vně detail bloku bez uvedení pojmenovaného SELECTu v HTW šabloně
47 | chybí povinná hodnota proměnné vyžadovaná blokem RequiredValues:
48 | neznámá proměnná v bloku Program v konektoru
49 | chybný formát bloku Program v konektoru
50 | neukončený blok v konektoru
51 | neznámý projekt v hlavičce bloku Program v konektoru
52 | chyba při běhu programu v bloku Program v konektoru
53 | neznámá proměnná projektu v bloku GetVariable v konektoru
54 | neočekávaný příkaz endfor v HTW šabloně
55 | neukončený blok for v HTW šabloně
56 | špatný typ mezí v HTW příkazu for
57 | nedostatek paměti
58 | neočekávaný konec HTW šablony
59 | nelze přečíst token
60 | neočekávaný typ tokenu v HTW šabloně
61 | za názvem bloku konektoru chybí dvojtečka
62 | chybný formát řádku ve WBC konektoru
63 | SQL příkaz v podmínce příkazu #ifexists v konektoru není SELECT
64 | rezervováno
65 | rezervováno
66 | z URL nelze zjistit jméno WBC konektoru
67 | nelze vytvořit výsledný HTML dokument - pravděpodobně je nedostatek paměti
68 | chybová šablona, která je uvedena ve WBC konektoru, neexistuje, nebo je chráněna proti čtení
69 | upřesnění citace v HTW šabloně není celé číslo
70 | podmínka v příkazu if v šabloně není typu Boolean
71 | výraz za operátorem NOT musí být typu Boolean
72 | chybně zapsaný výraz
73 | nekompatibilní typy operandu ve výrazu
74 | index hodnoty multiatributu nebo proměnné není typu Integer
75 | index hodnoty multiatributu nebo proměnné odkazuje na hodnotu, která je mimo meze
76 | SQL příkaz, u kterého se zjišťuje počet záznamů, není SELECT
77 | neznámý identifikátor v HTW šabloně
78 | ve výrazu v HTW šabloně je použit SQL příkaz, který není SELECT
79 | rezervováno
80 | v URL je odkaz na soubor, který není ani WBC konektor, ani WBS selektor, ani HTW šablona
81 | v bloku RunProgram ve WBC konektoru chybí název programu
82 | rezervováno
83 | chyba v RunProgram vyvolaná funkcí SetSTWError
84 | nelze nalézt program ve vnitřním jazyku, který je uveden v konektoru v bloku RunProgram, nebo tento program nelze zkompilovat
85 | procedura RunProgram generuje text na návěští, které v HTW šabloně neexistuje
86 | chybný formát WBS selektoru
87 | není nastavena hodnota parametru cgi-binPath v sekci [Setup] v WBCGI.INI
88 | neexistuje uživatel __WEB na serveru nebo není zakoupena licence - nelze se přihlásit
89 | chyba dělení nulou
90 | uživatelem vyvolaná chyba
91 | vyčerpán počet klientských licencí SQL serveru
92 | podmínka v #if není typu Boolean
93 | příkaz #if není ukončen #endif
94 | neznámá chyba v SetVariable
95 | výraz v SetVariable neodpovídá typu proměnné
96 | embedded proměnná použitá v SQL příkazu není deklarovaná
97 | pokus o čtení nepodporovaného typu sloupce tabulky (např. binárního)
98 | v DeclareVariable ve WBC konektoru je neznámý typ proměnné
99 | v DeclareVariable ve WBC konektoru jsou nekompatibilní typy proměnné a iniciální hodnoty
100 | v příkazu include v HTW šabloně je neznámy WWW objekt (neexistuje v aktuální aplikaci)
101 | neočekávaný příkaz elseif
102 | výraz v příkazu Content-type neni typu String
103 | výraz v příkazu SendFile není typu Blob ani String
104 | výraz v příkazu Location není typu String
105 | špatný počet parametrů volané funkce
106 | špatný typ parametru volané funkce
107 | chyba při ImportFile, většinou špatný formát přenášených dat (např. ve FORM nezadáno ENCTYPE= ="multipart/form-data")
108 | lokální proměnnou nulové délky nelze předat do SQL příkazu
109 | špatný název souboru v příkazu SendDiskFile
110 | nelze otevřít soubor zadaný v příkazu SendDiskFile
111 |
112 | pokus o připojení k nezaregistrovanému serveru
113 | neexistující uživatel v příkazu Relogin


Konfigurace WBIK

602SQL-Úplná dokumentace

Konfigurace 602Internet Klientů (WBCGI.INI resp. 602sql)

Konfigurace Internet Klientů (tj. nastavení parametrů jejich provozu) se provádí z prostředí Windows i Linux programem Řídicí konzole. V prostředích lze tento program nahradit přímou editací textového souboru.

Ve Windows používají Internet klienti konfigurační soubor WBCGI.INI, který se nachází v adresáři, kde máte instalován systém Windows. V tomto souboru jsou uvedeny parametry, které ovlivňují běh programů WBIK. Pokud nejsou parametry nastaveny, nebo jsou nastaveny špatně, WBIK je správně nastaví a zapíše. Prakticky to znamená, že na rozdíl od předešlých verzí není nutno nastavovat téměř nic.

Na Linuxu Internet klienti používají konfigurační soubor 602sql , který se nachází v adresáři /etc.

Soubor má formát jako INI soubory ve Windows. Je společný i pro další parametry, proto jsou sekce, týkající se Internet klientů označeny prefixem .wbcgi. . Sekce, o kterých se zde nepíše, rozhodně neupravujte.

Parametry jsou rozděleny do jednotlivých sekcí:

Seznam subsekcí:

  • Logování
  • Výkon
  • Access Log


Sekce Logging

602SQL-Úplná dokumentace

Sekce Logging (resp. .wbcgi.Logging)

Pomocí parametrů v této sekci řídíme, jakým způsobem budou 602SQL Internet klienti generovat informace o své činnosti (tzv. logování).

WBIK je schopen automaticky vytvářet informace o průběhu své práce, tyto informace generuje do textových souborů v adresáři z parametru Directory. Soubory mají příponu LOG a jsou pojmenované podle aktuálního data takto: RRRRMMDD. První čtyři znaky jména souboru je aktuální rok, další dva znaky je aktuální měsíc a poslední dva znaky je aktuální den. Pro daný den, např. 12.9.1996, budou údaje o běhu WBIK archivovány do souboru se jménem 19960912.LOG. Tímto způsobem bude mít správce přehled, ve který den došlo k jakým událostem v souvislosti s během WBIK.

Soubory jsou vytvářeny do podadresáře, který je vytvořen podle názvu databáze a názvu aplikace, se kterou WBIK pracuje. Znamená to tedy, že logfile je vytvářen pro každou aplikaci zvlášť. Soubor je tedy vytvářen do adresáře:

    adresář_z_Directory\název_databáze\název_aplikace

Pokud se nemůže WBIK připojit k databázi, nebo nenajde v dané databázi požadovanou aplikaci, je logfile vytvořen přímo do adresáře_z_Directory. Pokud tento podadresář neexistuje, WBIK jej vytvoří.

Level=none|normal|extended|debug

Hodnota tohoto parametru musí být právě jedno ze slov none, normal, debug nebo extended. Parametrem určujeme, jak podrobně bude vytvářen záznam o práci programu (logfile).

Hodnota | zaznamenávané události
none | do logfile se nebude zaznamenávat nic
normal | budou zaznamenány pouze chyby při běhu programu (např. neexistující šablona, chyby při komunikaci s 602SQL serverem atd.)
debug | to, co při úrovni normal, a navíc podrobné údaje o prováděných akcích (analýza WBC konektoru, komunikace s databází, sestavování výsledného HTML dokumentu)
extended | zapisují se pouze hodnoty vstupních proměnných, výsledky SQL příkazů a hodnoty proměnných po provedení konektoru

Při ladění WBC konektorů a HTW šablon doporučujeme nastavit úroveň debug. Po odladění můžeme buď logování úplně vypnout (nastavením úrovně none), nebo nechat zaznamenávat pouze chyby při práci WBIK (nastavením úrovně normal). Rozhodně nedoporučujeme ponechat úroveň debug i pro běžný provoz, generované soubory by byly neúměrně velké. I při normálním provozu je rozumné občas smazat staré soubory (např. všechny starší než jeden týden).

Directory=úplné_jméno_adresáře

Tímto parametrem určujeme, do kterého adresáře budou generovány soubory s popisem průběhu práce programu (logfiles). Adresář musí existovat.

DeleteLog=0|1

Pokud je hodnota tohoto parametru 1, WBIK při každém spuštění na začátku smaže obsah logfile. Pokud je hodnota 0, pak nově generované zprávy o běhu přidá k už existujícímu obsahu logfile.

Tato vlastnost je významná při ladění WBC konektorů a HTW šablon. Při této činnosti nastavte hodnotu tohoto parametru na 1 a WBIK zajistí, že po každém spuštění bude logfile obsahovat pouze zprávy, které byly vygenerovány při tomto spuštění. Po odladění WBC konektorů a HTW šablon nastavte tento parametr na 0.

Pokud není ve WBCGI.INI tento parametr uveden, WBIK se chová, jako by měl tento parametr hodnotu 0.

Nastavování parametrů pro jednotlivé aplikace

Pro každou aplikaci zvlášť lze nastavit parametry LogLevel a DeleteLog. Parametry se nastavují pomocí záložky WWW objekty v dialogu Vlastnosti aplikace. Tento dialog vyvoláte ve Vývojovém prostředí 602SQL pomocí příkazu Vlastnosti v kontextovém menu dané aplikace, případně pomocí tlačítka Vlastnosti na řídícím panelu.


Sekce Performance

602SQL-Úplná dokumentace

Sekce Performance (resp. .wbcgi.Performance)

V sekci [Performance] lze editovat tyto údaje:

PermanentSQLConnections=N

nastavit počet permanentních spojení ISAPI a FastCGI klienta. Při tomto způsobu přihlašování klientů odpadá relativně zdlouhavé natahování knihoven při každém přihlášení. Pokud zadaný počet nebude v jednom okamžiku dostačovat, další klienti se budou hlásit "normálně" - podrobnosti.

PermanentConnectionRefreshTime=N

doba životnosti trvalého připojení ISAPI nebo FastCGI klientů v hodinách. Po uplynutí této doby se trvalé připojení odpojí od SQL serveru a v zápětí znovu připojí.

TempFileMinDataSize=N

velikost (v bajtech), při jejímž překročení dojde k ukládání rozpracovaných pořadavků na disk jako dočasný soubor (swap)

TempDirectory=folder

adresář, ve kterém Internet klienti vytvářejí přechodné soubory (swap a import). Adresář musí existovat a uživatel, pod kterým běží Internet klient, musí mít právo číst, vytvářet soubory a zapisovat do nich, jinak se nepodaří vytvořit žádný přechodný soubor. Pokud není zadáno, pak se přechodné soubory vytvářejí na Windows v adresáři, který je určen proměnnou prostředí TMP, případně TEMP, a na Linuxu v adresáři /tmp.

NoLicenceTryCount=N

kolikrát má Internet Klient zkusit připojení při nedostatku licencí SQL serveru (po prodlevě 3 sekundy). Pokud se ani po N-tém pokusu nepodaří přihlásit na SQL server kvůli nedostatku licencí, teprve potom je vypsáno chybové hlášení o nedostatku licencí.

CGIClientTimeout=N

Timeout pracovního vlákna CGI klienta v milisekundách. Pro hodnotu 0 se timeout neuplatní.


Sekce AccessLog

602SQL-Úplná dokumentace

Sekce AccessLog (resp. .wbcgi.AccessLog)

V sekci [AccessLog] lze editovat tyto údaje:

Enabled= 0|1

Zadejte 1, má-li se vytvářet log výsledku připojování požadavků (access log). Z logu lze sledovat např. četnost odmítnutí připojení z důsledku nedostatku licencí SQL serveru

Filename

soubor, do něhož se bude log zapisovat (obvykle access.log).

Každý požadavek vyřízený Internet klienty přidá do daného souboru právě jeden řádek ve formátu:

IP adresa browseru,datum a čas začátku zpracování požadavku,datum a čas konce zpracování požadavku,/databáze/aplikace/www_objekt,výsledek připojení k SQL serveru

Příklad:

192.168.2.163,Wed Nov 21 13:53:49 2001,Wed Nov 21 13:53:49 2001,/debug_db/esupport/cz_faq_sidebar,1

výsledek připojení k SQL serveru je celé číslo s následujícím významem:

-3 nastala chyba před zahájením připojování k SQL serveru

-2 nastala chyba při připojování k SQL serveru různá od nedostatku licencí

-1 nastala chyba při připojování k SQL serveru kvůli nedostatku licencí, a to i po N povolených pokusech

0 k připojení SQL serveru bylo využito jedno z volných permanentních spojení

číslo>0 udává, po kolika pokusech se podařilo připojení k SQL serveru; předchozí neúspěšné pokusy skončily s chybou kvůli nedostatku licencí


Rozhraní pro přístup na SQL server

Pokud databázová aplikace není kompletně vyvinuta pomocí interních nástrojů 602SQL (formuláře, sestavy, vnitřní programovací jazyk), pak komunikuje se serverem přes některé rozhraní. Podporovaná rozhraní spadají do dvou typů: buď jsou specifická pro 602SQL, nebo jsou definována některou vnější normou a dovolují aplikaci využívat jeden z řady SQL serverů.

Z níže uvedených rozhraní je ODBC driver součástí základní instalace 602SQL, nástroje podporující ostatní rozhraní jsou obsaženy v Extension Packu.

Rozhraní ODBC

Rozhraní ODBC je nejběžnější rozhraní mezi aplikací a SQL serverem. Přístup do 602SQL přes toto rozhraní umožňuje ODBC driver. Driver je k dispozici pro Windows i LINUX.

Rozhraní dbExpress

Rozhraní dbExpress je základním databázovým rozhraním pro aplikace vyvinuté pomocí nástrojů Delphi a Kylix. Nahrazuje starší rozhraní BDE. dbExpress driver je k dispozici pro Windows i LINUX.

Rozhraní JDBC

Rozhraní JDBC je základním databázovým rozhraním pro aplikace v Javě. JDBC driver je platformově nezávislý. Dokumentace k driveru je přibalena přímo k němu.

Rozhraní PHP

Rozhraní PHP se využívá pro napojení dynamických webových stránek na SQL server. PHP modul je k dispozici pro Windows i LINUX.

Rozhraní ODMA

Rozhraní ODMA je rozhraním skladu dat. Umožňuje aplikacím ukládat svoje dokumenty do skladu, indexovat je a vyhledávat je pomocí fulltextových nástrojů. Toto rozhraní je specifické pro Windows.

Nástroje pro vytváření a provoz dynamických webových stránek

Součástí 602SQL jsou interaktivní nástroje pro definování dynamických webových stránek a jejich napojení na databázi, a také internetoví klienti, kteří ve spolupráci s web serverem zajišťují provoz těchto stránek. Klienti jsou k dispozici pro Windows i LINUX.

Programové rozhraní (API)

Program napsaný v jazyce C/C++ nebo Pascal se může napojit na SQL server prostřednictvím jeho klientského API. Rozhraní pro C/C++ je použitelné pod Windows i LINUXem, rozhraní pro Pascal je připraveno speciálně pro nástroje firmy Borland pod Windows. Popis funkcí tohoto rozhraní je v encyklopedii.

Seznam subsekcí:

  • Rozhraní ODBC (Open Database Connectivity)
  • Rozhraní dbExpress
  • Modul PHP
  • ODMA rozhraní (Open Document Management API)
  • Programování v externích jazycích
  • Přístup do databáze z web serverů přes ASP


Rozhraní ODBC

Standard ODBC (Open Database Connectivity) definuje nejrozšířenější rozhraní mezi databázovým serverem a klientem (aplikací). 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 je norma firmy Microsoft a od ní lze také získat referenční dokumenty k tomuto rozhraní. Verze ODBC 3.0 vychází z ANSI standardu jazyka SQL, konkrétně SQL 92.

Cílem ODBC je:

  • umožnit psaní aplikačních programů nezávislých na databázi, s jejímiž daty budou pracovat;
  • otevřít přístup do databází všem programům jednotným způsobem.

Například informační systém postavený důsledně nad rozhraním ODBC by měl být schopen pracovat nad řadou různých SQL serverů od různých výrobců.

602SQL spolupracuje s oběma konci rozhraní ODBC:
  • do databáze 602SQL SQL serveru mohou přes ODBC přistupovat aplikační programy;
  • klienti 602SQL mohou přes ODBC pracovat s daty uloženými i v jiných databázích.

ODBC drivery

Modul, který předává požadavky od aplikací na SQL server, se jmenuje ODBC driver. Je nutno jej instalovat na počítači, na němž poběží aplikace. Kromě něj musí být na tomto počítači instalován také tzv. ODBC Driver Manager, což je systémová knihovna umožňující provoz ODBC driverů.

ODBC drivery lze získat od výrobců databázových serverů. ODBC driver pro 602SQL SQL server je k dispozici ve verzi pro operační systémy Windows a LINUX.

ODBC zdroje dat

V terminologii ODBC se ucelená množina dat přístupná přes ODBC rozhraní nazývá zdroj dat. SQL server zaregistruje své databáze nebo jejich části jako zdroje dat a aplikace se připojují na zvolený zdroj dat a pracují s jeho daty.

Pod Windows slouží pro správu zdrojů dat zástupce ODBC na ovládacích panelech. Na LINUXu spravuje zdroje dat speciální program, například odbcinst, závislý na druhu Driver Manageru.

Ve 602SQL je není zdrojem dat databáze, ale konkrétní schéma v databázi. Pokud potřebujete zpřístupnit data z více schémat, je třeba vytvořit více zdrojů dat.

Seznam subsekcí:

  • 602SQL jako ODBC klient
  • 602SQL jako ODBC server


602SQL jako ODBC klient

Uvažujme případ, kdy 602SQL 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 602SQL lze připojit libovolné množství cizích databázových tabulek a pracovat s nimi. 602SQL 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 602SQL, a pak realizovat její tabulky v jedné vybrané cizí databázi. Taková databázová aplikace poběží v prostředí 602SQL, ale bude manipulovat s daty uloženými např. pod Oraclem na střediskovém počítači.

V obou případech 602SQL 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Í.

Seznam subsekcí:

  • Práce s ODBC tabulkami


Práce s ODBC tabulkami z programovacího jazyka

S cizími tabulkami (tabulkami připojenými do 602SQL z cizího ODBC zdroje dat) lze z prostředí 602SQL 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 602SQL (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('602SQL: 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.


Přístup k datům v 602SQL přes ODBC

Součástí 602SQL je ODBC driver odpovídající verzi 3.0 specifikace ODBC. Programové rozhraní ODBC podporuje na (nejvyšší) úrovni 2.

O ODBC se někdy neprávem hovoří jako o pomalém a neefektivním rozhraní k databázi. Zevšeobecňování však není na místě. Efektivita rozhraní je v rozhodující míře určena kvalitou ODBC driveru. ODBC driver k serveru 602SQL přidává ke komunikaci mezi klientem a serverem pouze minimální dodatečné zatížení a práce s nim může být efektivní.

Omezení ODBC driveru pro 602SQL

Přes rozhraní ODBC nejsou přístupné rysy specifické pro 602SQL, například multiatributy. Zlomky sekundy nelze zadávat před ODBC ani do sloupců typu TIME, ani TIMESTAMP. Typ TIMESTAMP ve 602SQL totiž zlomky sekundy neuchovává, zatímco práce se zlomky sekundy v typu TIME vyžaduje syntaxi SQL vybíhající za standard použitý v ODBC.

K modifikování dat v tabulkách přes rozhraní ODBC je obvykle nezbytné, aby tabulka měla unikání index.

Seznam subsekcí:

  • Instalace ODBC driveru pod Windows
  • Vytvoření ODBC zdroje dat pod Windows
  • 602SQL jako ODBC server v Linuxu


Instalace ODBC driveru pod Windows

ODBC driver je třeba instalovat na těch počítačích, na nichž poběží programy, které budou přes rozhraní ODBC přistupovat do databáze. Instalace ODBC driveru pro přístup k databázím 602SQL je zahrnuta do instalace všech verzí 602SQL pod Windows. ODBC driver lze však nainstalovat i zcela samostatně.

Manuální instalace ODBC driveru

Přístup k datům přes ODBC se zprovozňuje takto:

  1. Instaluje se buď samotný ODBC driver nebo kterýkoli produkt 602SQL pomocí instalačního programu.
  2. Na Konfiguračním panelu na stránce ODBC se nastaví síťový protokol, kterým se ODBC driver bude připojovat na server (pokud server poběží na stejném počítači, na volbě protokolu nezáleží)
  3. Na Konfiguračním panelu se zaregistruje server, s nimž bude driver pracovat (pro přístup přes TCP/IP zadat také IP adresu serveru).
  4. Vytvoří se ODBC zdroj dat reprezentující server a schéma na něm (viz dále)

Pokud se při instalaci zjistí, že na Vašem počítači nebylo dosud instalováno ODBC nebo že je instalována starší verze ODBC, instalační program 602SQL nainstaluje všechny potřebné systémové komponenty ODBC (např. ODBC Driver Manager, ODBC Administrator).

Instalace ODBC driveru z aplikačního programu

Pokud je přístup na server 602SQL přes rozhraní ODBC součástí aplikačního programu s vlastní instalaci, pak lze do ní zahrnout i instalaci ODBC driveru 602SQL. Tím se zjednoduší zprovoznění aplikace na počítači uživatele.

V případě, že na cílovém počítači není dosud vůbec instalováno ODBC verze 3.0, je nutno provést jeho instalaci před instalací driveru. Postup instalace ODBC je popsán v dokumentaci Microsoft ODBC SDK a je podporován například v novějších verzích produktu InstallShield.

Instalační program nechť postupuje při instalaci ODBC driveru pro 602SQL takto (jména souborů upravte podle verze 602SQL):

  1. Deklarujte proměnné:
    char Path[_MAX_PATH];
WORD PathSize;
DWORD Usage;
  2. Zavolejte funkci SQLInsttallDriverEx ze systémové knihovny ODBCCP32.DLL takto:
    SQLInstallDriverEx("602SQL 7.0 Driver\0"
"Driver=WB7DRV.DLL\0Setup=WB7STP.DLL\0SQLLevel=2\0"
"FileUsage=0\0DriverODBCVer=03.00\0"
"ConnectFunctions=YYY\0APILevel=2\0",
NULL, Path, sizeof(Path), &PathSize,
ODBC_INSTALL_COMPLETE, &Usage);
  3. Zkopíruje soubory 602ODBC8.DLL a 602WED8.DLL do adresáře z proměnné Path (systémového adresáře Windows);
  4. V registru v položce
    HKEY_LOCAL_MACHINE \ SOFTWARE \ Software602 \ 602SQL \ Installation
    vytvořte řetězcovou hodnotu pojmenovanou ODBC Driver Client Protocol rovnou TCP/IP.
  5. Zaregistrujte databázi, na níž se ODBC driver bude napojovat, tak, že v registru v položce
    HKEY_LOCAL_MACHINE \ SOFTWARE \ Software602 \ 602SQL \ Database
    vytvoříte nový klíč jmenující se stejně jako server (databáze). Pod tento klíč zapište řetězcovou hodnotu pojmenovanou Version rovnou 5. Přidejte další řetězcovou hodnotu pojmenovanou IP address rovnou IP adrese serveru v tečkové notaci.
  6. Vytvořte ODBC zdroj dat reprezentující server a aplikaci na něm (viz dále).


Vytvoření ODBC zdroje dat pod Windows

Pokud se při instalaci 602SQL vytváří databáze, registruje se pro ní také ODBC zdroj dat. Tento zdroj dat však neobsahuje jméno schématu a proto není plnohodnotný. Proto zdroj dat vytvořte níže popsaným postupem.

Zdroj dat lze vytvářet pouze na počítači, na němž je instalován ODBC driver 602SQL.

Zdrojem dat ve 602SQL je schéma. Pokud chcete zvenčí vstupovat do více schémat, vytvoříte více zdrojů dat.

Doporučujeme, aby jména schémat 602SQL, do nichž vstupují jiné programy přes rozhraní ODBC, a také jména zpřístupňovaných tabulek a jejich sloupců raději neobsahovala nealfanumerické znaky nebo písmena s diakritikou. Některé programy nedokážou s takovými jmény pracovat.

Druhy zdrojů dat

Zdroje dat pod Windows jsou trojího druhu:

  • systémové zdroje dat označené jménem, popsané v registru a dostupné pro všechny uživatele daného počítače;
  • uživatelské zdroje dat označené jménem, popsané v registru a dostupné pro jednoho konkrétního uživatele daného počítače;
  • souborové zdroje dat, jejich popis je uložen v souboru a odkazuje se na ně pomocí cesty k tomuto souboru.

Jméno označující systémový nebo uživatelský zdroj dat smí mít nejvýše 32 znaků. Specifikace ODBC na ně neklade další omezení, avšak některé klientské programy nedokážou pracovat se jmény obsahujícími nealfanumerické znaky. Tyto zdroje dat existují a jsou viditelné pouze na tom počítači, na němž byly vytvořeny.

Výhodou souborových zdrojů dat je, že je-li jeho soubor umístěn na sdílený disk, může být dostupný na řadě počítačů zároveň. Odpadá pak separátní vytváření zdroje dat na každém klientském počítači.

Manuální vytvoření zdroje dat z ovládacího panelu ODBC

  1. Na Ovládacím panelu Windows spusťte zástupce ODBC resp. 32bit ODBC.
  2. Zvolte stránku odpovídající systémovým, uživatelským nebo souborovým zdrojům dat. Na ní stiskněte tlačítko Add.
  3. Z nabídky ODBC driverů vyberte 602SQL 7.0 Driver a stiskněte Dokončit.
  4. Vyplňte údaje o zdroji dat do dialogového okna. Jméno zdroje dat můžete zvolit libovolně, jméno serveru a aplikace (schématu) musí odpovídat zpřístupňovaným datům.

Manuální vytvoření zdroje dat z Konfiguračního panelu 602SQL

  1. Na Konfiguračním panelu 602SQL zobrazte stránku ODBC zdroje dat.
  2. Stiskněte tlačítko Přidat.
  3. V dialogu vyplňte jméno pro zdroj dat, jméno registrovaného serveru (databáze) a jméno aplikace. Pomocí označovacího čtverce můžete vyznačit, zda půjde o systémový zdroj dat nebo o zdroj dat právě přihlášeného uživatele.
  4. Stiskněte tlačítko Vytvořit.

Vytvoření zdroje dat z programu

K programovému vytvoření zdroje dat slouží funkce ze systémové knihovny ODBCCP32.DLL. Zdroj dat lze vytvořit buď interaktivně voláním funkce SQLCreateDataSource nebo lze parametry zdroje dat zapsat přímo do registru případně (v případě souborového zdroje dat) vytvořit popisný soubor.

V registru jsou systémové zdroje dat zaznamenány pod klíčem

HKEY_LOCAL_MACHINE \ SOFTWARE \ ODBC \ ODBC.INI
a uživatelské zdroje dat pod klíčem
HKEY_CURRENT_USER \ SOFTWARE \ ODBC \ ODBC.INI
Pro nový zdroj dat je třeba založit pod klíčem ODBC Data Sources novou řetězcovou hodnotu, která se jmenuje stejně jako zdroj dat a rovná se jménu driveru pro tento zdroj dat (tj. 602SQL 7.0 Driver). Dále je třeba založit nový klíč jmenující se jako zdroj dat s těmito řetězcovými hodnotami: Driver rovnou cestě k driveru, ConfigPath rovnou jménu databázového serveru a AppName rovnou jménu schématu v databázi.

Konfigurování zdroje dat 602SQL

V existujícím zdroji dat lze změnit nebo doplnit jméno schématu případně jméno serveru takto:
  1. Na Ovládacím panelu Windows spusťte zástupce ODBC (na Windows NT) resp. 32bit ODBC (na Windows 95).
  2. Zvolte stránku se systémovými, uživatelskými nebo souborovými zdroji dat.
  3. V seznamu označte zdroj dat 602SQL, který chcete konfigurovat, a stiskněte tlačítko Configure.
  4. Upravte údaje o zdroji dat v dialogovém okně a stiskněte OK.

Připojení se k 602SQL z externího programu

Způsoby připojení cizích programů k ODBC zdrojům dat se podstatně liší případ od případu, prostudujte si proto nejprve dokumentaci k příslušnému programu.

Prvním krokem by vždy mělo být vybrání zdroje dat. V seznamu dostupných zdrojů dat by se měla objevit i položka se jménem zdroje dat z 602SQL. Po jejím vybrání se objeví dialogové okno pro připojení se k serveru. Může jít buď o specifický dialog klientského programu, nebo o tento standardní dialog z 602SQL.

Pokud by ve zdroji dat nebylo specifikováno schéma nebo pokud si externí program přeje explicitní potvrzení všech parametrů, bude následovat dialogové okno pro výběr schématu v databázi.

Poté driver zpřístupní programu tabulky, dotazy a uložené procedury ze zvoleném schématu 602SQL. I přes existenci společné normy je však nutno počítat s omezeními danými kombinací dvou prostředí


ODBC driver pro 602SQL na Linuxu

Od verze 7.0 je k dispozici Linuxový ODBC driver pro 602SQL server. S jeho pomocí je možné přistupovat i na Linuxu k datům uloženým pod 602SQL jak z ODBC znalých aplikací (např. StarOffice), tak především z webových a skriptovacích jazyků jako PHP, Python, Perl či Tcl.

Protože v běžných distribucích Linuxu není obsažen ODBC driver Manager, je nutné jej nainstalovat. Toto je potřeba udělat před vlastní instalací driveru 602SQL. Vyzkoušena je spolupráce s driver managerem unixODBC. Z uvedené adresy lze získat zdrojový kód pro DM, případně na našich webových stránkách lze nalézt předkompilovaný DM v rpm formátu.

Při instalování RPM s ODBC driverem 602SQL se driver automaticky zaregistruje. Pro přístup k datům v databázi je nutné vytvořit odpovídající Data Source Name (DSN); nejjednodušší je použít skript adddsn.sh obsažený v distribuci. Vyzkoušet funkčnost vytvořeného zdroje dat lze pomocí textového ODBC klienta isql obsaženého v distribuci unixODBC.

Pro většinu programů z nichž lze přistupovat k ODBC datům je potřeba nejprve nějakým způsobem zapnout podporu ODBC. PHP je nutné překompilovat s --with-unixODBC (předkompilovaný RPM balík s touto podporou lze opět stáhnout z našich stránek), pro Perl, Python a Tcl je potřeba získat odpovídající moduly.

Úplná instalace 602SQL, PHP a podpory jejich spojení vypadá tedy nějak takto:

rpm -i 602sql-<verze>.rpm
rpm -i unixODBC-<verze>.rpm
rpm -i 602sql-ODBCdriver-<verze>.rpm
rpm -i php-<verze>.rpm
/usr/doc/602sql-ODBCdriver/adddsn.sh <jména aplikací>
Aplikace, na kterých jsou vytvářeny zdroje, nemusí v té době ještě existovat.


dbExpress driver pro 602SQL

dbExpress představuje jednu z technologií, která aplikacím vyvinutým v prostředí Borland Delphi verze 6 nebo Kylix zpřístupňuje databázová data a zároveň zajišťuje jejich nezávislost na konkrétní databázi. Vlastní komunikaci mezi konkrétní databází a aplikací zabezpečuje tzv. dbExpress driver, což je jednoduchý modul, který poskytuje pouze jednosměrný přístup do databáze, t.j. při pohybu v tabulce či dotazu umožňuje pouze seek na první nebo na další záznam. Úplný libovolný přístup se pak zajišťuje kešováním načtených dat na straně aplikace. Toto kešování obstarává sdílená knihovna MIDAS.DLL (midas.so na LINUXu), kterou je také potřeba vedle dbExpress driveru spolu s vyvinutou aplikací distribuovat. Sadě parametrů popisujících konkrétní zdroj dat se říká databázová konexe. Aplikace může pro vytvoření spojení s databází buď explicitně specifikovat všechny tyto parametry nebo, což je asi běžnější, zadat pouze jméno konexe. Pro správu jednotlivých konexí a driverů neexistuje žádný manažer, jako je to např. v případě ODBC, seznam všech zaregistrovaných konexí je uložen ve sdíleném textovém souboru DBXCONNECTIONS.INI a seznam příslušných driverů je uložen v souboru DBXDRIVERS.INI.

Instalace na Windows

dbExpress driver pro 602SQL tvoří sdílená knihovna D602DBE8.DLL ( resp. DBE_WB.DLL pro verzi 7.0). Na její umístění nejsou speciální požadavky, umístění lze specifikovat v inicializačním souboru DBXDRIVERS.INI, případně napevno jako vlastnost objektu TSQLConnection. Podstatné je, aby aplikace, která driver používá, měla přístup ke klientské knihovně 602KRNL8.DLL (resp. WBKERNEL.DLL pro verzi 7.0). Knihovnu MIDAS.DLL je třeba uložit do složky, kde se hledají sdílené knihovny. Cesta k inicializačním souborům DBXCONNECTIONS.INI a DBXDRIVERS.INI se zjišťuje v registrační databázi pod klíčem HKEY_CURRENT_USER\Software\Borland\DBExpress, cesta k seznamu konexí jako hodnota Connection Registry File a cesta k seznamu driverů jako hodnota Driver Registry File. Soubory bývají standardně uloženy ve složce C:\Program Files\Common Files\Borland Shared\DBExpress. Pokud nejsou nalezeny tam, hledají se ve složce aplikace.

Instalace na LINUXu

dbExpress driver pro 602SQL tvoří sdílená knihovna d602dbe8.so (resp. dbe_wb.so pro verzi 7.0). Její umístění, lze je specifikovat v inicializačním souboru DBXDRIVERS.INI, případně napevno jako vlastnost objektu TSQLConnection. Knihovnu midas.so je třeba umístit do adresáře pro sdílené knihovny. Inicializační soubory dbxconnections a dbxdrivers se hledají ve složce ~/.borland/. Pokud nejsou nalezeny tam, hledají se ve složce aplikace.

DBXCONNECTIONS.INI

Každá konexe je popsána v samostatné sekci. Jméno sekce představuje jméno konexe, které je pak uváděno v nabídkách a seznamech.
[Jméno dbExpress konexe]
V sekci jsou nutné parametry:
DriverName=Jméno driveru (z DBXDRIVERS.INI)
Database=Jméno WB serveru : Jméno databázové aplikace
Pokud konexe nepoužívá konkrétní databázovou aplikaci, nebo pokud se aplikace během spojení s databází mění, nemusí být v parametru uvedena.
Nepovinně mohou být uvedeny parametry:
User_Name=Jméno uživatele

Password=Heslo uživatele
Je-li specifikován parametr User_Name, bude jméno uživatele předvyplněno v přihlašovacím dialogu. Pokud se chcete připojovat k serveru bez dialogu, je třeba uvést i parametr Password a v objektu TSQLConnection nastavit vlastnost LoginPrompt na false.

Příklad

[eshop]
DriverName=WinBase
Database=Muj server:Eshop

DBXDRIVERS.INI

Každý driver je popsán v samostatné sekci, jméno sekce představuje jméno driveru, které je pak uváděno v nabídkách a seznamech.
[Jméno dbExpress driveru]
V sekci jsou nutné parametry:
GetDriverFunc=getSQLDriverWB
Driver=cesta k souboru driveru

LibraryName=cesta k souboru driveru

VendorLib=cesta k souboru driveru

Pokud je soubor driveru uveden bez cesty, bude se hledat se podle příslušných konvencí operačního systému.

Vedle této sekce je třeba uvést jméno driveru v sekci [Installed Drivers] jako parametr:

Jméno dbExpress driveru=1

Příklad

[Installed Drivers]
Interbase=1
MYSQL=1
WinBase=1

[WinBase]
GetDriverFunc=getSQLDriverWB
Driver=C:\602sql\D602DBE8.DLL
LibraryName=C:\602sql\D602DBE8.DLL
VendorLib=C:\602sql\D602DBE8.DLL


PHP modul (všeobecné informace)

PHP modul pro 602SQL je sdílená knihovna (php_602sql8.dll pro Windows, php_602sql8.so pro Linux), která umožňuje přistupovat k 602SQL serverům z jazyka PHP. Po jejím načtení do PHP (viz níže) je možné v PHP používat nové funkce s prefixem wb_, jejichž seznam je uveden na konci této stránky.

Instalace modulu

Předpokládá se nainstalovaný a fungující 602SQL Server, stejně jako nainstalované a fungující PHP, oboje pro daný OS (Linux či Windows)

Aby bylo PHP schopné modul načíst, jsou potřebné dva kroky:

  • Uložení zkompilovaného modulu do adresáře, ve kterém PHP tyto soubory načítá (parametr extension_dir v php.ini). Modul musí být schopen nalézt knihovny 602SQL Serveru (přidejte adresář do PATH)
  • Vyžádání načtení modulu do PHP. To lze provést buď při startu PHP jako celku v inicializačním souboru php.ini (na Linuxu i na Windows extension=php_602sql8), nebo v PHP skriptu příkazem dl().
Adresář s PHP moduly i adresář, v němž je soubor php.ini lze zjistit PHP příkazem phpinfo().

Viz

  • Připojení k databázi
  • Odpojení se od databáze, uzavření kurzoru
  • Provedení SQL příkazu či dotazu
  • Získání popisu poslední chyby SQL serveru
  • Rychlé vypsání obsahu kurzoru
  • Načtení hodnot databázového záznamu do pole
  • Nastavení aktuálního záznamu
  • Přenastavení interního ukazatele na aktuální záznam
  • Čtení dat z kurzoru
  • Zjišťování počtu záznamů v kurzoru
  • Zjišťování počtu sloupců
  • Zjišťování jmen sloupců
  • Funkce pro import (upload) dat do databáze
  • Popis převodu databázových typů do typů PHP

Příklad:

Zde je ukázka úplného jednoduchého PHP skriptu pracujícího s databází. Předpokládá se existence dostupného serveru jménem wbserver a dostatečná práva uživatele Anonymous. Skript vrátí seznam uživatelů SQL serveru.

$conn=wb_connect("wbserver", "_sysext", "Anonymous", "");
$res=wb_exec($conn, "select logname from Usertab where Ord(category)=CATEG_USER");
wb_result_all($res);
wb_close($conn);

Seznam subsekcí:

  • Převod hodnot z 602SQL do PHP
  • wb_connect
  • wb_close
  • wb_data_seek
  • wb_exec
  • wb_fetch_into
  • wb_fetch_row
  • wb_data_seek
  • wb_field_name
  • wb_longreadlen
  • wb_num_fields
  • wb_num_rows
  • wb_result
  • wb_result_all


Převod hodnot z 602SQL do PHP

PHP obsahuje jen čtyři základní typy; boolean, long, řetězec a realná čísla. Zde je popsáno, jak se postupuje při převodu hodnot z 602SQL do typů PHP.

Jednoduchá je situace s typy, které lze přímo převézt na jeden z PHP typů. Jedná se o čtyř-, dvou- a jednobajtové integery (které lze triviálně převézt na PHP integer typ), typ BOOLEAN a typ REAL. Typ CHAR se převede na jednoznakový řetězec. Všechny řetězcové typy s pevnou délkou se rovněž převádějí na řetězec.

Typy spojené s časem se převádí dvěma různými způsoby. Zatímco datum a čas jsou překonvertovány na řetězec TODO jak, typ TIMESTAMP je zkonvertován do typu long, a vrácen je počet sekund od Unix Epoch (1. leden 1970), tedy formát, se kterým lze dále pracovat prostředky PHP.

Typ MONEY je převeden na reálné číslo. Toto může obecně vést ke ztrátě části informace, a je tedy lepší se této konverzi vyhnout (např. explicitní konverzí v SQL dotazu). Totéž platí o osmibajtovém integeru, který je vracen podle své velikosti buď jako LONG, nebo jako real.

Binární typy a typy proměnné délky

Složitější je situace při konverzi typů proměnné délky, a/nebo binárních. V těchto případech je konverze ovlivněna nastavením parametrů longreadlen a binmode. Hodnoty těchto parametrů lze nastavit pro každý kurzor; defaultní hodnota je čerpána z globálního nastavení v okamžiku vytvoření kurzoru.

Parametr binmode může nabývat třech hodnot: WB_PASSTHRU, WB_RETURN, a WB_CONVERT. První hodnota znamená, že hodnoty atributů proměnné délky budou místo uložení do proměnné přímo poslány do výstupního proudu PHP, zatímco do proměnné bude uložena prázdná hodnota. V některých případech (např. ve funkci wb_result_all tento způsob výstupu nemá valný smysl, a hodnota tohoto typu je potom v podstatě ignorována. Hodnota WB_RETURN znamená, že hodnota bude uložena do řetězcové proměnné tak, jak je, zatímco WB_CONVERT tuto hodnotu u binárních typů převede do hexadecimálního tvaru. Pro nebinární typy (TEXT) jsou obě hodnoty ekvivalentní.

Pokud má parametr binmode jednu z hodnot WB_RETURN či WB_CONVERT, je uložen do proměnné jen začátek atributu proměnné délky. Délka uložené části je určena parametrem longreadlen. Defaultní hodnota této proměnné je 4096.

Příklad:

Příklad použití parametru WB_PASSTHRU. Mějme otevřený kurzor, kde v prvním sloupci je obrázek v gif formátu. Chceme poslat browseru tento obrázek.

/* Výstup nikoliv do výstupní proměnné, ale
 * přímo do PHP proudu */
wb_binmode($res, WB_PASSTHRU);

/* zkus, zda existuje alespoň první řádek */
if(!wb_fetch_row($res)) die("Error in fetch_row");

/* Můžeme nastavit HTTP hlavičku s typem na gif. */
header("content-type: image/gif");

/* Pošli data. Protože je nastaveno passthru, data z kurzoru jdou přímo na
 * výstup. */
wb_result($res, 1);

Viz

  • Funkce pro nastavení parametrů longreadlen a binmode


wb_connect

$id=wb_connect(server[, aplikace [, uživatel [,heslo]]])

Parametry

server
Jméno serveru, k němuž se připojujeme. Povinný parametr.
aplikace
Jméno aplikace, s níž budeme pracovat. Pokud není uvedeno, žádná aplikace není zavedena.
uživatel
Jméno uživatele, pod nímž se přihlašujeme. Není-li uvedeno, zůstáváme nalogováni jako Anonymous
heslo
Heslo pro uvedeného uživatele. Pokud není uvedeno, předpokládá se prázdné heslo

Popis

Funkce provede přilogování k serveru 602SQL zadaného jména na účet uvedeného uživatele. Je-li uvedeno jméno aplikace, provede se připojení na tuto aplikaci.

Spojení je udržováno dokud není ztracen veškerý přístup k němu z PHP aplikace (tedy zhruba dokud máme v nějaké proměnné uschován výsledek volání této funkce, nebo dokud existuje nějaký otevřený kurzor nad tímto spojením), nebo dokud není ukončeno explicitně voláním wb_close. Spojení je také ukončeno při ukončení běhu PHP skriptu.

Návratová hodnota

Identifikátor resourcu, pokud je provedení úspěšné, FALSE v opačném případě. Návratová hodnota (v případě úspěchu) je použitelná jako parametr pro wb_exec

Viz

  • Provádění SQL příkazů a dotazů nad otevřeným spojením
  • Explicitní uzavření existujícího spojení
  • Přístup k datům ve 602SQL z jazyka PHP


wb_close

wb_close(identifikátor kurzoru)
wb_close(identifikátor spojení)

Parametry

identifikátor spojení
Identifikátor spojení získaným voláním wb_connect
identifikátor kurzoru
Identifikátor kurzoru získaný předchozím voláním wb_exec

Popis

Funkce uzavře otevřené spojení nebo otevřený kurzor.

Návratová hodnota

TRUE v případě úspěchu, FALSE pokud dojde k chybě.

Viz

  • Přístup k datům ve 602SQL z jazyka PHP


wb_data_seek

wb_data_seek(identifikátor kurzoru, číslo záznamu)

Parametry

identifikátor kurzoru
Identifikátor otevřeného kurzoru, vrácený funkcí wb_exec
číslo záznamu
Číslo záznamu, které bude nastaveno do interního ukazatele na aktuální záznam. Číslování začíná od jedné.

Popis

Tato funkce nastavuje interní ukazatel na aktuální záznam na hodnotu číslo záznamu. Provedení této funkce zajistí, že příští volání funkce wb_fetch_row, nebo wb_fetch_into přečte tento záznam.

Návratová hodnota

TRUE v případě úspěchu, FALSE pokud dojde k chybě, včetně té, že požadovaný záznam neexistuje.

Viz

  • Čtení záznamu pomocí wb_fetch_row
  • Čtení záznamu pomocí wb_fetch_into


wb_exec

$id=wb_exec(id spojení, SQL příkaz)

Parametry

id spojení
Identifikátor otevřeného spojení získaný úspěšným voláním funkce wb_connect
SQL příkaz
SQL příkaz nebo dotaz, který bude proveden. SQL příkaz může obsahovat klientské proměnné uvozené dvojtečkou; podrobnější diskuse zpracovávání takovýchto klientských proměnných viz níže. Zadaný příkaz či dotaz může sestávat z více příkazů nebo dotazů oddělených středníkem.

Popis

Funkce vykoná SQL příkaz nebo dotaz uvedený jako druhý parametr.

Pokud SQL příkaz obsahuje klientské proměnné (host variables), je na místo odpovídajícího parametru dosazen obsah proměnné PHP; proměnná musí být adekvátního typu: řetězcová proměnná bude použita jako CLOB, a pokud je pro výstup, bude podle potřeby její velikost zvětšena až na velikost longreadlen; databázové typy BOOLEAN, DOUBLE a INTEGER odpovídají typům boolean, float a long v PHP.

Je možné také předávat hodnoty typu času, timestampu nebo datumu, a to za těchto podmínek:

  • Musí být nastavena proměnná PHP jménem wb_datestring
  • Pokud je wb_datestring=="1", tak se při wb_exec() převedou host variables typu string (v PHP, tj. v PHP to jsou stringy), které obsahují syntakticky správně (podle pravidel SQL v 602SQL) zapsanou konstantu typu DATE, TIME, nebo TIMESTAMP, na odpovídající datový/časový typ, tj. 602SQL server dostane tyto host variables zkonvertované do datového/časového typu. Ostatní host variables typu string zůstanou nezměněny.
  • Pokud je wb_datestring=="0", tak se takové konverze neprovádějí.

Je-li výsledkem volání funkce identifikátor kurzoru, tento kurzor je uzavřen pokud na něj neexistuje odkaz v PHP programu, nebo explicitním voláním wb_close s identifikátorem kurzoru jako s parametrem, nebo existuje dokud není PHP script ukončen.

Návratová hodnota

Při chybě vrací FALSE (popis chyby lze získat pomocí wb_err_str); jinak pokud byl parametrem SQL příkaz, vrací počet dotčených záznamů, pokud byl parametrem SQL dotaz, vrací identifikátor kurzoru obsahujícího výsledek dotazu. Tento identifikátor lze dále použít ve funkcích pro čtení dat z kurzoru.

Pokud SQL příkaz obsahoval více příkazů oddělených středníkem a všechny se povedly, návratová hodnota odráží výsledek prvního z nich.

Viz

  • Připojení k databázi
  • Rychlý výpis obsahu kurzoru
  • Čtení obsahu řádku
  • Jiný způsob čtení obsahu kurzoru
  • Klientské proměnné

Příklad

Použití klientské embedded proměnné:

 $pom="";
 $res=0;
 $res=wb_exec($conn,"SET :>pom = Who_am_I");
 if ($res)
   {     echo("Prihlasen jako: ".$pom) ;   }

Příklad

Použití klientské proměnné typu timestamp (nastaveno wb_datestring=1):

  $retez="timestamp ";
  $cislo=4;
  $ts_val="12.5.2002 12:11:10";
  $sql='insert into test(id,word,ts_value) values(:cislo,:retez,:ts_val)';
  wb_exec($conn,$sql);


wb_fetch_into

wb_fetch_into(identifikátor kurzoru, reference na proměnnou [,číslo záznamu])

Parametry

identifikátor kurzoru
Identifikátor otevřeného kurzoru, získaný voláním wb_exec.
reference na proměnnou
Odkaz na proměnnou, do níž budou načtena data záznamu. Z proměnné se stane pole indexované čísly sloupců a jmény (velkými písmeny).
číslo záznamu
Nepovinný parametr, určující záznam, který se má přečíst. Pokud není uveden, použije se aktuální záznam (viz wb_fetch_row); zároveň se přitom nastaví další záznam jako aktuální.

Popis

Funkce načte obsah uvedeného záznamu do PHP pole, a případně načte další záznam.

Návratová hodnota

Počet sloupců v případě úspěchu, FALSE při chybě.

Příklad

Vypsání jmen sloupců kurzoru a jejich obsahu:

while (wb_fetch_into($res, $buff)) {
    for ($i=1; $i<=wb_num_fields($res);$i++){
        echo wb_field_name($res, $i).": $buff[$i]<br>";
    }
    echo "<br>";
}


wb_fetch_row

$id=wb_fetch_row(identifikátor kurzoru[, číslo aktuálního záznamu])

Parametry

identifikátor kurzoru
Identifikátor otevřeného kurzoru, vrácený funkcí wb_exec
číslo aktuálního záznamu
Číslo záznamu, který bude nastaven jako aktuální. Není-li uvedeno, je nastaven při prvním volání první záznam, při dalších voláních se postupně nastavují další záznamy. Číslování začíná od jedné.

Popis

Tato funkce nastavuje aktuální záznam. Typické použití viz příklad u wb_result.

Návratová hodnota

TRUE v případě úspěchu, FALSE pokud dojde k chybě, včetně té že následující záznam již neexistuje.

Viz

  • Získávání dat z aktuálního záznamu pomocí wb_result
  • Nastavení interního ukazatele na záznam pomocí wb_data_seek
  • Otevření kurzoru příkazem wb_exec


wb_field_name

wb_field_name(identifikátor kurzoru, číslo sloupce)

Parametry

identifikátor kurzoru
Identifikátor kurzoru vrácený funkcí wb_exec
číslo sloupce
Pořadové číslo sloupce, jehož název má být vrácen. Číslování začíná od jedné.

Popis

Funkce vrací název sloupce určeného pořadovým číslem v kurzoru

Návratová hodnota

Řetězec se jménem sloupce nebo FALSE v případě výskytu chyby.

Příklad

  $vysledek = wb_field_name($kurzor,3);
  if( $vysledek==FALSE ) { ... }
  else { echo "jmeno sloupce: ",$vysledek; }


wb_longreadlen, wb_binmode

wb_longreadlen(identifikátor kurzoru, nová hodnota)
wb_binmode(identifikátor kurzoru, nová hodnota)

Parametry

identifikátor kurzoru
Identifikátor kurzoru, jehož parametry měníme, nebo 0 pro měnění defaultní hodnoty.
nová hodnota
Nová hodnota parametru - jedna ze tří konstant WB_CONVERT, WB_PASSTHRU, WB_RETURN pro wb_binmode, nebo celé číslo pro wb_longreadlen

Popis

Nastaví hodnotu parametrů binmode nebo longreadlen pro určený kurzor nebo pro všechny v budoucnu vytvářené kurzory. Význam těchto parametrů je popsán u popisu převodu dat z 602SQL do PHP.

Před prvním voláním těchto funkcí jsou hodnoty těchto parametrů nastaveny podle hodnot wb_binmode a wb_longreadlen v souboru php.ini; nejsou-li zde tyto proměnné nastaveny, default je 4096 pro longreadlen a WB_RETURN pro binmode.

Návratová hodnota

V případě úspěchu vrací TRUE.


wb_num_fields

wb_num_fields(identifikátor kurzoru)

Parametry

identifikátor kurzoru
Identifikátor otevřeného kurzoru, získaný voláním wb_exec.

Popis

Funkce vrací počet sloupců otevřeného kurzoru

Návratová hodnota

Počet sloupců dotazu, nebo -1 pokud došlo k chybě


wb_num_rows

wb_num_rows(identifikátor kurzoru)

Parametry

identifikátor kurzoru
Identifikátor otevřeného kurzoru, získaný voláním wb_exec.

Popis

Funkce vrací počet řádků otevřeného kurzoru. Použití této funkce je lepší se u kurzorů z mnoha záznamy vyhnout, protože způsobí vyhodnocení celého kurzoru, což může být časově náročné (běžně se vyhodnocují jen záznamy, k nimž se přímo přistupuje, a to v okamžiku přístupu k nim)

Návratová hodnota

Počet záznamů v dotazu, nebo -1 pokud došlo k chybě


wb_result

PHP

$value=wb_result(identifikátor kurzoru, číslo či jméno sloupce)

Parametry

identifikátor kurzoru
Identifikátor kurzoru vrácený funkcí wb_exec
.
číslo či jméno sloupce
Označení žádaného sloupce, buď jménem nebo pořadovým číslem (od 1 výše). Při zadávání jménem není brán zřetel na malá a velká písmena.

Popis

Základní způsob získávání údajů z otevřeného kurzoru. Pracuje nad aktuálním řádkem; nastavení aktuálního řádku se provádí pomocí wb_fetch_row.

Návratová hodnota

Hodnota určeného atributu v aktuálním záznamu; viz popis převodu z typů 602SQL do PHP.

Viz

  • Nastavení aktuálního záznamu funkcí wb_fetch_row

Příklad

Typické použití při výpisu dat z kurzoru je takovýto cyklus:

$cursor=wb_exec($conn, "select ...")
while (wb_fetch_row($cursor))
    {
     echo( wb_result($cursor, 1).": <i>".wb_result($cursor, 2)."</i><br>");
    }


wb_result_all

PHP

wb_result_all(identifikátor kurzoru[, formát])

Parametry

identifikátor kurzoru
Identifikátor vrácený funkci wb_exec, při jejímž volání byl kurzor otevřen.
formát
Řetězec, který bude připojen do otevíracího HTML atributu <table>; nepovinný

Popis

Funkce vypíše obsah kurzoru jako HTML tabulku, s jejich jmény v prvním řádku. Pokud je parametr binmode nastaven na passthru, hodnota typů proměnné délky není vypisována.

Návratová hodnota

Funkce vrací FALSE při chybě, počet vypsaných záznamů při úspěšném provedení.

Viz

  • Otevření kurzoru
  • Parametry ovlivňující výpis hodnot proměnných


Programování klientů 602SQL serveru

Databázové aplikace využívající 602SQL server se dají vytvářet v programovacích jazycích jako C, C++ nebo Pascal (Delphi). Jde o alternativu k vytváření aplikací pomocí vnitřních nástrojů 602SQL, například pomocí vnitřního programovacího jazyka.

Knihovny a nástroje šířené v rámci 602SQL Extension Packu jsou určeny například pro vývojová prostředí Borland C++, Microsoft Visual C/C++ (včetně MFC), Borland Pascal a Delphi / Kylix. Univerzální nástroje, jako ActiveX komponenta nebo ODBC drivery, jsou využitelné ve velkém množství dalších prostředí.

Přehled variant aplikací spolupracujících s 602SQL

Rozhraní mezi aplikací a 602SQL serverem lze vytvořit na různých úrovních komunikace:

  1. prostřednictvím specializovaných funkcí klientského API;
  2. prostřednictvím specializovaných tříd a komponent zapouzdřujících klientské API;
  3. pomocí univerzálních rozhraní ODBC, ODMA nebo DAO, případně pomocí univerzální komponenty ActiveX resp. OCX.

Pro jazyky C/C++ a Pascal 602SQL podporuje všechny úrovně. Níže jsou popsány vlastnosti jednotlivých úrovní.

Komunikace prostřednictvím funkcí klientského API

602SQL nabízí klientské rozhraní (API) skládající se z funkcí, jejichž voláním se aplikace může například přihlásit na server, položit SQL dotaz, číst data z databáze nebo je zapisovat, otevřít na obrazovce formulář nebo vytisknout sestavu.

Ke zpřístupnění těchto funkcí (a souvisejících definic typů a konstant) stačí do aplikace v jazyce C/C++ začlenit definiční soubory (header files) WBKERNEL.H a WBPREZEN.H, v jazyce Pascal použít unit WINBASE.PAS.

Z 602SQL lze přitom použít buď pouze služby SQL serveru anebo (pod Windows) také objekty tvořící uživatelské rozhraní aplikace (formuláře, menu, sestavy).

Komunikace prostřednictvím tříd a komponent zapouzdřujících API 602SQL

Nad vrstvou API funkcí byla vytvořena množina tříd (pro MFC) a komponent (pro Delphi), jejichž hlavním účelem je zjednodušit vytváření aplikace komunikující s 602SQL. Tyto třídy a komponenty neobsahují nic, co by se nedalo vytvořit pomocí API funkcí, zapouzdřují však často používaný kód, snižují pracnost programátorské práce a omezují riziko vzniku chyb.

Komponenty spadající do této kategorie jsou vyvíjeny více uživateli a jsou k dispozici na Internetu.

Komunikace pomocí univerzálních rozhraní a komponent

Při využití univerzálních rozhraní aplikace nevolá API funkce 602SQL, nýbrž buď funkce těchto rozhraní (ODBC, DAO), nebo pomocí univerzálních nástrojů metody specifické pro 602SQL (ActiveX, OCX).

Uživatelské rozhraní se při využití ODBC a DAO vytvoří kompletně pomocí prostředků vizuálního programování nabízených vývojovým prostředím aplikace. Při použití ActiveX (OCX) se uplatní formuláře 602SQL, ale v zapouzdřené podobě.

Knihovny 602SQL verze 8

Funkce API 602SQL, které může volat aplikační program, jsou pro Windows obsaženy v dynamických knihovnách 602krnl8.dll, 602prez8.dll, 602dvlp8.dll a 602wed8.dll. Tyto knihovny dále využívají knihovny wbed.dll a 602sec8.dll. Pro Linux jsou všechny funkce obsaženy v libwb602.so a tato knihovna využívá služeb knihovny libsecur.so.

Všechny knihovní funkce vyžadují pod Windows způsob předávání parametrů označovaný __stdcall v C/C++, resp. stdcall v Pascalu. Na Linuxu se používá volací konvence C.

ODBC driver pro přístup do 602SQL používá vlastní knihovny. ODBC driver se instaluje v rámci 602SQL automaticky, lze jej však nainstalovat i samostatně volbou v instalačním programu.

Rozhraní OLE a implementace ActiveX (OCX) pracují s knihovou wbview.ocx. OLE server, umožňující vložení formuláře nebo sestavy do cizího dokumentu, je implementován v souboru wbole602.exe.

Pro speciální účely, jako generování čárových kódů, spolupráce s poštou, fulltextové služby apod. se využívá ještě řada dalších knihoven, autoři databázových aplikací však nevolají jejich funkce přímo.

Seznam subsekcí:

  • Začátek a konec práce klienta
  • Kontextová proměnná klienta
  • Chyby při připojování se na server
  • Čtení a zápis dat
  • Zjišování detailů poslední chyby
  • Popis sloupce ve struktuře t_specif
  • Podpora pro MFC
  • Podpora pro Delphi


Začátek a konec práce klienta

Zde popisujeme postup připojení se klienta na SQL server a odpojení se.

Pro MFC jsou k dispozici třídy a pro Delphi komponenty, odvádějící tuto inicializační a deinicializační práci (nebo její část) požadovaným způsobem. Jich lze využít pro zjednodušení práce.

Kontextová proměnná klienta

Každý klient, který se chce připojit na databázový server 602SQL, musí mít tzv. kontextovou proměnnou cd typu cd_t pro průběžné uložení informací o kontextu komunikace.

Klient musí:

  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 těm API funkcím, které ji vyžadují (obvykle jako první parametr). V Pascalu se předává odkazem, v jazyce C/C++ se předává ukazatel typu cdp_t, který na ní ukazuje.
  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.

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. Více paralelních spojení klienta na server však znemožňuje používat nástroje uživatelského rozhraní zabudované do 602SQL.

Funkce s prefixem cd_

Klientský program má k dispozici dvě sady funkcí pro komunikaci se serverem. Funkce, začínající prefixem cd_ mají oproti funkcím bez tohoto prefixu jeden parametr navíc - prvním parametrem je kontextová proměnná cd resp. ukazatel na ni.

Funkce s prefixem cd_ je nutno používat tehdy, pokud spojení na server vytvoří jedno vlákno a používá je jiné, nebo pokud současně existuje více paralelních spojení na servery. Pokud klient má pouze jedno vlákno připojené na jediný server, ale používat obě sady funkcí se stejným efektem.

Práce více vláken klienta s databází

Pokud každé vlákno klienta komunikuje s databází pouze prostřednictvím spojení, které si samo vytvořilo, a používá funkce s prefixem cd_, pak rozhraní na server funguje reentrantně a činnost vláken není nutno na klientské straně nijak synchronizovat. Pokud vlákna budou současně pracovat se stejnými daty, je třeba počítat s možností deadlocku na serveru.

Pokud klient má více vláken a vlákno může využívat spojení vytvořené jiným vláknem, pak:

  • klientský program musí zabezpečit, že jedno spojení na databázový server nebude využíváno více než jedním vláknem v jednom okamžiku;
  • vlákno musí před započetím využívání spojení na databázi zavolat funkci cd_assign_to_thread;
  • vlákno musí po ukončení využívání spojení na databázi zavolat funkci cd_unassign.

Jinými slovy vlákno, které chce pracovat s databází, si vybere spojení a provede na něj funkci cd_assign_to_thread. Pak může pracovat a po skončení práce zavolá cd_unassign. Po tuto dobu spojení nesmí být přiřazeno žádnému jinému vláknu ani využíváno žádným jiným vláknem.

Slupka klientské aplikace

Připojení se na server

Každý klient musí zvolit server, s nímž bude komunikovat. Vybrat si lze pouze z takových serverů, které jsou zaregistrovány na počítači, na němž běží klient, nebo které běží ze stejném segmentu sítě (pro TCP/IP pouze je-li u klienta povolen broadcasting).

Připojení klienta na zvolený server provádí funkce cd_connect se jménem serveru předaným jako parametr. Tato funkce zjistí, zda požadovaný server běží lokálně nebo v síti. Pokud server neběží a je známa cesta k jeho databázovému souboru, pak je server lokálně spuštěn.

Pokud server běží lokálně, preferuje se pod Windows přímé připojení klienta bez podpory sítě. Chcete-li se připojit po síti i na lokálně běžící server (např. kvůli testování síťového chování), musíte před jménem serveru v parametru funkce cd_connect uvést hvězdičku.

Zprávu o případné chybě při provádění funkce cd_connect lze zobrazit v dialogovém okně pomocí procedury Kernel_error_box.

Klient se odpojí od serveru zavoláním funkce cd_disconnect. Tato funkce musí být zavolána před ukončením práce klienta a před případnou dealokací proměnné cd.

Přihlášení a odhlášení

Klient se na server přihlašuje pod určitým uživatelským jménem. Server může povolit také anonymní přístup, k němu však obvykle přísluší velmi omezená práva.

K přihlášení se slouží funkce (cd_)Login. Parametry této funkce jsou jméno uživatele a heslo. Server prověří, zda uživatele má v seznamu a zda souhlasí heslo. Pokud je vše v pořádku, je přihlášení se klienta na server provedeno.

Funkci (cd_)Login lze zavolat až po úspěšném provedení funkce cd_connect. Interaktivní variantou funkce (cd_)Login je funkce (cd_)Alogin.

Klient přihlášený na server může své uživatelské jméno zjistit pomocí funkce (cd_)Who_am_I.

Opakem přihlášení se na server je odhlášení, které provede funkce (cd_)Logout. Po odhlášení se klient stává anonymním a může se později přihlásit pod jiným jménem.

Aplikační program může uživateli umožnit odhlásit se a později se znovu přihlásit, pokud uživatel odchází od počítače a nechce, aby někdo zneužil jeho práv.

Funkce (cd_)Login a (cd_)Logout se musí volat mezi voláním funkcí cd_connect a cd_disconnect.

Volba schématu

Klient by měl zvolit databázové schéma, v němž se nacházejí objekty, s nimiž hodlá pracovat. Na objekty ve zvoleném schématu pak může odkazovat pouze jejich jménem, zatímco na objekty z jiných schémat musí odkazovat složitějším zápisem ve tvaru:

            jméno_schématu.jméno_objektu

Schéma lze zvolit voláním funkce (cd_)Set_application.

Nové schéma lze vytvořit pomocí funkce (cd_)Insert_object nebo pomocí SQL příkazu CREATE SCHEMA.

Komunikace s vnitřním programovacím prostředím

Aplikační program napsaný v externím jazyce může nastavit jako projekt program vytvořený ve vnitřním jazyce a umístěný ve zvoleném schématu. Tím získá možnost pracovat s proměnnými tohoto projektu, provádět příkazy v kontextu projektu, otevírat objekty (formuláře, menu, dotazy, sestavy) využívající deklarace z projektu a používat v SQL příkazech hostitelské proměnné.

Nastavení projektu se provede voláním funkce (cd_)Open_project. Ke konkrétní proměnné z projektu lze přistoupit přes její adresu získanou od funkce (cd_)Get_var_address. Provést zadanou posloupnost příkazů vnitřního programovacího jazyka v kontextu projektu umožňuje funkce (cd_)Exec_statements.

Přehled pořadí akcí

Komunikace klienta s databázovým serverem musí být uzavřena do slupky funkcí v tomto pořadí:

  1. alokace kontextové proměnné cd, není-li alokována staticky;
  2. volání cdp_init;
  3. vytvoření hlavního okna (nebylo-li otevřeno dříve a je-li potřeba) a inicializace okenního prostředí;
  4. volání cd_connect;
  5. volání (cd_)Login, pracuje-li se neanonymně;
  6. volání (cd_)Set_application;
  7. volání (cd_)Open_project, je-li potřeba;
  8. vlastní aplikace
  9. volání (cd_)Logout, - nepovinné;
  10. volání cd_disconnect;
  11. dealokace proměnné cd, není-li alokována staticky;
  12. zavření hlavního okna aplikace, existuje-li.

Příklad pro Delphi

uses winbase;

var my_cd:cd_t;     //kontextova promenna klienta
    err:integer;    //klient se pripojil
    logged:boolean; //klient je uspesne prihlaseny

procedure TForm1.FormCreate(Sender: TObject);
begin
  cdp_init(@my_cd);            //inicializace kontext. promenne klienta
  err:=cd_connect(@my_cd, 'test', sw_minimize); //propojeni klienta k serveru test
              //server test musi byt zaregistrovany (instalace wb602)
  if err=KSE_OK then begin
    logged:=not cd_Login(@my_cd,'','');    //prihlaseni se k serveru
    cd_Set_application(@my_cd, 'testap');  //nastaveni schematu
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if err=KSE_OK then        //pokud bylo pripojeno
    cd_disconnect(@my_cd);  //ukonceni prace a odhlaseni od 602SQL, ukonceni spojeni
end;


Kontextová proměnná klienta

Každý klient, který se chce připojit na databázový server 602SQL, 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.

Více o aplikacích v externích jazycích nalzenete zde.


Číselník chyb při spouštění nebo připojování k serveru z ext. jazyka

602SQL-Úplná dokumentace

Chyby při 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 602SQL 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.

Více o aplikacích v externích jazycích nalzenete zde.

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 wsock32.dll není instalována, nejde naloadovat nebo neproběhne její inicializace - signalizuje nenormální stav TCP/IP na stanici
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, přístup není povolen
KSE_NO_SERVER_LIST | 46 | nenalezen soubor 602sql se seznamem serverů (Linux)


Čtení a zápis dat na úrovni API funkcí

Nejnižší úroveň nástrojů pro čtení a zápis dat do databáze představují API funkce. Na vyšší úrovni lze použít příkazy jazyka SQL obsahující proměnné klienta pomocí funkce SQL_host_execute.

Pro čtení a zápis hodnot sloupců lze použít některé z těchto funkcí:

(cd_)Read, (cd_)Write - univerzální funkce pro práci s hodnotou sloupce,

(cd_)Read_ind, (cd_)Write_ind - práce se sloupcem pevné velikosti,

(cd_)Read_var, (cd_)Write_var - práce se sloupce proměnné velikosti,

(cd_)Read_len, (cd_)Write_len - práce s délkou hodnoty sloupce proměnné velikosti,

(cd_)Read_ind_cnt, (cd_)Write_ind_cnt - práce s počtem složek multiatributu.

(cd_)Read_record, (cd_)Write_record - práce s celým záznamem najednou.

Funkcím se předávají tyto parametry:

  1. číslo tabulky nebo otevřeného kurzoru, s nimiž se pracuje;
  2. číslo záznamu v tabulce nebo kurzoru;
  3. číslo sloupce (kromě funkcí pracujících s celým záznamem);
  4. pořadové číslo hodnoty v multiatributu; pokud funkce pracuje se sloupcem, který není multiatributem, pak tento parametr má hodnotu NOINDEX (pouze některé funkce).

Při zápisu hodnoty se dále udává její délka. Při práci s hodnotou proměnné velikosti se udává začátek a délka úseku, s nimž se pracuje.

Číslo tabulky a číslo kurzoru

Číslo tabulky lze získat pomocí funkce (cd_)Find_object, např.:

cd_Find_object(cdp, "MOJETABULKA", CATEG_TABLE, &tablenum);

Čísla systémových tabulek jsou v externích jazycích označena konstantami TAB_TABLENUM, OBJ_TABLENUM, USR_TABLENUM, SRV_TABLENUM, REPL_TABLENUM a KEY_TABLENUM.

Číslo kurzoru vznikne při otevření kurzoru. Pevný kurzor vytvořený podle dotazu v databázi se otevírá příkazem (cd_)Open_cursor, proměnný kurzor z dynamicky sestrojeného dotazu se otevírá funkcí (cd_)Open_cursor_direct. Otevřený kurzor je nutno uzavřít funkcí Close_cursor.

Čísla sloupců tabulek a kurzorů

Jména sloupců databázových tabulek a kurzorů se používají pouze v SQL a ve vnitřním programovacím jazyce. Ve funkcích pro externí jazyky se sloupce označují svými pořadovými čísly.

Sloupce jsou očíslovány souvisle od nuly. Číslo nula má služební sloupec, který se v tabulkách jmenuje DELETED a v kurzorech __DELETED a nese informaci o tom, zda záznam je zrušený. Za nim následují případné další služební sloupce týkající se replikací, koloběhu dokumentů a práv k jednotlivým záznamům (jejich jména začínají _W5_). Za nimi jsou normální sloupce v tom pořadí, v němž jsou uvedeny v definici tabulky nebo v klauzuli SELECT v definici kurzoru.

Nultý sloupec má typ uns8. Nabývá tří hodnot:

* NOT_DELETED záznam existuje, není zrušen

* DELETED záznam je zrušený (lze jej obnovit)

* RECORD_EMPTY záznam je uvolněný (nelze jej obnovit)

Definiční soubory s čísly sloupců tabulek a dotazů z aplikace

602SQL poskytuje speciální nástroj, jak kompilátorům jednoduše sdělit čísla všech sloupců ve všech tabulkách a dotazech v aplikaci. Tímto nástrojem je vytvoření definičních souborů, které se poté využijí při překladu aplikačního programu.

V hlavním menu vývojového prostředí 602SQL je v menu Nástroje příkaz Připravit include, který dovoluje vytvořit definiční soubor pro jazyk C nebo Pascal.

Pro jazyk C bude obsahem souboru řada direktiv #define, které definují identifikátor (makro) označující sloupec pomocí jeho čísla. Pro Pascal budou identifikátory definovány pomocí deklarace konstant.

Identifikátory označující sloupce tabulek budou mít tvar:

A_tabulka_sloupec

kde tabulka je jméno tabulky a sloupec je jméno sloupce tabulky.

Identifikátory označující sloupce kurzorů budou jeden z tvarů:

B_kurzor_sloupec
B_kurzor_tabulka_sloupec
B_kurzor_alias_sloupec

kde kurzor je jméno kurzoru, sloupec je jméno sloupce, tabulka je jméno tabulky, z níž sloupec pochází a alias je případné označení tabulky v rámci kurzoru (tabulka nebo alias se použije, pokud kurzor obsahuje více stejně pojmenovaných sloupců).

Pro jazyk C má definiční soubor standardně příponu SIC, pro Pascal příponu SIP. Do aplikačního programu jej vložíte takto:

#include "appl.sic"

resp.

{$I appl.sip}

Jména utvořená výše popsaným způsobem a definovaná v definičním souboru lze využít všude tam, kde je parametrem funkce číslo sloupce.

Zjišťování čísel sloupců při běhu programu

Ke zjištění čísla sloupce na základě jeho jména lze také využít tyto funkce:

Funkce (cd_)Attribute_info vrací pro sloupec zadaný jménem jeho číslo, typ a další údaje. Funkce (cd_)Enum_attributes a (cd_)Enum_attributes_ex vracejí přehled všech sloupců. Tyto funkce se dají použít na tabulku nebo na otevřený kurzor.

Podrobné informace o sloupcích v tabulce poskytuje systémový informační dotaz _iv_table_columns.

Sloupce kurzorů vznikajících při běhu programu

Pro dynamicky vznikající kurzory platí, že jejich sloupce jsou očíslovány zleva doprava v pořadí, v němž jsou uvedeny v klauzuli SELECT. První sloupec uvedený za SELECT má číslo 1, další 2 atd.

Nechť tabulka T1 obsahuje sloupce A a B, tabulka T2 sloupce C a D. Otevřete kurzor CU v jazyce C voláním funkce:

Open_cursor_direct("select A,D,B+C from T1,T2 where A<C order by D", &CU);

Pak přečíst hodnotu sloupce D ze záznamu REC v kurzoru CU lze funkcí:

Read(CU, REC, 2, NULL, &buffer);

zatímco hodnotu součtu B+C přečtete

Read(CU, REC, 3, NULL, &buffer);

Délka dat a datové buffery

Funkce pro zápis do databáze mají za poslední parametr údaj datasize. Hodnotou tohoto parametru je délka hodnoty zapisované do databáze v bajtech. Pokud píšete do sloupce pevné délky, pak tato hodnota musí být stejná jako velikost hodnoty tohoto sloupce, tedy např. pro typ Char je to 1, pro Short 2, pro Date, Time, Timestamp, ukazatele a Integer 4, pro Money6, pro Real a BigInt 8, pro znakové a bajtové řetězce je to délka řetězce uvedená v definici tabulky (nikoli tedy skutečná délka zapisovaného řetězce).

Při čtení hodnoty je funkci nutno předat adresu dostatečně velkého bufferu. Přečtený řetězec znaků bude ukončen nulou.

Délky hodnoty sloupce proměnné velikosti je 4-bajtový celočíselný údaj, při jejím zápisu má tedy parametr datasize hodnotu 4. Počet složek multiatributu je 2-bajtový celočíselný údaj, při jeho zápisu má tedy parametr datasize hodnotu 2.

Parametr Access v univerzálních funkcích Read a Write

Funkce (cd_)Read a (cd_)Write jsou schopny nahradit všechny ostatní funkce pro čtení a zápis dat, jejich volání je však poněkud složitější. Do rozhraní serveru jsou zahrnuty hlavně kvůli kompatibilitě se staršími verzemi. Vzhledem k tomu není nutno studovat zbytek této sekce.

Obě funkce mají parametr access, který popisuje cestu, jak se dostat k požadovaným datům v databázi.

Pokud pracujete se sloupcem, který není multiatributem ani nemá proměnnou délku, pak uvádějte hodnotu tohoto parametru rovnou NULL v jazyce C, NULL_ACCESS v Pascalu.

Práce s multiatributy, se sloupci proměnné délky a případně i s ukazateli vyžaduje zadání dalších parametrů. V případě multiatributů je to index, tedy pořadové číslo složky multiatributu, s níž chcete pracovat. V případě sloupců proměnné délky se zadává interval, tedy úsek z hodnoty.

Tyto údaje poskytuje parametr access. Mimo to umožňuje:

  • přecházet od záznamu obsahujícího ukazatel na záznam, kam tento ukazatel ukazuje;
  • zjistit počet všech hodnot multiatributu nebo délku hodnoty sloupce proměnné délky;
  • zadat počet hodnot multiatributu nebo délku hodnoty sloupce proměnné délky.

Poslední operace má efekt pouze při zmenšení počtu složek multiatributu nebo délky. Zvětšení totiž nastává jedině automaticky při zápisu.

Při zadávání kteréhokoli z výše uvedených údajů parametr access je ukazatel na pole záznamů typu modifrec, které popisuje cestu vedoucí k hledaným hodnotám (v Pascalu je pole záznamů předáváno referencí, nikoli přes ukazatel). V obou případech hodnota parametru access musí přísně korespondovat s typem a dalšími charakteristikami příslušného sloupce.

Hodnota NULL parametru access se použije právě tehdy, když příslušný sloupec je pevné délky a není to multiatribut. Jinak parametr accesss popisuje přístup k hodnotě a jednotlivé složky pole po řadě odpovídají jednotlivým krokům na cestě ke zvoleným datům. Cesta začíná u sloupce zadaného jako parametr funkce.

Lze volit tyto kroky:

  1. Pokud cesta dospěla k multiatributu, pak lze uvést index složky, s níž se má pracovat. Použije se k tomu záznam se složkou modtype rovnou MODIND a s vhodnou hodnotou složky index.
  2. Pokud cesta dospěla ke sloupci proměnné délky (ten může být i již vybranou složkou multiatributu), pak lze uvést interval hodnot, s nimiž se má pracovat. Použije se k tomu záznam se složkou modtype rovnou MODINT a s vhodnými hodnotami složek start a size, určujícími začátek a velikost úseku.
  3. Pokud cesta dospěla k multiatributu nebo sloupci proměnné délky, pak lze uvést, že chcete pracovat nikoli s jejich obsahem, nýbrž s počtem složek multiatributu resp. délkou hodnoty sloupce . K tomu použijte záznam se složkou modtype rovnou MODLEN. Počet složek multiatributu je číslo typu uns16, délka hodnoty sloupce je číslo typu uns32.
  4. Pokud cesta dospěla k ukazateli, který není multiatributem, pak můžete přejít k záznamu, na nějž ukazatel odkazuje. K tomu použijte záznam se složkou modtype rovnou MODPTR a s vhodnou hodnotou složky attr, jež určuje, ke kterému sloupci v cílovém záznamu přejdete. Pokud ukazatel nikam neukazuje, nebo je cílový záznam zrušený, dojde k chybě.
  5. Pokud cesta dospěla k multiukazateli, můžete přejít na některý ze záznamů, na něž ukazuje. K tomu použijte záznam se složkou modtype rovnou MODINDPTR a s vhodnými hodnotami ve složkách index a attr. Index určuje, která složka multiukazatele se použije a attr na který sloupec cílového záznamu přejdete.
  6. Posledním platným záznamem v poli musí být záznam se složkou modtype rovnou MODSTOP.
typedef struct
{ uns8 modtype;
  union umoddef
  { struct smodstop { } modstop;
    struct smodlen { } modlen;
    struct smodind { uns16 index; } modind;
    struct smodint { uns32 start; uns16 size; } modint;
    struct smodp { uns8 attr; } modptr;
    struct smodindp { uns16 index; uns8 attr; } modindptr;
  } moddef;
} modifrec;

type modifrec = record
 modtype : uns8;
 case integer of
 MODSTOP : ( );
 MODLEN : ( );
 MODIND : (index : uns16);
 MODINT : (start : uns32; size : uns16);
 MODPTR : (attr : uns8);
 MODINDPTR : (index2 : uns16; attr2 : uns8)
end;

Hodnotou složky modtype v každém záznamu musí být jedna z těchto konstant:

konstanta | Umožňuje
MODSTOP | tato hodnota je vždy v posledním záznamu v poli
MODLEN | Pracovat s velikostí multiatributu nebo záznamu proměnné délky
MODIND | Pracovat se složkou multiatributu zadanou indexem
MODINT | Pracovat s úsekem hodnoty sloupce proměnné délky zadaným začátkem a délkou
MODPTR | přejít do záznamu, na nějž odkazuje ukazatel, na zadaný sloupec
MODINDPTR | přejít do záznamu, na nějž odkazuje ukazatel se zadaným indexem na zadaný sloupec

Čtete-li funkcí (cd_)Read obsah sloupce proměnné velikosti, pak v poli, kam obsah směřuje, bude v prvních 2 bajtech délka přečteného úseku a za ní přečtená data.


Programové zjišťování detailů poslední chyby

Dojde-li při provádění požadavků klienta na server k chybě, lze pomocí několika funkcí zjišťovat její povahu a doplňující informace. Při vývoji aplikace lze tak nalézt podstatu problému, při provozu reagovat na nastalou situaci a případně informovat uživatele.

Tyto funkce (s výjimkou Get_error_num_text) je nutno zavolat bezprostředně po výskytu chyby, příští požadavek klienta na server totiž přepíše údaje, které vracejí.

Během vývoje aplikace lze obdobné informace získávat tak, že se nastaví logování uživatelských chyb s plným kontextem.

Funkce Sz_error vrací číslo chyby. Číslo chyby je základní, nejhrubší informací o chybě.

Funkce Get_error_num_text vrací textový popis chyby odvozený z čísla chyby. Pro některé chyby je v tomto popisu proměnná část (např. jméno tabulky).

Funkce Get_server_error_suppl vrací doplňující informaci k chybě. Její obsah závisí na čísle chyby, může to být například jméno tabulky, slupce anebo integritního omezení apod. Tato informace je také obsažena v textu vráceném funkcí Get_error_num_text.

Funkce Get_server_error_context vrací informace o kontextu chyby, tedy například o tabulce, záznamu a sloupci, o prováděném SQL příkazu, proceduře triggeru apod.

Kromě chyb server může také vydat varování. Číslo varování vrací funkce Sz_warning.

Viz

  • Sz_error
  • Get_error_num_text
  • Get_server_error_suppl
  • Get_server_error_context
  • Logování a trasování
  • Příklad


Popis sloupce ve struktuře t_specif

Sloupec v databázové tabulce je popsán svým typem a případně i dalšími údaji závislými na typu. Tyto údaje jsou předávány ve variantní struktuře t_specif:

union t_specif
{ ttablenum destination_table;
  struct
  { sig8 scale;
    uns8 precision;
  };
  struct
  { uns16 length;
    uns8  charset;
    uns8  ignore_case : 1;
    uns8  wide_char   : 1;
  };
};

Tuto strukturu vracejí funkce cd_Enum_attributes_ex a cd_Attribute_info_ex. Jednotlivé složky struktury mají tento význam:

Složka | Použití pro typy | Význam
destination_table | Ukazatel a obousměrný ukazatel | Číslo tabulky, do níž ukazatel směřuje
scale | Přesné číselné typy | Počet desetinných míst
precision | Přesné číselné typy | Přibližný počet platných číslic
length | Znakové a binární řetězce s omezenou délkou | Délka resp. maximální délka
charset | Znakové řetězce | Kód znakové sady
ignore_case | Znakové řetězce | Příznak ignorování velikosti písmen při porovnávání
wide_char | Znakové řetězce | Příznak 16-bitových znaků


Knihovny tříd MFC

viz také Seznam funkcí MFC, seřazený podle abecedy.

Součástí standardní distribuční sady 602SQL je i podpora pro aplikační programy psané v jazyce C++ s využitím knihovny tříd MFC, která představuje implementaci tříd:

Třídy objektů

CWBApp | základní třída, pro aplikační programy 602SQL.
CWBFrameWnd | základní třída pro hlavní okno aplikačního programu 602SQL
CWBTable | třída tabulky
CWBCursor | třída objektů typu kurzor
CWBCursTab | třída objektů typu kurzor nebo tabulka
CWBViewWnd | základní třída pro formuláře
CWBModalViewWnd | základní třída pro modální formuláře


Encyklopedie funkcí Delphi

602SQL-Úplná dokumentace

Podpora pro Delphi založená na zapouzdření 602SQL API

viz také Podpora pro Delphi založená na funkcích a zprávách z 602SQL API

Podpora představuje implementaci čtyř základních tříd:

TWBaseServer602 nevisuální komponenta jakožto předek rámcového okna

jednotka : MSGFRAME.PAS (bitmapa je v MSGFRAME.DCR).

TMsgFrame nevisuální komponenta pro obsluhu zpráv 602SQL rámcového okna

jednotka : MSGFRAME.PAS (bitmapa je v MSGFRAME.DCR).

TWBNavig obdoba standardní komponenty z Delphi TDBNavigator

jednotka: WBNAVIG.PAS (bitmapa je v WBNAVIG.DCR).

TView602 nevisuální komponenta pro formulář

jednotka: VIEW602.PAS (bitmapa je v VIEW602.DCR).


Přístup do databáze 602SQL z Web-serverů přes ASP

Web servery využívají vícero rozhraní pro tvorbu dynamických stránek obsahujících informace z databáze. Nejpoužívanějšími z nich jsou CGI, FastCGI a MS ISAPI, pro něž 602SQL nabízí specifické klientské programy. Vedle nich lze napojení na databází realizovat též přes scripty v tzv. Active Server Pages (ASP), podporovaných například v MS Internet Information Server. ASP vstupuje do 602sql databáze přes rozhraní ODBC.

Chcete-li přistupovat do 602SQL přes ASP, postupujte podle níže uvedeného scénáře:

  • Rozhodněte se, zda 602SQL server poběží na stejném počítači, jako web server.
  • Instalujte 602SQL server, vytvořte jeho databázi (pojmenovanou např. WEBINFO), v této databázi vytvořte aplikaci (pojmenovanou např. WEBAPL) a v ní databázové tabulky, které mají být přístupné z Webu (jednu z nich pojmenujme např. WEBTAB, nechť má sloupce X a Y). Některé z těchto kroků můžete přeskočit, pokud SQL server, databáze, aplikace nebo tabulky jsou již připraveny.
  • Pokud 602SQL server poběží na jiném počítači než web server, pak na počítači s web serverem instalujte libovolnou verzi 602SQL (například pouze ODBC driver). Tím se tento počítač dostanou ODBC drivery zpřístupňující po síti data z 602SQL Serveru.
  • Na počítači, na němž je instalován web server, spusťte řídicí konzoli 602SQL.
  • Je-li 602SQL server na jiném počítači než web server, pak jej zaregistrujte (vyplňte jméno, protokol a případně IP adresu a další údaje)
  • Na stránce ODBC zdroje dat stiskněte tlačítko Přidat, v dialogu vyplňte jméno pro ODBC zdroj dat (například WBDSN), vyberte z comba jméno databáze (v našem případě WEBINFO), vyplňte jméno aplikace (v našem případě WEBAPL) a stiskněte tlačítko Vytvořit.

Nyní můžete vytvářet ASP stránky. Používáte-li například produkt Front Page 98, pak data z databáze zařadíte do editované stránky takto:

  • Do editované stránky umístěte kurzor tam, kam má být vložena databázová tabulka.
  • Z menu Insert / Database spusťte Database Region Wizard.
  • V prvním okně vyplňte jméno zdroje dat (v našem případě WBDSN) a případně i jméno a heslo uživatele v databázi. Pokud jméno a heslo ponecháte nevyplněné, bude se Web server hlásit na SQL server jako anonymní uživatel, což v mnoha případech postačuje.
  • V dalším okně zadejte SQL příkaz, který z databáze získá data, která mají být zobrazena. Lze použít libovolný dotazový výraz, nejjednodušší forma je SELECT * FROM WEBTAB (WEBTAB je naše jméno tabulky se zobrazovanými daty).
  • V dalším okně opakovaným stiskem tlačítka Add Field vložte jména těch sloupců z odpovědi na výše zadaný dotaz, které chcete zobrazit. V našem případě to budou sloupce X a Y z tabulky WEBTAB.
  • Tlačítkem Finish ukončete Wizard. V editované stránce se objeví databázová tabulka, zatím bez dat.

Podíváte-li se na tuto stránku prohlížečem, uvidíte tabulku naplněnou daty. Předtím je však třeba:

  • Spustit 602SQL server.
  • Zkontrolovat v jeho okně, zda nabízí služby v síti a zda podporuje protokol, zvolený pro přístup přes ODBC. Poskytování služeb v síti zajišťuje parametr /n na příkazové řádce serveru, protokoly se volí na řídicí konzoli 602SQL.
  • Spustit web server.

Po zprovoznění tohoto základního přístupu do databáze můžete využívat dalších vlastností ASP, například využít vstupní pole pro vyhledávání z databázi.

Pokud máte k dispozici produkt InterDev, můžete vytvářet ASP stránky pohodlněji než ve Front Page. V rámci WEB projektu lze soustavu databázových stránek vytvořit pomocí nástroje Data Form Wizard (příkaz File / New, záložka File Wizards). V sérii dialogů nejprve vyberete existující nebo vytvoříte nové napojení na databázi přes zdroj dat WBDSN, vyberete tabulku nebo dotaz a množinu sloupců a zadáte další parametry popisující obsah a chování WWW stránek. Stránky takto napojené na 602SQL server umožňují (v maximální konfiguraci) prohlížení dat po záznamech (Form) nebo po skupinách záznamů (List), vybírání záznamů dle zadaných podmínek (Filter), přepisování dat z databáze (Update), vkládání nových záznamů (New) a rušení záznamů (Delete).

Při práci s produktem InterDev počítejte s tím, že stejný databázový server a stejný zdroj dat musí být zaregistrovány na počítačích, na nichž běží Internet Information Server i InterDev. Oba tyto programy se budou přihlašovat na 602SQL Server.


Slovníček základních pojmů 602SQL

ActiveX control

agregační (souhrnné) funkce

aplikace

atribut (sloupec)

atributy (sloupce) proměnné velikosti

back-end

databáze

databázový soubor

debugger

dotaz

editor

font

formulář

formulář standardní

front-end

include

index

journal

klient databáze

koloběh dokumentů

kurzor

menu

multiatribut

nákres

objekty

obrázek

ODBC

OLE

OLE kontejner

OLE server

pohled

pole

program

programovací jazyk 602SQL

projekt

provozní prostředí

přípony souborů

QBE

referenční integrita

relace

replikace

replikační vztah

role

sekvence

server databáze

sestava

schéma

skupina uživatelů

sledovací atributy

sloupec

sloupce proměnné velikosti

správce databáze

SQL

subjekt práva

subpohled

superpohled

systémové tabulky

tabulka

text

transakce

trigger

ukazatel

uložená procedura

uživatel

vývojové prostředí

WBIK(Internet Klienti)

WWW objekt

záznam


Spolupráce s elektronickou poštou - úvod

Databázový systém 602SQL 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ěží 602SQL Server (bude-li s poštou pracovat server) nebo 602SQL 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ř. MS Exchange, 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.

Seznam subsekcí:

  • Inicializace pošty
  • Profily poštovních parametrů
  • Odesílání zásilek
  • Příjí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.


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 (trvalých, tj. uložených na disku) profilů, které se liší svým jménem, implicitní profil má jméno prázdné. Kromě toho lze za běhu programu vytvářet dočasné profily a dynamicky jim nastavovat parametry.

Pro vytváření a správu trvalých profilů lze použít Řídicí konzoli 602SQL, stránku Poštovní profily, resp. její větve tvořené jednotlivými profily. Trvalé i dočasné profily lze vytvářet a spravovat také pomocí funkcí jazyka MailCreateProfile, MailDeleteProfile, MailDeleteProfile, MailGetProfileProp.

V prostředí Windows jsou profily uloženy v registrační databázi pod klíčem: HKEY_LOCAL_MACHINE\Software\Software602\602SQL\Mail .Implicitní profil tvoří řetězcové hodnoty tohoto klíče, pojmenované profily jsou uloženy jako podklíče daného jména.

Na Linuxu jsou profily uloženy v souboru 602sql, implicitní profil v sekci [.MAIL_], pojmenované profily v sekci [.MAIL_jméno profilu]. Soubor 602sql se edituje ručně (existuje i grafická konzole pro nastavování parametrů). Je zřejmé, že pro Linux se uplatní pouze profily typu SMTP/POP3. Do 602sql nelze uložit přístupové heslo do POP3 schránky v zašifrované podobě.

Příklad implicitního profilu definovaného na Linuxu ve 602sql:

...
[.MAIL_]
SMTPServer=602sql.soft602.cz
MyAddress=server@soft602.cz
POP3Server=602sql.soft602.cz
UserName=server
Password=xyz
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.

Profily pošty se používají i při nastavování parametrů replikací (pomocí elektronické pošty).

Podrobnosti o parametrech profilů:
SMTP/POP3 Mail602 MAPI

Seznam subsekcí:

  • SMTP/POP3
  • Mail602
  • MAPI


Profily pošty SMTP/POP3

602SQL-Úplná dokumentace

Profil pošty SMTP/POP3

Parametry profilu se pro Windows SQL server i klienta nastavují na řídicí konzoli.

Parametr v 602sql nebo v registrech | Řídicí konzole | Popis
SMTPServer | SMTP server | Jméno nebo IP adresa SMTP serveru
MyAddress | E-mail adresa | Poštovní adresa, která bude v zásilkách uvedena jako adresa odesílatele
POP3Server | POP3 server | Jméno nebo IP adresa POP3 serveru
UserName | Jméno uživatele | Jméno uživatele poštovní schránky
Password *) | Heslo | Heslo uživatele poštovní schránky (pouze pro POP3 vybírání) *) v registrech je v zašifrované formě pod jiným klíčem
DialConn | Telefonní spojení | Jméno telefonního připojení (ze složky Telefonické připojení sítě) - pouze Windows
DialUserName | Jméno uživatele | Jméno uživatele telefonního připojení k Internetu - pouze Windows
- N/A - | Heslo | Heslo uživatele telefonního připojení k Internetu - pouze Windows
FilePath | Path | 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

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 (Windows). Řídicí konzolel umožňuje do profilu uložit heslo pro přístup k POP3 schránce v zašifrované podobě (pro odesílání pošty není heslo potřeba) a případně heslo pro telefonní přístup k Internetu. Pro LINUX se případné heslo pro POP3 přístup zadává v čitelné podobě a je na správci systému, aby nastavil vhodná přístupová práva k souboru obsahujícímu popis profilů.


Profily pošty Mail602

602SQL-Úplná dokumentace

Profil pošty Mail602

Parametry profilu se nastavují pomocí Řídicí konzole 602SQL, na stránce Poštovní profily. Má smysl pouze ve Windows.

Parametr v registrech | Řídicí konzole | Popis
Profile602 | Profil Mail602 | Jméno profilu pošty Mail602
UserName | ID/Jméno uživatele | 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 | Path | 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.


Profily pošty MAPI

602SQL-Úplná dokumentace

Profil pošty MAPI

Parametry profilu se nastavují pomocí Řídicí konzole 602SQL, na záložce Poštovní profily. Smysl má pouze ve Windows s doinstalovanou podporou pro MAPI.

Parametr v registrech | Řídicí konzole | Popis
ProfileMAPI | Profil MAPI | Jméno MAPI profilu
FilePath | Path | 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ů.


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 nebo funkcí LetterAddBLOBs (resp LetterAddBLOBr).

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.

Seznam subsekcí:

  • Příklad odeslání


Příklad odeslání zásilky

602SQL-Úplná dokumentace

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


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 (a/nebo text hlavičky), pokud nebyl již hromadně načten funkcí MailBoxLoad, lze uložit do databáze pomocí funkce MailBoxGetMsg resp. MailBoxGetMsgEx.

4.Informace o připojených souborech (pokud nebyly již hromadně načteny funkcí MailBoxLoad) se ukládají do databáze pomocí funkce MailBoxGetFilInfo.

5a.Funkce MailBoxSaveFileAs uloží vybraný soubor připojený k zásilce na disk.

5b.Funkce MailBoxSaveFileDBs (resp. MailBoxSaveFileDBr) uloží vybraný soubor připojený k zásilce do databáze.

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.

Seznam subsekcí:

  • Příklad příjmu
  • Struktura systémových tabulek pro došlé zásilky


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


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 | INT | Serverem vytvořené unikátní číslo, slouží k identifikaci zásilky a jako reference do tabulky připojených souborů.
2 | Subject | CHAR(80) | Věc zásilky
3 | Sender | CHAR (64) | Adresa odesílatele
4 | Recipient | CHAR (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 | INT | 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 | INT | 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 | CLOB | Text dopisu ze zásilky, načítá pouze na explicitní žádost (buď funkcí MailBoxLoad s parametrem MBL_BODY nebo funkcí MailBoxGetMsg nebo MailBoxGetMsgEx).
15 | Addresses | CLOB | Seznam všech adresátů ve formátu TO: jméno a/nebo (v případě "na vědomí") CC: jméno
16 | Profile | CHAR (64) | Jméno profilu, pod kterým byl záznam vytvořen; to je kvůli případu, když víc aplikací stahuje poštu pod různými profily.
17 | Header | CLOB | Hlavička zásilky

Struktura tabulky _INBOXMSGS se změnila ve verzi 7.0d (přibyly poslední 3 sloupce). Konverze na novou struktura proběhne automaticky.

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 | INT | ID záznamu o zásilce z tabulky _INBOXMSGS.
2 | Name | CHAR (254) | Jméno souboru
3 | Size | INT | Velikost souboru
4 | Fdate | DATE | Datum vytvoření souboru
5 | FTime | TIME | Čas vytvoření souboru


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 602SQL 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.


Chyby při použití elektronické pošty

602SQL-Úplná dokumentace

Čí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 není registrován, 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 602SQL, 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.
NO_SUPPORT | 525 | Nepodporováno MAPI nebo WB server běžící jako služba nemá přístup k EMI souborům pošty Mail602
MAIL_REQ_QUEUED | 526 | Pouze v případě vzdáleného poštovního úřadu Mail602 - zásilka neodešla, protože se nepodařilo spojit - zásilka je OK a existuje ve frontě, bude odeslána, až se naváže spojení
MAIL_PROFILE_EXISTS | 527 | Poštovní profil už existuje - nelze vytvořit
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


Digitální podpisy

602SQL umožňuje digitálně podepisovat dokumenty uložené v databázi. Účel digitálního podpisu je stejný, jako u podpisu na papíře, tedy:

  • identifikovat osobu, která dokument podepsala;
  • svázat obsah dokumentu s podpisem.

Digitální podpis je implementován tak, aby zajistil, že nelze:

  • podpis padělat;
  • podepsaný dokument dodatečně pozměnit, aniž by změna byla odhalena;
  • po podepsání dokumentu odmítnout autenticitu podpisu, tedy tvrdit, že podpis není můj nebo že jsem podepsal něco jiného;

Digitální podpis ve všech výše uvedených bode poskytuje jistotu nezávislou na vůli administrátorů nebo možnosti zasahovat do vnitřních struktur databáze. K obsahu chráněnému přístupovými právy se může dostat uživatel, který má dostatečná administrátorská práva nebo který dokáže proniknout do databázového souboru. Naopak digitální podpisy jsou odolné i proti takovýmto zásahům.

Šifrovací postupy, které umožňují implementovat bezpečné digitální podpisy, jsou založeny na dvojicích klíčů příslušejících uživateli - veřejném a soukromém klíči. Veřejný klíč každého uživatele je uložen v databázi uvnitř tzv. certifikátu, je všeobecně znám a je doplněn údaji o svém majiteli. Soukromý klíč je uložen na disketě nebo jiném přenosném mediu, je chráněn heslem a je uživatelem pečlivě střežen - vkládá se po počítače pouze při podepisování dokumentů.

Pomocí soukromého klíče se vytváří digitální podpis dokumentu. Veřejný klíč dovoluje zjistit, kdo dokument podepsal, a ověřit neporušenost dokumentu. Způsob spárování soukromého a veřejného klíče zaručuje, že dokument nemohl být podepsán nikým jiným, než majitelem soukromého klíče příslušného k veřejnému klíči.

Podstata certifikace

Aby digitální podpisy mohly vypovídat o skutečných osobách, musí být u každého klíče ověřena identita jeho majitele. Ověření stačí provést pro veřejný klíč, protože tajný klíč je s ním pevně spárován.

Ověřování identity majitele klíče provádí tzv. certifikační autorita (CA). Majitel ji dodá svůj nový veřejný klíč, CA zkontroluje jeho identitu (například pomocí nějakého spolehlivého průkazu totožnosti) a vystaví certifikát, v němž je obsažen jak veřejný klíč tak i údaje o majiteli klíče. Certifikát je digitálně podepsán certifikační autoritou, takže jeho platnost lze ověřit, a je uložen na veřejném místě v databázi.

Volba certifikační autority

Pro volbu certifikační autority se používají tato pravidla:

  • CA by měla osobně znát uživatele, jejichž identitu bude certifikovat;
  • CA by neměla mít žádný vlastní zájem na tom, co je obsahem databáze.

V organizacích pracujících s daty citlivými na bezpečnost vykonává funkci CA zvláštní osoba nepověřována jinými úkoly.

Hierarchie certifikačních autorit

První z výše uvedených podmínek je obtížné splnit v organizaci s velkým počtem uživatelů databáze. Proto existuje možnost mít více CA (například v každé divizi firmy jednu) a uspořádat je do hierarchie.

V hierarchii existuje jedna nejvyšší certifikační autorita, která certifikuje identitu CA nižšího stupně a zároveň certifikuje jejich oprávnění vykonávat funkci CA. Tyto CA mohou certifikovat ještě nižší CA. Všechny CA pak mohou certifikovat uživatele podle svého pole působnosti.

Uživatele, který vykonává funkci nejvyšší certifikační autority, určuje Bezpečnostní správce.

Bezpečnost digitálního podpisu

Digitální podpis může úspěšně padělat ten, kdo získá soukromý klíč uživatele a heslo, které jej chrání.

Mimo tuto cestu celosvětově není znám způsob, jak podpis nebo podepsaný dokument padělat. Padělání podpisu není možné ani tehdy, pokud bezezbytku znáte algoritmy použité v pro implementaci podpisu nebo pokud budete volně zasahovat do databázového souboru.

Systém digitálních podpisů, použitý v 602SQL, je stejný jako systém používaný pro převody peněz mezi bankami a pravděpodobně také stejný jako systém používaný pro odpalování mezikontinentálních balistických raket.

Seznam subsekcí:

  • Zprovoznění digitálních podpisů
  • Použití digitálních podpisů v databázových aplikacích
  • Použití klíčů z verzí 602SQL před verzí 8.0


Zprovoznění digitálních podpisů

Digitální podpisy lze používat, pokud existuje jedna nebo více certifikačních autorit, pokud uživatele mají vytvořené klíče a tyto klíče jsou certifikovány.

Zprovoznění digitálních podpisů v databázi probíhá v těchto krocích:

  1. Bezpečnostní správce určí vrcholovou certifikační autoritu.
  2. Vrcholová certifikační autorita si vygeneruje klíče a vlastní certifikát.
  3. Případné podřízené certifikační autority si vygenerují klíče a požádají některou již zavedenou certifikační autoritu o certifikaci.
  4. Uživatelé si vygenerují klíče a požádají některou certifikační autoritu o certifikaci.

Určení vrcholové certifikační autority

Vrcholovou certifikační autoritou je osoba pověřená úkolem ověřovat identitu ostatních uživatelů a případně také zmocňovat ke stejnému úkonu další certifikační autority.

Volba vrcholové certifikační autority musí být provedena jako první krok při zprovozňování digitálních podpisů. Pozdější změna vrcholové certifikační autority způsobí zneplatnění všech certifikátů, které vystavila, a v důsledku toho zneplatnění všech digitálních podpisů, které byly s jejich pomocí vytvořeny. Proto je vhodné zavést do databáze zvláštního uživatele pouze pro úlohu vrcholové certifikační autority.

Vrcholovou certifikační autoritu volí bezpečnostní správce na řídicí konzoli na stránce Identifikace a bezpečnost.

Zvolená vrcholová certifikační autorita si poté vytvoří vlastní klíče níže popsaných postupem.

Vytvoření páru klíčů a žádosti o certifikaci

Uživatel, který chce používat digitální podpisy, si nejprve musí vytvořit pár klíčů a nechat si je certifikovat. Postupuje takto:

  1. Přihlásí se do databáze, na řídicím panelu vybere sebe sama v seznamu uživatelů a stiskne tlačítko Modifikovat.
  2. Na stránce Popis uživatele zkontroluje a doplní osobní údaje, které jsou v organizaci pro certifikaci vyžadovány.
  3. Na stránce Certifikáty spustí stiskem tlačítka Vytvořit certifikačního průvodce
  4. Na první stránce průvodce uživatel zvolí účel, kterému budou jeho klíče sloužit:
    • Běžný uživatel zvolí první variantu, tedy klíče pro podepisování dokumentů.
    • Uživatel, který bude vykonávat funkci podřízené certifikační autority může zvolit druhou variantu a vytvořit si klíče, kterými bude moci certifikovat identitu uživatelů.
    • Uživatel, který je vrcholovou certifikační autoritou, volí třetí variantu.
  5. Na druhé stránce uživatel napíše náhodný text. Po jeho zadání se vygenerují nové klíče
  6. Na poslední stránce uživatel zadá umístění a jméno souboru pro uložení tajného klíče a heslo, který bude tajný klíč chráněn.

Tímto postupem vznikne soukromý klíč a žádost o certifikaci obsahující veřejný klíč. Soukromý klíč zašifrovaný heslem je uložen do souboru (typicky na disketu). Do databáze se uloží žádost o certifikaci.

Výjimkou je generování klíče pro vrcholovou certifikační autoritu. Vrcholová certifikační autorita totiž automaticky ocertifikuje sebe sama, takže již nepotřebuje nikoho žádat o certifikaci a má rovnou k dispozici platný certifikát v databázi.

Certifikace klíče uživatele

Certifikace je proces, během nějž certifikační autorita zpracuje žádost o certifikaci a vyrobí certifikát. Veřejný klíč žádajícího uživatele bude spojen s údaji o uživateli a uložen v certifikátu v databázi.

Certifikační autorita postupuje takto:

  1. Přihlásí se do databáze a tlačítkem Modifikovat otevře záznam o uživateli, který žádá o certifikaci.
  2. Na stránce Certifikáty vybere řádek obsahující žádost o certifikaci a stiskne tlačítko Certifikovat.
  3. Ověří, zda zobrazené údaje o uživateli odpovídají skutečnosti
  4. Zkontroluje typ klíče - klíč dovolující certifikovat jiné uživatele připustí pouze tehdy, pokud žádající uživatel se má stát podřízenou certifikační autoritou.
  5. Nastaví dobu platnosti certifikátu.
  6. Stiskem tlačítka Ověřeno, certifikuji vystaví certifikát. Přitom musí použít svůj tajný klíč: vybrat soubor, v němž je uložen a zadat heslo.

Nový certifikát je uložen do databáze a může být používán. Jeho platnost skončí buď vypršením doby, pro kterou byl vystaven, nebo předčasným odvoláním.

Odvolání certifikátu

Pokud dojde ke ztrátě nebo zcizení tajného klíče nebo k vyzrazení hesla k tajnému klíči, pak majitel klíče musí neprodleně požádat o odvolání svého certifikátu, aby tak zabránil jeho zneužití.

Odvolání certifikátu může provést pouze ta certifikační autorita, která certifikát vystavila.

Při odvolání se platnost certifikátu předčasně ukončí tím okamžikem, v němž je odvolání provedeno. Certifikát nelze odvolat zpětně, protože by pak mohly vzniknout pochybnosti o původu digitálních podpisů vytvořených v době, kdy certifikát ještě odvolán nebyl.

Odvolaný certifikát nadále zůstává v databázi certifikátů a využívá se k prověřování platnosti digitálních podpisů vzniklých před jeho odvoláním. Nelze jej však využít k vytváření nových podpisů.

Odvolání se provádí takto:

  1. Certifikační autorita, která vystavila certifikát, se přihlásí do databáze.
  2. Otevře se okno s certifikáty toho uživatele, který žádá o odvolání svého certifikátu.
  3. V seznamu se označí odvolávaný certifikát a stiskne se tlačítko Zneplatnit.
Odvoláním se změní datum konce platnosti certifikátu uvedené v seznamu certifikátů.


Použití digitálních podpisů v databázových aplikacích

Co lze podepisovat?

V 602SQL lze digitálně podepsat obsah záznamu v databázové tabulce. Podepsat lze buď záznam jako celek anebo pouze jistý počet sloupců od začátku záznamu.

Digitální podpis je zvláštním typem databázového sloupce a vkládá se tudíž do návrhu tabulky. Podepisuje hodnotu těch sloupců, které jsou v návrhu tabulky před ním. Pokud tedy má podpis sloužit k podepsání celého obsahu záznamu, vloží se do návrhu tabulky jako poslední sloupec.

Do návrhu tabulky vložit více sloupců typu Podpis. Každý z nich pak podepisuje hodnoty sloupců od prvního až po místo, kde se nachází. Tento způsob podepisování se hodí v dokumentech, které se skládají z více polí, jsou postupně vyplňovány různými uživateli a postupně podepisovány.

Jak lze podepisovat a kontrolovat podpisy?

Podpisy se vytvářejí a kontrolují prostřednictvím formulářů obsahujících složku typu Podpis svázanou se sloupcem typu Podpis. Tato složka obsahuje údaje osobě, která záznam podepsala, stav podpisu a až tři ovládací tlačítka:

  • Podepsat - umožní podepsat dokument;
  • Prověřit - zjistí a zobrazí aktuální stav podpisu;
  • Vymazat - smaže podpis.

Do návrhu formuláře nebo sestavy lze vložit také hodnotovou složku svázanou se sloupcem typu Podpis. Obsahem této složky je jméno osoby, která záznam podepsala, a v závorce stav podpisu. Tato složka neumožňuje provádět žádnou z výše uvedených akcí. Využije se kromě sestav i ve standardních formulářích.

Složka Podpis může mít specifikovanou podmínku aktivity. Tato podmínka pak určuje, zda lze v této složce podpis vytvořit. Dříve vytvořený podpis lze prověřovat i tehdy, když podmínka aktivity není splněná.

Podepsat nebo vymazat podpis může pouze ten uživatel, který má ke sloupci typu Podpis právo přepisu.

Jak uživatelé podepisují data?

Uživatel může podepisovat dokumenty poté, co si vytvořil pár klíčů a nechal si je certifikovat. Anonymní uživatel podepisovat nemůže.

Uživatel podepíše obsah dokumentu ve formuláři obsahujícím složku typu Podpis tak, že:

  1. vloží do počítače disketu se svým soukromým klíčem;
  2. ve složce Podpis stiskne tlačítko Podepsat a tím otevře dialogové okno pro výběr souboru;
  3. vybere soubor obsahující jeho aktuální soukromý klíč;
  4. vyplní heslo, kterým je klíč chráněn.

Heslo chránící klíč je to, které uživatel zadal při generování páru klíčů. Jeho účelem je zabránit zneužití odcizeného klíče. Nemá nic společného s heslem zadávaným při přihlašování se na server 602SQL.

Uživatel může v dialogovém okně také zatrhnout požadavek na ponechání klíče v paměti počítače. Pokud je klíč ponechán v paměti, pak při příštím podepisování již nebude nutno vkládat disketu, vybírat soubor ani zadávat heslo, a dokument se podepíše jedním stiskem tlačítka. Heslo zůstane v paměti až do odhlášení se uživatele (nebo ukončení programu).

Při podepisování a certifikování se soukromý klíč hledá primárně v adresáři A:\. Pokud chcete tento adresář změnit, můžete specifikovat jiný adresář v souboru WINBASE.INI umístěném v hlavním adresáři Windows, v sekci Keys v položce KeyDir, například takto:

[Keys]
KeyDir=B:\

Stavy digitálního podpisu

Digitální podpis na záznamu se vždy nachází v jednom z osmi stavů:

  • Není podepsáno - záznam buď dosud nebyl podepsán nebo podpis byl vymazán;
  • Falešný podpis - podpis byl buď padělán nebo podepsaná zpráva byla nestandardním způsobem pozměněna (například editací databázového souboru);
  • Změněno po podpisu - některý sloupec záznamu, nacházející se v návrhu tabulky před podpisem, byl korektní cestou přepsán po podepsání záznamu;
  • Nelze ověřit, neznám uživatele - dokument nese podpis uživatele, který není na tomto serveru znám, proto nelze ověřit, zda je podpis pravý a zda dokument nebyl po podepsání pozměněn;
  • Platný podpis, neověřena identita - podpis je platný, ale není ověřeno, že uživatel, který záznam podepsal, je skutečně tím, za koho se vydává - nemá platné certifikáty identity;
  • Dokument podepsán po zneplatnění certifikátu - podpis byl vytvořen poté, co již skončila platnost certifikátu ověřujícího identitu podepisující osoby. Pravděpodobně došlo k falešnému podepsání dokumentu pomocí odcizeného soukromého klíče.
  • Identita ověřena nikoli CA - podpis byl vytvořen uživatelem, jehož identitu uvěřuje jiný uživatel, který k tomu není oprávněn. Výsledek je stejný, jako kdyby identita uživatele nebyla ověřena.
  • Platný podpis - podpis je platný a uživatel, který jej vytvořil, má platný certifikát identity.

Nejdůležitější jsou první a poslední stav. Všechny ostatní sdělují, že s podpisem není něco v pořádku.

Prověřování digitálního podpisu

Aktuální stav digitálního podpisu se ukáže až po stisku tlačítka Prověřit. Stav, zobrazovaný před stiskem tohoto tlačítka nemusí být platný.

Při prověřování digitálního podpisu systém postupuje od podpisu v dokumentu, přes podpis v certifikátu identity podepsavšího uživatele, přes podpisy jeho certifikačních autorit a podpisy v jejich certifikátech, až k vrcholové certifikační autoritě. Žádný článek tohoto řetězu nesmí chybět, jinak se platnost podpisu nedá kladně prověřit.

Stisknete-li tlačítko Prověřit spolu s klávesou Shift, otevře se na obrazovce okno obsahující posloupnost jmen certifikačních autorit ověřujících identitu podepsavšího uživatele. Seznam začíná údaji o uživateli a končí údaji o vrcholové certifikační autoritě.


Použití klíčů z verzí 602SQL před verzí 8.0

Při přenosu databázových aplikací z verzí 602SQL předcházejících verzi 8.0 je žádoucí přenést i staré klíče a podpisy v dokumentech. Postupujte takto:

  1. Ve starší databázi proveďte Export všech uživatelů, skupin a klíčů.
  2. Po vytvoření nového databázového souboru proveďte Import všech uživatelů, skupin a klíčů. Pokud přitom chcete zachovat stará uživatelská hesla, musíte zajistit shodu identifikací starého a nového serveru.
  3. Na novém serveru nastavte jako vrcholovou certifikační autoritu toho uživatele, který jí byl na starém serveru.

Poté lze používat staré digitální podpisy a klíče:

  1. Staré digitální podpisy v přenesených dokumentech jsou vidět a obsahují platné údaje o uživateli, který je vytvořil.
  2. Lze prověřovat platnost starých digitálních podpisů.
  3. Lze vytvářet nové digitální podpisy pomocí starých klíčů a prověřovat jejich platnost.

Při vystavování nových certifikátů je nutno používat pouze nové certifikáty. Proto je třeba napřed vytvořit certifikát vrcholové CA, pak certifikáty případných podřízených CA a pak lze certifikovat uživatele.

Poté, co je uživateli vystaven nový certifikát, je mu při podepisování dokumentů dávána přednost před případným starým certifikátem. Při podepisování je pak také nutno použít nový soukromý klíč. Dialog pro výběr souboru se soukromým klíčem se pro nové a staré klíče mírně liší, aby uživatel byl upozorněn na změnu.


Sbírka dotazů

602SQL-Úplná dokumentace

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 | INT | číslo firmy; primární klíč
NAZEV | CHAR(40) | název firmy
MĚSTO | CHAR (20) | sídelní město
ULICE | CHAR (20) | ulice a číslo
STAT | CHAR (4) | zkratka státu (CR nebo SR)
PSC | CHAR (6) | směrovací číslo
STATUS | CHAR | O = odběratelé; D = dodavatelé
DAT_ZAPISU | DATE | datum zavedení do tabulky
PRACOVNÍK | CHAR (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 | SMALLINT | číslo faktury; primární klíč
DAT1 | DATE | datum vystavení nebo příchodu
DRUH | SMALLINT | 1 = došlé; 2 = odeslané
FIRMA | INT | číslo firmy z tabulky firem (cizí klíč)
CASTKA | NUMERIC(14,2) | kolik peněz
ZAPLACENO | DATE | datum zaplacení

Seznam subsekcí:

  • Strana 2 (ORDER BY, WHERE)
  • Strana 3 (JOIN, COUNT, GROUP BY)
  • Strana 4 (HAVING, AVG(výraz))
  • Strana 5 (Self-join, DISTINCT)
  • Strana 6 (IS NULL, SELECT výraz)
  • Strana 7 (EXTRACT, OUTER JOIN)
  • Strana 8 (IN, BETWEEN, subdotaz)
  • Strana 9 (subdotaz)
  • Strana 10 (subdotaz x JOIN)
  • Strana 11 (SELECT subdotaz, COUNT DISTINCT)
  • Strana 12 (UNION)
  • Strana 13 (UNION, subdotaz)
  • Strana 14 (INTERSECT, EXCEPT)
  • Strana 15 (CASE v SELECT)


Sbírka dotazů str. 2

602SQL-Úplná dokumentace

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ámky:

a) Povšimněte si, je možné zapisovat 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 našem případě je možné dotaz zapsa i jako:

    SELECT nazev
    FROM Firmy
    ORDER BY nazev

b) v části ORDER BY se mohou použít jen sloupce použité v části SELECT

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

602SQL-Úplná dokumentace

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

602SQL-Úplná dokumentace

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

602SQL-Úplná dokumentace

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

602SQL-Úplná dokumentace

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

602SQL-Úplná dokumentace

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) Zajímavě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

602SQL-Úplná dokumentace

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. 602SQL 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 602SQL do verze 5).


Sbírka dotazů str. 9

602SQL-Úplná dokumentace

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 602SQL používaného operátoru .= (řetězec začíná ...). Predikát LIKE je mnohem obecnější

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

602SQL-Úplná dokumentace

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) AS suma
    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.

d) obdobný výsledek lze získat také s využitím subdotazu ve FROM:

    SELECT nazev, suma
    FROM Firmy A JOIN (SELECT firma,SUM(castka) AS suma
                       FROM Faktury B
                       GROUP BY B.firma)
               ON (A.cislo=B.firma)
    WHERE 10000 < suma


Sbírka dotazů str. 11

602SQL-Úplná dokumentace

Sbírka dotazů – str. 11

Příklad 19

Zadání: Vypište názvy firem (a případně částku), které mají alespoň jednu fakturu 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, castka
    FROM Faktury
    WHERE castka > 5000

Poznámky:

a) Sloupec Nazev odpovědi není samozřejmě editovatelný.

b) Stejného výsledku (s možností editace odpovědi ale bez částky) 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, Faktury.castka
    FROM Faktury,Firmy
    WHERE (castka > 5000)
      AND (Firmy.cislo=Faktury.firma)

d) Stejného výsledku lze dosáhnout také takto:

    SELECT DISTINCT Firmy.nazev, Faktury.castka
    FROM Firmy, (SELECT firma,castka
                 FROM Faktury
                 WHERE castka > 5000)
    WHERE Faktury.firma=Firmy.cislo

e) I když dávají dotazy stejné výsledky, počítají se různými způsoby a jejich vyhodnocení trvá různě dlouho.

f) 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

602SQL-Úplná dokumentace

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 602SQL 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.

c) Použitím UNION (bez ALL) říkáte, že každý záznam bude ve výsledku nejvýše jednou (duplicity budou vyloučeny).

d) Není-li třeba zajistit, aby ve výsledku byl každý záznam jen jednou (jako v tomto případě), použijte klauzulu UNION ALL, která výrazně zrychlí vyhodnocení. Mají-li však obě části UNIONu neprázdný průnik, je třeba použití ALL zvažovat - např. pro výpis je vhodná unikátnost záznamů, ale je-li tento dotaz např. zdrojem pro další databázovou operaci, může být rychlejší sestavit dotaz s duplicitami a pro ně provést operaci dvakrát než vyhodnocovat unikátnost.


Sbírka dotazů str. 13

602SQL-Úplná dokumentace

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

602SQL-Úplná dokumentace

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

602SQL-Úplná dokumentace

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í.


Provoz SQL serveru

Seznam subsekcí:

  • Provoz SQL serveru pod Windows
  • Provoz SQL serveru pod Linuxem
  • Paměové parametry serveru
  • Rozlišení platforem serveru


Bezpečnost databáze

Seznam subsekcí:

  • Principy zabezpečení systému
  • Postupy při záchraně poškozené databáze
  • Administrování SQL serveru
  • Nastavení bezpečnostní politiky databáze
  • Zabezpečení databáze proti útokům


Jazyk SQL

Seznam subsekcí:

  • Jazyk SQL v 602SQL
  • Způsoby použití SQL ve 602SQL
  • Lexikální elementy
  • Datové typy
  • Databázové tabulky
  • Práva a subjekty práva v SQL
  • Funkce
  • Výrazy
  • Podmínky a predikáty
  • Dotazy
  • SQL příkazy
  • Deklarace objektů v SQL
  • Řídící příkazy
  • Rutiny uložené na serveru
  • Triggery
  • Sekvence
  • Kurzory v SQL
  • Transakce a body návratu
  • Chyby a výjimky
  • Systémové objekty


Práva a subjekty práva v SQL

Seznam subsekcí:

  • Práva a subjekty práva v SQL
  • Zjišování práv v jazyce SQL


Podmínky a predikáty

Seznam subsekcí:

  • Podmínka
  • Zobecněné porovnávání
  • Predikát BETWEEN
  • Predikát IN
  • Predikát EXISTS
  • Predikát UNIQUE
  • Predikát LIKE
  • Predikát IS NULL
  • Predikát Fulltext
  • Predikáty has_..._privil


Aplikace

Seznam subsekcí:

  • Startovní objekt aplikace
  • Vícejazyčné aplikace
  • Sdílení datové základny nebo uživ. rozhraní


Prostředí návrháře pohledů

Seznam subsekcí:

  • Okno Seznam vlastností
  • Okno Nabídkový panel
  • Návrh lišty
  • Šablony pohledů


Návrh funkčnosti formulářů

Seznam subsekcí:

  • Barvy ve formuláří
  • Fonty ve formuláři
  • Maska složky
  • Čtení dat do formuláře a ukládání změn
  • Vkládání záznamů
  • Rušení záznamů
  • Přecházení po záznamech a výběr záznamu
  • Provádění akcí vztahujících se k formuláři
  • Přehled a detail při listování v datech
  • Úprava a selekce dat, setřídění záznamů
  • Vybírání (označování) více záznamů
  • Relačně propojené formuláře
  • Relačně propojené tabulky
  • Ukazatele a přivazování záznamů
  • Speciální údaje v pohledu


Ostatní

Seznam subsekcí:

  • Číselník chyb
  • Seznam varování
  • Chyby při překladu
  • Běhové chyby
  • Tabulky a kurzory jako parametry procedur a funkcí
  • Předdeklarované konstanty
  • Čtení a zápis dat
  • Práce s multiatributy
  • Systémové tabulky - použití


Debugger

Seznam subsekcí:

  • Ladění programů v klientském jazyce
  • Ladění procedur uložených na serveru a triggerů
  • Ovládání debuggeru


Vnitřní jazyk

Seznam subsekcí:

  • Přehled funkcí podle abecedy
  • Přehled funkcí podle významu


Externí jazyky

Seznam subsekcí:

  • Přehled funkcí podle abecedy
  • Přehled funkcí podle významu


Instalace 602SQL a šíření aplikací

Seznam subsekcí:

  • Parametry příkazové řádky klienta
  • Instalace 602SQL na Windows
  • Instalace 602SQL na Linuxu
  • Šíření aplikací


Tvorba dynamických WWW stránek

Seznam subsekcí:

  • 602SQL Internet Klienti - WBIK
  • Komponenty aplikace
  • Seznam chybových stavů WBIK
  • Konfigurace


Komponenty aplikace

Seznam subsekcí:

  • HTML formuláře
  • WBC konektory
  • HTW šablony
  • WBS selektory
  • Výrazy v konektorech a šablonách
  • Specifické způsoby práce


HTML formuláře

Seznam subsekcí:

  • Vstupní formuláře
  • Statický a dynamický formulář
  • Vstupní prvky formuláře
  • Akce formuláře


WBC konektory

Seznam subsekcí:

  • WBC konektory
  • Komentáře ve WBC konektorech
  • Příkazy WBC preprocesoru
  • Příkazy konektoru


Příkazy konektoru

Seznam subsekcí:

  • Content-type
  • DeclareVariable
  • Error
  • ErrorTemplate
  • GetVariable
  • HTTPHeader
  • IgnoreBlanks
  • ImportFile
  • Location
  • MaxRecords
  • Program
  • ReguiredValues
  • Relogin
  • RunProgram
  • Seznam funkcí pro RunProgram
  • SelectLanguage
  • SendDiskFile
  • SendFile
  • Set-cookie
  • SetVariable
  • SQLStatement
  • Template


Seznam funkcí pro RunProgram

Seznam subsekcí:

  • SendToWeb
  • SetSTWError
  • GetValue
  • GetValueCount
  • GetVarCount
  • GetVar
  • GetVarValue
  • SetUserError


HTW šablony

Seznam subsekcí:

  • HTW šablony
  • Speciální příkazy
  • Chybové šablony


Speciální příkazy

Seznam subsekcí:

  • Citace výrazu
  • Include
  • Detail sekce
  • Příkaz if
  • Cyklus for


Chybové šablony

Seznam subsekcí:

  • Chybové šablony
  • Generování HTML podle chybové šablony
  • Seznam chybových proměnných


WBS selektory

Seznam subsekcí:

  • WBS selektory


Výrazy v konektorech a šablonách

Seznam subsekcí:

  • Pravidla pro konstrukci výrazu
  • Proměnné ve výrazu
  • Konstanty ve výrazu
  • Operátory ve výrazu
  • Operátor EXISTS ve výrazu
  • Funkce ve výrazu
  • Systémové proměnné ve výrazu


Specifické způsoby práce

Seznam subsekcí:

  • Práce s COOKIES
  • Práce se soubory pomocí WBIK


Práce s COOKIES

Seznam subsekcí:

  • Práce s COOKIES


Práce se soubory pomocí WBIK

Seznam subsekcí:

  • Práce se soubory pomocí WBIK
  • Ukládání souborů do databáze
  • Odesílání souborů browseru


Seznam chybových stavů WBIK

Seznam subsekcí:

  • Seznam chyb


Doplňky

Seznam subsekcí:

  • Slovníček pojmů
  • Spolupráce s elektronickou poštou
  • Digitální podpisy
  • Sbírka příkladů SQL dotazů


Volba aplikace na příkazové řádce

Na příkazové řádce ikony (zástupce) klienta (programu 602CLI8.EXE) 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.

Obsahují-li názvy serveru, aplikace či objektu mezery či jiné znaky než základní, uzavřete tyto názvy do uvozovek.

Příklad: otevření aplikace

    C:\602SQL\602CLI8.EXE &"SERVER KNIHY" KNIHOVNA

Příklad: spuštění aplikace se startovním objektem

    C:\602SQL\602CLI.EXE &"SERVER KNIHY" KNIHOVNA /S

Příklad: spuštění aplikace jiným objektem než startovním

    C:\602SQL\602CLI8.EXE &"SERVER KNIHY" KNIHOVNA /S"PROHLIZENI KNIH"

Nejrychlejší cestou, jak vytvořit ikonu spouštějící přímo aplikaci 602SQL, je přetažení objektu, který se má spustit, z řídicího panelu na plochu Windows. Ikona se vytvoří automaticky.

Viz také

* Parametry příkazové řádky klienta

* Parametry příkazové řádky serveru


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


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:\602SQL\602CLI8.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


Parametry serveru na příkazové řádce

Parametry příkazové řádky SQL serveru

Programu 602SQL8.EXE lze na příkazové řádce ikony předat některé parametry. Jsou to:

&jméno databáze - server bude pracovat se zadanou databází

/N - program se spustí v síťovém režimu, tedy klienti se mohou připojovat ze stanic v síti

/Q - server nebude spouštět systémové triggery

Žádný parametr není povinný. Při spuštění serveru bez parametrů se nabídne dialog s výběrem 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


Systémové proměnné wb_xx (WBIK)

Systémové proměnné wb_client, wb_database, wb_application, wb_url

Hodnoty těchto proměnných nejsou definovány na úvodní (statické HTML) stránce aplikace, tedy dokud nebyl zpracován první konektor.

wb_client

Tato proměnná byla zavedena proto, aby bylo možno psát WWW objekty, které lze bez úpravy použít ve všech korektních instalacích 602SQL Internet Klienta. Tato proměnná se používá v těch částech HTW šablony, ve kterých by se jinak uvádělo /cgi-bin/602cgi8.exe. Typicky tedy místo

<form action="/cgi-bin/602cgi8.exe/moje_db/aplikace/muj_konektor.wbc?param=hodnota">

bychom mohli použít (ale asi nebudeme, protože existuje lepší možnost – viz popis proměnné wb_url na této stránce)

<form action="<%wb_client%>/moje_db/aplikace/muj_konektor.wbc?param=hodnota">

Při zpracování šablony bude tato proměnná rozvinuta do dříve používaného zápisu. Pokud ve webserveru asociujete přípony *.WBS, *.WBC a *.HTW s některým z Internet klientů (např. ISAPI klient a MS IIS), pak to Internet klient pozná a bude správně nastavovat hodnotu proměnné wb_client na prázdný řetězec.

wb_database a wb_application

Tyto proměnné obsahují název databáze a název aplikace, se kterou WBIK pracuje (tj. ty, údaje, které byly uvedeny v URL, kterým byl WBIK spuštěn). Hodnoty těchto proměnných jsou upraveny pro vložení do URL, takže znaky, které nesmějí být v URL, jsou zde nahrazeny tzv. escape sekvencí; např. mezera je nahrazena sekvencí %20.

wb_url

Tato proměnná obsahuje údaj
<%wb_client%>/<%wb_database%>/<%wb_application%>
a je připravena pro vložení do URL (opět jsou zde nahrazeny znaky nepovolené v URL escape sekvencemi).

Její typické použití je následující:
<FORM ACTION="<%wb_url%>/konektor.wbc">
nebo
<A HREF="<%wb_url%>/šablona.htw">

Tímto zápisem lze totiž zajistit, aby zůstaly šablony stejné i v případě, že danou aplikaci uživatel naimportuje do jiné databáze, případně pod jiným jménem. Tehdy stačí pouze změnit název databáze a název aplikace v úvodním vstupním URL (který je v některé statické HTML stránce) a veškeré šablony, konektory a selektory zůstávají stejné.

Doporučujeme odkazovat na jiné WWW objekty tímto způsobem.


Hodnota sloupce ve výrazech (WBIK)

Formát:

sloupec

nebo

název_SELECT_příkazu.sloupec

nebo

název_SELECT_příkazu[číslo_záznamu].sloupec

Význam:

Při zpracování výrazu bude příkaz název_SELECT_příkazu[číslo_záznamu].sloupec nahrazen hodnotou sloupce ze záznamu číslo číslo_záznamu (číslováno od 0) odpovědi na SQL příkaz SELECT pojmenovaného název_SELECT_příkazu. Název_SELECT_příkazu je jméno, kterým je pojmenován daný SELECT v odpovídajícím WBC konektoru v bloku SQLStatement. Pokud daný sloupec neexistuje, bude vygenerována příslušná chyba při běhu Internet klienta.

Výraz název_SELECT_příkazu[0].sloupec je ekvivalentní výrazu název_SELECT_příkazu.sloupec.

Takto zapsané výrazy lze použít i v konektorech.

Pokud je třeba v šabloně citovat hodnoty sloupce odpovědi na SELECT (asi nejčastější případ použití WBK), v příslušné detail sekci šablony použijte pouze výraz sloupec. Pokud byste zde (chybně) použili prefix název_SELECT_příkazu, vypsala by se pouze hodnota sloupce z prvního záznamu daného SELECTu.

Ve výrazu sloupec použitého uvnitř vnořené detail sekce je možné se odkazovat i na sloupce z vnější detail sekce - případné stejné názvy sloupců je nutné rozlišit již v konektoru - pomocí klauzule AS v jednom ze SELECTů.

Příklad v šabloně:

Nechť je ve WBC konektoru SQLStatement se dvěma SELECTy - první má jediný záznam v odpovědi, druhý několik:

SQLStatement: KolikHlasovalo
+ SELECT Count(ipadr) AS kolik
+ FROM Anketa
SQLStatement: SeznamHlasujicich
+ SELECT jmeno, prijmeni
+ FROM Anketa
+ ORDER BY prijmeni, jmeno

V šabloně HTW lze pak výsledek zobrazit takto:

<B>V anketě hlasovalo dosud <%KolikHlasovalo.kolik%> voličů </B>
<P>
<B>Seznam hlasujících:</B>
<TABLE>
<TR><TD>jméno</TD><TD>příjmení</TD></TR>
<%begindetail SeznamHlasujicich%>
<TR><TD><%jmeno%></TD><TD><%prijmeni%></TD></TR>
<%enddetail%>
</TABLE>

Příklad v konektoru:

<%WBC%>
DeclareVariable: logged:Boolean := FALSE
DeclareVariable: id_ob:Integer := -2

SQLStatement: login
+ SELECT logname AS name,logpsw AS psw, id_obchodnika,role,prijmeni,jmeno
+ FROM obchodnici
+ WHERE logname="%name%" AND logpsw="%psw%"
EndSQL
#if exists Login.name
SetVariable: logged :=TRUE
#if Login[0].role="správce"
SetVariable: id_ob := -1
#else
SetVariable: id_ob := Login[0].id_obchodnika
#endif
#endif
<%/WBC%>


Asociace přípon WBC, HTW a WBS v MS IIS

Asociace přípon s 602ISAP.DLL (MS IIS)

Postup asociace s 602 ISAPI klientem:

1. V Microsoft Management Console si zobrazíme vlastnosti (properties) webserveru, ve kterém chceme asociaci provést. V dialogu vybereme záložku Home Directory a stiskneme tlačítko Configuration. Zobrazí se dialog Application Configuration, v něm vybereme záložku App Mappings.

2. V tomto dialogu postupně přidáme asociace pro přípony *.wbs, *.wbc a *.htw. Vždy pro každou příponu stiskneme tlačítko Add a v dialogu Add/Edit Application Extension Mapping jako Executable zvolíme soubor 602isap8.dll. Dále jako Extension zadáme řetězec ".wbs" (bez uvozovek), při dalším přidávání ".wbc" a při posledním přidávání ".htw". Editační řádek Method exclusions ponecháme prázdný. Zaškrtneme přepínač Script engine a přepínač Check that file exists ponecháme nezaškrtnutý. Stiskem OK se vytvoří požadovaná asociace.

3. Stiskem OK postupně zavřeme všechny otevřené dialogy.

Po vytvoření asociací musíme změnit vstupní URL do našich internetových aplikací, a to následujícím způsobem:

původně:

http://www.server.cz/cgi-bin/602isap8.dll/databaze/aplikace/muj_konektor.wbc?parametry

po změně:

http://www.server.cz/databaze/aplikace/muj_konektor.wbc?parametry

V šablonách v tagu <A HREF> a v tagu <FORM ACTION> je třeba důsledně používat citaci proměnné wb_url.

<FORM ACTION = "<%wb_url%>/jiny_konektor.wbc">

Asociovaný Internet klient pozná, že je spuštěn přes asociaci, a nastaví hodnotu proměnné wb_url správně.

Další konfigurace MS IIS

Při 602SQL serveru s Microsoft Internet Information Serverem na Windows NT/2000/XP dochází ke znatelnému zpomalení odezvy 602SQL v okamžiku, kdy MSIIS běží jako služba (service) a 602SQL je spuštěn ručně, jako tzv. task. V tomto případě je nutné spustit 602SQL také jako service.

Při instalaci 602ISAP8 k Microsoft Internet Information Serveru je třeba po přidání adresáře s 602SQL do PATH provést restart počítače, jinak bude MIIS při pokusu o spuštění 602ISAP8 zobrazovat chybové hlášení: CGI application has misbehaved by not returning complete set of HTTP headers"!

Dále je třeba dát standardnímu uživateli IUSR_compname právo číst a spouštět skripty ve virtuálním adresáři /cgi-bin a právo číst pomocné knihovny 602SQL z adresáře, kde jsou nainstalované.


Proměnné detail sekce (WBIK)

Formát:

proměnná

Význam:

Používá se k získání hodnoty proměnné svázané s konkrétní detail sekcí nebo přímo s blokem SQLStatement s příkazem SELECT.

Viz také systémové proměnné

název proměnné | typ | význam a vlastnosti proměnné
CurrentRecord | Integer | - uvnitř detail sekce (bez názvu detail sekce) znamená aktuální zpracovávaný záznam (číslováno od 1) - viz příklad níže - vně detail sekce, pouze se jménem SELECT příkazu název_příkazu_SELECT.CurrentRecord a znamená počet přečtených záznamů v příkazu SELECT; pokud bylo přečteno pouze několik záznamů (pomocí výčtu záznamů v hlavičce bloku SQLStatement), udává, kolik záznamů bylo skutečně přečteno – tato hodnota je shodná s údajem název_příkazu_SELECT#
TotalCount | Integer | - vztahuje se k určitému SELECT příkazu název_příkazu_SELECT.TotalCount - udává počet záznamů, který by SELECT obsahoval, pokud by nebyl uplatněn výčet záznamů
Offset | Integer | - vztahuje se k určitému SELECT příkazu název_příkazu_SELECT.Offset - obsahuje pořadové číslo prvního záznamu v SELECTU vzhledem ke všem záznamům, které by SELECT obsahoval, pokud by nebyl uplatněn výčet záznamů (Offset je roven hodnotě číslo_prvního_záznamu z hlavičky bloku SQLStatement; záznamy jsou číslovány od 0 do název_příkazu_SELECT.TotalCount-1)

Poznámka

Pokud není uplatněn výčet záznamů (v hlavičce bloku SQLStatement s příkazem SELECT není zadáno omezení), platí

název_příkazu_SELECT.Offset = 0

a

název_příkazu_SELECT.TotalCount = název_příkazu_SELECT.CurrentRecord

Vždy platí:

název_příkazu_SELECT.Offset + název_příkazu_SELECT.CurrentRecord = název_příkazu_SELECT.TotalCount

Příklad:

Složitější HTML tabulka dynamicky naplněná daty z příkazu vstup; první z generovaných přepínačů (INPUT TYPE="RADIO") má být zatržen - použijeme podmínku CurrentRecord=1, která je splněna pouze na prvním záznamu

<TABLE ALIGN=RIGHT WIDTH=50%>
<TR ALIGN=CENTER><TH COLSPAN=2>ANKETA</TH></TR>
<TR>
<TD ALIGN=CENTER ROWSPAN=<%KolikVoleb.KolikV%> WIDTH=50%>Popis týkající se všech řádků </TD>
<%begindetail vstup%>
<TD ALIGN=LEFT WIDTH=50%><INPUT TYPE="RADIO" NAME="hodnota" <%if CurrentRecord=1%> CHECKED <%endif%> VALUE="<%Volba%>"> <%Popis%> </TD>
</TR>
<%enddetail%>
</TABLE>


# (počet hodnot) ve výrazech (WBIK)

Výsledek operátoru # je vždy typu Integer.

Formát (pro proměnnou):

proměnná#

Význam:

Pomocný operátor # (mříž) se používá k zjištění počtu hodnot vstupní proměnné přečtených z formuláře do konektoru a šablony.

Formát (pro SELECT):

název_SELECT_příkazu#

Význam:

Pomocný operátor # (mříž) se používá k zjištění počtu záznamů, které obsahuje SELECT název_SELECT_příkazu. Tato hodnota je totožná s název_SELECT_příkazu.CurrentRecord.

Formát (pro multiatribut):

název_SELECT_příkazu.multiatribut#

nebo

multiatribut#

Význam:

Pomocný operátor # (mříž) se používá ke zjištění počtu hodnot multiatributu. V rámci přenositelnosti mezi SQL servery doporučujeme multiatributy v serverových aplikacích nepoužívat.

Při zpracování HTW šablony bude příkaz název_SELECT_příkazu.multiatribut# nahrazen počtem hodnot multiatributu z prvního záznamu odpovědi na SQL příkaz SELECT pojmenovaného název_SELECT_příkazu. Název_SELECT_příkazu je jméno, kterým je pojmenován daný SELECT v odpovídajícím WBC konektoru v bloku SQLStatement.

Pokud je třeba citovat počet hodnot multiatributu odpovědi na SQL příkaz SELECT, v příslušné detail sekci šablony použijte pouze výraz multiatribut#.

Poznámka:

Pokud obsahuje název multiatributu mezery (a musí se tedy psát v obrácených apostrofech), počet jeho hodnot zjistíme pomocí zápisu`multiatribut`# );


Funkce v proceduře RunPogram (WBIK)

Funkce v RunProgram (WBIK)

Speciální funkce, které lze použít pouze v proceduře RunProgram:

SendToWeb

SetSTWError

GetValue

GetValueCount

GetVarCount

GetVar

GetVarValue

SetUserError (lze použít i mimo RunProgram, tzn. v bloku Program)

Zde deklarované funkce jsou definované v 602INET8.DLL. Mají umožnit generovat dynamické HTML stránky pomocí programu ve vnitřním programovacím jazyku 602SQL.

Funkce SendToWeb a SetSTWError přímo generují HTML stránku, resp. ovlivňují výsledek generování.

Ostatní funkce zpřístupňují seznam vstupních proměnných, které byly přijaty od webserveru (typicky seznam proměnných formuláře).

Generování chyb

Při provádění těchto funkcí se chyby negenerují, pouze daná funkce vrátí chybovou hodnotu (typicky FALSE). Generování chyb musí zajistit autor programu ve 602SQL, pomocí kterého se generuje HTML stránka. Toto zajistí zavoláním funkce SetSTWError, kterou nastaví text chybového hlášení, které bude vygenerováno. Bude použit poslední text, který byl nastaven funkcí SetSTWError. Po ukončení programu, který nastavil text chybového hlášení, internetový klient 602SQL (CGI, ISAPI, FastCGI) vygeneruje chybu č. 83 "Chyba při běhu programu v bloku Run" a jako text chyby nastaví poslední text, který byl nastaven voláním funkce SetSTWError.


FastCGI klient od verze 7.0.2

FastCGI klient verze 7.0.2

Je napsán s využitím knihovny FastCGI verze 2.0 (je třeba použít novou verzi knihovny libfcgi.dll!) a je napsán tak, že provádí požadavky v samostatných vláknech.

Při startu FastCGI klient vytvoří worker thread pool (bank, resp. fond pracovních vláken), kterým je určen maximální počet souběžných požadavků, které je FastCGI klient schopen vyřídit (ostatní požadavky čekají na ukončení některého zpracovávaného požadavku). Při přijetí požadavku je z poolu vybráno vlákno, které momentálně neprovádí žádný požadavek, a požadavek je tomuto vláknu přidělen. Vlákno jej provede a vrátí se do poolu, aby mohlo být přiděleno další příchozímu požadavku. FastCGI klient při startu také vytvoří vlákno, které čeká na signál k ukončení FastCGI klienta. Při přijetí tohoto signálu ukončí všechna pracovní vlákna, skončí svůj běh a tím ukončí FastCGI klienta.

Počet pracovních vláken se nastavuje pomocí Řídicí konzole 602SQL. Tento počet by neměl být menší než 5 a jeho hodnota závisí na předpokládaném zatížení webserveru; při vyšším zatížení by měl být počet vláken vyšší. Počet vláken by měl být alespoň stejně velký jako počet permanentních spojení na SQL server. Počet vláken lze nastavovat také ručně editací údaje WorkerThreads v sekci FastCGI v souboru wbcgi.ini.


Permanentní spojení s SQL serverem

Internet klienti se vždy na začátku provádění každého požadavku přihlásili k SQL serveru, provedli požadované akce, odhlásili se a odeslali sestavený dokument. Testováním bylo zjištěno, že nejvíce času stráví Internet klient přihlašováním a odhlašováním k/od SQL serveru. Permanentní spojení s SQL serverem odstraňují tato zdržení při přihlašování a odhlašování. Internet klient udržuje permanent connection pool (bank, resp. fond otevřených klientských spojení s SQL servery). Z tohoto poolu si při začátku provádění jistého požadavku vypůjčí momentálně nevyužívané klientské spojení na ten SQL server, se kterým bude při provádění tohoto požadavku pracovat. Vypůjčené klientské spojení je už připojeno k SQL serveru, proto odpadá přihlašování na SQL server. Internet klient provede požadované akce, sestaví dokument atd. a v okamžiku, kdy by se normálně odhlašoval od SQL serveru, vrátí vypůjčené klientské spojení (které zůstává stále otevřené) do poolu, odkud si jej může vypůjčit jiný požadavek.

Zrychlení práce Internet klienta je minimálně 0,8 s, se zvyšujícím se zatížením webserveru je zrychlení ještě výraznější (při větší zátěži strávil starší Internet klient více času přihlášením a odhlášením k/od SQL serveru).

Permanentní spojení lze využívat pouze s těmi Internet klienty, kteří běží "pořád" (kteří nejsou spouštění a ukončováni při provádění každého požadavku), tj. s ISAPI a FastCGI klientem.

Lze nastavit počet permanentních spojení s SQL serverem, toto nastavení se provádí na Windows pomocí Řídicí kozole 602SQL, na Linuxu editací údaje PermanentSQLConnections v sekci Performance v souboru 602sql. Na Windows lze tento údaj nastavovat také editací tohoto údaje v souboru wbcgi.ini.

Internet klient se chová takto: Při prvním pokusu o připojení k jistému SQL serveru (např. k databázi "db_a") se vytvoří požadovaný počet spojení na tento SQL server (tolik, kolik stanovuje hodnota PermanentSQLConnections), tím dojde k obsazení stejného počtu klientských licencí daného SQL serveru. Při vyřizování požadavků se klientská spojení vypůjčují z connection pool a zase se tam vracejí. Jakmile se při vyřizování jistého požadavku zjistí, že všechna spojení jsou vypůjčená, bude tento požadavek vyřízen "postaru", tj. Internet klient se přihlásí na SQL server, provede práci a odhlásí se od SQL serveru. V případě, že se tento Internet klient poprvé připojí na jiný SQL server, vytvoří se požadovaný počet permanentních spojení také s tímto SQL serverem.

Doporučené nastavení počtu permanentních spojení s SQL serverem je ovlivněno počtem licencí SQL serveru (nemůže být větší než je počet licencí). Pro smysluplné využití této technologie je dobré udržovat nejméně 3-5 permanentních spojení. Při předpokládané vyšší zátěži webserveru (a za předpokladu patřičně výkonného počítače) lze tento počet zvyšovat až na cca 30. Tato horní mez je dána tím, že každý právě vyřizovaný požadavek zabere přibližně 3 MB operační paměti. Navrhovaný počet 30 permanentních spojení by tedy při využití všech spojení pro provádění požadavků zabral přibližně 90 MB operační paměti, což je přijatelné pro počítač s 256 MB paměti, na které běží pouze webserver a Internet klienti.

Lze nastavit klientům využívajícím permanentní spojení na SQL server dobu "životnosti" permanentního spojení. Nastavení je v INI souboru wbcgi.ini/602sql v sekci Performance, klíč PermanentConnectionRefreshTime. Hodnota klíče je počet hodin, po kterých se má permanentní spojení ukončit a znovu vytvořit.

V případě, že jsou souběžně využíváni ISAPI klient i FastCGI klient (oba vytvářejí permanentní spojení), každý klient si otevře tolik spojení, kolik udává parametr PermanentSQLConnections - tj. celkem bude na SQL servery otevřeno 2*PermanentSQLConnections spojení. Proto se silně doporučuje používat pouze jednoho Internet klienta, který vytváří permanentní spojení. CGI klienta lze používat libovolně bez ohledu na to, zda je či není používán ISAPI či FastCGI klient, protože CGI klient nadále pracuje postaru a žádná permanentní spojení nevytváří.

Kvůli správnému odpojení permanentních spojení je třeba nejdříve ukončit Internet klienty a teprve potom ukončit SQL servery, na které měli Internet klienti otevřeny permanentní spojení. V případě opačného postupu dojde po ukončení SQL serveru k zablokování Internet klientů. Tento problém by měl být v nejbližší době vyřešen tak, že po ukončení SQL serveru ukončí Internet klienti automaticky všechna permanentní spojení s tímto SQL serverem.

Pro správné a úplné využití těchto rysů ISAPI Internet klienta je nutná spolupráce s webserverem Microsoft IIS.


[ ] (i-tá hodnota) ve výrazech (WBIK)

Operátor [] lze také použít s výsledkem SQL příkazu SELECT – viz hodnota sloupce ve výrazech.

Formát (pro proměnnou):

proměnná[index]

Význam:

Tímto způsobem lze získat hodnoty vstupní proměnné, která byla zadána ve vstupního formuláře vícekrát. Počet hodnot proměnné lze zjistit výrazem proměnná#. První hodnota proměnné má index 0, poslední má index proměnná#-1.

Formát (pro multiatribut):

název_SELECT_příkazu.multiatribut[index]

nebo

multiatribut[index]

Význam:

Hranatých závorek lze ve výrazu využít k přečtení jedné hodnoty multiatributu. Je to jediný způsob, jak hodnoty multiatributu číst. V rámci přenositelnosti mezi SQL servery doporučujeme multiatributy v serverových aplikacích nepoužívat.

Při zpracování HTW šablony bude příkaz název_SELECT_příkazu.multiatribut[index] nahrazen některou hodnotou multiatributu (podle hodnoty indexu) z prvního záznamu odpovědi na SQL příkaz SELECT pojmenovaného název_SELECT_příkazu. Název_SELECT_příkazu je jméno, kterým je pojmenován daný SELECT v odpovídajícím WBC konektoru v bloku SQLStatement. Pokud daný atribut neexistuje, bude tento příkaz nahrazen prázdným řetězcem a neexistující jméno multiatributu se zaznamená do logfile.

Pokud je třeba citovat některou hodnotu multiatributu odpovědi na SQL příkaz SELECT, v příslušné detail sekci šablony použijte pouze výraz multiatribut[index].

Poznámky:

index je výraz typu integer;

hodnoty multiatributu jsou číslovány od 0 (první hodnota má index 0) do multiatribut#-1;

pokud je název multiatributu napsán v obrácených apostrofech, jeho některou hodnotu lze získat pomocí zápisu`multiatribut`[index];


(Untitled)

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


Metoda TView602.Toggle

Toggle

procedure TView602.Toggle

Přístupová práva

public, virtual

Popis

Otevře formulář, pokud již otevřen není. Pokud tento formulář již otevřen je, zavře jej.


Podpora pro Delphi aplikace založená na funkcích a zprávách z 602SQL API

Podpora pro Delphi založená na funkcích a zprávách z 602SQL API

Podpora je realizována :

1) implementací třídy TWBMainForm v jednotce WBPARENT.PAS,

2) komunikační jednotkou WINBASE.PAS, která vyváží typy, konstanty a procedury API.

Existuje více objektová varianta této podpory spočívající v zapouzdření 602SQL API do komponent.


Metoda TWBaseServer602 SZMSETSTATUSTEXT

SZMSetStatusText

procedure TWBaseServer602.SZMSetStatusText(var Msg: TMessage);

Přístupová práva

protected

Popis

Klasický message handler pro obsluhu zprávy 602SQL SZM_SETSTATUSTEXT. Přijme-li hlavní formulář vaší MDI aplikace zprávu SZM_SETSTATUSTEXT, spustí se handler SZMSetStatusText, jenž volá event handler TMsgFrame.OnSetStatusText (napsali jste-li nějaký), který obdrží parametry této zprávy. Do tohoto event handleru pak umístěte vlastní kód pro nastavení textu a čísel v Delphi statusbaru v závislosti na parametrech zprávy SZM_SETSTATUSTEXT.


Metoda TWBNavig

TWBNavig

TWBNavig = class(TCustomPanel)

Popis:

Obdoba standardní komponenty z Delphi TDBNavigator (jejch kódy jsou velmi podobné) lišící se od ní v těchto bodech:

1) Nemá property DataSource, neboť není určena pro rozhraní BDE, ale pro 602SQL API - napojeni TWBNavig na data je automatické, komponenta si sama zjistí právě aktivní formulář, pak tabulku (či dotaz), nad kterou je tento formulář vystavěn a operace provádí nad touto tabulkou (dotazem).

2) Oproti standardní komponentě TDBNavigator je vybavena řadou událostí typu OnBeforeDelete. Potřebujeme-li tedy provést operaci spjatou s některým z tlačítek z TWBNavig, umožňuje komponenta TWBNavig ještě před provedením této operace provést nějakou činnost (např. dotázat se uživatele či nějakou předběžnou kontrolu dat) a případně - dle výsledku této činnosti - operaci zakázat (např. zákaz mazání záznamu pro OnBeforeDelete). Pokračování - provedení operace - nastane jen v případě, že v příslušném event handleru jsme nastavili logický parametr OkClick na TRUE. Implicitní hodnota pro OkClick je TRUE; Tyto události jsou typu

TWBNavEvent = procedure(Sender:TObject; var IsOk:Boolean) of object.

S událostí OnBeforeDelete souvisí nová property WBIgnoreBefDel typu Boolean, která po nastavení na TRUE způsobí ignorování události OnBeforeDelete. Pro hodnotu FALSE se událost respektuje a provede se k ní příslušející event handler, je-li nějaký.

3) Nepodporuje tlačítka Edit, Cancel a Post.

4) Operace spjaté s jednotlivými tlačítky navigátoru jsou implementovány pomocí API 602SQL funkcí a zpráv jako tyto metody

Metody:viz společný popis

Prior | předchozí záznam
Next | další záznam
First | první záznam
Last | poslední záznam
Insert | vložit záznam
Delete | smazat záznam
Refresh | aktualizovat záznam


Metoda TWBaseServer602 WMCOMMAND

WMCommand

procedure TWBaseServer602.WMCommand(var Msg: TMessage);

Přístupová práva

protected

Popis

Klasický message handler pro obsluhu zprávy WM_COMMAND. Slouží ke zpracování zpráv WM_COMMAND generovaných 602SQL. Tyto zprávy se dělí na automatické (LOWORD(Msg.wParam) = 999) a uživatelské. ((1000 < Msg.wParam) and (Msg.wParam < 60001)). Automatické zprávy tento handler jednak opět zasílá zpět vždy tomu formuláři, který zprávu vyslal (a které si odchytává komponenta TView602, která tento formulář zapouzdřuje a která implementuje příslušné event handlery) , jednak volá některý z event handlerů (napsali jste-li nějaký) komponenty TMsgFrame (např. pro NOTIF_RECENTER volá event handler TMsgFrame.OnRecenter).

Automatické zprávy lze tedy zpracovat jak na úrovni rámcového MDI okna (události komponenty TMsgFrame), tak na úrovni dětského MDI okna (odpovídající události komponenty TView602).

Rovněž pro uživatelské zprávy WM_COMMAND volá tento message handler obsluhu události OnOtherWMCmdFrom602 komponenty TView602, napsali jste-li nějakou.


komponenta TView602

TView602

TView602 = class(TComponent)

Popis:

Nevisuální komponenta zapouzdřující formulář na tabulku (či na dotaz) vytvořený ve 602SQL Vnitřně je založena na API funkci Open_view pro otevření formuláře a na Windows technice zvané subclassing. Rozhraní komponenty je tvořeno vlastnostmi (properties), událostmi a metodami:

Vlastnosti viz společný popis

Wbviewdef | specifikace formuláře, který má být otevřen.
Wbbase | otevřený kursor nebo konstanta NO_REDIR. Default hodnota je NO_REDIR
Wbflags | příznaky. Default hodnota je nula.
Wbposition | číslo prvního záznamu
Wbparent_id | handle formuláře, který má být vždy pod otevřeným formulářem, nebo nula. Default hodnota je nula.
Wbhandle | handle formuláře, který má být otevřen

Metody

Open
funkce otevře formulář specifikovaný vlastností Wbviewdef (a dalšími vlastnostmi)
Close
funkce slouží k uzavření formuláře.
Toggle
otevře formulář, pokud již otevřen není. Pokud tento formulář již otevřen je, zavře jej.

Události viz společný popis

OnRecEnter | vybrán nový záznam ve formuláři
OnChange | změněna složka formuláře
OnReset_Record | vybraný záznam se překresluje
OnReset_View | celý formulář se překresluje
OnSubCursr | formulář přechází k subkurzoru QBE
OnSuperCursor | formulář se vrací k superkurzoru


Vlastnosti TView602

Published vlastnosti:

property WBviewdef: string | Specifikace formuláře, který má být otevřen.
property WBbase : tcursnum | Otevřený kursor nebo konstanta NO_REDIR. Default hodnota je NO_REDIR
property WBflags: uns32 | Příznaky. Default hodnota je nula.
property WBposition: LongInt | Číslo prvního záznamu. Default hodnota je nula.

Public vlastnosti:

property WBparent_id: window_id | Handle formuláře, který má být vždy pod otevřeným formulářem, nebo nula. Default hodnota je nula.
property WBhandle: window_id | Pouze pro čtení. Poskytuje handle formuláře, který jste otevřeli metodou Open. Tuto hodnotu též vrací metoda Open.

Výše uvedené vlastnosti odpovídají parametrům API funkce Open_View. Nastavení hodnot těchto vlastností má efekt jen před voláním metody Open, neboť metoda Open tyto parametry předá jednorázově funkci Open_View. Parametr filter (procedura zachytávající zprávy formuláře) ve funkci Open_View se ve verzi 5 nepoužívá (má vždy hodnotu NIL), proto nemá mezi vlastnostmi komponenty TView602 svůj protějšek. Proceduru zachytávající zprávy formuláře nahrazují události komponenty TView602.


Události třídy TMsgFrame

Událost Odpovídající zpráva 602SQL zaslaná rámcovému oknu

OnCreate | NOTIF_CREATE - formulář byl otevřen
OnDestroy | NOTIF_DESTROY - formulář byl uzavřen
OnRecenter | NOTIF_RECENTER - vybrán nový záznam ve formuláři
OnChange | NOTIF_CHANGE - změněna složka formuláře
OnReset_Record | NOTIF_RESET_RECORD - vybraný záznam se překresluje
OnReset_View | NOTIF_RESET_VIEW - celý formulář se překresluje
OnSubCursor | NOTIF_SUBCURSOR - formulář přechází k subkurzoru QBE
OnSuperCursor | NOTIF_SUPERCURSOR - formulář se vrací k superkurzoru
OnCreate_Dependent | NOTIF_CREATE_DEPENDENT - otevřen závislý formulář
OnDestroy_Dependent | NOTIF_DESTROY_DEPENDENT - uzavřen závislý formulář
OnCreate_Editor | NOTIF_CREATE_EDITOR - otevřen textový editor
OnDestroy_Editor | NOTIF_DESTROY_EDITOR - uzavřen textový editor
OnCreate_Viewer | NOTIF_CREATE_VIEWER - otevřeno okno s obrázkem
OnDestroy_Viewer | NOTIF_DESTROY_VIEWER - uzavřeno okno s obrázkem
OnOtherWMCmdFrom602 | WM_COMMAND - uživatelská zpráva - pro čísla 1001 až 6000
OnSetToolBar | SZM_SETTOOLBAR - 602SQL žádá o změnu ovládací lišty
OnSetStatusText | SZM_SETSTATUSTEXT - 602SQL žádá o umístění textu nebo čísel na stavový řádek

Události odpovídající automatickým zprávám jsou typu

TWBEvent = procedure(Sender: TObject; var Msg: TMessage) of object;

Událost OnSetToolBar je typu

TWBsetToolBarEvent = procedure(Sender: TObject; WB_TB_Typ: TWB_TB_Typ) of object.

Možné typy toolbarů spjatých se zprávou SZM_SETTOOLBAR definuje výčtový typ

TWB_TB_Typ = (wttUNKNOWN, wttDEFAULT, wttVIEW, wttVIEWNOMOVE, wttVIEWPROJ, wttVIEWQUERY, wttHIST, wttINDEX, wttEDITTEXT, wttPREVIEW).

Označení odpovídá symbolickým konstantám uvedeným v manuálu, např. wttUNKNOWN odpovídá WB_TB_UNKNOWN atd.

Událost OnSetStatusText je typu

TWBsetStatusTextEvent = procedure (Sender: TObject; TypObsahu: TWBTypObsahu; Obsah: string) of object
WBTypObsahu = (toText,toNoRecord).

Je-li TypObsahu = toNoRecord, má Obsah význam čísla resp. čísel (nejčastěji. interní/externí číslo aktualního záznamu), je-li TypObsahu = toText, má parametr Obsah význam textu (např. nápověda k položkám menu).


Metoda TWBaseServer602 Create

Create

constructor TWBaseServer602.Create(AOwner : TComponent);

Přístupová práva

public, virtual

Popis

Jde o přepsanou (override) virtuální metodu předka TForm. Provádí inicializaci proměnné kontextu komunikace cd voláním API procedury :

cdp_init(@cd);

Dále nastavuje parametry hlavniho MDI okna, které pak předává do 602SQL voláním dvou API funkcí

    Init_window_env(WindowHandle, ClientHandle, WndMnuIndex, Flags)    Register_ext_menu(WindowHandle,hHlMenu,hWinMenu)

Programátor bude tento konstruktor volat nanejvýš v příkazu inherited konstruktoru potomka.

Parametr Flags ve Init_window_env může nabývat tří hodnot: WBF_NO_TOOLBAR nebo WBF_NO_STATUSBAR nebo 0:

WBF_NO_TOOLBAR | Hlavní okno nebude používat ovládací lištu z 602SQL, bude však používat stavovou lištu z 602SQL
WBF_NO_STATUSBAR | Hlavní okno nebude používat stavovou lištu z 602SQL, bude však používat ovládací lištu z 602SQL
0 (nula) | Hlavní okno bude používat ovládací lištu i stavovou lištu z 602SQL.

Neni možné kombinovat lišty z 602SQL a Delphi tj. nelze použít ovladací lištu z 602SQL a stavovou lištu z Delphi či naopak.

Pro Flags roven WBF_NO_TOOLBAR or WBF_NO_STATUSBAR nebude hlavní okno používat žádnou líštu 602SQL. Právě tato hodnota je napevno nastavena v konstruktoru, neboť podpora založená na komponentách předpokládá použití formulářů vytvořených ve 602SQL, zatímco menu a lišty jsou vesměs z Delphi.


Metoda TWBaseServer602.WBinit

WBinit

function TWBaseServer602.WBinit(Server, Name, Password, Appl : PChar) : boolean;

Přístupová práva

public, virtual

Parametry

Server | Cesta k serveru (viz. parametr path funkce link_kernel)
Name | Jméno uživatele.Je-li parametrem hodnota NIL, zobrazí se přihlašovací dialogbox.
Password | Heslo přidělené uživateli
Appl | Jméno databázové aplikace.

Popis

Public metoda. Implementuje napojení na server 602SQL. Funkce naváže spojení s databázovým serverem, přihlásí uživatele a nastaví databázovou aplikaci.

Hodnota funkce

V případě úspěchu vrací TRUE. Dojde-li při navazování komunikace k chybě, nepodaří-li se přihlášení, nebo jestliže zadaná aplikace v databázi není, zavolá metodu WBInitErr a vrátí FALSE.

Příklad

Dodané vzorové projekty provádějí ruční logování (připojování se k databázi) z menu. Požadujete-li automatické logování při startu Delphi aplikace, pak vhodným místem pro volání WBInit je buď obsluha události onActivate či události onShow dle toho, zda se chcete připojit po čí před zobrazením hlavního okna aplikace Delphi.

Úkol: Přihlásit hned po startu Delphi aplikace uživatele na server WB5 a nastavit aplikaci PER_AGENDA

Příklad 1: Automatické logování po zobrazení hlavního okna aplikace:

// TMainForm = class(TWBaseServer602)
procedure TMainForm.FormActivate(Sender: TObject);
const    Server = 'WB5';
        Name = nil;
        Password = nil;
        Appl = 'PER_AGENDA';
var Uspech: Boolean;
begin
// Klient se napojí na 602SQL a spustí aplikaci PER_AGENDA :
 if not WBInit(Server, Name, Password, Appl) then close;
 Uspech := Open_project('MIN_PLAT');
 if (Uspech = False) then Info_box('Chyba','Nelze otevřít projekt');
end;

Příklad 2: Automatické logování před zobrazením hlavního okna aplikace:

procedure TMainForm.FormShow(Sender: TObject);
const    Server = 'WB5';
        Name = nil;
        Password = nil;
        Appl = 'PER_AGENDA';
var Uspech: Boolean;
begin
// Klient se napojí na 602SQL a spustí aplikaci PER_AGENDA :
 if not WBInit(Server, Name, Password, Appl) then close;
 Uspech := Open_project('MIN_PLAT');
 if (Uspech = False) then Info_box('Chyba','Nelze otevřít projekt');
end;


Metoda TWBaseServer602 SZMSETTOOLBAR

SZMSetToolBar

procedure TWBaseServer602.SZMSetToolBar(var Msg: TMessage);

Přístupová práva

protected

Popis

Klasický message handler pro obsluhu zprávy 602SQL SZM_SETTOOLBAR. Přijme-li hlavní formulář vaší MDI aplikace zprávu SZM_SETTOOLBAR, spustí se handler SZMSetToolBar, jenž volá event handler TMsgFrame.OnSetToolBar (napsali jste-li nějaký), který obdrží parametry této zprávy. Do tohoto event handleru pak umístěte vlastní kód pro obsluhu (nastavení čí výměnu) Delphi toolbaru v závislosti na typu aktivního formuláře popsaného zprávou SZM_SETTOOLBAR.


Komponenta TMsgFrame

TMsgFrame

TMsgFrame = class(TComponent)

Popis:

Používá se jako nevisuální komponenta pro obsluhu událostí odpovídajících zprávám 602SQL zasílaných rámcovému oknu. K ničemu jinému neslouží. Název události se vytvoří z názvu příslušné zprávy náhradou předpony NOTIF_ ( u automatických zpráv) resp.předpony SZM_ (u zpráv týkajících se lišt) předponou On.

Události:viz společný popis

OnCreate | formulář byl otevřen
OnDestroy | formulář byl uzavřen
OnRecenter | vybrán nový záznam ve formuláři
OnChange | změněna složka formuláře
OnReset_Record | vybraný záznam se překresluje
OnReset_View | celý formulář se překresluje
OnSubCursor | formulář přechází k subkurzoru QBE
OnSuperCursor | formulář se vrací k superkurzoru
OnCreate_Dependent | otevřen závislý formulář
OnDestroy_Dependent | uzavřen závislý formulář
OnCreate_Editor | otevřen textový editor
OnDestroy_Editor | uzavřen textový editor
OnCreate_Viewer | otevřeno okno s obrázkem
OnDestroy_Viewer | uzavřeno okno s obrázkem
OnOtherWMCmdFrom602 | uživatelská zpráva - pro čísla 1001 až 6000
OnSetToolBar | 602SQL žádá o změnu ovládací lišty
OnSetStatusText | 602SQL žádá o umístění textu nebo čísel na stavový řádek


Metoda TWBaseServer602 WndProc

WndProc

Metody zajišťující předávání zpráv mezi databázovým serverem 602SQL a Delphi

procedure TWBaseServer602.WndProc(var Msg: TMessage);

Přístupová práva

public, virtual

Popis

Jde o přepsanou (override) standardní virtuální metodu předka TForm. Slouží k automatickému předávání zpráv hlavního okna MDI aplikace do 602SQL, která provede svou vlastni (nutnou) obsluhu některých zpráv. WndProc předává zprávy do 602SQL voláním 602SQL funkce 602SQLFrameProc.Tím, že je tato funkce umístěna do WndProc, provede se nejdříve zpracování zpráv ve 602SQL a teprve pak zpracování v Delphi (v EventHandlerech či MessageHandlerech atd.).

Chcete-li toto pořadí změnit, umístěte vlastní zpracování do TWBaseServer602.WndProc před volání funkce 602SQLFrameProc či do TMainForm.WndProc ( kde TMainForm zde označuje vaše hlavni MDI okno, které odvodíte jako potomka třídy TWBaseServer602 ) před volání inherited WndProc.Tato druhá možnost je rozumnější, neboť nevyžaduje přestavbu knihovny komponent, jelikož nemodifikujete kód komponenty TWBaseServer602.


Metoda TView602.Close

Close

procedure TView602.Close

Přístupová práva

public, virtual

Popis

Slouží k uzavření formuláře.


Metoda TWBaseServer602 WBInitErr

WBInitErr

procedure TWBaseServer602.WBInitErr(ErrType : TIniErr; err : integer);

Přístupová práva

protected, virtual

Parametry:

ErrType | zdroj chyby, může mít některou z následujících hodnot:
WBINI_LINKERR |  | funkce link_kernel vrátila chybu
WBINI_INTERFERR |  | funkce interf_init vrátila chybu
BINI_LOGERR |  | chybné jméno nebo heslo
WBINI_SETAPPLERR |  | aplikace nenalezena v databázi
err | kód chyby vrácené funkcí link_kernel, interf_init resp. sz_error

Popis

Zobrazí okénka chybových hlášení pro případné chyby vzniklé ve funkci WBInit, která proceduru WBInitErr volá.


Metody třídy TView602

Open - funkce otevře formulář specifikovaný vlastností WBviewdef (a dalšími vlastnostmi)

Close - funkce slouží k uzavření formuláře.

Toggle - Otevře formulář, pokud již otevřen není. Pokud tento formulář již otevřen je, zavře jej.


třída TWBaseServer602

TWBaseServer602

TWBaseServer602 = class(TForm)

Popis

Používá se jako předek pro hlavní (rámcové) MDI okno Vaší Delphi aplikace.

Třída především:

1) zapouzdřuje funkčnost pro napojení k a odpojení od databázového serveru 602SQL,

2) zajišťuje předávání zpráv mezi databázovým serverem 602SQL a Delphi.

Proti TForm nemá žádné nové vlastnosti (properties) ani události. Pro zpracování zpráv 602SQL zasílaných rámcovému oknu poskytuje příslušné události samostatná komponenta TMsgFrame.

Metody

WBInit | funkce naváže spojení s databázovým serverem, přihlásí uživatele a nastaví databázovou aplikaci.
WBEnd | procedura implementuje odpojení od serveru 602SQL.
Create | konstuktor komponenty TWBaseServer602
Destroy | destuktor komponenty TWBaseServer602
WBInitErr | procedura zobrazí okénka chybových hlášení pro případné chyby vzniklé ve funkci WBInit,
WndProc | procedura slouží k automatickému předávání zpráv hlavního okna MDI aplikace do 602SQL, která provede svou vlastni (nutnou) obsluhu některých zpráv.
WMCommand | procedura třídy TWBBaseServer602 pro zpracování automatických a uživatelských zpráv (a příp.ostatních zpráv WM_COMMAND, které již nepocházejí z 602SQL)
SZMSetStatusText | procedura třídy TWBBaseServer602 pro ovládání stavové lišty Delphi
SZMSetToolBar | procedura třídy TWBBaseServer602 pro nastavení a výběr nástrojové lišty Delphi.


Metoda TWBaseServer602 WBEnd

WBEnd

procedure TWBaseServer602.WBEnd;

Přístupová práva

public

Popis

Implementuje odpojení od serveru 602SQL. V podstatě volá sekvenci API funkcí 602SQL

Close_all_views, Logout, interf_close.

Je volána v destruktoru TWBaseServer602.Destroy, čímž je zajištěno automatické odpojení aplikace Delphi od serveru při jejím uzavření. Není tedy nutné ji ve vaší Delphi aplikaci volat. Chcete-li provést odpojení ještě před uzavřením vaší Delphi aplikace, musíte provést explicitní volání WBEnd např. z menu.


Metody TWBNavig

Metody komponenty TWBNavig

Přístupová práva

protected, virtual

procedure Prior | předchozí záznam
procedure Next | další záznam
procedure First | první záznam
procedure Last | poslední záznam
procedure Insert | vložit záznam
procedure Delete | smazat záznam
procedure Refresh | aktualizovat záznam


Třída TWBMainForm

TWBMainForm

TWBMainForm = class(TForm)

Popis

Třídu TWBMainForm budete používat jako předka rámcového (hlavního) okna (které v dodaném vzorovém projektu nazýváme TMainForm - viz jednotka MAIN.PAS) vaší MDI aplikace Delphi.

Třída je velmi podobná třídě TWBaseServer602 jak pokud jde o vnitřní kód, tak pokud jde o její používání a funkci. TWBaseServer602 je již popsána, proto se zde omezíme jen na odlišnosti obou tříd.

1) Pro zpracování zpráv nemá, žádného pomocníka v podobě speciální komponenty k tomu určené (u třídy TWBaseServer602 plní tuto úlohu TMSGFrame), proto zprávy budete obsluhovat na úrovní jejích message handlerů. Třída obsahuje tři message handlery:

WMCommand | pro zpracování automatických a uživatelských zpráv (a příp. ostatních zpráv WM_COMMAND, které již nepocházejí z 602SQL)
SZMSetStatusText | pro ovládání stavové lišty Delphi.
SZMSetToolBar | pro nastavení a výběr nástrojové lišty Delphi.

Tyto message handlery můžete umístit též do potomka třídy TWBMainForm tj. vašeho rámcového MDI formuláře.

2) Aplikace vystavěné na této třídě mohou používat jak lišty z Delphi, tak lišty z 602SQL (na rozdíl od aplikací založených na komponentách, kde se používají jen lišty z Delphi). Není možné však kombinovat lišty z 602SQL a Delphi tj. použít nástrojovou lištu z 602SQL a stavovou listu z Delphi či naopak. Abyste sdělili 602SQL, čí lišty budete používat, musíte nastavit proměnnou Flags v konstruktoru Create takto

Hodnota Flags | Význam
0 | Obě lišty z 602SQL
WBF_NO_TOOLBAR or WBF_NO_STATUSBAR | Žádná lišta z 602SQL
WBF_NO_TOOLBAR | Jen stavová lišta z 602SQL
WBF_NO_STATUSBAR. | Jen nástrojová lišta z 602SQL

Je tedy vidět, že pokud jde o používání třídy, budete - na rozdíl od TWBaseServer602 - pracovat částečně (byť jednoduše) s jejím zdrojovým kódem a tento kód (důkladně okomentovaný a ne příliš složitý) byste měli pochopit než začnete vytvářet Delphi aplikaci.

Jednotka WBPARENT.PAS bude součástí Vašeho projektu.


Metoda TWBaseServer602 Destroy

Destroy

destructor TWBaseServer602.Destroy

Přístupová práva

public, virtual

Popis

Jde o přepsanou (override) virtuální metodu předka TForm. Zajisti automatické odpojeni od 602SQL, jak vyplývá z kódu:

Příklad:

destructor TWBaseServer602.Destroy;
begin
  WBEnd;
  inherited Destroy;
end;


Události třídy TView602

Jelikož message handler TWBaseServer602.WMCommand(var Msg: TMessage) třídy TWBaseServer602 zasílá přijaté automatické zprávy zpět vždy tomu formuláři, který zprávu rámcovému oknu poslal , je možné tyto zprávy ve window proceduře formuláře odchytit a spustit v okamžiku odchycení příslušné event handlery, což komponenta TView602 dělá . Tyto zprávy je tedy možné obsloužit na dvou úrovních :na úrovni rámcového okna (komponenta TMsgFrame) či na úrovni formuláře (komponenta TWBView).Tyto události a jim odpovídající zprávy jsou podmnožinou oněch, jež jsou popsány v třídě TMsgFrame. Jedná se o tyto události:

OnRecEnter, OnChange, OnReset_Record, OnReset_View, OnSubCursr, OnSuperCursor

Další automatické zprávy kromě výše uvedených vyvolají událost OnOtherWMCmd999

Další události si může uživatel do zdrojového kódu komponenty TView602 doplnit podle vzoru výše uvedených událostí. Události jsou vesměs typu

TWBEvent = procedure(Sender: TObject; var Msg: TMessage) of object;


Metoda TView602.Open

Open

function TView602.Open : window_id

Přístupová práva

public, virtual

Popis

Při prvním volání otevře formulář specifikovaný vlastností WBviewdef (a dalšími vlastnostmi) a vrátí jeho handle. Při dalším volání již nový exemplář otevřeného formuláře nevytvoří, pouze vrátí handle již dříve otevřeného formuláře (tento handle poskytuje též vlastnost WBhandle). Teprve po uzavření formuláře vede její volání k otevření nového formuláře. Otevření formuláře provádí voláním funkce API Open_View.

Tato metoda používá Windows techniku zvanou subclassing. Jelikož zná handle zapouzdřovaného formuláře (poskytuje jí ho funkce Open_view), může definovat novou window proceduru (tj provést subclassing) otevíraného formuláře a v ní zpracovávat zprávy či - spíše - volat event handlery pro tyto zprávy, což také dělá. Tedy teprve od okamžiku, kdy zavoláme metodu Open, budou spouštěny event handlery příslušnými událostmi. Do té doby komponenta TView602 o žádných událostech neví.

Hodnota funkce

Jako u API funkce Open_View.


Ří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


(Untitled)

Seznam bude zobrazovat všechny tabulky aktuální aplikace, které lze použít v klauzuli FROM dotazu.


(Untitled)

Seznam bude zobrazovat všechny dotazy aktuální aplikace, které lze použít v klauzuli FROM dotazu.


(Untitled)

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


(Untitled)

Seznam obsahuje tabulky (mimo připojených přes ODBC) nebo dotazy z aplikace, které lze použít jako zdroj dat pro nový dotaz.


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 editaci objektu - zavře aktuální záložku editoru; pokud editovaný text nebyl dosud uložen nebo byl od posledního uložení změněn, nabídne se Vám možnost uložit text;

Zavřít editor - 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.


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.


(Untitled)

DIALOG Nabídka proměnných, podprogramů a metod


Funkce datetime2timestamp

datetime2timestamp

Interní programovací jazyk

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 Am_I_security_admin

Am_I_security_admin

BOOL cd_Am_I_security_admin(cdp_t cdp);
function cd_Am_I_security_admin(cdp : cdp_t) : Boolean;

Parametry

cdp kontextová proměnná klienta

Od verze

8.0

Popis

Funkce slouží k určení, je-li přihlášený uživatel členem skupiny SECURITY_ADMIN (je-li bezpečnostním 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é. V klientském jazyce se nepředpokládá její použití.

Pro zjištění náležení do skupiny či role lze použít obecnou klientskou funkci GetSet_group_role nebo SQL funkci Get_membership.

Hodnota funkce

Funkce vrací TRUE, je-li uživatel správce databáze, FALSE, není-li tomu tak.

Viz

  • Am_I_config_admin
  • Am_I_db_admin


Funkce GetClient

GetClient

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 GetSet_group_role

GetSet_group_role

Interní programovací jazyk

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 Make_date

Make_date

Interní programovací jazyk

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 první den příštího roku:

Make_date(1,1,Year(Today)+1)

Viz

  • Day
  • Month
  • Year
  • Today
  • Make_time
  • Hours
  • Minutes
  • Seconds
  • Sec1000
  • Now
  • Day_of_week


Funkce Str2real

Str2real

Interní programovací jazyk

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. V jazyce SQL slouží stejnému účelu funkce CAST.

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 Repl_unregister_remote_server

Repl_unregister_remote_server

BOOL Repl_unregister_remote_server (cdp_t cdp, HWND hParent, const char *servername, BOOL confirm);
function Repl_unregister_remote_server(cdp : cdp_t; hParent : window_id; servername : PChar; confirm : Boolean) : Boolean;

Parametry

cdp | kontextová proměnná klienta
servername | jméno serveru
hParent | handle rodičovského okna nebo 0
confirm | příznak na potvrzení

Od verze:

6.1b

Popis

Funkce zruší registraci vzdáleného replikačního serveru jménem servername. Pokud confirm je TRUE, vyžaduje od uživatele potvrzení, zda opravdu chce server odregistrovat.

Hodnota funkce

Funkce vrací TRUE, pokud se podařilo odregistrovat server.

Viz

  • Programové ovládání replikací


Funkce MailBoxDeleteMsg

MailBoxDeleteMsg

Interní programovací jazyk

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
  • MailBoxGetMsgEx
  • MailBoxGetFilInfo
  • MailBoxSaveFileAs
  • MailCloseInBox
  • MailGetInBoxInfo
  • MailGetType


Funkce MailBoxGetMsgEx

MailBoxGetMsgEx

Interní programovací jazyk

function MailBoxGetMsgEx(mailbox : integer; id : integer; flag : integer): integer;
DWORD MailBoxGetMsgEx(DWORD mailbox, DWORD id, DWORD flag);
function MailBoxGetMsgEx(mailbox : integer; id : integer; flag : integer): integer;

Parametry

mailbox | handle poštovní schránky
id | identifikátor zásilky
flag | příznak rozsahu kopírování zásilky

Od verze

7.0d

Popis

Funkce je rozšířenou variantou funkce MailBoxGetMsg.

Funkce přečte ze schránky (v profilu zvoleného) poštovního systému část vybrané zásilky (podle parametru flag) a uloží jej do systémové tabulky _INBOXMSGS do sloupce Body resp. Header.

Rozsah zápisu lze řídit pomocí parametru flag. Hodnota parametru může nabývat hodnot:

MBL_BODY | 1 | Do databáze se uloží také texty dopisů včetně hlavičky (sloupec BODY)
MBL_HDRONLY | 4 | Do databáze se uloží jen hlavičky (sloupec HEADER) - mimo MAPI poštu
MBL_MSGONLY | 8 | Do databáze se uloží je texty dopisů (sloupec 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.

Viz

  • MailOpenInBox
  • MailBoxLoad
  • MailBoxGetFilInfo
  • MailBoxSaveFileAs
  • MailBoxDeleteMsg
  • MailCloseInBox
  • MailGetInBoxInfo
  • MailGetType


Funkce unassign

unassign

void cd_unassign(cdp_t cdp);
procedure cd_unassign(cdp : cdp_t);

Parametry

cdp kontextová proměnná klienta

Od verze:

7.0b

Popis

Dvojice funkcí assign_to_thread a unassign umožňují provoz aplikací, které mají více vláken přistupujících k databází a jedno vlákno může používat spojení vytvořené jiným vláknem. V takovém případě vlákno musí před započetím práce s databází zavolat funkci assign_to_thread a po ukončení práce, zejména však před prací s jiným spojením na databázi, funkci unassign.

Výše uvedené pravidlo platí bez ohledu na to, zda aplikace vytvoří pouze jedno spojení na databázi nebo více.

Každému spojení na databázový server přísluší jedna kontextová proměnná cd, na níž odkazuje ukazatel cdp. Tyto funkce se volají na kontextovou proměnnou, na níž úspěšně proběhla funkce connect nebo interf_init. Volají se před provedením disconnect nebo interf_close.

V době, kdy jedno vlákno používá některé spojení na databázi, nesmí se stejným spojením pracovat jiné vlákno. O dodržení této podmínky se musí postarat aplikace.

Viz

  • assign_to_thread


Funkce Read_lock_table

Read_lock_table

Interní programovací jazyk

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 Yesno_box

YesNo_box

Interní programovací jazyk

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 v klientské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;


Funkce Kernel_error_box

Kernel_error_box

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


Funkce Set_sql_option

Set_sql_option

Interní programovací jazyk

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;
PROCEDURE Set_sql_option(IN mask INT, IN value INT);

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, 6.1, 7.0, 8.0

Popis

Server 602SQL 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)).

Po připojení se nového klienta na server jsou všechny jeho volby nastaveny dle vlastnosti serveru DefaultSQLOption. Pokud hodnota této vlastnosti není změněna, je zapnuta ve všech volbách 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)

V prostředí SQL serveru lze aktuální nastavení také číst a měnit pomocí systémové proměnné @@SQLOPTIONS .

Hodnota funkce

Funkce vrací při neúspěchu TRUE;

Příklad:

Nastavit ALTER TABLE do režimu kompatibility s SQL2:

Set_sql_option(128,0);

Nastavit všechny volby do režimu kompatibility se staršími verzemi serveru:

Set_sql_option(131071, 131071);

Viz

    Get_sql_option,
    Přehled příznaků kompatibility


Funkce Trunc

Trunc

Interní programovací jazyk

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


Procedura Relate_record

Relate_record

Interní programovací jazyk

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 v klientské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, 602SQL 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 Upcase

Upcase

Interní programovací jazyk

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 ODBC_open_cursor

ODBC_open_cursor

Interní programovací jazyk

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 v klientské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 602SQL:

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 Fulltext_context

Fulltext_context

function Fulltext_context(IN doc BLOB, IN format CHAR(10), IN mode INT, IN position INT, IN margin INT, IN decoration CHAR(50)); returns CLOB;

Parametry:

doc | dokument nebo odkaz na dokument
format | formát dokumentu (TXT, TEXT nebo PLAIN pro čistý text, RTF, DOC nebo HTML pro ostatní definované)
mode | způsob předání dokumentu
position | pozice v dokumentu, kolem níž se hledá kontext
margin | počet slov před a za position v kontextu
decoration | znaky, kterými se "obalí" slovo v pozici "position" ve výsledném kontextu

Od verze:

7.0d

Popis:

Funkce vrátí kontext (text okolo) výskytu fráze vyhledané pomocí predikátu Fulltext.

Prohledávaný dokument lze předat několikerým způsobem, přičemž způsob předání popisuje parametr mode takto:

0 - dokument je obsahem parametru doc;

1 - dokument je v souboru, jehož jméno je v parametru doc;

2 - dokument je OLE objekt (embedded nebo linked) umístěný v parametru doc.

Pomocí format lze zvolit, má-li se indexovat čistý text (parametr TXT, TEXT nebo PLAIN) nebo jiný formát - v tomto případě se provádí dodatečná analýza textu, je-li skutečně daný formát a jaké verze (u DOC). Nepodaří-li se analýza, funkce skončí s chybou.

Pozice fráze v dokumentu je dána systémovou proměnnou @@FULLTEXT_POSITION, která je nastavena při každém vyhodnocení predikátu Fultext vracejícím TRUE.

Parametrem margin stanovíte, kolik slov před a za nalezenou frází se vrátí (spolu s frází a znaky zadanými v decoration) jako výsledek funkce.

Pomocí decoration lze zvýraznit hledanou frázi v kontextu. Řetězcový parametr musí mít následující tvar znaky_před%znaky_po, kde % značí pozici hledané fráze. Bude-li výsledek funkce např. předán browseru, lze s výhodou použít tohoto zvýraznění: "<B>%</B>"

Hodnota funkce

Funkce vrací kontext výskytu fráze délky 2*margin+1 slov.

Příklady:

Nalézt v dokumentech uložených v databázi slovo Databáze a vrátit kontexty jeho výskytu:

SELECT Fulltext_context(doc,"TXT",0,@@FULLTEXT_POSITION,5,">>%<<")
FROM Doctab
WHERE Fulltext("",id,"Databáze")

Totéž v proceduře pomocí průchodu kurzoru:

DECLARE pom CLOB;
FOR radek AS ftcur INSENSITIVE CURSOR FOR
  SELECT id,doc,@@FULLTEXT_POSITION AS pos
  FROM Doctab
  WHERE Fulltext("",id,"Databáze")
DO
  SET pom = Fulltext_context(radek.doc,"TXT",0,radek.pos,5,">>%<<");
  CALL log_write(pom);
END FOR;

Viz

  • Fulltextové nástroje ve 602SQL
  • Označování a uložení dokumentů ve fulltextových systémech
  • Fulltextové vyhledávání dokumentů
  • Fulltext_destroy
  • Fulltext_index_doc
  • Fulltext_remove_doc
  • Fulltext_context


Funkce MailBoxLoad

MailBoxLoad

Interní programovací jazyk

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ů včetně hlavičky (sloupec BODY)
MBL_FILES | 2 | Do databáze se uloží také informace o připojených souborech
MBL_HDRONLY | 4 | Do databáze se uloží také hlavičky (sloupec HEADER)
MBL_MSGONLY | 8 | Do databáze se uloží také texty dopisů (sloupec BODY)

Hodnota MBL_BODY se vylučuje s hodnotami MBL_HDRONLY a MBL_MSGONLY. Hodnota MBL_HDRONLY nefunfuje v případě MAPI pošty.

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 nebo MailBoxGetMsgEx. 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
  • MailBoxGetMsgEx
  • MailBoxGetFilInfo
  • MailBoxSaveFileAs
  • MailBoxDeleteMsg
  • MailCloseInBox
  • MailGetInBoxInfo
  • MailGetType


Funkce MailOpenInBox

MailOpenInBox

Interní programovací jazyk

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
  • MailBoxGetMsgEx
  • MailBoxSaveFileAs
  • MailBoxDeleteMsg
  • MailCloseInBox
  • MailGetInBoxInfo
  • MailGetType


Funkce Open_cursor (ext.)

Open_cursor

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

Interní programovací jazyk

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 Create_user

Create_user

Interní programovací jazyk

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.

Pokud heslo není zadáno (je NULL resp. NIL), pak vytvořený uživatel bude mít prázdné heslo a při prvním přihlášení si bude muset heslo změnit.

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 C_Max

C_Max

Interní programovací jazyk

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 Get_server_error_suppl

Get_server_error_suppl

Interní programovací jazyk

function Get_server_error_suppl(var buf : string) : Boolean;
BOOL WINAPI Get_server_error_suppl(cdp_t cdp, tptr buf);
function Get_server_error_suppl(cdp : cdp_t; var buf : PChar) : Boolean;

Parametry

buf | prostor pro vrácený řetězec znaků, dostatečná velikost je 32 bajtů
cdp | kontextová proměnná klienta

Od verze

7.0

Popis

Pokud je tato funkce zavolána po chybě, v jejímž popisu je proměnná informace, pak do parametru buf zapíše proměnnou část popisu chyby. Obvykle je to jméno tabulky, slupce, integritního omezení apod.

Pokud poslední chyba neobsahuje proměnnou informaci, vrácená hodnota není definována.

Hodnota funkce

Funkce vrací FALSE v případě úspěchu, TRUE při chybě.

Viz

  • Get_error_num_text
  • Get_server_error_context
  • Zjišťování detailů poslední chyby
  • Logování a trasování
  • Příklad


Funkce C_Min

C_Min

Interní programovací jazyk

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 Signalize

Signalize

Interní programovací jazyk

function Signalize : Boolean;
BOOL [cd_]Signalize([cdp_t cdp]);
function [cd_]Signalize([cdp : cdp_t]) : Boolean;

Parametry

[cdp kontextová proměnná klienta]

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 Move_data

Move_data

Interní programovací jazyk

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 602SQL
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 602SQL (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 (silent=TRUE) či nikoliv (silent=FALSE).

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 602SQL (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 602SQL (pouze pro vstup)
IMPEXP_FORMAT_TABLE | 10 | tabulka ve 602SQL (pro vstup také proměnný kurzor)
IMPEXP_FORMAT_TABLE_REIND | 11 | tabulka ve 602SQL, 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 602SQL (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) do tabulky ve 602SQL (10,11) nelze vytvořit novou tabulku, použít existující lze.

Kódování češtiny se zadává těmito konstantami:

0 | EE Win, kódová stránka 1250 , vnitřní čeština 602SQL
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 uložených dat ve vnitřním formátu do existující tabulky, indexy se přebudovávají až po importu (pokud by v indexu byla duplicita, přenos sice skončí s chybou, ale import samotný bude kompletní a index se dá vybudovat po odstranění duplicit):

ss := "D:\ZALOHA\*.TDT";
if Select_file(0,ss) then
  Move_data(-1,ss,-1,'TAB1',0,11,0,0,true);

Příklad 2

import z DBF souboru v LATIN 2 do nově vytvořené tabulky ve 602SQL:

ss := "D:\DBFS\*.DBF";
if Select_file(0,ss) then
  Move_data(-1,ss,-1,'FAKT',4,10,4,0,false);

Příklad 3

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 4

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 5

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 Repl_control

Repl_control

Interní programovací jazyk

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

Od verze 6.1b je funkce zastaralá, nahrazena funkcí Repl_synchronize.


Funkce Seconds

Seconds

Interní programovací jazyk

function Seconds(tm : time) : integer;
int Seconds(uns32 tm);
function Seconds(tm : uns32) : integer;
FUNCTION Seconds (IN tm TIME) RETURNS INT;

Parametry

tm údaj o čase ve vnitřním formátu 602SQL

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 Attribute_info_ex

Attribute_info_ex

BOOL [cd_]Attribute_info_ex([cdp_t cdp], tcurstab curs, const char * attrname, tattrib * attrnum, uns8 * attrtype, uns8 * attrmult, t_specif * attrspecif);
function [cd_]Attribute_info_ex([cdp : cdp_t]; curs : tcurstab; attrname : PChar; var attrnum : tattrib; var attrtype : uns8; var attrmult : uns8; var attrspecif : t_specif) : 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: doplňující popis typu sloupce.
[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.

Hodnota funkce

Funkce vrací TRUE, pokud sloupec se jménem attrname byl v tabulce nebo kurzoru curs nalezen. Funkce vrací FALSE, pokud takový sloupec neexistuje. Hodnoty výstupních parametrů jsou pak nedefinované.

Viz Enum_attributes_ex.


Funkce Like

Like

Interní programovací jazyk

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 C_Sum

C_Sum

Interní programovací jazyk

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 Relist_objects

Relist_objects

Interní programovací jazyk

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 WinBaseFrameProc

WinBaseFrameProc

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 602SQL.

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 cdp_free

cdp_free

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 kontex tovou 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 Compact_database

Compact_database

Interní programovací jazyk

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 databázovém souboru 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 databázovém souboru 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 (ani systémové vlákno, např. replikační nebo detached SQL procedura). Při zavolání funkce nesmí být otevřen žádný kurzor. V opačném případě dojde k chybě NOT_LOCKED (136). Akci smí provést jen Provozní správce (CONFIG_ADMIN), jinak dojde k chybě NO_RIGHTS (129 - Nemáte právo provést tuto akci).

Akce může trvat delší dobu.

Funkce je obdobná akci Zkompaktnění databáze, kterou lze vyvolat z Řídicí konzole SQL serveru.

Viz

  • GetSet_fil_size
  • GetSet_fil_blocks
  • Compact_table


Funkce Write_ind

Write_ind

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 v klientské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 Read_unlock_table

Read_unlock_table

Interní programovací jazyk

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 User_in_group

User_in_group

Interní programovací jazyk

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 _602SQL_version

_602SQL_version

Interní programovací jazyk

function _602SQL_version : integer;
sig32 [cd]_602SQL_version([cdp_t cdp]);
function [cd]_602SQL_version ([cdp : cdp_t]) : sig32;
FUNCTION _602SQL_version RETURNS INT;

Parametry

[cdp kontextová proměnná klienta]

Popis

Funkce _602SQL_version vrací číslo verze 602SQL. V horním slově je hlavní číslo verze, ve spodním vedlejší číslo.

Hodnota funkce

Funkce vrací číslo verze 602SQL.

Příklad v klientském jazyce:

var
  i : integer;
  s : string[20];
begin
  i := _602SQL_version;
  s := "Verze "+Int2str(i div 65536)+"."+Int2str(i mod 65536);
  Info_box("602SQL",s)
end.

Příklad v SQL:

PROCEDURE `VERSION`( OUT vers CHAR(5));
/*****************************************************/
BEGIN
  DECLARE i INT;
  SET i = _602SQL_version;
  SET vers = Int2str(i div 65536)+"."+Int2str(i mod 65536);
END


Funkce Str2time

Str2time

Interní programovací jazyk

function Str2time(var s : string) : time;
BOOL str2time(const char * s, uns32 * tm);
function str2time(s : PChar; var tm : uns32) : Boolean;
FUNCTION Str2time(IN s CHAR()) RETURNS 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
tm | výstupní parametr: čas

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. V jazyce SQL slouží stejnému účelu funkce CAST.

Hodnota funkce

V klientském jazyce a v SQL funkce vrátí údaj o čase, pokud jeho zápis je (jediným) obsahem řetězce s, jinak vrací NONETIME. V jazyce C a v Pascalu funkce vrací TRUE pokud převod byl úspěšný.

Viz

  • Int2str
  • Str2int
  • Real2str
  • Str2real
  • Money2str
  • Str2money
  • Str2date
  • Date2str
  • Time2str


Funkce Sz_error

Sz_error

Interní programovací jazyk

function Sz_error : integer;
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. 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 Open_subcursor

Open_subcursor

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 v klientské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 IsIntRecSelected

IsIntRecSelected

Interní programovací jazyk

function IsIntRecSelected(hView : window_id; pos : trecnum) : Boolean;
BOOL IsIntRecSelected (window_id hView, trecnum pos);
function IsIntRecSelected (hView : window_id; pos : trecnum) : Boolean;

Parametry

hView | identifikace (handle) otevřeného formuláře
pos | interní (pořadové) číslo záznamu nebo -1 (NORECNUM)

Od verze:

7.0d

Popis

Funkce vrací stav vybrání (označení) zvoleného záznamu ve (standardním) formuláři.

Vybráním se rozumí inverze celého řádku; ručně ji lze provést kliknutím na záhlaví řádku nebo kombinací Shift+mezera (v případě multiselectu také Shift+šipka dolů/nahoru nebo v kombinaci myš+Shift nebo myš+Ctrl ) nebo programově pomocí funkce SelectIntRec.

V praxi se využije hlavně pro formuláře se zapnutou vlastností Multiselect, případně také Formulář pouze pro výběr záznamu.

Záznam je identifikován v parametru pos svým interním číslem (pořadové číslo záznamu). Je-li hodnota parametru pos rovna -1, funkce vrací stav všech záznamů formuláře.

Existuje také obdobná funkce IsExtRecSelected, která má v parametru pos externí číslo záznamu.

K funkci existuje ekvivalent v podobě metody formuláře IsIntRecSelected.

Hodnota funkce

Funkce vrací stav vybrání zvoleného záznamu.

Pokud má parametr pos hodnotu -1 a všechny záznamy jsou vybrané, vrací TRUE, není-li žádný záznam vybrán, vrací FALSE, jsou-li vybrány pouze některé záznamy vrací NONEBOOLEAN. Jestliže hodnota parametru pos překročila celkový počet záznamů, vrací funkce NONEBOOLEAN.

Příklad:

Superformulář obsahuje subformulář s multiselectem a tlačítko s následující akcí, která zjistí, které záznamy byly označeny. Procedura je volána Akce(THISFORM.SUBVIEW1.HANDLE), aby se předalo id subformuláře:

procedure Akce(hwnd : window_id);
var
  pocet,i : integer;
begin
  Get_fcursor(hwnd,gfc,nil);
  Rec_cnt(gfc,pocet);
  for i:=0 to pocet-1 do begin
    if IsIntRecSelected(hwnd,i) then Info_box("vybráno",Int2str(i));
  end;
end;

Viz

    SelectIntRec


Funkce Write_len

Write_len

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 v klientské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 Page_setup

Page_setup

Interní programovací jazyk

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 Export_appl_ex

Export_appl_ex

Interní programovací jazyk

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 Background_bitmap

Background_bitmap

Interní programovací jazyk

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 602SQL. 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 SQL_prepare

SQL_prepare

Interní programovací jazyk

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é klientské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 klientské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 v klientské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
  • SQL_host_execute cd_SQL_host_prepare,
  • Open_sql_cursor
  • Proměnné klientských aplikací v příkazech SQL


Funkce Set_cursor

Set_cursor

Interní programovací jazyk

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 interf_init

interf_init

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

Od verze 7.0 je možno dvojici funkcí link_kernel a interf_init nahradit jedinou funkci connect.

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 Str2int

Str2int

Interní programovací jazyk

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. V jazyce SQL slouží stejnému účelu funkce CAST.

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 GetSet_privils

GetSet_privils

Interní programovací jazyk

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 (konstanta 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.bit4RIGHT_INSERTnastavuje se pro Tabtab, resp. Objtab

4.bit8RIGHT_DELnastavuje se pro tabulku (Zrušení objektu)

8.bit128RIGHT_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, k odebrání práv SQL příkazu REVOKE.

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 < 0 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 : tobjnum;
  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 Am_I_config_admin

Am_I_config_admin

Interní programovací jazyk

function Am_I_config_admin : Boolean;
BOOL cd_Am_I_config_admin(cdp_t cdp);
function cd_Am_I_config_admin(cdp : cdp_t) : Boolean;

Parametry

cdp kontextová proměnná klienta

Od verze

8.0

Popis

Funkce slouží k určení, je-li přihlášený uživatel členem skupiny CONFIG_ADMIN (je-li provozním 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é.

Vlastní administraci aplikace by měl mít na starost uživatel zařazený do role ADMINISTRATOR, úpravy aplikace uživatel v roli AUTHOR (v zamčené aplikaci přebírá tuto funkci jiná určená role).

Funkce částečně nahrazuje starší funkci Am_I_db_admin, která je v novém rozložení odpovědnosti správců méně potřebná.

Pro zjištění náležení do skupiny či role lze použít obecnou klientskou funkci GetSet_group_role nebo SQL funkci Get_membership.

Hodnota funkce

Funkce vrací TRUE, je-li uživatel správce databáze, FALSE, není-li tomu tak.

Příklad

if not Am_I_config_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);

Viz

  • Am_I_db_admin
  • Am_I_security_admin


Funkce Rewrite

Rewrite

Interní programovací jazyk

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 MailGetType

MailGetType

Interní programovací jazyk

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 | 602SQL 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 Roll_back_view

Roll_back_view

Interní programovací jazyk

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. Podrobněji - viz Ukládání změn ve formulářích.

Příklad

Roll_back_view(ID_FORM1)

viz

Commit_view


Funkce Askip_repl

ASkip_repl

Interní programovací jazyk

function ASkip_repl(hParent : window_id) : Boolean;
BOOL ASkip_repl(cdp_t cdp, window_id hParent);
function ASkip_repl(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:

6.1b

Popis

Funkce zamezí replikování dat z běžné aplikace na v dialogu zvolený server. Dosud provedené změny v datech nebudou replikovány, budoucí změny se replikují normálně.

Funkce otevře dialogové okno s nabídkou replikačních serverů, s nimiž se sdílí běžná aplikace, a umožní vybrat jeden z nich.

Funkce je interaktivní variantou funkce Skip_repl. Aby funkce měla smysl, předpokládá se navázané sdílení aplikace aplname.

Hodnota funkce

Funkce vrací FALSE při chybě.

Viz

  • Programové ovládání replikací


Procedura Log_write

Log_write

Interní programovací jazyk

procedure Log_write (var text : string);
void Log_write(const char * text);
procedure Log_write (text : PChar);
PROCEDURE Log_write (IN text CLOB);

Parametry

text text, který se má zapsat do logu serveru

Od verze

5.1

Popis

Procedura vytvoří nový řádek s obsahem text v logu serveru.

Log, do něhož je zápis umístěn, je určen nastavením provedeném procedurou _sqp_trace . Standardně se zapisuje do základního logu v souboru wbsqllog.txt, jehož aktuální obsah je zároveň vidět v okně serveru.

Zápis do libovolného logu a s volitelným rozsahem kontextu provádí procedura _sqp_log_write.

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 Write_var

Write_var

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 v klientské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


Funkce Read_ind

Read_ind

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 v klientské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 Printer_select

Printer_select

Interní programovací jazyk

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 602SQL 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\602SQL\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


Funkce Import_appl_ex

Import_appl_ex

BOOL Import_appl_ex(cdp_t cdp, window_id hParent, const char * aplname, unsigned flags, const char * alternate_name);
function Import_appl(cdp : cdp_t; hParent : window_id; aplname : Pchar; flags : integer; alternate_name : Pchar) : Boolean;

Parametry

cdp | kontextové proměnné klienta
hParent | formulář, nad nímž se má objevit postupový dialog, nebo 0
aplname | jméno APL souboru
flags | příznaky importu
alternate_name | jméno aplikace pro přejmenování

Od verze

7.0e

Popis

Funkce dělá totéž, co funkce Import_appl (tj. umožní importovat aplikaci zadanou kompletním jménem definičního souboru aplikace - APL souboru), ale pomocí dodatečných parametrů lze vyloučit některé prvky komunikace s uživatelem (import se zautomatizuje).

Hodnoty parametru flags:

IMPAPPL_NEW_INST | 1
IMPAPPL_USE_ALT_NAME | 2
IMPAPPL_REPLACE | 4
IMPAPPL_NO_COMPILE | 8

IMPAPPL_NO_COMPILE zabrání překládání programů obsažených v aplikaci na konci importu.

V případě, že na serveru již existuje aplikace stejného jména nebo stejného ID, pak:

IMPAPPL_NEW_INST zabrání zobrazení dialogu a zvolí import aplikace do nové instance pod jiným jménem, které uživatel interaktivně zadá;

IMPAPPL_USE_ALT_NAME zabrání dotazu na nové jméno aplikace, pokud stejná aplikace již existuje, a použije jméno specifikované v parametru alternate_name; může se kombinovat s IMPAPPL_NEW_INST;

IMPAPPL_REPLACE zabrání zobrazení dialogu a zvolí nahrazení stávající aplikace novou aplikací. Nelze nahrazovat tabulky v případě, že mezi nimi existují referenční integrity.

Hodnota funkce

Funkce vrací při chybě FALSE.

Viz

  • Export_app_ex
  • Import_app


Funkce Input_box

Input_box

Interní programovací jazyk

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 Repl_Get_state

Repl_Get_state

BOOL Repl_Get_state(cdp_t cdp, const char * servername, const char * applname, int oper, void *state);
function Repl_Get_state(cdp : cdp_t; servername, applname : PChar; oper : integer; var state) : Boolean;

Parametry

cdp | kontextová proměnná klienta
servername | jméno protějšího serveru
applname | jméno sdílené aplikace
oper | kód operace
state | ukazatel na hodnotu parametru

Od verze:

6.1b

Popis

Funkce vrací informace o stavu sdílení zadané aplikace se zadaným serverem.

Kód operace oper může mít některou z následujících hodnot:

Jméno | Hodn. | Parametr State | Popis
RPST_STATE | 1 | Ukazatel na int | Vrací stav sdílení aplikace
 |  |  | Jméno |  | Popis
 |  |  | REPLAPL_NOTHING | 0 | Neznámý server
 |  |  | REPLAPL_REQPOSTED | 1 | Odeslán požadavek na sdílení, čeká se na odpověď
 |  |  | REPLAPL_REQRECV | 2 | Přišel požadavek na sdílení, lze jej akceptovat nebo zamítnout
 |  |  | REPLAPL_IS | 3 | Aplikace se sdílí
 |  |  | REPLAPL_REQREJ | 4 | Sdílení aplikace bylo odmítnuto
 |  |  | REPLAPL_BLOCKED | 5 | Sdílení aplikace bylo přijato a replikování je zatím blokováno
 |  |  | REPLAPL_INTERR | 6 | Sdílení aplikace nebylo možné akceptovat kvůli chybě u protějšího serveru
 |  |  | REPLAPL_DELETED | 7 | Sdílení aplikace nebylo možné akceptovat, protože protější server aplikaci nezná
 |  |  | REPLAPL_CONFLICT | 8 | Sdílení aplikace nebylo možné akceptovat kvůli nekompatibilnímu nastavení parametrů aplikace na serverech
 |  |  | REPLAPL_SRVRREG | 9 | Server je zaregistrován, ještě nebyl odeslán požadavek na sdílení
RPST_RELNAME | 2 | Ukazatel na char | Vrací jméno replikačního vztahu

Hodnota funkce

Funkce vrací FALSE v případě úspěchu, TRUE při chybě.

Viz

  • Programové ovládání replikací


Funkce Repl_send_share_req

Repl_send_share_req

BOOL Repl_send_share_req(cdp_t cdp, const char *servername, const char *applname, const char *relname, BOOL synch);
function Repl_send_share_req(cdp : cdp_t; servername, applname, relname: PChar; synch : Boolean) : Boolean;

Parametry

cdp | kontextová proměnná klienta
servername | jméno protějšího serveru
applname | jméno sdílené aplikace
relname | jméno replikačního vztahu
synch | příznak "Považovat současný stav aplikace za synchronizovaný"

Od verze:

6.1b

Popis

Požádá server, aby odeslal paket s žádostí o sdílení zadané aplikace.

Pokud má příznak synch hodnotu TRUE, pak se budou replikovat pouze změny, které proběhnou v datech po navázání sdílení. Pokud je FALSE, pak se v příštím replikačním paketu po navázání sdílení přenesou veškerá sdílitelná data v aplikaci.

Funkce předpokládá, že replikace jsou v provozu, že s uvedeným serverem je navázáno spojení a že uvedená aplikace se s nim dosud nesdílí.

Hodnota funkce

Funkce vrací FALSE v případě úspěchu, TRUE při chybě. Úspěch funkce znamená pouze úspěšné předání požadavku serveru, zda paket skutečně odešel, lze zjistit z logu.

Viz

  • Programové ovládání replikací


Funkce Read_ind_cnt

Read_ind_cnt

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 v klientské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


Procedura Wait_for_semaphore

Wait_for_semaphore

FUNCTION Wait_for_semaphore(IN shandle INT, IN tm INT) RETURNS 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
  • Close_semaphore
  • Release_semaphore


Funkce Set_object_rights

Set_object_rights

Interní programovací jazyk

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 Init_window_env

Init_window_env

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 602SQL

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 602SQL). 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 602SQL. 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
  • 602SQLFrameProc
  • Init_non_mdi_env


Funkce C_Count

C_Count

Interní programovací jazyk

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 GetSet_next_user

GetSet_next_user

Interní programovací jazyk

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


Procedura Show_help_popup

Show_help_popup

Interní programovací jazyk

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í v klientské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 Restrict_cursor

Restrict_cursor

Interní programovací jazyk

function Restrict_cursor(var curs : tcursnum; var condition : string) : Boolean;

Parametry

curs | otevřený pevný kurzor - 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 lze používat pouze na pevné kurzory (dotazy uložené v databázi) otevřené funkcí Open_cursor.

Při potřebě použití na proměnné kurzory je nutné 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
   ...
{ otevření kurzoru, který má v části WHERE podmínku PLAT>5000 }
   Open_cursor(SEZN_5000);
{ zúžení kurzoru podmínkou PLAT>7000 }
   if not Restrict_cursor(SEZN_5000,"PLAT>7000") then
{ otevření formuláře s přesměrováním na zúžený kurzor }
     Open_view("*ZAMĚST4",SEZN_5000,MODAL_VIEW,0,0,id_p);
   ...
{ návrat k původnímu kurzoru }
   Restore_cursor(SEZN_5000);
{ otevření formuláře do původního kurzoru }
   Open_view("*ZAMĚST4",sezn_5000,MODAL_VIEW,0,0,id_p);
   ...
end

Viz

  • Open_cursor
  • Open_sql_cursor
  • Close_cursor


Funkce Read_len

Read_len

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 v klientské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 Exec

Exec

Interní programovací jazyk

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 602SQL a není možné ho z 602SQL 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 unlink_kernel

unlink_kernel

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


Funkce Set_transaction_isolation_level

Set_transaction_isolation_level

Interní programovací jazyk

function Set_transaction_isolation_level(level : integer) : Boolean;
BOOL [cd_]Set_transaction_isolation_level([cdp_t cdp,] t_isolation level);
function [cd_]Set_transaction_isolation_level([cdp : cdp_t;] level : integer) : Boolean;

Parametry

[cdp | kontextová proměnná klienta]
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 (v klientské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í.

Použití transakcí z klientského jazyka je velmi omezené.

Hodnota funkce

Funkce vrací TRUE při chybě

Viz

  • Start_transaction
  • Roll_back
  • Commit


Funkce ODBC_create_connection

ODBC_create_connection

Interní programovací jazyk

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 Delete_file

Delete_file

Interní programovací jazyk

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


Fukce Iabs

Iabs

Interní programovací jazyk

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 Commit_view

Commit_view

Interní programovací jazyk

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. Podrobněji - viz Ukládání změn ve formulářích.

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
  • IsViewChanged


Funkce Message_to_clients

Message_to_clients

Interní programovací jazyk

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.

Text zprávy se zobrazí v okně pouze těm klientům, kteří mají inicializované uživatelské rozhraní pomocí funkcí Init_window_env nebo Init_non_mdi_env. Neovlivní například klienty připojené přes ODBC.

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 Write_unlock_record

Write_unlock_record

Interní programovací jazyk

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 Strtrim

Strtrim

Interní programovací jazyk

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 Insert

Insert

Interní programovací jazyk

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.

Od verze 7 je k dispozici novější funkce Insert_record_ex, která umožňuje vložit záznam současně i s hodnotami sloupců (stejně jako INSERT v SQL).

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 Super_recnum

Super_recnum

Interní programovací jazyk

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 subcurzoru na číslo téhož záznamu v supercurzoru, 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 MailSetProfileProp

MailSetProfileProp

Interní programovací jazyk

function MailSetProfileProp(var ProfileName : string; var PropName : string; var PropValue : string); integer;
int MailSetProfileProp(const char *ProfileName, const char *PropName, DWORD const char *PropValue);
function MailSetProfileProp(ProfileName : PChar; PropName : PChar;
PropValue : PChar); integer;
FUNCTION MailSetProfileProp(INOUT ProfileName : CHAR(64), INOUT PropName : CHAR(64), INOUT PropValue : CHAR(64)) RETURNS INT;

Parametry

ProfileName | jméno poštovního profilu
PropName | jméno parametru poštovního profilu
PropValue | nová hodnota parametru poštovního profilu

Od verze

8.0

Popis

Přidělí zadanému parametru poštovního profilu novou hodnotu, pokud parametr neexistuje, vytvoří jej. Standardní (trvalé) profily může modifikovat pouze provozní správce databáze, dočasný profil může měnit každý uživatel s výjimkou parametru FilePath. Heslo pro přístup k poště a heslo pro navázání telefonického spojení nelze pomocí této funkce měnit.

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

// je trvalý profil typu SMTP?
SET Err=MailGetProfileProp(profile,"SMTPServer",smtp_server,100);
// if ano, uděláme ho jako temporary a nahradíme adresu odesílatele
IF Err=0 THEN
  CALL MailCreateProfile("_temporary",TRUE);
  CALL MailSetProfileProp("_temporary","SMTPServer",smtp_server);
  CALL MailSetProfileProp("_temporary","MyAddress",komu);

Viz

  • MailCreateProfile
  • MailDeleteProfile
  • MailGetProfileProp


Funkce GetSet_fil_blocks

GetSet_fil_blocks

Interní programovací jazyk

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. Touto funkci nelze zmenšit velikost souboru. Funkci s hodnotou OPER_SET smí volat pouze provozní správce (CONFIG_ADMIN), jinak dojde k chybě NO_RIGHTS (129 - Nemáte právo provést tuto akci).

Používá se poté, co funkcí Get_server_info zjistíte malý počet volných clusterů databázového souboru nebo v aplikaci 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_server_info


Funkce ODBC_find_connection

ODBC_find_connection

Interní programovací jazyk

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 602SQL:

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 Year

Year

Interní programovací jazyk

function Year(dt : date) : integer;
int Year(uns32 dt);
function Year(dt : uns32) : integer;

Parametry

dt datum ve vnitřním formátu 602SQL

Popis

Funkce Year extrahuje rok z data.

Hodnota funkce

Funkce vrací nezáporné číslo označující rok, např. v roce 2001 funkce vrátí číslo 2001.

Příklad

zjistit poslední dvojčíslí roku:

rok:=Int2str(Year(Today));
pom_c2:=Strcopy(rok,Strlength(rok)-1,2);

Viz

  • Make_date
  • Day
  • Month
  • Today
  • Make_time
  • Hours
  • Minutes
  • Seconds
  • Sec1000
  • Day_of_week
  • Now


Funkce cdp_size

cdp_size

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


Funkce Repl_refresh_server_info

Repl_refresh_server_info

BOOL Repl_refresh_server_info(cdp_t cdp, const char *servername);
function Repl_refresh_server_info(cdp : cdp_t; servername: PChar) : Boolean;

Parametry

cdp | kontextová proměnná klienta
servername | jméno protějšího serveru

Od verze:

6.1b

Popis

Funkce požádá server, aby získal aktuální informace o zadaném replikačním serveru.

Funkce předpokládá, že replikace jsou v provozu, že s uvedeným serverem je navázáno spojení

Hodnota funkce

Funkce vrací FALSE v případě úspěchu, TRUE při chybě. Úspěch funkce znamená pouze úspěšné předání požadavku serveru, zda paket skutečně odešel, lze zjistit z logu.

Viz

  • Programové ovládání replikací


Funkce Ln

Ln

Interní programovací jazyk

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


Procedura Close_all_views

Close_all_views

Interní programovací jazyk

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 waits_for_me

waits_for_me

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 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 Read_var

Read_var

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 v klientské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 Get_view_item

Get_view_item

Interní programovací jazyk

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 SQL_host_execute

SQL_host_execute

BOOL cd_SQL_host_execute(cdp_t cdp, const char * statement, uns32 * results, const t_clivar * hostvars, unsigned hostvars_count);
function cd_SQL_host_execute(cdp : cdp_t; statement : Pchar; var results; hostvars : ^t_clivar; hostvars_count : Integer) : Boolean;

Parametry

cdp | kontextová proměnná klienta]
statement | příkaz jazyka SQL
results | pole čísel, do nichž se zapíše informace o výsledku operace; musí mít svou první složku před zavoláním inicializovanou hodnotou nula
hostvars | pole popisující proměnné klienta
hostvars_count | počet složek pole hostvars

Od verze:

7.0

Popis

Funkce vykoná příkaz jazyka SQL zadaný v parametru statement. Při překladu volání této funkce 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.

Platí pro ní vše, co je uvedeno v popisu funkce SQL_execute.

Pomocí pole hostvars lze SQL serveru předat popis proměnných klientské aplikace, které mohou být použity v příkazu statement. Parametr hostvars_count obsahuje počet takto předávaných proměnných.

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

Viz Proměnné z externích jazyků v příkazech SQL

Viz

  • SQL_execute
  • SQL_prepare cd_SQL_host_prepare,
  • SQL_exec_prepared
  • SQL_drop
  • Proměnné klientských aplikací v příkazech SQL


Procedura Set_status_nums

Set_status_nums

Interní programovací jazyk

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


Funkce Enable_index

Enable_index

Interní programovací jazyk

function Enable_index(table : ttablenum; which : integer; 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);


Procedura Draw_line

Draw_line

Interní programovací jazyk

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í 602SQL 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 Active_view

Active_view

Interní programovací jazyk

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 SQL_drop

SQL_drop

Interní programovací jazyk

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
  • SQL_host_execute


Funkce Edit_query

Edit_query

Interní programovací jazyk

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.

Je-li objekt zašifrovaný v zamčené aplikaci, funkce oznámí nemožnost editace a vrátí FALSE.

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 Used_memory

Used_memory

Interní programovací jazyk

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 602SQL 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 Repl_apl_shared

Repl_apl_shared

Interní programovací jazyk

function Repl_apl_shared(var aplname : string): Boolean;
BOOL Repl_apl_shared (cdp_t cdp, int optype, char * aplname);
function Repl_apl_shared (cdp : cdp_t; aplname : PChar): Boolean;
FUNCTION Repl_apl_shared (IN aplname CHAR(31)) RETURNS BIT;

Parametry

aplname | jméno aplikace
[cdp | kontextová proměnná klienta]

Od verze:

7.0d

Popis

Funkce se použije pro zjištění, je-li zadaná aplikace sdílena alespoň v jednom replikačním vztahu (replikuji-li se data z této aplikace mezi servery). Funkce nezjišťuje, v jakém vztahu se replikace nachází, tzn. že může být i nefunkční.

Funkce je potřeba v případě, že v replikujících aplikacích existují operace, které by mohly způsobit rozsynchronizování - např. uvolnění zrušených apod. Pomocí této funkce je možné před takovouto operací vydat varování či doporučení, aby se buď replikace rozpojila nebo aby se obdobná akce provedla i na druhé straně.

Hodnota funkce

Funkce vrací NONEBOOLEAN při chybě, FALSE, pokud se aplikace nesdílí (není navázán replikační vztah) a TRUE, pokud se sdílí alespoň s jedním serverem.

Viz

  • Replikace v 602SQL


Funkce timestamp2date

timestamp2date

Interní programovací jazyk

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 str2timestamp

Str2timestamp

Interní programovací jazyk

function Str2timestamp (var s : string) : timestamp;
BOOL str2timestamp(const char * s, uns32 * ts);
function str2timestamp(s : PChar; var ts : uns32) : Boolean;
FUNCTION Str2timestamp(IN s CHAR()) RETURNS TIMESTAMP;

Parametry

s | řetězec znaků obsahující zápis timestampu
ts | výstupní parametr: datum a čas (timestamp)

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í.

V jazyce SQL slouží stejnému účelu funkce CAST.

Hodnota funkce

V klientském jazyce a v SQL funkce vrátí údaj o datu a čase (timestamp), pokud jeho zápis je (jediným) obsahem řetězce s, jinak vrací NONETIMESTAMP. V jazyce C a v Pascalu funkce vrací TRUE pokud převod byl úspěšný.

Viz

  • timestamp2str
  • Date2str
  • Time2str


Funkce Register_rec_syn

Register_rec_syn

Interní programovací jazyk

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);
...


Funkce MailGetInBoxInfo

MailGetInBoxInfo

Interní programovací jazyk

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
  • MailBoxGetMsgEx
  • MailBoxGetFilInfo
  • MailBoxSaveFileAs
  • MailBoxDeleteMsg
  • MailCloseInBox
  • MailGetType


Funkce Round

Round

Interní programovací jazyk

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 Get_data_rights

Get_data_rights

Interní programovací jazyk

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 : short;  pozice : tobjnum;
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 MailDeleteProfile

MailDeleteProfile

Interní programovací jazyk

function MailDeleteProfile(var ProfileName : string); integer;
int MailDeleteProfile(const char *ProfileName);
function MailDeleteProfile(ProfileName : PChar); integer;
FUNCTION MailDeleteProfile(INOUT ProfileName CHAR(64)) RETURNS INT;

Parametry

ProfileName jméno poštovního profilu

Od verze

8.0

Popis

Zruší a odstraní poštovní profil. Dočasný profil nelze zrušit pokud je právě používán (automaticky se zruší po zavolání funkce CloseWBMail). Pevné (trvalé) profily může rušit pouze provozní správce databáze.

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

  • MailCreateProfile
  • MailSetProfileProp
  • MailGetProfileProp


Funkce Open_sql_parts

Open_sql_parts

Interní programovací jazyk

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 Get_server_error_context

Get_server_error_context

Interní programovací jazyk

function Get_server_error_context(level : integer; var itype, par1, par2, par3, par4 : integer) : Boolean;
BOOL WINAPI Get_server_error_context(cdp_t cdp, int level, int * itype, int * par1, int * par2, int * par3, int * par4);
function Get_server_error_context(cdp : cdp_t; level : integer; var itype, par1, par2, par3, par4 : integer) : Boolean;

Parametry

level | hladina kontextu
itype | typ vráceného kontextu
par1 | vrácená součást kontextu
par2 | vrácená součást kontextu
par3 | vrácená součást kontextu
par4 | vrácená součást kontextu
cdp | kontextová proměnná klienta

Od verze

7.0

Popis

Pokud je tato funkce zavolána po chybě, vrací informace o kontextu chyby.

Vstupní parametr level určuje hladinu kontextu, pro hodnotu 0 funkce vrací nejbližší kontext, pro vyšší hodnoty vzdálenější kontext. Pokud je hodnota level větší nebo rovna počtu definovaných hladin kontextu, bude v parametru itype vrácena hodnota 0, což indikuje, že vyšší hladiny není třeba zkoumat.

V parametru itype se vrací druh kontextu a podle tohoto druhu se interpretují i ostatní parametry:

itype | par1 | par2 | par3 | par4
1 - tabulka | číslo tabulky | číslo záznamu nebo -1 | číslo sloupce nebo -1 | číslo hodnoty multiatributu nebo 65535
2 - index | číslo tabulky | pořadové číslo indexu | -- | --
3 - procedura | číslo procedury | -- | -- | --
4 - trigger | číslo triggeru | -- | -- | --
5 - příkaz SQL | -- | -- | -- | --
6 - zámek | číslo tabulky nebo -1 | číslo záznamu nebo stránky | typ zámku | blokující uživatel
0 - konec | -- | -- | -- | --

Typicky se tato funkce volá opakovaně pro hodnoty level od 0 nahoru dokud nevrátí itype 0.

Hodnota funkce

Funkce vrací FALSE v případě úspěchu, TRUE při chybě.

Viz

  • Get_error_num_text
  • Get_server_error_suppl
  • Zjišťování detailů poslední chyby
  • Logování a trasování
  • Příklad


Procedura Register_key

Register_key

Interní programovací jazyk

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.

Ve vnějších jazycích použijte pro odchytávání zpráv od klávesnice akcelerátory.

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 602SQL, 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. Chcte-li pouze zablokovat některé klávesy, které mají specifický význam ve formulářích, použijte jako msg číslo, na které ve smyčce zpracovávání zpráv nijak nereagujete.

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 | 122
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 Open_project

Open_project

BOOL Open_project(const char *projname);
function Open_project(projname : PChar) : Boolean;

Parametry

projname jméno programu v klientské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 v klientské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 Write_ind_cnt

Write_ind_cnt

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 v klientské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 SelectIntRec

SelectIntRec

Interní programovací jazyk

function SelectIntRec(hView : window_id; pos : trecnum; sel, redraw : Boolean) : Boolean;
BOOL SelectIntRec(HWND hView, trecnum pos, BOOL sel, BOOL redraw);
function SelectIntRec(hView : window_id; pos : trecnum; sel, redraw : Boolean) : Boolean;

Parametry

hView | identifikace (handle) formuláře
pos | interní číslo záznamu nebo -1 (NORECNUM)
sel | druh akce
redraw | překreslit formulář

Od verze

7.0d

Popis

Funkce umožňuje vybrat (označit) nebo odstranit vybrání množiny záznamů ve (standardním) formuláři. Vybráním se rozumí inverze celého řádku; ručně ji lze provést kliknutím na záhlaví řádku nebo kombinací Shift+mezera (v případě multiselectu také Shift+šipka dolů/nahoru nebo v kombinaci myš+Shift nebo myš+Ctrl ).

Vybrání se týká pouze konkrétního formuláře, na jiné pohledy do stejného zdroje dat ani na vlastní zdroj dat nemá vliv. K tomu, aby bylo možné vybrat více záznamů, je třeba, aby byl v popisu formuláře nastaven příznak Multiselect. Pokud tento příznak není nastaven, způsobí vybrání jednoho záznamu odvybrání minule vybraného záznamu. Má-li být formulář ve funkci listboxu (tedy pracuje se jen s celými needitovatelnými záznamy), použijte též vlastnost formuláře Pouze pro výběr záznamu.

Testovat vybrání konkrétního záznamu či množiny záznamů lze pomocí funkce IsIntRecSelected.

Záznam je identifikován v parametru pos svým interním číslem (pořadové číslo záznamu). Je-li hodnota parametru pos rovna -1, týká se akce zadaná parametrem sel všech záznamů formuláře.

Je-li hodnota parametru sel rovna TRUE, provede se vybrání záznamu, je-li hodnota rovna FALSE, provede se zrušení vybrání, je-li hodnota rovna NONEBOOLEN, provede se invertování současného stavu.

Existuje také obdobná funkce SelectExtRec, která má v parametru pos externí číslo záznamu.

K funkci existuje ekvivalent v podobě metody formuláře SelectIntRec.

Hodnota funkce

Funkce vrací minulou hodnotu příznaku vybrání. Pokud před operací, která se týká všech záznamů, nebyly všechny záznamy ve stejném stavu, nebo je-li hodnota parametru pos větší než celkový počet záznamů nebo při nedostatku paměti, vrací funkce NONEBOOLEAN.

Viz

  • IsIntRecSelected


Funkce Bind_records

Bind_records

Interní programovací jazyk

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 otevře tzv. vázací formulář, tj. formulář, pomocí něhož lze přivazovat a odvazovat záznamy z jiné tabulky pomocí databázových ukazatelů.

Funkce 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 Create2_link

Create2_link

Interní programovací jazyk

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


Funkce Write_record

Write_record

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.

V klientském programovacím jazyce nahrazuje tuto funkci přímé přiřazení mezi záznamem v databázi a proměnnou typu záznam.

Od verze 7.0 existuje novější funkce Write_record_ex, která umožní zapsat do zadaného záznamu jen ty sliupce, které jsou vyjmenované (stejně jako UPDATE v SQL).

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Viz

  • Read
  • Write
  • Read_record
  • Find_object
  • Open_cursor


Funkce Repl_edit_sharing_parameters

Repl_edit_sharing_parameters

BOOL Repl_edit_sharing_parameters (cdp_t cdp, HWND hParent, const char *applname, BOOL complete);
function Repl_edit_sharing_parameters(cdp : cdp_t; hParent : window_id; applname : PChar; complete : Boolean) : Boolean;

Parametry

cdp | kontextová proměnná klienta
hParent | handle rodičovského okna nebo 0
applname | jméno sdílené aplikace
complete | obsah dialogu

Od verze:

6.1b

Popis

Funkce otevře dialog na editaci replikačních pravidel pro zadanou aplikaci applname. Pokud complete je TRUE, pak dialog má všechny tři stránky, Pokud complete je FALSE, pak dialog obsahuje pouze první stránku umožňující navázání nebo ukončení sdílení aplikace.

Pomocí této funkce se interaktivně navazuje a povoluje sdílení aplikací. Před zahájením sdílení se zkontroluje, zda jsou nastaveny potřebné vlastnosti aplikace, a pokud ne, otevře se napřed stejný dialog, jaký otevírá funkce Repl_edit_application_properties.

Funkce kontroluje, zda je registrován nějaký vzdálený replikační server, a pokud není, otevře dialog pro navázání spojení s novým serverem a skončí.

Hodnota funkce

Funkce vrátí TRUE, pokud se úspěšně provedla požadovaná operace.

Viz

  • Programové ovládání replikací


Funkce Strcat

Strcat

Interní programovací jazyk

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 602SQL 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 Time2str

Time2str

Interní programovací jazyk

function Time2str(tm : time, prez : integer) : 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 LetterAddFile

LetterAddFile

Interní programovací jazyk

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


Funkce MailBoxGetFilInfo

MailBoxGetFilInfo

Interní programovací jazyk

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
  • MailBoxGetMsgEx
  • MailBoxSaveFileAs
  • MailBoxDeleteMsg
  • MailCloseInBox
  • MailGetInBoxInfo
  • MailGetType


Funkce Appl_inst_count

Appl_inst_count

Interní programovací jazyk

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;


Procedura Write (ext.)

Write

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 v klientské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


Procedura Write

Write

Interní programovací jazyk

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.

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


Funkce Minutes

Minutes

Interní programovací jazyk

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 602SQL

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


Procedura Writeln

Writeln

Interní programovací jazyk

procedure Writeln(var f : file; ... );

Parametry

f | textový soubor
ostatní parametry | libovolné výrazy typu Boolean, Char, Short, Integer, Real, Date, Time, Timestamp, String.

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 Atoken_control

AToken_control

Interní programovací jazyk

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 MailCreateProfile

MailCreateProfile

Interní programovací jazyk

function MailCreateProfile(var ProfileName : string; Temp : Boolean); integer;
INT MailCreateProfile(const char *ProfileName, BOOL Temp);
function MailCreateProfile(ProfileName : Pchar; Temp : Boolean); integer;
FUNCTION MailCreateProfile(INOUT ProfileName CHAR(64), IN Temp Boolean) RETURNS INT;

Parametry

ProfileName | jméno poštovního profilu
Temp | příznak – dočasný profil

Od verze

8.0

Popis

Vytvoří nový prázdný poštovní profil. Pokud je nastaven parametr Temp, vytvoří se dočasný profil, který se nikam persistentně neukládá. Dočasný profil lze použít na inicializaci pošty jako kterýkoli běžný profil, automaticky zanikne po ukončení práce s poštou zavoláním funkce CloseWBMail. Standardní (trvalé) profily může vytvářet pouze provozní správce databáze, dočasný profil může vytvářet každý uživatel.

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

MailCreateProfile("_temporary", TRUE);
MailSetProfileProp("_temporary", "SMTPServer", "posta.cz");
MailSetProfileProp("_temporary", "MyAddress",  "hugo@posta.cz");
MailSetProfileProp("_temporary", "POP3Server", "posta.cz");
MailSetProfileProp("_temporary", "UserName",   "hugo");
InitWBMail("_temporary", "heslo");
.
.
.
CloseWBMail();

Viz

  • MailDeleteProfile
  • MailSetProfileProp
  • MailGetProfileProp


Funkce Date2str

Date2str

Interní programovací jazyk

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 Repl_edit_application_properties

Repl_edit_application_properties

BOOL Repl_edit_application_properties (cdp_t cdp, HWND hParent, int pages);
function Repl_edit_application_properties (cdp : cdp_t; hParent : window_id; pages : integer) : Boolean;

Parametry

cdp | kontextová proměnná klienta
hParent | handle rodičovského okna nebo 0
pages | stránky dialogu

Od verze:

6.1b

Popis

Otevře dialog pro nastavení parametrů aplikace (tlačítko Parametry na řídicím panelu), včetně parametrů sdílení s jinými servery. Parametr pages určuje, které stránky se v dialogu objeví, každé stránce odpovídá jeden bit, takže hodnota 1 otevře pouze první stránku obsahující parametry sdílení aplikace.

Hodnota funkce

Funkce vrací TRUE pokud se podařilo parametry nastavit

Viz

  • Programové ovládání replikací


Funkce MailCloseInBox

MailCloseInBox

Interní programovací jazyk

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
  • MailBoxGetMsgEx
  • MailBoxGetFilInfo
  • MailBoxSaveFileAs
  • MailBoxDeleteMsg
  • MailGetInBoxInfo
  • MailGetType


Procedura Put_pixel

Put_pixel

Interní programovací jazyk

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í 602SQL 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 Amodify_user

Amodify_user

Interní programovací jazyk

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 Edit_text

Edit_text

Interní programovací jazyk

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 Repl_GetSet_server_props

Repl_GetSet_server_props

BOOL Repl_GetSet_server_props(cdp_t cdp, const char * servername, int oper, void *prop);
function Repl_GetSet_server_props(cdp : cdp_t; servername : PChar; oper : integer; var prop) : Boolean;

Parametry

cdp | kontextová proměnná klienta
servername | jméno protějšího serveru
oper | kód operace
prop | ukazatel na hodnotu parametru

Od verze:

6.1b

Popis

Umožňuje zjistit příp. nastavit parametry zadaného vzdáleného replikačního serveru.

Kód operace oper může mít některou z následujících hodnot:

Jméno | Hodn. | Parametr Prop | Popis
RPSP_GET_ADDRESS1 | 1 | Ukazatel na char | Vrací primární adresu serveru.
RPSP_GET_ADDRTYPE1 | 2 | Ukazatel na char | Vrací typ primární adresy serveru.
RPSP_GET_ADDRESS2 | 3 | Ukazatel na char | Vrací alternativní adresu serveru.
RPSP_GET_ADDRTYPE2 | 4 | Ukazatel na char | Vrací typ alternativní adresy serveru.
RPSP_GET_USEALT | 5 | Ukazatel na bool | Vrací stav příznaku "Použít alternativní adresu".
RPSP_SET_USEALT | 6 | Ukazatel na bool | Nastaví hodnotu příznaku "Použít alternativní adresu".
RPSP_GET_LASTRCVD | 7 | Ukazatel na int | Vrací číslo posledního přijatého paketu.
RPSP_GET_LASTSNDD | 8 | Ukazatel na int | Vrací číslo posledního odeslaného paketu.
RPSP_GET_LASTACKD | 9 | Ukazatel na bool | Vrací stav příznaku "Došlo potvrzení posledního paketu".

Hodnota funkce

Funkce vrací FALSE v případě úspěchu, TRUE při chybě.

Viz

  • Programové ovládání replikací


Funkce Login

Login

Interní programovací jazyk

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

V klientské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


Procedura Release_semaphore

Release_semaphore

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
  • Close_semaphore
  • Release_semaphore
  • Wait_for_semaphore


Procedura Sleep

Sleep

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 send_package

send_package

void [cd_]send_package([cdp_t cdp]);
procedure [cd_]send_package ([cdp : cdp_t]);

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.

Viz

  • start_package
  • answered


Funkce Compact_table

Compact_table

Interní programovací jazyk

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 mezi platnými záznamy žá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.

Od verze 8:

Při běžné práci s tabulkou (i po uvolnění zrušených záznamů v tabulce případně i po zkompatknění tabulky) může být na konci tabulky nevelký počet volných záznamů. Souvisí to s novým mechanismem přidělování diskového prostoru tabulce a na činnost serveru to nemá žádný vliv.

Viz

  • Free_deleted
  • Set_sql_option


Funkce View_state

View_state

Interní programovací jazyk

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


InitWBMail

Interní programovací jazyk

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 602SQL. 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 Řídicí konzoli 602SQL. 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


Funkce client_number

client_number

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;
...


Funkce Month

Month

Interní programovací jazyk

function Month(dt : date) : integer;
int Month(uns32 dt);
function Month(dt : uns32) : integer;

Parametry

dt datum ve vnitřním formátu 602SQL

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 Repl_resend_packet

Repl_resend_packet[CP]

BOOL Repl_resend_packet(cdp_t cdp, const char *SrvrName);
function Repl_resend_packet(cdp : cdp_t; SrvrName: PChar): Boolean;

Parametry

SrvrName - | jméno protějšího serveru
cdp | kontextová proměnná klienta

Od verze:

7.0

Popis

Pokud nepřišlo potvrzení posledního paketu, je možné zavolat funkci Repl_resend_packet, ta v takovémto případě odešle protějšímu serveru dotaz na stav, protější server vrátí číslo naposledy přijatého paketu a místní server podle toho jestli:

  • číslo přijatého se rovná číslu posledního odeslaného (ztratilo se potvrzení): zaktualizuje stav tak, jako kdyby potvrzení posledního paketu přišlo

  • číslo přijatého se rovná číslu předposledního odeslaného (ztratil se paket): znovu odešle poslední paket

  • jinak: takový stav by za normálního provozu neměl nastat a pokud nastane, je třeba databáze z obou stran synchronizovat

Pokud přijde zamítnutí replikačního paketu, je možné buď odstranit příčinu odmítnutí (zpravidla duplicitu klíčů v indexu) na vzdáleném serveru a zavolat funkci Repl_resend_packet a ta znovu odešle odmítnutý paket. Nebo je možné odstranit příčinu odmítnutí na místním serveru, zavolat funkci Repl_cancel_packet, která zruší zamítnutý paket a změní stav serveru jako by se poslední paket vůbec neodesílal, a potom znovu vyvolat přereplikování změn.

Funkcím Repl_resend_packet a Repl_cancel_packet odpovídají tlačítka Znovu odeslat a Zrušit paket na řídicím panelu aplikace.

Hodnota funkce

Funkce vrací FALSE v případě úspěchu a TRUE dojde-li k chybě, kód chyby lze zjistit pomocí funkce Sz_error nebo vypsat pomocí Signalize. Chyba NO_OBJECT (141) indikuje, že poslední paket není ve stavu ”Potvrzení nepřišlo” nebo ”Přišlo zamítnutí”.

Viz

  • Repl_cancel_packet
  • Programové ovládání replikací


Funkce Abs

Abs

Interní programovací jazyk

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


Procedura Strdelete

Strdelete

Interní programovací jazyk

function Strdelete(var s : string; index, count : Integer) : 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


Funkce Get_ext_message

Get_ext_message

Interní programovací jazyk

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 standardní (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 Edit_privils

Edit_privils

Interní programovací jazyk

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 Read_unlock_record

Read_unlock_record

Interní programovací jazyk

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 real2money

real2money

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 Break

Break

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.

UPOZORNĚNÍ: Protože funkce Break koliduje s klíčovým slovem Delphi, používejte v tomto prostředí místo Break variantu wb_Break (nebo cd_Break).

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 Select_directory

Select_directory

Interní programovací jazyk

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 Fulltext_destroy

Fulltext_destroy

FUNCTION Fulltext_destroy(IN ft_label CHAR(52)) RETURNS BOOLEAN;

Parametry:

ft_label označení fulltextového systému;

Od verze:

7.0

Popis:

Funkce odstraní na SQL serveru existující fulltextový systém. Parametr ft_label určuje aplikaci, v níž je fulltextový systém vytvořen, a případný identifikátor slouží k rozlišení fulltextových systému v rámci jedné aplikace.

Pokud se neprovede odstranění tímto způsobem (ale pouze smazáním tabulek FTX_), zůstane v aplikaci skrytý systémový objekt, který znemožní budoucí vytvoření fulltextového systému téhož jména.

Hodnota funkce

Funkce vrací TRUE při úspěchu, FALSE při chybě.

Příklady:

CALL Fulltext_destroy("SPISOVNA.DOPISY")

CALL Fulltext_destroy("") - odstraní fulltextový systém s prázdným identifikátorem v otevřené aplikaci.

Viz

  • Fulltextové nástroje ve 602SQL
  • Označování a uložení dokumentů ve fulltextových systémech
  • Fulltextové vyhledávání dokumentů
  • Fulltext_create
  • Fulltext_index_doc
  • Fulltext_remove_doc
  • Fulltext_context


Funkce LetterCreate

LetterCreate

Interní programovací jazyk

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.
512 | obsahuje-li dopis více adresátů, rozešlou se všem tzv. "slepé kopie" (bez uvedení ostatních adresátů) - pouze pro Mail602
1024 | pokud nedošlo při odesílání k chybě, smaže po odeslání soubory připojené k 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


Funkce Real2str

Real2str

Interní programovací jazyk

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 Substr

Substr

Interní programovací jazyk

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ů. V jazyce SQL slouží stejnému účelu funkce Position.

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 Chr

Chr

Interní programovací jazyk

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 Str2bigint

Str2bigint

Interní programovací jazyk

function Str2bigint(var s : string) : bigint;

Parametry

s řetězec znaků obsahující zápis čísla typu bigint

Od verze

7.0

Popis

Funkce Str2bigint převede zápis čísla v řetězci s na hodnotu typu bigint a vrátí ji. Prázdný řetězec se převede na hodnotu NONEBIGINT. V jazyce SQL slouží stejnému účelu funkce CAST.

Hodnota funkce

Funkce vrací celé číslo, pokud je jeho desítkový zápis obsahem řetězce s. Jinak vrací NONEBIGINT.

Viz

  • Int2str
  • Bigint2str
  • Str2int


Funkce Strpos

Strpos

Interní programovací jazyk

function Strpos(var substr : string; var s : string) : Integer;

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ů. V jazyce SQL slouží stejnému účelu funkce Position.

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 Cos

Cos

Interní programovací jazyk

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 Repl_accept_share_reg

Repl_accept_share_req

BOOL Repl_accept_share_req (cdp_t cdp, const char * servername, const char * applname, const char * relname, BOOL accept);
function Repl_accept_share_req (cdp : cdp_t; servername, applname,relname : PChar; accept : Boolean) : Boolean;

Parametry

cdp | kontextová proměnná klienta
servername | jméno protějšího serveru
applname | jméno sdílené aplikace
relname | jméno replikačního vztahu
accept | příznak Přijmout / Zamítnout

Od verze:

6.1b

Popis

Přijme resp. zamítne došlý požadavek na sdílení aplikace.

Funkce předpokládá, že replikace jsou v provozu, že s uvedeným serverem je navázáno spojení a že uvedená aplikace se s nim dosud sdílí, ale je přítomna žádost protějšího serveru o její sdílení.

Hodnota funkce

Funkce vrací FALSE v případě úspěchu, TRUE při chybě.

Viz

  • Programové ovládání replikací


Funkce Edit_impexp

Edit_impexp

Interní programovací jazyk

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


Procedura View_print

View_print

Interní programovací jazyk

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 Tab_page

Tab_page

Interní programovací jazyk

function Tab_page(hView : window_id; ID : integer) : 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.


Funkce Set_item_value

Set_item_value

Interní programovací jazyk

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 Day

Day

Interní programovací jazyk

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 Start_transaction

Start_transaction

Interní programovací jazyk

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 v klientském programu. Pokud se transakce již provádí, funkce neudělá nic.

Význam a použití funkce je poměrně omezený - do transakce lze uzavřít POUZE čistě databázové operace (v klientském jazyce se jedná o vložení záznamu funkcí Insert, přepsání hodnoty přiřazovacím příkazem a smazání záznamu funkcí Delete), nelze tedy transakčně sledovat např. importy dat, práci s formuláři a jakýmikoliv objekty prezentační vrstvy.

Na druhou stranu sdružováním operací do transakce můžete značně urychlit odezvu serveru - jeden zápis většího bloku dat (při Commitu) trvá mnohem kratší dobu než mnoho zápisů malých objemů dat.

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 Eof

Eof

Interní programovací jazyk

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


Funkce Exp

Exp

Interní programovací jazyk

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 TakeMailToRemOffice

TakeMailToRemOffice

Interní programovací jazyk

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 cdp_aloc

cdp_alloc

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 Skip_repl

Skip_repl

Interní programovací jazyk

function Skip_repl (var servername, applname : string) : Boolean;
BOOL [cd_] Skip_repl ([cdp_t cdp,] const char * servername, const char * applname);
function [cd_] Skip_repl ([cdp : cdp_t;] servername, applname : PChar) : Boolean;

Parametry

[cdp | kontextová proměnná klienta]
servername | jméno protějšího serveru
applname | jméno protější aplikace

Od verze:

6.1b

Popis

Funkce zamení replikování dat ze zvolené aplikace applname na zvolený server servername. Dosud provedené změny v datech nebudou replikovány, budoucí změny se replikují normálně.

Funkce je neinteraktivní variantou funkce ASkip_repl. Aby funkce měla smysl, předpokládá se navázané sdílení aplikace aplname.

Hodnota funkce

Funkce vrací TRUE při chybě

Viz

  • Programové ovládání replikací


LetterAddAddr

Interní programovací jazyk

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


Procedura View_pattern

View_pattern

Interní programovací jazyk

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 Print_copies

Print_copies

Interní programovací jazyk

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

Interní programovací jazyk

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 Available_memory

Available_memory

Interní programovací jazyk

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 602SQL 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 Get_object_rights

Get_object_rights

Interní programovací jazyk

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 Set_fcursor

Set_fcursor

Interní programovací jazyk

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í 602SQL 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 Restore_cursor

Restore_cursor

Interní programovací jazyk

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
   ...
{ otevření kurzoru, který má v části WHERE podmínku PLAT>5000 }
   Open_cursor(SEZN_5000);
{ zúžení kurzoru podmínkou PLAT>7000 }
   if not Restrict_cursor(SEZN_5000,"PLAT>7000") then
{ otevření formuláře s přesměrováním na zúžený kurzor }
     Open_view("*ZAMĚST4",SEZN_5000,MODAL_VIEW,0,0,id_p);
   ...
{ návrat k původnímu kurzoru }
   Restore_cursor(SEZN_5000);
{ otevření formuláře do původního kurzoru }
   Open_view("*ZAMĚST4",sezn_5000,MODAL_VIEW,0,0,id_p);
   ...
end

Viz

  • Open_cursor
  • Open_sql_cursor
  • Close_cursor


Funkce Print_opt

Print_opt

Interní programovací jazyk

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 Find_object_by_id

Find_object_by_id

Interní programovací jazyk

function Find_object_by_id(var uuid : binary, category : short; var position : tobjnum) : 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]

Změna ve verzi 8

Do verze 7 včetně byl typ výstupního parametru position dvoubajtový (označený zde Short). Typ tobjnum je nyní čtyřbajtový.

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 : tobjnum;
  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


LetterAddBLOBr

Interní programovací jazyk

function LetterAddBLOBr(Letter : integer; var fName : string; Table : tcurstab; Pos : trecnum; Attr : tattrib; Index : short) : integer;
int LetterAddBLOBr(DWORD Letter, char *fName, tcurstab Table, trecnum Pos, tattrib Attr, uns16 Index);
function LetterAddBLOBr(Letter : integer; fName : PChar; Table : tcurstab; Pos : trecnum; Attr : tattrib; Index : short) : integer;

Parametry

letter | handle dopisu
fName | jméno, pod kterým se obsah BLOBU k zásilce připojí
table | číslo tabulky nebo otevřeného kurzoru
pos | číslo záznamu
attr | číslo sloupce
ndex | index multiatributu, NOINDEX pro jednoduchý atribut

Od verze

7.0d

Popis

Funkce připojí k vytvářené zásilce elektronické pošty soubor vytvořený z obsahu sloupce typu BLOB databázové tabulky. Handle dopisu vrací (zásilku vytváří) funkce LetterCreate.

Pro použití v jazyce SQL existuje obdobná funkce LetterAddBLOBs.

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

  • LetterAddFile
  • LetterAddBLOBs


LetterAddBLOBs

Interní programovací jazyk

function LetterAddBLOBs(Letter : integer; fName, var Table, Attr, Cond : string) : integer;
int LetterAddBLOBs(DWORD Letter, char *fName, LPCSTR Table, LPCSTR Attr, LPCSTR Cond);
function LetterAddBLOBs(Letter : integer; fName, Table, Attr, Cond : PChar) : integer;
FUNCTION LetterAddBLOBs(IN Letter INT, INOUT fName CHAR (255), INOUT Table
CHAR (255), INOUT Attr CHAR (32), INOUT Cond CHAR (255)) RETURNS INT;

Parametry

letter | handle dopisu
fName | jméno, pod kterým se obsah BLOBU k zásilce připojí
table | jméno tabulky, ze které se bude odesílat (obecně tam může být cokoliv, co může být v SELECTU za FROM)
attr | jméno sloupce, ze kterého se bude odesílat (musí to být sloupec proměnné délky typu TEXT, RASTER, OLE)
cond | výběrová podmínka, která identifikuje záznam, ze kterého se bude odesílat (podmínka musí vybrat právě jeden záznam, jiný počet vybraných záznamů způsobí chybu SQ_CARDINALITY_VIOLATION)

Od verze

7.0d

Popis

Funkce připojí k vytvářené zásilce elektronické pošty soubor vytvořený z obsahu sloupce typu BLOB databázové tabulky. Handle dopisu vrací (zásilku vytváří) funkce LetterCreate.

Výběr sloupce typu BLOB je v této funkci prováděn způsobem využitelným v jazyce SQL (narozdíl od obdobné funkce LetterAddBOLBr, která se více hodí pro API klientského jazyka)

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

  • LetterAddFile
  • LetterAddBLOBr


CloseWBMail

Interní programovací jazyk

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 Day_of_week

Day_of_week

Interní programovací jazyk

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 Import_appl

Import_appl

BOOL Import_appl(cdp_t cdp, window_id hParent, char * aplname);
function Import_appl(cdp : cdp_t; hParent : window_id; aplname : PChar) : Boolean;

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). Pokud aplikace téhož jména nebo téhož ID existuje, nabídne uživateli možnost import přerušit, změnit jméno (a ID) importované aplikace a pokračovat nebo nahradit staré objekty objekty novými (nelze nahrazovat tabulky s daty v případě, že mezi nimi referenční integrita - import skončí chybou).

Hodnota funkce

Funkce vrací při chybě FALSE.

Viz

  • Export_app_ex
  • Import_app_ex


Funkce Am_I_db_admin

Am_I_db_admin

Interní programovací jazyk

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é.

Od verze 8 se jedná o funkci zastaralou, protože oprávnění a zodpovědnost dřívějšího správce byla rozdělena do tří nových správcovských skupin - CONFIG_ADMIN, DB_ADMIN a SECURITY_ADMIN. Vlastní administraci aplikace by měl mít na starost uživatel zařazený do role ADMINISTRATOR, úpravy aplikace uživatel v roli AUTHOR (v zamčené aplikaci přebírá tuto funkci jiná určená role).

Hlavní původní využití - nepovolit běžnému uživateli administrátorské činnosti na SQL serveru, je možné zajistit nyní novou funkcí Am_I_config_admin.

Pro zjištění náležení do skupiny či role lze použít obecnou klientskou funkci GetSet_group_role nebo SQL funkci Get_membership.

Hodnota funkce

Funkce vrací TRUE, je-li uživatel správce databáze, FALSE, není-li tomu tak.

Příklad

Použití podmíněného překladu pro rozlišení uživatele s právem zakládat nové uživatele.

   if Find_object(uzivname,CATEG_USER,usernum) then begin
#if _WINBASE602_ = "8.0"
       if Am_I_config_admin then begin
#else
       if Am_I_db_admin then begin
#endif
         strpom := 'Uživatel > '+uzivname+' < není dosud založen(a).'#10'Chcete ho založit právě teď?';
         if YesNo_box('Upozornění',strpom) then
           if Create_user(uzivname,'','','','',homesrv,passw,usernum) then Signalize

Viz

  • Am_I_config_admin
  • Am_I_security_admin


Funkce Replicate

Replicate

Interní programovací jazyk

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 protějšího serveru
applname | jméno protější aplikace
pull | směr replikací

Od verze:

6.0

Popis

Funkce slouží k provedení replikace dat ze zvoleníé aplikace applname se serverem servername zvoleným směrem, bez ohledu na nastavenou replikační periodu. Je-li parametr pull roven FALSE, vytvoří se pro protější server replikační paket. Je-li parametr pull roven TRUE, zašle se protějšímu serveru žádost o replikaci.

Jedná se o neinteraktivní obdobu funkce AReplicate. Aby funkce měla smysl, předpokládá se navázané sdílení aplikace aplname.

Hodnota funkce

Funkce vrací TRUE při chybě

Viz

  • Programové ovládání replikací


Funkce New

New

Interní programovací jazyk

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

Interní programovací jazyk

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 602SQL.

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 link_kernel

link_kernel

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).

Od verze 7.0 je možno dvojici funkcí link_kernel a interf_init nahradit jedinou funkci connect.

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 Roll_back

Roll_back

Interní programovací jazyk

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 From_xbase

From_xbase

Interní programovací jazyk

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 602SQL
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 602SQL. Tuto tabulku vytvoří pod jménem tablename. Tabulka tohoto jména nesmí ve stejné aplikaci ve 602SQL 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 602SQL.

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 602SQL 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 Money2str

Money2str

Interní programovací jazyk

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 start_package

start_package

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 Odd

Odd

Interní programovací jazyk

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 waiting

waiting

Interní programovací jazyk

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.


Funkce Ord

Ord

Interní programovací jazyk

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 Write_lock_record

Write_lock_record

Interní programovací jazyk

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 Get_fcursor

Get_fcursor

Interní programovací jazyk

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ů mají v horních 17 bitech 1 a 18. bit shora je 0, čísla tabulek jsou kladná a nepříliš velká, 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 0. 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 < 0 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 Strcopy

Strcopy

Interní programovací jazyk

function Strcopy(var s : string; index, count : Integer) : 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ů.

V jazyce SQL slouží stejnému účelu funkce Substring.

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


Funkce Create_group

Create_group

Interní programovací jazyk

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


Procedura Chng_component_flag

Chng_component_flag

Interní programovací jazyk

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 Get_info

Get_info

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

Tato funkce je zastaralá. Používejte místo ní funkci Get_server_info.

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 v Extension Packu.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.


Funkce Delete

Delete

Interní programovací jazyk

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 Read_lock_record

Read_lock_record

Interní programovací jazyk

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 interf_close

interf_close

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.

Od verze 7.0 je možno nahradit funkcí disconnect.

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

interf_init


Funkce cdp_init

cdp_init

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 Bigint2str

Bigint2str

Interní programovací jazyk

function Bigint2str(bint : bigint) : string;

Parametry

bint hodnota, která se má konvertovat

Od verze

7.0

Popis

Funkce Bigint2str 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 bint.

Viz

  • Str2int
  • Int2str
  • Str2bigint


Funkce Read_record

Read_record

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.

V klientské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 Sin

Sin

Interní programovací jazyk

function Sin(r : real) : real;
FUNCTION Sin(IN r REAL) RETURNS 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


Funkce Repl_GetSet_appl_props

Repl_GetSet_appl_props

BOOL Repl_GetSet_appl_props (cdp_t cdp, const char * applname, int oper, char *prop);
function Repl_GetSet_appl_props(cdp : cdp_t; applname: PChar; oper : integer; var prop) : Boolean;

Parametry

cdp | kontextová proměnná klienta
applname | jméno sdílené aplikace
oper | kód operace
prop | ukazatel na hodnotu parametru

Od verze:

6.1b

Popis

Funkce umožňuje zjistit a nastavit replikační vlastnosti aplikace.

Kód operace oper může mít některou z následujících hodnot:

Jméno | Hodn. | Parametr Prop | Popis
RPAP_GET_TOKENSRVR | 1 | Ukazatel na char | Vrací jméno serveru, který je správcem pešků.
RPAP_SET_TOKENSRVR | 2 | Ukazatel na char | Nastaví jméno serveru, který je správcem pešků.
RPAP_GET_CONFLSRVR | 3 | Ukazatel na char | Vrací jméno otcovského serveru pro detekci replikačních konfliktů.
RPAP_SET_CONFLSRVR | 4 | Ukazatel na char | Nastaví jméno otcovského serveru pro detekci replikačních konfliktů.

Hodnota funkce

Funkce vrací FALSE v případě úspěchu, TRUE při chybě.

Viz

  • Programové ovládání replikací


Funkce Insert_object

Insert_object

Interní programovací jazyk

function Insert_object(var name : string; category : short; var objnum : tobjnum) : 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

  • SQL_execute


Funkce Repl_cancel_packet

Repl_cancel_packet[CP]

BOOL Repl_cancel_packet(cdp_t cdp, const char *SrvrName);
function Repl_cancel_packet(cdp : cdp_t; SrvrName: PChar): Boolean;

Parametry

SrvrName - | jméno protějšího serveru
cdp | kontextová proměnná klienta

Od verze:

7.0

Popis

Pokud nepřišlo potvrzení posledního paketu, je možné zavolat funkci Repl_resend_packet, ta v takovémto případě odešle protějšímu serveru dotaz na stav, protější server vrátí číslo naposledy přijatého paketu a místní server podle toho jestli:

  • číslo přijatého se rovná číslu posledního odeslaného (ztratilo se potvrzení): zaktualizuje stav tak, jako kdyby potvrzení posledního paketu přišlo

  • číslo přijatého se rovná číslu předposledního odeslaného (ztratil se paket): znovu odešle poslední paket

  • jinak: takový stav by za normálního provozu neměl nastat a pokud nastane, je třeba databáze z obou stran synchronizovat

Pokud přijde zamítnutí replikačního paketu, je možné buď odstranit příčinu odmítnutí (zpravidla duplicitu klíčů v indexu) na vzdáleném serveru a zavolat funkci Repl_resend_packet a ta znovu odešle odmítnutý paket. Nebo je možné odstranit příčinu odmítnutí na místním serveru, zavolat funkci Repl_cancel_packet, která zruší zamítnutý paket a změní stav serveru jako by se poslední paket vůbec neodesílal, a potom znovu vyvolat přereplikování změn.

Funkcím Repl_resend_packet a Repl_cancel_packet odpovídají tlačítka Znovu odeslat a Zrušit paket na řídicím panelu aplikace.

Hodnota funkce

Funkce vrací FALSE v případě úspěchu a TRUE dojde-li k chybě, kód chyby lze zjistit pomocí funkce Sz_error nebo vypsat pomocí Signalize. Chyba NO_OBJECT (141) indikuje, že poslední paket není ve stavu ”Potvrzení nepřišlo” nebo ”Přišlo zamítnutí”.

Viz

  • Repl_resend_packet
  • Programové ovládání replikací


Funkce Sqr

Sqr

Interní programovací jazyk

function Sqr(r : real) : real;
FUNCTION Sqr(IN r REAL) RETURNS 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 LetterSend

LetterSend

Interní programovací jazyk

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 WinBase602_version

WinBase602_version

Interní programovací jazyk

function WinBase602_version : integer;
sig32 [cd_]WinBase602_version([cdp_t cdp]);
function [cd_]WinBase602_version ([cdp : cdp_t]) : sig32;
FUNCTION WinBase602_version RETURNS INT;

Parametry

[cdp kontextová proměnná klienta]

Popis

Funkce WinBase602_version vrací číslo verze 602SQL. V horním slově je hlavní číslo verze, ve spodním vedlejší číslo.

Hodnota funkce

Funkce vrací číslo verze 602SQL.

Příklad v klientském jazyce:

var
  i : integer;
  s : string[20];
begin
  i := WinBase602_version;
  s := "Verze "+Int2str(i div 65536)+"."+Int2str(i mod 65536);
  Info_box("602SQL",s)
end.

Příklad v SQL:

PROCEDURE `VERSION`( OUT vers CHAR(5));
/*****************************************************/
BEGIN
  DECLARE i INT;
  SET i = WinBase602_version;
  SET vers = Int2str(i div 65536)+"."+Int2str(i mod 65536);
END


Funkce Data_export

Data_export

Interní programovací jazyk

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. V klientské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 602SQL
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


Procedura Err_mask

Err_mask

Interní programovací jazyk

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 Init_non_mdi_env

Init_non_mdi_env

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 602SQLFramProc.

Viz

  • GetClient
  • Open_project
  • Register_ext_menu
  • Init_window_env
  • 602SQLFrameProc


Procedura Help_file

Help_file

Interní programovací jazyk

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 MailBoxSaveFileDBr

MailBoxSaveFileDBr

Interní programovací jazyk

function MailBoxSaveFileDBr(mailbox, id, fileid : integer; var filename : string; table : tcurstab; pos : trecnum; attr : tattrib; index : short) : integer;
int MailBoxSaveFileDBr(DWORD mailbox, DWORD id, DWORD fileidx, LPCSTR filename, tcurstab table, trecnum pos, tattrib attr, uns16 index);
function MailBoxSaveFileDBr(mailbox, id, fileidx : integer; filename : PChar; table : tcurstab; pos : trecnum; attr : tattrib; index : short) : 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
table | číslo tabulky nebo otevřeného kurzoru
pos | číslo záznamu
attr | číslo sloupce
index | index multiatributu, NOINDEX pro jednoduchý atribut

Od verze

7.0d

Popis

Uloží připojený soubor vybrané poštovní zásilky do tabulky table.

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.

Tabulka table musí existovat a mít vhodný řádek a sloupec.

Pro použití v jazyce SQL existuje obdobná funkce MailBoxSaveFileDBs.

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

  • MailBoxSaveFileAs
  • MailBoxSaveFileDBs


Funkce MailBoxSaveFileDBs

MailBoxSaveFileDBs

Interní programovací jazyk

function MailBoxSaveFileDBs(mailbox, id, fileidx : integer; var filename, table, attr, cond : string) : integer;
int MailBoxSaveFileDBs(DWORD mailbox, DWORD id, DWORD fileidx, LPCSTR filename, LPCSTR table, LPCSTR attr, LPCSTR cond);
function MailBoxSaveFileDBs(mailbox, id, fileidx: integer; filename, table, attr, cond : PChar) : integer;
FUNCTION MailBoxSaveFileDBs(IN mailbox INT, IN id INT, IN fileidx INT,
INOUT filename CHAR(255), INOUT table CHAR (255), INOUT attr CHAR (32),
INOUT cond CHAR (255)) RETURNS INT;

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
table | jméno tabulky, do které se bude ukládat (obecně tam může být cokoliv, co může být v SELECTU za FROM)
pos | číslo záznamu
attr | jméno sloupce, do kterého se bude ukládat (musí to být sloupec proměnné délky typu TEXT, RASTER, OLE)
cond | výběrová podmínka, která identifikuje záznam, do kterého se bude ukládat (podmínka musí vybrat právě jeden záznam, jiný počet vybraných záznamů způsobí chybu SQ_CARDINALITY_VIOLATION)

Od verze

7.0d

Popis

Uloží připojený soubor vybrané poštovní zásilky do tabulky table.

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.

Tabulka table musí existovat a mít vhodný řádek a sloupec.

Mimo SQL existuje obdobná funkce MailBoxSaveFileDBr.

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

  • MailBoxSaveFileAs
  • MailBoxSaveFileDBr


Funkce Set_application_ex

Set_application_ex

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 602SQL nejsou foldery ani data změn objektů programově zpřístupněny.

V klientské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 Undelete

Undelete

Interní programovací jazyk

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 v klientské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 Repl_GetSet_local_server_props

Repl_GetSet_local_server_props

BOOL Repl_GetSet_local_server_props(cdp_t cdp, int oper, void *prop);
function Repl_GetSet_local_server_props(cdp : cdp_t; oper : integer; var prop) : Boolean;

Parametry

cdp | kontextová proměnná klienta
oper | kód operace
prop | ukazatel na hodnotu parametru

Od verze:

6.1b

Popis

Umožňuje zjistit nebo nastavit replikační parametry lokálního serveru.

Po změně (změnách) parametrů je nutné zavolat funkci Reset_replication.

Kód operace oper může mít některou z následujících hodnot:

Jméno | Hodn. | Parametr Prop | Popis
RPLS_GET_ENABLED | 1 | Ukazatel na bool | Vrací stav příznaku "Replikace povolena".
RPLS_SET_ENABLED | 2 | Ukazatel na bool | Povolí nebo zakáže replikace.
RPLS_GET_ADDRESS1 | 3 | Ukazatel na char | Vrací primární adresu serveru.
RPLS_SET_ADDRESS1 | 4 | Ukazatel na char | Nastaví primární adresu serveru.
RPLS_GET_ADDRTYPE1 | 5 | Ukazatel na char | Vrací typ primární adresy serveru, "Direct IP” pro Direct IP, "Input directory” pro sdílený adresář.
RPLS_SET_ADDRTYPE1 | 6 | Ukazatel na char | Nastaví typ primární adresy serveru.
RPLS_GET_ADDRESS2 | 7 | Ukazatel na char | Vrací alternativní adresu serveru.
RPLS_SET_ADDRESS2 | 8 | Ukazatel na char | Nastaví alternativní adresu serveru.
RPLS_GET_ADDRTYPE2 | 9 | Ukazatel na char | Vrací typ alternativní adresy serveru.
RPLS_SET_ADDRTYPE2 | 10 | Ukazatel na char | Nastaví typ alternativní adresy serveru.
RPLS_GET_MAILPROF | 11 | Ukazatel na char | Vrací jméno poštovního profilu použitého pro replikace.
RPLS_SET_MAILPROF | 12 | Ukazatel na char | Nastaví jméno poštovního profilu použitého pro replikace.
RPLS_SET_MAILPWORD | 13 | Ukazatel na char | Nastaví heslo pro přístup k poště (pro případ, že heslo není specifikováno v profilu).
RPLS_SET_MAILDPWORD | 14 | Ukazatel na char | Nastaví heslo pro telefonní připojení použité pro přístup k poště (pro případ, že heslo není specifikováno v profilu).
RPLS_GET_DIPDCONN | 15 | Ukazatel na char | Vrací jméno telefonního připojení použitého pro Direct IP.
RPLS_SET_DIPDCONN | 16 | Ukazatel na char | Nastaví jméno telefonního připojení použitého pro Direct IP.
RPLS_GET_DIPDUSER | 17 | Ukazatel na char | Vrací jméno uživatele telefonního připojení použitého pro Direct IP.
RPLS_SET_DIPDUSER | 18 | Ukazatel na char | Nastaví jméno uživatele telefonního připojení použitého pro Direct IP.
RPLS_SET_DIPDPWORD | 19 | Ukazatel na char | Nastaví heslo uživatele telefonního připojení použitého pro Direct IP.
RPLS_GET_INQUEUE | 20 | Ukazatel na char | Vrací cestu k adresáři, který slouží jako vstupní fronta pro replikační pakety.
RPLS_SET_INQUEUE | 21 | Ukazatel na char | Nastaví cestu k adresáři, který slouží jako vstupní fronta pro replikační pakety.
RPLS_GET_OUTQUEUE | 22 | Ukazatel na char | Vrací cestu k adresáři, který slouží jako výstupní fronta pro replikační pakety.
RPLS_SET_OUTQUEUE | 23 | Ukazatel na char | Nastaví cestu k adresáři, který slouží jako výstupní fronta pro replikační pakety.
RPLS_GET_THREADCNT | 24 | Ukazatel na int | Vrací počet replikačních vláken.
RPLS_SET_THREADCNT | 25 | Ukazatel na int | Nastaví počet replikačních vláken.
RPLS_GET_REPLPERIOD | 26 | Ukazatel na int | Vrací periodu prohlížení replikačních plánů.
RPLS_SET_REPLPERIOD | 27 | Ukazatel na int | Nastaví periodu prohlížení replikačních plánů.
RPLS_GET_LOGTABLES | 28 | Ukazatel na bool | Vrátí stav povolení zápisu do systémových logovacích tabulek
RPLS_SET_LOGTABLES | 29 | Ukazatel na bool | Povolí resp. zakáže zápis do tabulek
RPLS_GET_REPLTRIGGERS | 30 | Ukazatel na bool | Vrátí stav povolení spouštění systémových replikačních triggerů
RPLS_SET_REPLTRIGGERS | 31 | Ukazatel na bool | Povolí resp. zakáže spouštění triggerů

Hodnota funkce

Funkce vrací FALSE v případě úspěchu, TRUE při chybě.

Viz

  • Programové ovládání replikací


Funkce Hours

Hours

Interní programovací jazyk

function Hours(tm : time) : integer;
int Hours(uns32 tm);
function Hours(tm : uns32) : integer;

Parametry

tm údaj o čase ve vnitřním tvaru 602SQL

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


Funkce Logout

Logout

Interní programovací jazyk

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 v klientském jazyce volat, protože vývojové nebo provozní prostředí 602SQL 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


Funkce MailHangUp

MailHangUp

Interní programovací jazyk

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 Get_message

Get_message

Interní programovací jazyk

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í (notifikační) 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 Addr

Addr

Interní programovací jazyk

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


Procedura View_close

View_close

Interní programovací jazyk

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


Funkce Add_record

Add_record

Interní programovací jazyk

function Add_record(curs : tcursnum; var recs; numoftabs : integer) : 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 vytvoř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 Uninst_table

Uninst_table

Interní programovací jazyk

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.


Procedura Set_printer

Set_printer

Interní programovací jazyk

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


Procedura Create_semaphore

Create_semaphore

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.

Hodnota funkce

Funkce vrací při úspěchu identifikaci (handle) vytvořeného semaforu, při neúspěchu nulu.

Viz

  • Close_semaphore
  • Release_semaphore
  • Wait_for_semaphore


Procedura View_open

View_open

Interní programovací jazyk

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


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 Data_import

Data_import

Interní programovací jazyk

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 602SQL. 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 602SQL
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 Print_view

Print_view

Interní programovací jazyk

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


Funkce Set_progress_report_modulus

Set_progress_report_modulus

Interní programovací jazyk

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), importy a exporty dat a další hromadné operace mohou na stavový řádek klienta průběžně vypisovat počet již zpracovaných záznamů. 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 zatěžuje síťovou komunikaci mezi klientem a serverem a zpomaluje práci, přináší však uživateli informaci o postupu déle trvajících operací. Implicitní hodnota modulus je 64.

Hodnota funkce

Funkce vrací TRUE při chybě.


Funkce Define_table

Define_table

Interní programovací jazyk

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 GetSet_fil_size

GetSet_fil_size

Interní programovací jazyk

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. Touto funkci nelze zmenšit velikost souboru. Funkci s hodnotou OPER_SET smí volat pouze provozní správce (CONFIG:ADMIN), jinak dojde k chybě NO_RIGHTS (129 - Nemáte právo provést tuto akci).

Používá se poté, co funkcí Get_server_info zjistíte malý počet volných clusterů databázového souboru nebo v aplikaci 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í 602SQL).

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_server_info
  • GetSet_fil_blocks


Funkce Token_control

Token_control

Interní programovací jazyk

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 Register_ext_menu

Register_ext_menu

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 602SQL o změně menu hlavního okna 602SQL. 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 Peek_message

Peek_message

Interní programovací jazyk

function Peek_message : Boolean;

Popis

Funkce Peek_message zjišťuje, zda je k dispozici nějaká zpráva pro prezentační vrstvu 602SQL.

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


Funkce Create_link

Create_link

Interní programovací jazyk

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 Who_am_I

Who_am_I

Interní programovací jazyk

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);


Funkce Set_data_rights

Set_data_rights

Interní programovací jazyk

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


Procedura Memcpy

Memcpy

Interní programovací jazyk

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;


Procedura View_toggle

View_toggle

Interní programovací jazyk

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 answered

answered

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 Repl_register_new_remote_server

Repl_register_new_remote_server

BOOL Repl_register_new_remote_server(cdp_t cdp, HWND hParent);
function Repl_register_new_remote_server(cdp : cdp_t; hParent : window_id) : Boolean;

Parametry

cdp | kontextová proměnná klienta
hParent | handle rodičovského okna nebo 0

Od verze:

6.1b

Popis

Otevře dialog pro navázání spojení se vzdáleným replikačním serverem.

Hodnota funkce

Viz

  • Programové ovládání replikací


Funkce Quarter

Quarter

Interní programovací jazyk

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 Set_ext_pos

Set_ext_pos

Interní programovací jazyk

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 Acreate_user

Acreate_user

Interní programovací jazyk

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


Procedura Printer_dialog

Printer_dialog

Interní programovací jazyk

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 602SQL. 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 Main_menu

Main_menu

Interní programovací jazyk

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 602SQL 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 602SQL. 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 Open_sql_cursor

Open_sql_cursor

Interní programovací jazyk

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 Delete_all_records

Delete_all_records

Interní programovací jazyk

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 Set_int_pos

Set_int_pos

Interní programovací jazyk

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 C_Avg

C_Avg

Interní programovací jazyk

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 assign_to_thread

assign_to_thread

void cd_assign_to_thread(cdp_t cdp);
procedure cd_assign_to_thread(cdp : cdp_t);

Parametry

cdp kontextová proměnná klienta

Od verze:

7.0b

Popis

Funkce assign_to_thread umožňuje provoz aplikací, které mají více vláken přistupujících k databází a jedno vlákno může používat spojení vytvořené jiným vláknem. V takovém případě vlákno musí před započetím práce s databází zavolat tuto funkci. Po ukončení práce, zejména však předtím, než začne využívat jiné spojení na databázi, vlákno musí zavolat funkci unassign.

Výše uvedené pravidlo platí bez ohledu na to, zda aplikace vytvoří pouze jedno spojení na databázi nebo více.

Každému spojení na databázový server přísluší jedna kontextová proměnná cd, na níž odkazuje ukazatel cdp. Tyto funkce se volají na kontextovou proměnnou, na níž úspěšně proběhla funkce connect nebo interf_init. Volají se před provedením disconnect nebo interf_close.

V době, kdy jedno vlákno používá některé spojení na databázi, nesmí se stejným spojením pracovat jiné vlákno. O dodržení této podmínky se musí postarat aplikace.

Viz

  • unassign


Funkce Send_message

Send_message

Interní programovací jazyk

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_., v klientské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 Set_appl_starter

Set_appl_starter

Interní programovací jazyk

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 Signature_state

Signature_state

Interní programovací jazyk

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 Repl_edit_relation

Repl_edit_relation

BOOL Repl_edit_relation (cdp_t cdp, HWND hParent, const char *relname);
function Repl_edit_relation(cdp : cdp_t; hParent : window_id; relname : PChar) : Boolean;

Parametry

cdp | kontextová proměnná klienta
hParent | handle rodičovského okna nebo 0
relname | jméno relačního vztahu

Od verze:

6.1b

Popis

Otevře okno pro návrh replikačního vztahu. Pokud relname označuje existující vztah, edituje se tento vztah. Pokud relname je prázdný řetězec, otevře se okno pro návrh nového vztahu.

Hodnota funkce

Funkce vrátí TRUE, pokud se podařilo zapsat změny v replikačním vztahu.

Viz

  • Programové ovládání replikací


Funkce Alogin

Alogin

Interní programovací jazyk

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 v klientské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 Strlength

Strlength

Interní programovací jazyk

function Strlength(var s : string) : Integer;

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. V jazyce SQL slouží stejnému účelu funkce Char_length.

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 Fulltext_remove_doc

Fulltext_remove_doc

PROCEDURE Fulltext_remove_doc(IN ft_label CHAR(52), IN docid INT);

Parametry:

ft_label | označení fulltextového systému;
docid | číslo dokumentu

Od verze:

7.0

Popis:

Funkce odstraní zadaný dokument z indexů fulltextového systému určeného parametrem ft_label.

Funkci Fulltext_remove_doc není třeba volat po změně v dokumentu před voláním funkce Fulltext_index_doc, protože starý obsah dokumentu je při novém indexování odstraněn automaticky. Funkci lze volat například v triggeru na operaci DELETE na tabulce obsahující dokumenty.

Příklad:

TRIGGER txdel BEFORE DELETE ON Txtab
REFERENCING OLD AS stare FOR EACH ROW
BEGIN
   CALL Fulltext_remove_doc("", stare.cislo_doc);
END

Viz

  • Fulltextové nástroje ve 602SQL
  • Označování a uložení dokumentů ve fulltextových systémech
  • Fulltextové vyhledávání dokumentů
  • Fulltext_create
  • Fulltext_destroy
  • Fulltext_index_doc
  • Fulltext_context


Funkce Seek

Seek

Interní programovací jazyk

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:

procedura, 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


Procedura Close_view

Close_view

Interní programovací jazyk

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


Funkce concurrent

concurrent

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 Make_time

Make_time

Interní programovací jazyk

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 602SQL.

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


Funkce Sqrt

Sqrt[I..S]

function Sqrt(r : real) : real;
FUNCTION Sqrt(IN r REAL) RETURNS 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 Str2date

Str2date

Interní programovací jazyk

function Str2date(var s : string) : date;
BOOL str2date(const char * s, uns32 * dt);
function str2date(s : PChar; var dt : uns32) : Boolean;
FUNCTION Str2date(IN s CHAR()) RETURNS DATE;

Parametry

s | řetězec znaků obsahující zápis data ve tvaru den.měsíc nebo den.měsíc.rok
dt | výstupní parametr: datum

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. V jazyce SQL slouží stejnému účelu funkce CAST.

Hodnota funkce

V klientském jazyce a v SQL funkce vrátí datum, pokud jeho zápis je (jediným) obsahem řetězce s, jinak vrací NONEDATE. V jazyce C a v Pascalu funkce vrací TRUE pokud převod byl úspěšný.

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 Write_unlock_table

Write_unlock_table

Interní programovací jazyk

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 Find2_object

Find2_object

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 Arctan

Arctan

Interní programovací jazyk

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 To_xbase

To_xbase

Interní programovací jazyk

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 602SQL
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 602SQL 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 602SQL 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


Procedura Show_help

Show_help

Interní programovací jazyk

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í v klientské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


Funkce Fulltext_create

Fulltext_create

FUNCTION Fulltext_create(IN ft_label CHAR(52), IN params CHAR(255)) RETURNS BOOLEAN;

Parametry:

ft_label | označení fulltextového systému;
params | parametry fulltextového systému

Od verze:

7.0

Popis:

Funkce vytvoří na SQL serveru nový fulltextový systém. Parametr ft_label určuje aplikaci, v niž bude fulltextový systém vytvořen, a případný identifikátor sloužící k rozlišení fulltextových systému v rámci jedné aplikace.

Parametry fulltextového systému se zadávají jako řetězec znaků obsahující jeden nebo více zápisů ve tvaru klíč=hodnota oddělených středníkem. Jsou definovány významy těchto klíčů:

basic_form=0, pokud systém má rozlišovat tvary slov, nebo 1, pokud systém má považovat všechny tvary za stejné slovo;

language=kód jazyka (0=čeština, 1=slovenština, 2=němčina, 3=americká angličtina, 4=britská angličtina, 5=polština, 6=maďarština, 7=francouzština);

weighted=0, pokud všechny výskyty slov v dokumentu mají stejnou váhu, nebo 1, pokud se rozlišují váhy výskytu slova v dokumentu.

Defaultní parametry zadané prázdným řetězcem odpovídající nastavení "basic_form=1;language=0;weighted=0" vytvoří fulltextový systém pro češtinu, sledující základní tvar slova a nerozlišující mezi váhami výskytu slova v dokumentu.

Hodnota funkce

Funkce vrací TRUE při úspěchu, FALSE při chybě.

Příklady:

CALL Fulltext_create("", "") vytvoří nový fulltextový systém s prázdným identifikátorem s defaultními parametry v běžné aplikaci.

CALL Fulltext_create("SPISOVNA.DOPISY", "basic_form=1;language=0;weighted=0") - vytvoří nový fulltextový systém DOPISY v aplikaci SPISOVNA.

CALL Fulltext_create("SPISOVNA", "") - vytvoří nový fulltextový systém s prázdným identifikátorem v aplikaci SPISOVNA.

CALL Fulltext_create(".ROZHODNUTI", "") vytvoří nový fulltextový systém ROZHODNUTI v otevřené aplikaci

Viz

  • Fulltextové nástroje ve 602SQL
  • Označování a uložení dokumentů ve fulltextových systémech
  • Fulltextové vyhledávání dokumentů
  • Fulltext_destroy
  • Fulltext_index_doc
  • Fulltext_remove_doc
  • Fulltext_context


Funkce Filelength

Filelength

Interní programovací jazyk

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 IsViewChanged

IsViewChanged

Interní programovací jazyk

function IsViewChanged(hView : window_id) : Boolean;
BOOL IsViewChanged(window_id hView);
function IsViewChanged(hView : window_id) : Boolean;

Parametry

hView identifikace (handle) otevřeného formuláře

Od verze:

7.0

Popis

Funkce slouží ke zjištění, byla-li v otevřeném formuláři provedena editační změna.

Podle druhu synchronizace formuláře se funkce vztahuje na:

- formulář se složkovou synchronizací - lze funkcí zjistit rozeditování jediné (aktuální) složky;

- formulář se záznamovou synchronizací - lze zjistit rozeditování záznamu (častější případ).

Změna v subformuláři se projeví také ve všech nadřízených formulářích. Uložením změn (funkcí, metodou nebo standardní akcí) se informace o změnách ztrácí.

Hodnota funkce

Funkce vrací TRUE, je-li ve formuláři rozeditovaný záznam či složka, FALSE, pokud ve formuláři nedošlo od otevření (případně od posledního uložení změn) ke změně.

Viz

  • Roll_back_view
  • Commit_view


Procedura Strinsert

Strinsert

Interní programovací jazyk

function Strinsert(var source : string; var s : string; index : Integer) : 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ž 4000 znaků, což spojováním řetězců pomocí operátoru + v klientském jazyce nebo funkcí 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), CLOVEK CHAR(25), '
    'ULICE CHAR(30), MESTO CHAR(30), '
    'PSC CHAR(6), TEL CHAR(25), '
    'FAX CHAR(25), 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 Export_appl

Export_appl

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 Dispose

Dispose

Interní programovací jazyk

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


Funkce Database_integrity

Database_integrity

Interní programovací jazyk

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 Look_up

Look_up

Interní programovací jazyk

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 v klientské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


Procedura Close

Close

Interní programovací jazyk

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 602SQL 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


Funkce timestamp2str

timestamp2str

Interní programovací jazyk

function timestamp2str (dtm : timestamp; prez : integer) : 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 Str2money

Str2money

Interní programovací jazyk

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. V jazyce SQL slouží stejnému účelu funkce CAST.

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 Set_preview_type

Set_preview_type

void Set_preview_type(int type, window_id hParent);
procedure Set_preview_type(type : Integer, hParent: window_id);

Parametry

type | typ preview - viz tabulka níže
hParent | identifikace (handle) formuláře, který má být vždy pod otevíraným dialogem, nebo nula

Od verze

7.0

Popis

Procedura umožní zvolit, v jakém okně se zobrazí preview tiskové sestavy. Po následujícím vlastním tisku preview se nastaví automaticky defaultní stav.

hodnota | význam
0 | MDI okno - defaultní stav
1 | child okno
2 | popup okno


Funkce LetterCancel

LetterCancel

Interní programovací jazyk

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


Funkce MailBoxGetMsg

MailBoxGetMsg

Interní programovací jazyk

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 včetně hlavičky vybrané zásilky a uloží jej do systémové tabulky _INBOXMSGS do sloupce Body. Pokud je třeba oddělit text dopisu od hlavičky, použijte rozšířenou funkci MailBoxGetMsgEx.

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
  • MailBoxGetMsgEx
  • MailBoxGetFilInfo
  • MailBoxSaveFileAs
  • MailBoxDeleteMsg
  • MailCloseInBox
  • MailGetInBoxInfo
  • MailGetType


Funkce Connection_speed_test

Connection_speed_test

Interní programovací jazyk

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 síťového spojení klient – server. Ve výstupních parametrech funkce vrátí hodnoty získané zkušební intenzivní komunikací. Pokud klient i server běží na stejném počítači, výsledky této funkce nemají relevanci.

Funkce odpovídá akci Rychlost spojení z Řídicího panelu vývojového prostředí.

Hodnota funkce

Funkce vrací TRUE při chybě.


Funkce Pref

Pref

Interní programovací jazyk

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


Funkce Restore_table

Restore_table

Interní programovací jazyk

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 602SQL 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 v klientské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 Owned_cursor

Owned_cursors

Interní programovací jazyk

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 timestamp2time

timestamp2time

Interní programovací jazyk

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 Repl_synchronize

Repl_synchronize

BOOL Repl_synchronize(cdp_t cdp, const char * servername);
function Repl_synchronize(cdp : cdp_t; servername : PChar) : Boolean;

Parametry

cdp | kontextová proměnná klienta
servername | jméno serveru

Od verze:

6.1b

Popis

Zajistí, že se při příští replikaci přenesou na protější server všechna sdílená data, pro která je nastaveno replikování směrem ven.

Funkce předpokládá, že replikace jsou v provozu a že s uvedeným serverem je navázáno spojení. Volání funkce ovlivni replikování ve všech aplikacích, které se sdílejí s uvedeným serverem a v nichž se replikují data směrem ven.

Hodnota funkce

Funkce vrací FALSE v případě úspěchu, TRUE při chybě.

Viz

  • Programové ovládání replikací


Funkce Repl_abandon_sharing

Repl_abandon_sharing

BOOL Repl_abandon_sharing (cdp_t cdp, const char * servername, const char * applname);
function Repl_abandon_sharing (cdp : cdp_t; servername, applname : Pchar) : Boolean;

Parametry

cdp | kontextová proměnná klienta
servername | jméno protějšího serveru
applname | jméno sdílené aplikace

Od verze:

6.1b

Popis

Ukončí sdílení zadané aplikace. Do replikačních paketů pro uvedený server se přestanou zařazovat data z uvedené aplikace. Zároveň požádá protější server, aby přestal posílat data pro opačný směr replikace.

Volání funkce neovlivní odesílání těch replikačních paketů, které jsou již vytvořeny, ale dosud neodešly. Neovlivní chování protějšího serveru do té doby, než se mu podaří doručit žádost o ukončení sdílení.

Funkce předpokládá, že replikace jsou v provozu, že s uvedeným serverem je navázáno spojení a že uvedená aplikace se s nim sdílí.

Hodnota funkce

Funkce vrací TRUE při chybě, FALSE v případě úspěchu

Viz

  • Programové ovládání replikací


Funkce Translate

Translate

Interní programovací jazyk

function Translate(var curs : tcursnum; crec : trecnum; tbord : integer; 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 absolutní čí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 prvním formuláři
2. přepočet čísla aktuálního záznamu na na číslo záznamu ve zdrojové tabulce
3. otevřít druhý 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 SQL_exec_prepared

SQL_exec_prepared

Interní programovací jazyk

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; pole musí mít svou první složku před zavoláním inicializovanou hodnotou nula
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
  • SQL_host_execute cd_SQL_host_prepare,
  • Open_cursor_direct
  • Close_cursor


Funkce DefWinBaseFrameProc

DefWinBaseFrameProc

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 602SQL, a nezpracované zprávy následně předává funkci DefFrameProc.

Této funkci je hlavní okno aplikace 602SQL 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 SQL_execute

SQL_execute

Interní programovací jazyk

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;
FUNCTION SQL_execute(IN statement CLOB) RETURNS INT;

Parametry

statement | příkaz jazyka SQL
results | pole čísel, do nichž se zapíše informace o výsledku operace; pole musí mít svou první složku před zavoláním inicializovanou hodnotou nula
[cdp | kontextová proměnná klienta]

Od verze:

5.0, úprava ve verzi 8.0

Popis

Funkce vykoná příkaz jazyka SQL zadaný v parametru statement. Při překladu volání této funkce 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.

POZOR! Funkce má tři různé syntaxe pro různá prostředí!

V parametru statement může být více SQL příkazů oddělených středníkem. Při volání z klientské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 v klientské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é. Pole musí mít svou první složku před zavoláním inicializovanou hodnotou nula. 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_execute 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

Klientská 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ři použití této funkce v jazyce SQL se vrací buď číslo kompilační chyby, pokud příkazy předané jako parametr nelze přeložit, nebo 0, pokud bylo provedení příkazů úspěšné - viz Dynamické SQL příkazy uvnitř uložených procedur.

Příklad v klientském jazyce

sqlstr := "DELETE FROM Rtab WHERE metoda="+Int2str(id_metody);
if SQL_execute(sqlstr) then Signalize;
sqlstr := "DELETE FROM Rtab_header WHERE metoda="+Int2str(id_metody);
if SQL_execute(sqlstr) then Signalize;

Příklad v SQL:

může-li dojít ke kompilační chybě, je třeba ji ošetřit v kódu (nelze zachytit handlerem):

SET tabname="neex_tab" ;
SET pomstr="INSERT INTO "||tabname||" DEFAULT VALUES";
SET err=SQL_execute(pomstr);
IF err=1069 THEN
  CALL Log_write("kompilační chyba: tabulka >"|| tabname||"< neexistuje!!");
ELSEIF err>0 THEN
  CALL Log_write("kompilační chyba:"||Int2str(err));
ELSE ...

Viz

  • SQL_prepare
  • SQL_exec_prepared
  • SQL_drop
  • SQL_host_execute
  • Open_sql_cursor
  • Open_cursor_direct
  • Close_cursor


Procedura Pick_window

Pick_window

Interní programovací jazyk

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);


Procedura Info_box

Info_box

Interní programovací jazyk

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 v klientské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 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 Current_item

Current_item

Interní programovací jazyk

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 Get_var_address

Get_var_address

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 klientské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é klientské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 MailBoxSaveFileAs

MailBoxSaveFileAs

Interní programovací jazyk

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
  • MailBoxGetMsgEx
  • MailBoxGetFilInfo
  • MailBoxDeleteMsg
  • MailCloseInBox
  • MailGetInBoxInfo
  • MailGetType


Funkce Find_object

Find_object

Interní programovací jazyk

function Find_object(var name : string; category : short; var position : tobjnum) : 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]

Změna ve verzi 8

Do verze 7 včetně byl typ výstupního parametru position dvoubajtový (označený zde Short). Typ tobjnum je nyní čtyřbajtový.

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 Get_view_pos

Get_view_pos

Interní programovací jazyk

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 Set_status_text

Set_status_text

Interní programovací jazyk

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 Sz_warning

Sz_warning

Interní programovací jazyk

function Sz_warning : integer;
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í 602SQL. 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 Save_table

Save_table

Interní programovací jazyk

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 602SQL. 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 v klientské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

Interní programovací jazyk

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 602SQL

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 operačního systému funkcí Now je bez tisícin sekundy.

Viz

  • Make_date
  • Day
  • Month
  • Year
  • Today
  • Make_time
  • Hours
  • Minutes
  • Seconds
  • Now


Funkce Edit_view

Edit_view

Interní programovací jazyk

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.

Je-li objekt zašifrovaný v zamčené aplikaci, funkce oznámí nemožnost editace a vrátí FALSE.

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 Open_view

Open_view

Interní programovací jazyk

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 (-1), 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. Má-li se z modálního formuláře otevřít další modální formulář (a tedy “zablokovat” původní), je nutné hParent použít.

Parametrem hView může být buď konstanta NULL (NIL v klientské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, 602SQL 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 602SQL ve zprávě WM_COMMAND. Tuto zprávu si pak může v klientském jazyce vyzvednout funkce Get_ext_message.

Změna obsahu otevřeného formuláře se provádí funkcí Reset_view.

Programové zavření formuláře se provádí funkcí Close_view.

Objektová varianta otevření a zavření formuláře se jmenují form.Open a form.Close.

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

  • View_open
  • Register_rec_syn


Funkce Fulltext_index_doc

Fulltext_index_doc

Interní programovací jazyk

function Fulltext_index_doc(var ft_label : string; docid : integer; var filename : string; var format :string) : Boolean;
BOOL cd_Fulltext_index_doc(cdp_t cdp, const char * ft_label, t_docid docid, const char * filename, const char * format);
function cd_Fulltext_index_doc(cdp : cdp_t; ft_label : PChar; docid : integer; filename, format : PChar) : Boolean;
FUNCTION Fulltext_index_doc(IN ft_label CHAR(52), IN docid INT, IN doc CLOB, IN format CHAR(10), IN mode INT) RETURNS BOOLEAN;

Parametry:

ft_label | označení fulltextového systému;
docid | číslo dokumentu (unikátní hodnota v rámci fulltextového systému);
filename | plné jméno souboru obsahujícího dokument;
format | formát dokumentu (TXT, TEXT nebo PLAIN pro čistý text, WPD, RTF, DOC, HTM);
doc | dokument nebo odkaz na dokument podle hodnoty;
mode | způsob předání dokumentu

Od verze:

7.0

Popis:

Funkce uloží dokument specifikovaný parametry do fulltextového systému označeného parametrem ft_label.

Je-li funkce volána v klienta, pak dokument musí být uložen v souboru, jehož plné jméno je předáno jako parametr filename. Je-li funkce volána na serveru, pak lze dokument předat několikerým způsobem, přičemž způsob předání popisuje parametr mode takto:

0 - dokument je obsahem parametru doc (tj. v parametru doc je obsah sloupce (nebo výraz) typu CHAR nebo CLOB );

1 - dokument je v souboru, jehož jméno je v parametru doc (tj. v parametru doc je obsah sloupce typu CHAR, který obsahuje jen plná jména souborů);

2 - dokument je OLE objekt (embedded nebo linked) umístěný v parametru doc (tj. v parametru doc je obsah sloupce typu BLOB).

Pomocí format lze zvolit, má-li se indexovat čistý text (parametr TXT, TEXT nebo PLAIN) nebo jiný formát (WPD, RTF, DOC, HTM) - v tomto případě se provádí dodatečná analýza textu, je-li skutečně daný formát a jaké verze (u DOC). Nepodaří-li se analýza, funkce skončí s chybou.

Pokud způsob uložení dokumentu je 1 nebo 2, pak místo jména formátu dokumentu lze uvést "BYSUFFIX". Formát se pak zvolí automaticky podle přípony jména souboru.

Pokud je způsob uložení dokumentu 1 (jméno souboru) a soubor se nenajde, skončí funkce chybou.

Pokud fulltextový systém již obsahuje informace o obsahu dokumentu označeného parametrem docid, jsou před zaindexováním předaného dokumentu vymazány. Pokud indexujete více tabulek, věnujte pozornost unikátnosti čísla dokumentu pro všechny tabulky (např. využitím jedné sekvence)!

Hodnota funkce:

Funkce vrací TRUE při úspěchu, FALSE při chybě.

Příklad:

Předpokládejme, že tabulka TXTAB obsahuje text ve sloupci TX a číslo tohoto dokumentu ve sloupci CISLO_DOC. Text je buď prostý text nebo je ve formátu RTF. Zaindexování lze pak provádět v triggeru definovaném takto:

TRIGGER txupd AFTER UPDATE ON Txtab
REFERENCING NEW AS nove FOR EACH ROW
BEGIN
  IF Substring(nove.tx FROM 1 FOR 5) = '{\rtf' THEN
    CALL Fulltext_index_doc('', nove.cislo_doc, nove.tx, 'rtf', 0);
  ELSE
    CALL Fulltext_index_doc('', nove.cislo_doc, nove.tx, 'txt', 0);
  END IF;
END

Tento trigger předpokládá, že se číslo dokumentu při operaci UPDATE nemění.

Příklad:

Předpokládejme, že tabulka MojeCD má mj. primární klíč Id_CD, dále sloupce Nazev a Interpret typu CHAR(250), sloupce Skladby a Poznamka typu CLOB. Všechny tyto údaje je třeba zaindexovat (při vkládání nového CD a při editaci).

TRIGGER PoVlozeniCD AFTER INSERT ON MojeCD
REFERENCING NEW AS nove FOR EACH ROW
BEGIN
  CALL Fulltext_index_doc('', nove.id_CD, nove.nazev||nove.interpret||nove.skladby||nove.poznamka, 'txt', 0);
END
TRIGGER PoEditaciCD AFTER UPDATE OF ANY nazev,interpret,skladby,poznamka ON MojeCD
REFERENCING NEW AS nove FOR EACH ROW
BEGIN
  CALL Fulltext_index_doc('', nove.id_CD, nove.nazev||nove.interpret||nove.skladby||nove.poznamka, 'txt', 0);
END
TRIGGER PredVymazanim BEFORE DELETE ON MojeCD
REFERENCING OLD AS stare FOR EACH ROW
BEGIN
  CALL Fulltext_remove_doc("", stare.id_CD);
END

Viz

  • Fulltextové nástroje ve 602SQL
  • Označování a uložení dokumentů ve fulltextových systémech Fulltex
  • tové vyhledávání dokumentů
  • Fulltext_destroy
  • Fulltext_create
  • Fulltext_remove_doc
  • Fulltext_context


Funkce Free_deleted

Free_deleted

Interní programovací jazyk

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 v klientské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 : ttablenum;
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 money2real

money2real

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 Aset_password

Aset_password

Interní programovací jazyk

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 Repl_edit_local_server_options

Repl_edit_local_server_options

BOOL Repl_edit_local_server_options (cdp_t cdp, HWND hParent);
function Repl_edit_local_server_options(cdp : cdp_t; hParent : window_id) : Boolean;

Parametry

cdp | kontextová proměnná klienta
hParent | handle rodičovského okna nebo 0

Od verze:

6.1b

Popis

Otevře základní dialog pro nastavení parametrů replikací (tlačítko Replikace na Řídicím panelu), umožní definovat adresy a cesty pro přenos replikačních paketů, zapnout nebo vypnout replikování na SQL serveru.

Hodnota funkce

Viz

  • Programové ovládání replikací


Funkce Reset

Reset

Interní programovací jazyk

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


Funkce QBE_state

QBE_state

Interní programovací jazyk

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, v klientské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 Get_server_info

Get_server_info

Interní programovací jazyk

function Get_server_info(info_type : integer; var buffer; buffer_size : integer) : Boolean;
BOOL WINAPI [cd_]Get_server_info(cdp_t cdp, int info_type, void * buffer, unsigned buffer_size);
function [cd_]Get_server_info(cdp : cdp_t; info_type : integer; var buffer; buffer_size : integer) : Boolean;
function Get_server_info(IN info_type INT) returns INT;

Parametry

info_type | číslo požadované informace
buffer | proměnná pro vrácení dat
buffer_size | velikost prostoru v buffer v bajtech
cdp | kontextová proměnná klienta

Od verze

7.0, doplněno 8.0

Hodnota funkce

Funkce volaná klientem vrací FALSE v případě úspěchu, TRUE při chybě. Funkce volaná z SQL vrací přímo požadovaná data.

Popis

Funkce získá z SQL serveru informaci označenou parametrem info_type. Je-li volaná klientem, zapíše informaci do proměnné buffer. Je-li buffer_size příliš malé na požadovanou informaci, dojde k chybě. V jazyce SQL lze funkci volat pouze pro zjištění číselných hodnot (nemůže např. vrátit jméno serveru).

info_type | číslo | druh informace
OP_GI_SERVER_PLATFORM | 0 | platforma SQL serveru (0-Windows, 2-Linux)
OP_GI_LICS_CLIENT | 2 | počet klientských licencí
OP_GI_LICS_WWW | 3 | přítomnost WWW licence (0 nebo 1)
OP_GI_LICS_FULLTEXT | 4 | přítomnost fulltextové licence (0 nebo 1)
OP_GI_TRIAL_ADD_ON | 8 | přidány dočasné testovací add-on licence (0 nebo 1)
OP_GI_TRIAL_FULLTEXT | 9 | přidány dočasné testovací fulltextové licence (0 nebo 1)
OP_GI_VERSION_1 | 10 | první část čísla verze serveru
OP_GI_VERSION_2 | 11 | druhá část čísla verze serveru
OP_GI_VERSION_3 | 12 | třetí část čísla verze serveru (vydání, release)
OP_GI_VERSION_4 | 13 | čtvrtá část čísla verze serveru (build)
OP_GI_PID | 14 | číslo procesu SQL serveru v prostředí operačního systému
OP_GI_SERVER_NAME | 15 | jméno serveru (pouze u klienta)
OP_GI_DISK_SPACE | 16 | volné místo na disku s databázovým souborem
OP_GI_CLUSTER_SIZE | 17 | velikost clusteru v databázovém souboru
OP_GI_LICS_USING | 18 | počet licencí využitých připojenými klienty
OP_GI_OWNED_CURSORS | 19 | počet kurzorů otevřených klientem
OP_GI_FIXED_PAGES | 20 | počet fixovaných diskových stránek
OP_GI_FIXES_ON_PAGES | 21 | počet fixací na diskových stránkách
OP_GI_FRAMES | 22 | počet rámů pro diskové stránky
OP_GI_FREE_CLUSTERS | 23 | počet nevyužitých clusterů v databázovém souboru
OP_GI_USED_MEMORY | 24 | pracovní paměť využívaná serverem
OP_GI_INSTALLED_TABLES | 30 | počet instalovaných tabulek
OP_GI_LOCKED_TABLES | 31 | počet držených tabulek
OP_GI_TABLE_LOCKS | 32 | počet držáků tabulek
OP_GI_TEMP_TABLES | 33 | počet dočasných tabulek
OP_GI_OPEN_CURSORS | 34 | počet všech otevřených kurzorů
OP_GI_PAGE_LOCKS | 35 | počet zámků na celých diskových stránkách

Příklad:

Použití v klientském jazyce:

var
 res : integer;
 ress : string[10];
begin
  Get_server_info(0,res,4);
  case res of
   0 : ress := "Windows";
   2 : ress := "Linux";
  end;
  Info_box("Platforma SQL serveru",ress)
end.

Použití v SQL proceduře:

PROCEDURE `PLATFORM`(  );
BEGIN
  IF Get_server_info(0) = 0 THEN
    CALL Log_write("Windows");
    // volání procedury pro Windows
  ELSE
    CALL Log_write("Linux");
    // volání odlišné procedury pro Linux
  END IF;
END


Funkce Set_timer

Set_timer

Interní programovací jazyk

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 MailDial

MailDial

Interní programovací jazyk

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


InitWBMail602

Interní programovací jazyk

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 602SQL. 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 Int2str

Int2str

Interní programovací jazyk

function Int2str(int : *viz parametry*) : string;

Parametry

int hodnota, která se má konvertovat typu short, integer nebo tinyint

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 Reset_replication

Reset_replication

BOOL Reset_replication(cdp_t cdp);
function Reset_replication (cdp : cdp_t) : Boolean;

Parametry

cdp kontextová proměnná klienta

Od verze:

6.0

Popis

Znovu načte parametry replikací a nastartuje replikování podle nich. Nutno volat po změnách parametrů replikací funkcí Repl_GetSet_local_server_props.

Funkce se vztahuje k serveru, k němuž je klient připojen.

Hodnota funkce

Funkce vrací TRUE při chybě

Viz

  • Programové ovládání replikací


Funkce MailGetProfileProp

MailGetProfileProp

Interní programovací jazyk

function MailGetProfileProp(var ProfileName : string; var PropName : string; var PropValue : string; ValSize : inT); integer;
int MailGetProfileProp(const char *ProfileName, const char *PropName, DWORD const char *PropValue, int ValSize);
function MailGetProfileProp(ProfileName : PChar; PropName : PChar;PropValue : PChar; ValSize : integer); integer;
FUNCTION MailGetProfileProp(INOUT ProfileName : CHAR(64), INOUT PropName : CHAR(64), INOUT PropValue : CHAR(64), IN ValSize : INT) RETURNS INT;

Parametry

ProfileName | jméno poštovního profilu
PropName | jméno parametru poštovního profilu
PropValue | výstupní parametr, hodnota parametru poštovního profilu
ValSize | velikost bufferu pro hodnotu

Od verze

8.0

Popis

Přečte hodnotu zadaného parametru poštovního profilu ProfileName a uloží ji do výstupního bufferu. Heslo pro přístup k poště a heslo pro navázání telefonického spojení nelze pomocí této funkce zjistit.

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

// je trvalý profil typu SMTP?
SET Err=MailGetProfileProp(profile,"SMTPServer",smtp_server,100);
// if ano, uděláme ho jako temporary a nahradíme adresu odesílatele přiděleným obchodníkem
IF Err=0 THEN
  CALL MailCreateProfile("_temporary",TRUE);
  CALL MailSetProfileProp("_temporary","SMTPServer",smtp_server);
  CALL MailSetProfileProp("_temporary","MyAddress",komu);

Viz

  • MailCreateProfile
  • MailDeleteProfile
  • MailSetProfileProp


Funkce Enable_task_switch

Enable_task_switch

Interní programovací jazyk

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

    Def602SQLFrameProc, 602SQLFrameProc


Funkce Make_directory

Make_directory

Interní programovací jazyk

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 Set_password

Set_password

Interní programovací jazyk

function Set_password(var username, password : string);
BOOL [cd_]Set_password([cdp_t cdp], const char * username, const char * password);
function [cd_]Set_password([cdp : cdp_t]; username, password : PChar) : Boolean;
FUNCTION Set_password(IN username CHAR(31), IN password CHAR(100)) RETURNS BIT;

Parametry

username | jméno uživatele, jehož heslo se mění
password | heslo
[cdp | kontextová proměnná klienta]

Popis

Funkce nastaví nové heslo zadaného přihlášeného uživatele. Heslo smí mít nejvýše 100 znaků.

Heslo anonymního uživatele nelze změnit.

Funkci může použít každý uživatel sám pro sebe. Heslo jiného uživatele může změnit pouze bezpečnostní správce.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.

Viz

  • Insert_object
  • Create_user


Procedura Set_view_item

Set_view_item

Interní programovací jazyk

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


Funkce Read (ext.)

Read

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 v klientské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 (int.)

Read

Interní programovací jazyk

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, Tinyint, Bigint, Real, String

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 Select_records

Select_records

Interní programovací jazyk

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 v klientské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, 602SQL 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 Today

Today

Interní programovací jazyk

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 602SQL, 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


Procedura Reset_view

Reset_view

Interní programovací jazyk

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í

Od verze

1, úprava ve verzi 8

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. Procedura 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. O aktualizacích formulářů se můžete více dozvědět zde.

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.

Parametr extent procedury Reset_view specifikuje rozsah činnosti této funkce. Jeho možné hodnoty jsou označeny konstantami použitelnými i z klientské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. Provádí se tehdy, došlo-li ke změně ve vyrovnávací paměti (cache) formuláře editací jiného formuláře do téže cache (např. otevřeného standardní akcí na stejný záznam) nebo ke změně proměnných projektu použitých ve formuláři. Při této akci se nečtou data z databáze (probíhá vše u klienta). Tuto variantu lze vždy nahradit stejně rychlou variantou RESET_CONTROLS.

  • 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. Provádí se tehdy, došlo-li ke změně ve vyrovnávací paměti (cache) formuláře editací jiného formuláře do téže cache (např. otevřeného standardní akcí na stejný záznam) nebo ke změně proměnných projektu použitých ve formuláři. Při tomto překreslení formuláře se neobjeví nové ani nezmizí smazané záznamy. Při této akci se nečtou data z databáze (probíhá vše u klienta). Odpovídá standardní akci Překreslit formulář.

  • RESET_DELETIONS (5) - používá se pouze pro formuláře vedoucí do tabulky. Zajistí, že se ve formuláři objeví záznamy, přidané do tabulky do níž 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 zrušeny. Navíc dělá to, co RESET_CONTROLS. Pro formuláře vedoucí do dotazů se musí pro zobrazení nových záznamů použít RESET_CURSOR.

  • RESET_CACHE (256) - provede nové naplnění vyrovnávací paměti klienta (tj. obsah formuláře) daty z databáze (záznamy v (editovatelném) kurzoru dostanou aktuální obsah, avšak nově vložené záznamy se neobjeví). Musí se použít tehdy, když ke změnám v datech zobrazených ve formuláři dojde jinak než pomocí jiného formuláře sdílejícího tutéž cache.. Standardní akci Načíst data a překreslit formulář odpovídá RESET_CACHE+RESET_CONTROLS.

  • RESET_CURSOR (512) - používá se pro formuláře vedoucí do kurzorů (i needitovatelných) (a od verze 8 i do tabulek). 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. Odpovídá standardní akci Přebudovat kurzor a překreslit formulář.

Do verze 7 včetně platilo: 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).

Od verze 8 platí: při použití na proměnný kurzor se číslo kurzoru nezmění, a protože lze parametr použít i pro formuláře vedoucí do tabulky, je možné parametr použít na jakýkoliv formulář bez nutnosti uvažovat o způsobu jeho naplnění.

  • 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).

Pokud byl obsah formuláře uživatelem změněn a nebyl ještě 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

  • Open_view
  • Close_view


Funkce Set_application

Set_application

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 .

V klientské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


Procedura Get_logged_user

Get_logged_user

Interní programovací jazyk

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 Rec_cnt

Rec_cnt

Interní programovací jazyk

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


Funkce Next_user_name

Next_user_name

Interní programovací jazyk

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 Write_lock_table

Write_lock_table

Interní programovací jazyk

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 Isqr

Isqr

Interní programovací jazyk

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 Current_application

Current_application

Interní programovací jazyk

function Current_application : string;

Popis

Funkce slouží k určení jména otevřené aplikace. Lze ji použít v klientském jazyce i jazyce SQL.

Hodnota funkce

Funkce vrací jméno aktuální otevřené aplikace (max. 31 znaků).

Příklad:

Vybrat dotazem tabulky otevřené aplikace

SELECT Tabtab.tab_name
FROM Objtab, Tabtab
WHERE Objtab. apl_uuid =Tabtab. apl_uuid
 AND Objtab.obj_name=CURRENT_APPLICATION


Funkce Edit_relation

Edit_relation

Interní programovací jazyk

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 Get_item_value

Get_item_value

Interní programovací jazyk

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 Close_semaphore

Close_semaphore

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


Funkce Get_error_num_text

Get_error_num_text

Interní programovací jazyk

function Get_error_num_text(err : integer; var buf : string; buflen : integer) : Boolean; stdcall;
BOOL WINAPI Get_error_num_text (cdp_t cdp, int err, char * buf, unsigned buflen);
function Get_error_num_text(cdp : cdp_t; err : integer; buf : PChar; buflen : integer) : Boolean; stdcall;

Parametry

cdp | kontextová proměnná klienta
err | číslo chyby
buf | prostor pro vrácený řetězec znaků
buflen | velikost bufferu buf

Od verze:

7.0

Popis

Pokud je tato funkce zavolána po chybě a v parametru err je předáno číslo této chyby, pak funkce vrátí v parametru buf popis chyby včetně případné proměnné části (např. jména tabulky a čísla záznamu po vložení duplicitního záznamu).

Hodnota funkce

Funkce vrací FALSE v případě úspěchu, TRUE při chybě.

Příklad:

Get_error_num_text(Sz_error, error_text, 200);
Info_box("",error_text);

Viz

  • Zjišťování detailů poslední chyby
  • Get_server_error_suppl
  • Get_server_error_context
  • Logování a trasování
  • Příklad


Funkce Repl_direct_register_server

Repl_direct_register_server

BOOL Repl_direct_register_server (cdp_t cdp, const char * addr, const char * atype);
function Repl_direct_register_server (cdp : cdp_t; addr, atype : PChar) : Boolean;

Parametry

cdp | kontextová proměnná klienta
addr | adresa protějšího serveru
atype | typ adresy protějšího serveru, "Direct IP" pro Direct IP, "Input directory" pro sdílený adresář, "MAIL602" nebo "SMTP" pro poštu

Od verze:

6.1b

Popis

Funkce požádá server, aby navázal spojení s replikačním serverem na zadané adrese. Pokud protější server odpoví, zapíší se jeho parametry do tabulky serverů, a zároveň bude navázáno spojení i v protějším směru.

Adresa musí odpovídat zadanému typu adresy. 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).

Funkce předpokládá, že replikace jsou v provozu, že s uvedeným serverem dosud není navázáno spojení

Hodnota funkce

Funkce vrací FALSE v případě úspěchu, TRUE při chybě. Úspěch funkce znamená pouze úspěšné předání požadavku serveru, zda paket skutečně odešel, lze zjistit z logu.

Viz

  • Programové ovládání replikací


Funkce Enum_attributes

Enum_attributes

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.

Funkce je od verze 8.0 zastaralá a je nahrazena funkcí Enum_attributes_ex. Zjistit názvy a typy sloupců v tabulce lze od verze 6.1 také systémovým dotazem _IV_TABLE_COLUMNS.

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

Naplnění listboxu jmény sloupců tabulky:

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_ex
  • Enum_attributes_ex


Funkce Set_first_label

Set_first_label

Interní programovací jazyk

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 Close_cursor

Close_cursor

Interní programovací jazyk

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ů, v klientské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 602SQL 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


Funkce AReplicate

AReplicate

Interní programovací jazyk

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 slouží k provedení replikace dat z aktuální aplikace se zvoleným serverem, bez ohledu na nastavenou replikační periodu.

Funkce 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

  • Programové ovládání replikací


Funkce Attribute_info

Attribute_info

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 curs nalezen. Funkce vrací FALSE, pokud takový sloupec neexistuje. Hodnoty výstupních parametrů jsou pak nedefinované.

Viz Enum_attributes.


Funkce Select_file

Select_file

Interní programovací jazyk

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 User_to_group

User_to_group

Interní programovací jazyk

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


Funkce Open_cursor_direct

Open_cursor_direct

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.

V klientské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 Exec_statements

Exec_statements

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ů klientského programovacího jazyka

Od verze:

5.0

Popis

Funkce Exec_statements provede posloupnost příkazů klientské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 ODBC_direct_connection

ODBC_direct_connection

Interní programovací jazyk

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.

Funkce v případě chybných údajů v parametrech připojení zobrazí dialogové okno s popisem chyby - pokud toto okno vadí klientskému programu, je možné jej potlačit uvedením znaku # na začátek parametru conn_string.

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 Enum_attributes_ex

Enum_attributes_ex

BOOL [cd_]Enum_attributes_ex([cdp_t cdp], tcurstab curs, enum_attr_ex * callback, void * param);
function [cd_]Enum_attributes_ex([cdp : cdp_t]; curs : tcurstab, callback : enum_attr_ex; user_data : Pointer) : Boolean;

Parametry

curs | deklarovaná tabulka nebo otevřený kurzor - viz podrobnosti
callback | funkce, která bude zavolána pro každý sloupec
user_data | parametr předaný callbacku
[cdp | kontextová proměnná klienta]

Od verze

8.0

Popis

Funkce Enum_attributes_ex 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_ex definovaného takto:

typedef BOOL (_stdcall enum_attr_ex)(char * attrname, uns8 attrtype, uns8 attrmult, t_specif attrspecif, void * user_data);
type enum_attr = enum_attr_ex(attrname : PChar;  attrtype, attrmult : uns8;  attrspecif : t_specif;  user_data : Pointer) : 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_ex. Parametr user_data předaný do funkce Enum_attributes_ex bude beze změny předán do funkce callback. 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.

Zjistit názvy a typy sloupců v tabulce lze také systémovým dotazem _IV_TABLE_COLUMNS.

Hodnota funkce

Funkce Enum_attributes_ex vrátí TRUE, pokud tabulka nebo kurzor curs byl nalezen a funkce callback zavolána alespoň jednou. Funkce Enum_attributes_ex vrátí FALSE, pokud tabulka nebo kurzor zadaná parametrem curs neexistuje.

Příklad

Naplnění listboxu jmény sloupců tabulky:

BOOL _stdcall fill_list_box(char * attrname, uns8 attrtype, uns8 attrmult, t_specif attrspecif, void * user_data)
{ if (attrmult == 1)
    if (SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)attrname) == LB_ERR)
      return FALSE;
  return TRUE;
}

....................
Enum_attributes_ex(tablenum, fill_list_box, NULL);

Viz

  • Attribute_info_ex
  • Enum_attributes


Ú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 602SQL pomocí 602SQL 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é spustit 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í 602SQL. 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.


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 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.


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í 602SQL 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).


(Untitled)

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.)


Š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 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 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.


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 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 602SQL;

  • 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".


Š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


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.


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.


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í 602SQL.

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í 602SQL, 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ů).


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.


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 602SQL serverem a Webserverem - zadání parametrů

Průvodce propojením 602SQL serverem a webserverem - krok 1

Toto je úvodní stránka Průvodce propojením 602SQL 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 602SQL. V praxi se používá hlavně u MS IIS.

Alias adresáře se skripty - zadejte adresář se skripty Internety klienta (602CGI8.EXE, 602ISAP8.DLL apod.). Tento adresář (jeho alias) se stane součástí URL:

http://www.mojefirma.cz/alias/602cgi8.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 602SQL 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 602SQL 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 602SQL serverem byla určena nepřítomnost souborů WB Internet Klienta (tj. 602CGI8.EXE, 602ISAP.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.


Průvodce propojením 602SQL serverem a webserverem - vyhodnocení testu

Na této stránce se dozvíte, jak dopadl test komunikace mezi webserverm a 602SQL 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.


(Untitled)

vývojové prostředí

Jeden ze standardních klientů sloužící k vývoji a provozu databázových aplikací.


(Untitled)

aplikace

Logický celek tvořený skupinou objektů, které spolu souvisejí (komponentami aplikace), a daty. 602SQL 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.

V rámci jedné aplikace je možné používat objekty z jiných aplikací tak, že jméno objektu se prefixuje jménem jiné aplikace a tečkou.


(Untitled)

journal

Speciální datový soubor na disku (JOURNAL.FIL), který obsahuje posloupnost všech aktualizací provedených ve 602SQL. v kombinaci s vytvářením záložních kopií slouží k zajištění bezpečnosti dat.


(Untitled)

projekt

Role, kterou hraje ve program vytvořený vnitřním programovacím jazyce 602SQL, když poskytuje své proměnné, typy, konstanty, procedury a funkce pohledům a menu.


(Untitled)

uživatel

Každý, kdo pracuje s 602SQL. 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.


(Untitled)

databázový soubor WB8.FIL

Soubor operačního systému, v němž jsou uložena data patřící k databázi. Soubor FIL obsahuje vše, co patří k vývoji aplikací a provozu serveru: objekty aplikací (data systémové tabulky OBJTAB), definice tabulek včetně práv (data systémové tabulky TABTAB), uživatele, skupiny a jejich vztahy (data systémové tabulky USERTAB), ale i data z tabulek včetně indexů apod. Do souboru FIL se nezapisuje pouze rozsáhlejší transakce (soubor TRANSACT.FIL), žurnálování aktualizací (JOURNAL.FIL) a zálohování.


(Untitled)

ActiveX control

Speciální klient 602SQL, který se vkládá jako složka do jiných programů (nejčastěji Internet Explorer). Šíření této komponenty je zdarma.


(Untitled)

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 602SQL Internet Klient.


(Untitled)

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.


(Untitled)

obrázek

a) sloupec proměnné délky, jehož obsahem může být obrázek v grafickém formátu JPEG, BMP, PCX, TIFF, GIF nebo WPG;

b) Jeden z objektů 602SQL - obrázek v rastrovém formátu určený pro vložení do formulářů a sestav, na tlačítka nebo na lištu apod.


(Untitled)

schéma

1) SCHEMA (psáno krátce) - v jazyce SQL je synonymem pro aplikace

2) v dřívějších verzích se jako Schémata označovaly dnešní Nákresy


(Untitled)

OLE

Mechanismus sdílení dat různými programy pod Windows, např. databáze může obsahovat zvuky, obrázky, videoclipy apod.;


(Untitled)

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ů 602SQL. Objekt typu dotaz je uložen v textové podobě jako dotazový výraz SELECT jazyka SQL.

V otevřených formulářích lze dotaz zadat pomocí mechanismu 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 hodnoty sloupců v databázových tabulkách. Pokud v editovatelném dotazu provedete změnu, promítne se do obsahu původní tabulky.


(Untitled)

QBE (Query by Example)

Názorný způsob dotazování, který se používá interaktivně ve formulářích pro vybrání množiny záznamů podle logických podmínek.


(Untitled)

editor

Prostředek pro psaní textových informací. Ve 602SQL používaný pro editování obsahu sloupce typu text, pro psaní zdrojových textů programů, pro prohlížení textových definic objektů apod. Do textu nevkládá žádné řídící znaky (kromě CR LF na konci řádku).


(Untitled)

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 602SQL je jazyk implementován podle normy SQL92.


(Untitled)

správci databáze

Konfigurační správce SQL serveru je člen standardní skupiny CONFIG_ADMIN; je to osoba (osoby), která se stará o provoz SQL serveru, provádí údržbu a nastavení.

Bezpečnostní správce SQL serveru je člen standardní skupiny SECURITY_ADMIN - má na starost zabezpečení SQL serveru (hesla uživatelů, šifrování FILu, povolení datového správce aj.).

Datový správce SQL serveru je člen standardní skupiny DB_ADMIN - má neomezený přístup ke všem datům ve všech aplikacích.


(Untitled)

WBIK

602SQL 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.


(Untitled)

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é.


(Untitled)

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..


(Untitled)

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í direktivy {$I jméno}.


(Untitled)

programovací jazyk 602SQL

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.


(Untitled)

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.


(Untitled)

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.


(Untitled)

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 správcovské skupiny CONFIG_ADMIN, DB_ADMIN a SECURITY_ADMIN. Po instalaci je jediný standardní uživatel ANONYMOUS členem všech standardních skupin.


(Untitled)

program

Posloupnost příkazů vnitřního programovacího jazyka 602SQL; hotový program lze zkompilovat na disk a spouštět i na jiných počítačích s pomocí tzv. provozního systému;


(Untitled)

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í, lépe je mít pevné TCP/IP spojení.


(Untitled)

replikační vztah

Objekt 602SQL, 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.


(Untitled)

OLE server

Program, který poskytuje svá data jiným programům prostřednictvím OLE, např. kreslicí program Paintbrush z Windows nebo 602SQL.


(Untitled)

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.


(Untitled)

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.


(Untitled)

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 602SQL serveru data a vygeneruje HTML odpověď).


(Untitled)

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.


(Untitled)

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 (číselníku).


(Untitled)

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í.


(Untitled)

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.


(Untitled)

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.


(Untitled)

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).


(Untitled)

menu

Jeden z front-endových objektů 602SQL; 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 nebo se otevírá po stisku pravého tlačítka myši.


(Untitled)

tabulka

Objekt 602SQL, do něhož se ukládají data; "řádky'' tabulky tvoří záznamy, "sloupce" tabulky tvoří hodnoty atributů.


(Untitled)

přípony souborů

Vyexportované objekty 602SQL 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 602SQL vyskytnout:

EXX -- program zkompilovaný na disk;

APL -- definiční soubor aplikace.


(Untitled)

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 602SQL existují servery pro různá prostředí - Windows SQL server a Linux SQL server


(Untitled)

subjekt práva

Subjekty práva jsou objekty databáze, jimž lze přidělovat a odebírat práva. Ve 602SQL jsou uživatelé, skupiny a role.


(Untitled)

OLE kontejner

Program, který využívá služeb OLE serverů a obsahuje data nebo odkazy na data patřící jiným aplikacím. 602SQL je OLE kontejner.


(Untitled)

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ř. 602SQL) tak činí pomocí tzv. ODBC driveru.

602SQL poskytuje oba směry ODBC spojení: libovolný ODBC klient se může napojit na 602SQL server, naopak 602SQL (jako klient) se může napojit na cizí ODBC server.


(Untitled)

relace

Objekt 602SQL, definující relační vztah na rovnost mezi dvěma tabulkami. Využije se v nákresu schématu, definování dotazů aj.


(Untitled)

sloupce proměnné velikosti

Sloupce typu text, obrázek, OLE a sledovací atribut Historie. Jejich velikost je dána až konkrétním obsahem.


(Untitled)

font

Definovaná sada písma, např. Sans Serif; ve Windows lze používat dva typy fontů: bitmapové a vektorové (TrueType) fonty.


(Untitled)

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.


(Untitled)

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 v hranatých závorkách za identifikátorem pole nebo multiatributu;


(Untitled)

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;

c) v programovacím jazyce i v jazyce SQL je to fiktivní tabulka, kterou 602SQL 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 (editovatelném) se promítnou do tabulek, z nichž data v kurzoru pocházejí.


(Untitled)

superpohled

Pohled, který obsahuje jako jednu složku subpohled; subpohled i superpohled mohou být navzájem synchronizovány.


(Untitled)

náhres

Klientský objekt 602SQL, který slouží k přehlednému ("grafickému") navrhování určité části aplikace. Používá se hlavně k znázornění vztahu mezi tabulkami (relace a referenční integrity) a k popisu webových aplikací (vztah konektor->šablona, šablona->odkaz na jinou šablonu apod.)


(Untitled)

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.


(Untitled)

databáze

Všechny aplikace spravované jedním serverem tvoří databázi. Databáze je uložena v jediném databázovém souboru jménem WB8.FIL.


(Untitled)

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 602SQL (a v jiných jazycích).


(Untitled)

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.


(Untitled)

formulář standardní

Jednoduchý formulář ve stylu tabulek z tabulkových kalkulátorů, rychlý při prohlížení. Používá se automaticky např. při otevření tabulky, v aplikacích jako subformulář apod.


(Untitled)

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.


(Untitled)

pole

Druh datové struktury ve vnitřním programovacím jazyce 602SQL (a v jiných jazycích).


(Untitled)

objekty

Objekty aplikací ve 602SQL 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 602SQL jsou také objekty, které nepatří žádné aplikaci (systémové objekty). Mezi ně patří hlavně systémové tabulky, uživatelé a skupiny.


(Untitled)

multiatribut

Sloupec, jenž může obsahovat v jednom záznamu více než jednu hodnotu.


(Untitled)

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.


(Untitled)

koloběh dokumentů

Způsob předávání informací (dokumentu) mezi uživateli 602SQL. 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.


(Untitled)

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) nebo při generování sestav (součást front-endu).


Encyklopedie funkcí a procedur

Encyklopedie všech funkcí a procedur jazyka 602SQL

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

Admin_mod - řízení administrátorského módu uložených procedur

Am_I_config_admin - test, je-li uživatel členem skupiny CONFIG_ADMIN

Am_I_db_admin - test, je-li uživatel členem skupiny DB_ADMIN

Am_I_security_admin - test, je-li uživatel členem skupiny SECURITY_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

Assign_to_tread - přiřadí cdp vláknu (ve vícevláknových aplikacích)

ASkip_repl - otevře dialog pro výběr serveru a pak zabrání replikaci dosud lokálně provedených změn na tento server

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

Backup_database_file - vytvoření zálohy databáze

Bigint2str - konverze velkého celého čísla na řetězec

Bind_records - přivazování záznamů k ukazateli

Break - zrušení právě prováděného požadavku na server

Break_user - přerušení dlouhé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

connect - navázání spojení klienta se serverem

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

disconnect - ukončení spojení klienta se serverem

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í sloupců tabulky (z externího jazyka pouze)

Enum_attributes_ex - zjištění sloupců tabulky

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

Export_appl_param - rozšířený export aplikace z programu od verze 7

-- 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

Fulltext_context - nalezení kontextu výskytu fráze (SQL funkce)

Fulltext_create - vytvoření fulltextového systému (SQL funkce)

Fulltext_destroy - odstranění fulltextového systému (SQL funkce

Fulltext_index_doc - fultextové zaindexování dokumentu

Fulltext_remove_doc - odstranění dokumentu z fulltextového systému (SQL)

-- G --

GetClient - handle MDI klienta aplikace

Get_data_rights - zjištění práv uživatele k datům

Get_error_num_text - vrací popis chyby

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

Get_property_value – zjištění vlastnosti SQL serveru

Get_server_error_context - informace o kontextu chyby

Get_server_error_suppl - informace o proměnné části popisu chyby

Get_server_info - informace o typu serveru

Get_sql_option – zjištění příznaků kompatibility SQL

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

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.

-- 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

Import_appl_ex - import aplikace z programu bez interakce s uživatelem

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

Insert_record_ex - vložení záznamu do tabulky společně s hodnotami

Int2str - konverze celého čísla na řetězec znaků

interf_close - ukončení komunikace se serverem

interf_init - inicializace spojení klienta se serverem

Invalidate_cached_table_info - vymazání klientské keše struktur tabulek

Is_repl_destin - pomocná funkce pro řízení replikací

IsIntRecSelected - vrací stav vybrání (označení) záznamu ve standardním formuláři

Isqr - druhá mocnina celého čísla

IsViewChanged - zjistí, byla-li ve formuláři provedena editační změna

-- 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ásilce

LetterAddBLOBr -přidání souboru vytvořeného obsahu BLOBu z k zásilce

LetterAddBLOBs -přidání souboru vytvořeného obsahu BLOBu z k zásilce (SQL)

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

MailBoxGetMsgEx - získání textu došlé zásilky (rozšířené)

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

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

MailBoxSaveFileDBr - uložení k zásilce připojených souborů do databáze

MailBoxSaveFileDBs - uložení k zásilce připojených souborů do databáze (SQL)

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 602SQL o změně menu hlavního okna 602SQL.

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

Replicate - okamžité replikování nebo vyžádání replikace - neinteraktivní varianta

Repl_abandon_sharing - ukončí sdílení zadané aplikace

Repl_accept_share_req - přijme resp. zamítne došlý požadavek na sdílení aplikace

Repl_cancel_packet – programová reakce na chybu replikací

Repl_direct_register_server - požádá server, aby navázal spojení s replikačním serverem na zadané adrese

Repl_edit_application_properties - otevře dialog pro nastavení parametrů aplikace, včetně parametrů sdílení s jinými servery

Repl_edit_local_server_options - otevře dialog pro nastavení parametrů replikací

Repl_edit_relation - otevře okno pro návrh replikačního vztahu

Repl_edit_sharing_parameters - otevře dialog na editaci replikačních pravidel

Repl_GetSet_appl_props - umožňuje zjistit a nastavit replikační vlastnosti aplikace

Repl_GetSet_local_server_props - umožňuje zjistit nebo nastavit replikační parametry lokálního serveru

Repl_GetSet_server_props - umožňuje zjistit příp. nastavit parametry zadaného vzdáleného replikačního serveru

Repl_Get_state - funkce vrací informace o stavu sdílení zadané aplikace se zadaným serverem

Repl_refresh_server_info - požádá server, aby získal aktuální informace o zadaném replikačním serveru

Repl_register_new_remote_server - otevře dialog pro navázání spojení se vzdáleným replikačním serverem

Repl_resend_packet – programová reakce na chybu replikací

Repl_send_share_req - požádá server, aby odeslal paket s žádostí o sdílení zadané aplikace

Repl_synchronize - zajistí, že se při příští replikaci přenesou na protější server všechna sdílená data, pro která je nastaveno replikování směrem ven

Repl_unregister_remote_server - vymaže informace o vzdáleném replikačním serveru

Reset - otevření existujícího souboru

Reset_replication - zastaví a spustí replikace tak, aby se mohly projevit

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

SelectIntRec - označí (vybere) záznam ve standardním formuláři

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_membership - editace vztahu mezi dvěma subjekty práv

Set_object_rights - nastavení práv k objektům

Set_password - nastavení hesla

Set_preview_type - nastavení okna pro zobrazení preview

Set_printer - nastavení parametrů tisku sestav

Set_progress_report_modulus - nastavení frekvence zpráv ze serveru

Set_property_value – nastavení vlastnosti SQL serveru

Set_sql_option - nastavení kompatibility 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

Skip_repl - zamezení replikování dat

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_host_execute - provedení SQL příkazu s předáním klientských proměnných ext. jazyka

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

Str2bigint - konverze řetězce znaků na velké celé číslo

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 --

unassign -

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 602SQL

WinBaseFrameProc - zpracování zpráv, které přišly hlavnímu oknu aplikace 602SQL

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_record_ex - přepsání záznamu tabulky

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


Jak používat nápovědu?

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

602SQL 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.

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.

Tlačítko na liště

Stiskem tlačítka s otazníkem 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ů 602SQL 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.


Vývojové prostředí 602SQL

Právě pracujete s programem 602CLI8.EXE, který tvoří klientskou část k 602SQL 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).

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

* Řídicí panel aplikace

* Hlavní menu programu

* Lišta řídicího panelu


Lišta návrháře menu

Tlačítka na pracovní liště menu mají tento význam:

- vystřihnout položku menu

- zkopírovat položku menu

- vlepit položku ze schránky na aktuální pozici

- odvolat poslední akci

- vložit příkaz;

- vložit položku otevírající submenu;

- vložit oddělovač položek;

- zrušit položku.

- uložit definici menu;

- ukončit návrh

- test syntaxe návrhu menu;


Řídicí panel - MENU

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


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é.


Menu návrháře menu

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 602SQL.

Návrh

Uložit - zapíše současný stav návrhu menu do databáze;

Uložit jako - zapíše současný stav návrhu menu do databáze pod novým jménem;

Projekt - dovolí zvolit projekt, který menu využívá. Tento projekt se nastaví při otevření menu;

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;

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, 602SQL Vás před uložením vyzve, abyste zadali jeho jméno.

Editace

Odvolat změny - odvolá změny týkající se celé položky (odstranění, vložení apod.)

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;

Zkopírovat - zkopíruje aktuální položku (vč. položek submenu) do schránky

Vlepit - vlepí na aktuální pozici obsah schránky

Vložit příkaz - vloží příkaz na současnou pozici

Vložit submenu - vloží submenu na současnou pozici

Vložit oddělovač - vloží oddělovač položek na současnou pozici

Odstranit položku - z návrhu odstraní aktuální položku vč. všech položek submenu


Metody CWBViewWnd pro dotazy a uspořádání

CWBViewWnd - Dotazy a uspořádání

void CWBViewWnd :: OpenQBE();
void CWBViewWnd :: OpenSort();
void CWBViewWnd :: AcceptQuery();
void CWBViewWnd :: CancelQuery();

Popis

Metody slouží pro programové přepínání mezi běžným režimem formuláře a režimem zadávání QBE dotazu resp. uspořádání.

OpenQBE | Přepne formulář do režimu zadávání QBE dotazu
OpenSort | Přepne formulář do režimu zadávání uspořádání
AcceptQuery | Akceptuje QBE dotaz nebo zadané uspořádání a původní formulář přesměruje na dotazem nebo uspořádáním změněná data
CancelQuery | Zruší QBE dotaz nebo uspořádání a formulář přesměruje na původní data

Příklad

BEGIN_MESSAGE_MAP(CMyForm, CWBViewWnd)
    .
    .
    ON_COMMAND(IDC_OPENQBE, OnQBE)
    .
    .
END_MESSAGE_MAP()

void CMyForm :: OnQBE()
{
    OpenQBE();
}


Metoda BOOL CWBCursor :: Close()

BOOL CWBCursor :: Close()

BOOL CWBCursor :: Close();

Popis

Metoda uzavře kurzor.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.


Metoda CWBFrameWnd :: Def602SQLFrameProc()

CWBFrameWnd :: Def602SQLFrameProc()

LONG CWBFrameWnd :: Def602SQLFrameProc(WORD uMsg, WORD wParam,
    LONG lParam);

Parametry

uMsgčíslo zprávy

wParamprvní parametr zprávy

lParamdruhý parametr zprávy.

Popis

Této funkci je hlavní okno aplikace povinno předávat všechny zprávy, které samo plně nezpracuje.

Od 602SQLFrameProc se liší v tom, že neošetřené zprávy předává přímo API funkci DefFrameProc.

Hodnota funkce

Hodnota funkce je závislá na typu zprávy.

Příklad

LONG CMainFrame :: OnZprava(WORD wPar, LONG lPar)

{

if (...)

    {
     .
     .

return 0;

    }
    else

return Def602SQLFrameProc(Zprava, wPar, lPar);

}


Metoda CWBFrameWnd :: 602SQLFrameProc()

CWBFrameWnd :: 602SQLFrameProc()

LONG CWBFrameWnd :: 602SQLFrameProc(WORD uMsg, WORD wParam,
    LONG lParam);

Parametry

uMsgčíslo zprávy

wParamprvní parametr zprávy

lParamdruhý parametr zprávy.

Popis

Tato funkce provádí základní zpracování zpráv pro hlavní okno aplikace 602SQL. Od Def602SQLFrameProc se liší v tom, že pro neošetřené zprávy nevolá DefFrameProc, ale vrací řízení volající funkci.

Hodnota funkce

Hodnota funkce je závislá na typu zprávy. Ve většině případů vrací 0 pro zprávy, které kompletně zpracovala.

Příklad

LONG CMainFrame :: OnZprava(WORD wPar, LONG lPar)
{
    if (602SQLFrameProc(Zprava, wPar, lPar) == 0)
        return 0;
    if (...)
    {
        .
        .
        return 0;
    }
    else
        return CMDIFrameWnd::DefWindowProc(Zprava, wPar, lPar);
}


Metoda BOOL CWBCursor :: Open(tobjnum CursDef)

BOOL CWBCursor :: Open()

BOOL CWBCursor :: Open(tobjnum CursDef)

Parametry

CursDefčíslo definice kurzoru uložené v databázi

Popis

Metoda otevře kurzor, jehož definice je uložená v databázi.

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 serveru překročen maximální počet současně otevřených kurzorů nebo pokud je v definici kurzoru CursDef chyba.


Externí help

602SQL help pro externí jazyky

(součást helpu WB602.HLP)

V tomto souboru jsou popsány následující okruhy:

Podpora pro MFC

Podpora pro Delphi

AciveX komponenta


Metoda CWBViewWnd :: Print()

CWBViewWnd :: Print()

void CWBViewWnd :: Print();

Popis

Otevře dialog pro nastavení parametrů tisku a po jeho uzavření vytiskne formulář na zvolené zařízení.

Příklad

BEGIN_MESSAGE_MAP(CMyForm, CWBViewWnd)
    .
    .
    ON_COMMAND(IDC_PRINT, OnPrint)
    .
    .
END_MESSAGE_MAP()

void CMyForm :: OnPrint()
{
    Print();
}


Metoda CWBApp :: OnInitErr()

CWBApp :: OnInitErr()

virtual void CWBApp :: OnInitErr(int err);

Parametry

errkód chyby vrácený funkcí link_kernel nebo interf_init

Popis

Virtuální metoda, která se volá, jestliže se nepodařilo inicializovat komunikaci se serverem 602SQL (funkce link_kernel nebo interf_init nevrátí KSE_OK). Umožňuje uživateli reagovat na vzniklou chybu. Implicitní instance vypíše chybové hlášení odpovídající kódu chyby.

Hodnota funkce

Příklad

void CMyApp :: OnInitErr(int err)
{

m_pMainWnd->MessageBox("Nelze navázat komunikaci se serverem 602SQL!");

}


Další metody třídy CWBCursTab

Dále jsou na třídě CWBCursTab definovány následující metody:

trecnum CWBCursTab :: Append();
BOOL CWBCursTab :: C_avg(const char * AttrName, const char * Condition, void * Result);
BOOL CWBCursTab :: C_count(const char * AttrName, const char * Condition, trecnum * Result);
BOOL CWBCursTab :: C_max(const char * AttrName, const char * Condition, void * Result);
BOOL CWBCursTab :: C_min(const char * AttrName, const char * Condition, void * Result);
BOOL CWBCursTab :: C_sum(const char * AttrName, const char * Condition, void * Result);
BOOL CWBCursTab :: Data_export(tcateg Categ, const char * fName, unsigned Format, int Recode);
BOOL CWBCursTab :: Delete(trecnum Position);
BOOL CWBCursTab :: Delete_all_records();
BOOL CWBCursTab :: Get_fcursor(window_id id, short *Flags);
trecnum CWBCursTab :: Insert();
trecnum CWBCursTab :: Look_up(const char *AttrName, void *Res);
BOOL CWBCursTab :: Read(trecnum Position, tattrib Attr, const modifrec * Access, void * Buffer);
BOOL CWBCursTab :: Read_ind(trecnum Position, tattrib Attr, uns16 Index, void * Buffer);
BOOL CWBCursTab :: Read_ind_cnt(trecnum Position, tattrib Attr, uns16 * Count);
BOOL CWBCursTab :: Read_len(trecnum Position, tattrib Attr, uns16 Index, uns32 * Size);
BOOL CWBCursTab :: Read_lock_record( trecnum Position);
BOOL CWBCursTab :: Read_lock_table();
BOOL CWBCursTab :: Read_record(trecnum Position, void * Buffer, uns16 DataSize);
BOOL CWBCursTab :: Read_unlock_record( trecnum Position);
BOOL CWBCursTab :: Read_unlock_table();
BOOL CWBCursTab :: Read_var(trecnum Position, tattrib Attr, uns16 Index, uns32 Start, uns32 Size, void * Buffer, uns32 * pSize);
BOOL CWBCursTab :: Rec_cnt(trecnum *RecNum);
BOOL CWBCursTab :: Set_fcursor(window_id id, tcursnum curs, uns32 Flags);
BOOL CWBCursTab :: Write(trecnum Position, tattrib Attr, const modifrec *Access, const void * Buffer, uns16 DataSize);
BOOL CWBCursTab :: Write_ind(trecnum Position, tattrib Attr, uns16 Index, void * Buffer, uns16 Size);
BOOL CWBCursTab :: Write_ind_cnt(trecnum Position, tattrib Attr, uns16 Count);
BOOL CWBCursTab :: Write_len(trecnum Position, tattrib Attr, uns16 Index, uns32 Size);
BOOL CWBCursTab :: Write_var(trecnum Position, tattrib Attr, uns16 Index, uns32 Start, uns32 Size, void * Buffer);
BOOL CWBCursTab :: Write_lock_record(trecnum Position);
BOOL CWBCursTab :: Write_lock_table();
BOOL CWBCursTab :: Write_record(trecnum Position, const void *Buffer, uns16 DataSize);
BOOL CWBCursTab :: Write_unlock_record( trecnum Position);
BOOL CWBCursTab :: Write_unlock_table();

Parametry, hodnoty a význam těchto metod jsou stejné jako u stejnojmenných rutin z encyklopedie funkcí.

Append - přidání záznamu na konec tabulky

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

Data_export - obecná exportní funkce

Delete - zrušení záznamu

Delete_all_records - vymazání všech záznamů tabulky nebo kurzoru

Get_fcursor - zjištění kurzoru a parametrů formuláře

Insert - vložení záznamu do tabulky

Look_up - vyhledání záznamu podle hodnoty ve sloupci

Read - čtení z textového souboru - 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

Rec_cnt - zjištění počtu záznamů v tabulce nebo kurzoru

Set_fcursor - nastavení kurzoru a parametrů formuláře

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_var - zápis do 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


Metody CWBViewWnd pro otevírání pomocných oken

CWBViewWnd - Pomocná okna

void CWBViewWnd :: MultiAttrs();
void CWBViewWnd :: Help();
void CWBViewWnd :: Locks();

Popis

MultiAttrs | Otevře okno s hodnotami multiatributu
Help | Otevře okno s lokální nápovědou
Locks | Otevře dialog s nabídkou zamykání záznamů


Encyklopedie funkcí (MFC)

Encyklopedie funkcí 602SQL (MFC)

Třídy objektů

CWBApp - základní třída, pro aplikační programy 602SQL.

CWBFrameWnd - základní třída pro hlavní okno aplikačního programu 602SQL

CWBTable – třída objektů typu tabulka

CWBCursor - třída objektů typu kurzor

CWBCursTab - třída objektů typu kurzor nebo tabulka

CWBViewWnd – základní třída pro formuláře

CWBModalViewWnd základní třída pro modální formuláře

-- A --

CWBViewWnd :: AcceptQuery - akceptuje QBE dotaz

CWBViewWnd :: Active_view - vrací číslo aktivního formuláře

CWBCursor :: Add_record - přidání záznamu do kurzoru

CWBCursTab :: Append - přidání záznamu na konec tabulky

CWBTable :: Attribute_info - Vyhledání sloupce v tabulce

-- B --

-- C --

CWBViewWnd :: CancelQuery - zruší QBE dotaz nebo uspořádání

CWBCursTab :: C_Avg - zjištění průměrné hodnoty sloupce v kurzoru

CWBCursTab :: C_Count - zjištění počtu záznamů v kurzoru

CWBCursTab :: C_Max - zjištění maximální hodnoty sloupce v kurzoru

CWBCursTab :: C_Min - zjištění minimální hodnoty sloupce v kurzoru

CWBCursTab :: C_Sum - zjištění součtu hodnot sloupce v kurzoru

CWBCursor :: Close - uzavření kurzoru

CWBCursTab:: Close - uzavření kurzoru

CWBCursor :: Close_cursor - uzavření kurzoru

CWBViewWnd :: Close_view - uzavření formuláře

CWBViewWnd :: Commit_view - uložení změn ve formuláři do databáze

CWBViewWnd :: Copy - zkopíruje vybranou část editované položky do clipboardu

CWBViewWnd :: Current_item - vrací číslo vybrané složky formuláře, na níž stojí kurzor

CWBViewWnd :: Cut - vystřihne vybranou část editované položky

CWBFrameWnd :: CWBFrameWnd -konstruktor hlavního okna

-- D --

CWBCursTab :: Data_export- obecná exportní funkce

CWBFrameWnd :: Def602SQLFrameProc - implicitní procedura hlavního okna, neošetřené zprávy předá API

CWBViewWnd :: DelAsk - po dotazu smaže všechny záznamy v tabulce

CWBViewWnd :: DelRec - smaže aktuální záznam

CWBCursTab :: Delete - zrušení záznamu

CWBCursTab :: Delete_all_records - vymazání všech záznamů tabulky nebo kurzoru

CWBViewWnd :: DownItem - přejde o složku níž

CWBViewWnd :: Draw_line - nakreslení úsečky v okně

-- E --

CWBViewWnd :: EditFind - otevře dialog pro vyhledání řetězce v textovém editačním okně

CWBViewWnd :: EditFormat - přeformátuje text v textovém editačním okně

CWBViewWnd :: EditRefind - najde další výskyt řetězce v textovém editačním okně

CWBViewWnd :: EditReplace - otevře dialog pro náhradu řetězce v textovém editačním okně

CWBViewWnd :: EditSave - uloží text editovaný v textovém editačním okně do databáze

CWBTable :: Enable_index - povoluje/zakazuje použití indexů

CWBTable :: Enum_attributes - zjištění atributů v tabulce

-- F --

CWBTable :: Find_object - zjištění čísla objektu

CWBViewWnd :: FirstItem - přejde na první složku v aktuálním záznamu

CWBViewWnd :: FirstRec - nastaví formulář na první záznam

CWBTable :: Free_deleted - uvolnění zrušených záznamů v tabulce

-- G --

CWBTable :: Get_data_rights - zjištění práv uživatele k datům

CWBCursTab :: Get_fcursor - zjištění kurzoru a parametrů formuláře

CWBViewWnd :: Get_fcursor - zjištění kurzoru a parametrů formuláře

CWBViewWnd :: Get_item_value - zjištění hodnoty ve složce formuláře

CWBViewWnd :: Get_view_pos - zjištění čísla vybraného záznamu ve formuláři

CWBFrameWnd :: GetWindowMenuPopup - zjištění handle submenu Okna

-- H --

CWBViewWnd :: Help - otevře okno s lokální nápovědou

-- I --

CWBApp :: InitInstance - inicializace

CWBCursTab :: Insert - vložení záznamu do tabulky

CWBViewWnd :: Insert - vloží do formuláře nový záznam

CWBCursTab :: IsTable - vrací indikaci, zda objekt reprezentuje tabulku nebo kurzor

-- K --

-- L --

CWBViewWnd :: LastItem - přejde na poslední složku v aktuálním záznamu

CWBViewWnd :: LastRec - nastaví formulář na poslední záznam

CWBViewWnd :: Locks - otevře dialog s nabídkou zamykání záznamů

CWBCursTab :: Look_up - vyhledání záznamu podle hodnoty ve sloupci

-- M --

CWBViewWnd :: MultiAttrs - otevře okno s hodnotami multiatributu

-- N --

CWBViewWnd :: NextPage - nastaví formulář na následující stránku

CWBViewWnd :: NextRec - nastaví formulář na následující záznam

CWBViewWnd :: NextTab - přejde na další složku v aktuálním záznamu

-- O --

CWBApp :: OnInitErr reakce na chybu inicializace komunikace se serverm

CWBApp :: OnLoginErr reakce na nespráné jméno nebo heslo

CWBApp :: OnSetAppErr reakce na neúspěšné nastavení aplikace

CWBViewWnd :: Open - otevření formuláře

CWBCursor :: Open - otevření kurzoru

CWBTable :: Open - otevření tabulky

CWBViewWnd :: OpenQBE - přepne formulář do režimu zadávání QBE dotazu

CWBViewWnd :: OpenSort - přepne formulář do režimu zadávání uspořádání

CWBCursor :: Open_cursor - otevření pevného kurzoru uloženého v databázi

CWBCursor :: Open_cursor_direct - otevření proměnného kurzoru zadáním SQL dotazu

CWBCursor :: Open_subcursor - otevření subkurzoru již otevřeného kursoru

-- P --

CWBViewWnd :: Paste - vlepí do aktuální položky obsah clipboardu

CWBViewWnd :: Pick_window - vytažení formuláře nad ostatní okna

CWBViewWnd :: PostNcDestroy - zrušení dynamicky vytvořeného objektu třídy CWBViewWnd po uzavření formuláře

CWBViewWnd :: PrevPage - nastaví formulář na předchozí stránku

CWBViewWnd :: PrevRec - nastaví formulář na předchozí záznam

CWBViewWnd :: PrevTab - přejde na předchozí složku v aktuálním záznamu

CWBViewWnd :: Print - vytiskne formulář na tiskárnu

CWBViewWnd :: Print_opt - interaktivní nastavení parametrů tisku sestav

CWBCursor :: Print_view - tisk sestavy

CWBViewWnd :: Printer_dialog - volba tiskárny

CWBViewWnd :: Put_pixel - nakreslení bodu v okně

-- Q --

CWBViewWnd :: QBE_state - vrací indikaci, zda je formulář v režimu zadávání QBE dotazu

-- R --

CWBCursTab :: Read - čtení z databáze

CWBCursTab :: Read_ind - čtení obsahu sloupce pevné velikosti z databáze

CWBCursTab :: Read_ind_cnt - zjištění počtu hodnot multiatributu

CWBCursTab :: Read_len - zjištění velikosti sloupce proměnné velikosti

CWBCursTab :: Read_lock_record - uzamknutí záznamu pro čtení

CWBCursTab :: Read_lock_table - uzamknutí tabulky nebo kurzoru pro čtení

CWBCursTab :: Read_record - čtení záznamu z databáze

CWBCursTab :: Read_unlock_record - odemknutí záznamu pro čtení

CWBCursTab :: Read_unlock_table - odemknutí tabulky nebo kurzoru pro čtení

CWBCursTab :: Read_var - čtení obsahu attributu proměnné velikosti z databáze

CWBCursTab :: Rec_cnt - zjištění počtu záznamů v tabulce nebo kurzoru

CWBViewWnd :: Register_rec_syn - synchronizování dvou formulářů na stejný záznam

CWBViewWnd :: Relate_record - vložení hodnoty z relačně provázané tabulky

CWBViewWnd :: Reset_view - aktualizace obsahu formuláře

CWBViewWnd :: Roll_back_view - odvolání změn v záznamově synchronizovaném formuláři

-- S --

CWBViewWnd :: Select_directory - výběr adresáře

CWBViewWnd :: Select_file - výběr souboru

CWBViewWnd :: Select_records - výběr množiny záznamů z formuláře

CWBTable :: Set_data_rights - nastavení práv k datům

CWBViewWnd :: Set_ext_pos - vybrání záznamu ve formuláři dle absolutního čísla

CWBCursTab :: Set_fcursor - nastavení kurzoru a parametrů formuláře

CWBViewWnd :: Set_fcursor - nastavení kurzoru a parametrů formuláře

CWBViewWnd :: Set_int_pos - vybrání záznamu ve formuláři dle pořadového čísla

CWBViewWnd :: Set_item_value - zápis hodnoty do složky formuláře

CWBCursor :: Super_recnum - převod čísla záznamu v subkurzoru na číslo téhož záznamu v superkurzoru

-- T --

CWBCursor :: Translate - konverze čísla záznamu z kurzoru do tabulky

-- U --

CWBViewWnd :: UnbindDel - odváže zrušené záznamy

CWBTable :: Undelete - obnovení zrušeného záznamu

CWBTable :: Uninst_table - uvolnění paměti zabrané tabulkou

CWBFrameWnd :: UpdateMenuProps - informuje 602SQL o změně menu

CWBViewWnd :: UpItem - přejde o složku výš

-- V --

-- W --

CWBApp :: WBAppInit - navázání spojení s databázovým jádrem

CWBFrameWnd :: 602SQLFrameProc - implicitní procedura hlavního okna, neošetřené zprávy vrací volající funkci

CWBCursTab :: Write - zápis do databáze

CWBCursTab :: Write_ind - zápis obsahu proměnné do sloupce pevné velikosti

CWBCursTab :: Write_ind_cnt - změna počtu hodnot multiatributu

CWBCursTab :: Write_len - změna velikosti sloupce proměnné velikosti

CWBCursTab :: Write_lock_record - uzamknutí záznamu pro zápis

CWBCursTab :: Write_lock_table - uzamknutí tabulky nebo kurzoru pro zápis

CWBCursTab :: Write_record - zápis všech atributů do záznamu v tabulce nebo kursoru

CWBCursTab :: Write_unlock_record - odemknutí záznamu pro zápis

CWBCursTab :: Write_unlock_table - odemknutí tabulky nebo kurzoru pro zápis

CWBCursTab :: Write_var - zápis do sloupce proměnné velikosti

-- X --

-- Y --


Metoda BOOL CWBCursTab :: Close()

BOOL CWBCursTab :: Close()

BOOL CWBCursTab :: Close();

Popis

Metoda uzavře kurzor spojený s daným objektem. Pokud objekt reprezentuje tabulku, neprovede metoda nic.

Hodnota funkce

Funkce vrací při úspěchu FALSE, jinak vrací TRUE.


Metoda BOOL CWBTable :: Open()

BOOL CWBTable :: Open()

BOOL CWBTable :: Open(const char * Name);

Parametry

Namejméno tabulky;

Popis

Metoda zpřístupní tabulku uloženou v databázi.

Hodnota funkce

Funkce vrací při úspěchu FALSE, jestliže tabulka zadaného jména v databázi není, vrací TRUE.


Metoda BOOL CWBCursTab :: IsTable()

BOOL CWBCursTab :: IsTable()

BOOL CWBCursTab :: IsTable();

Popis

Metoda určuje, zda objekt reprezentuje tabulku nebo kurzor.

Hodnota funkce

Pokud objekt reprezentuje tabulku, vrací funkce TRUE, jinak vrací FALSE.


Konstruktor CWBApp :: CWBApp()

CWBApp :: CWBApp()

CWBApp :: CWBApp(const char * WinAppName = NULL);

Parametry

WinAppNamejméno windowsovské aplikace.

Popis

Konstruktor objektu, jméno aplikace se předává konstruktoru třídy CWinApp.

Příklad

class CMyApp : public CWBApp
{
public:
    InitInstance();
};

CMyApp myApp;

CMyApp :: InitInstance()
{
    .
    .
    .


Metoda CWBViewWnd :: PostNcDestroy()

CWBViewWnd :: PostNcDestroy()

virtual void CWBViewWnd :: PostNcDestroy();

Popis

Metoda je volána po uzavření formuláře a ruší dynamicky vytvořený objekt třídy CWBViewWnd. Pokud objekt formuláře nebyl vytvořen dynamicky, nebo pokud uživatel potřebuje po uzavření formuláře provést ještě jiné akce, je nutné tuto metodu přepsat.


Metody CWBViewWnd pro pohyb mezi záznamy a složkami formuláře

CWBViewWnd - pohyb mezi záznamy a složkami ve formuláři

void CWBViewWnd :: FirstRec();
void CWBViewWnd :: LastRec();
void CWBViewWnd :: NextRec();
void CWBViewWnd :: PrevRec();
void CWBViewWnd :: NextPage();
void CWBViewWnd :: PrevPage();
void CWBViewWnd :: FirstItem();
void CWBViewWnd :: LastItem();
void CWBViewWnd :: DownItem();
void CWBViewWnd :: UpItem();
void CWBViewWnd :: NextTab();
void CWBViewWnd :: PrevTab();

Popis

Metody slouží pro programové ovládání pohybu mezi záznamy a složkami formuláře.

FirstRec | Nastaví formulář na první záznam
LastRec | Nastaví formulář na poslední záznam
NextRec | Nastaví formulář na následující záznam
PrevRec | Nastaví formulář na předchozí záznam
NextPage | Nastaví formulář na následující stránku
PrevPage | Nastaví formulář na předchozí stránku
FirstItem | Přejde na první složku v aktuálním záznamu
LastItem | Přejde na poslední složku v aktuálním záznamu
DownItem | Přejde o složku níž
UpItem | Přejde o složku výš
NextTab | Přejde na předchozí složku v aktuálním záznamu
PrevTab | Přejde na předchozí složku v aktuálním záznamu

Příklad

BEGIN_MESSAGE_MAP(CMyForm, CWBViewWnd)
    .
    .
    ON_COMMAND(IDC_NEXTREC, OnNexRec)
    .
    .
END_MESSAGE_MAP()

void CMyForm :: OnNextRec()
{
    NextRec();
}


class CWBApp : public CWinApp

Popis

Základní třída, ze které lze derivovat uživatelské třídy aplikačních programů 602SQL.

Zabezpečuje inicializaci programu a navávání spojení se serverm 602SQL třídy. Aplikační program může obsahovat pouze jeden objekt vyderivovaný z třídy CWBApp a musí ho vytvořit jako globální objekt. Dále je třeba přepsat metodu InitInstance která bude zpravidla vytvářet okno třídy CWBFrameWnd a volat funkci WBAppInit.

Metody:

CWBApp | konstruktor objektu
InitInstance | inicializace instance
WBAppInit | navázání spojení s datbázovým serverem
OnInitErr | reakce na chybu inicializace
OnLoginErr | reakce na nespráné jméno nebo heslo
OnSetAppErr | reakce na neúspěšné nastavení aplikace


Metody CWBViewWnd pro editaci v textovém okně

CWBViewWnd - Editace v textovém okně

void CWBViewWnd :: EditFind();
void CWBViewWnd :: EditReplace();
void CWBViewWnd :: EditRefind();
void CWBViewWnd :: EditFormat();
void CWBViewWnd :: EditSave();

Popis

Metody slouží pro programové ovládání editace v okně textového editoru 602SQL.

EditFind | Otevře dialog pro vyhledání řetězce
EditReplace | Otevře dialog pro náhradu řetězce
EditRefind | Najde další výskyt řetězce nebo zopakuje posední náhradu řetězce
EditFormat | Přeformátuje text
EditSave | Uloží editovaný text

Příklad

BEGIN_MESSAGE_MAP(CMyForm, CWBViewWnd)
    .
    .
    ON_COMMAND(IDC_EDITSAVE, OnEditSave)
    .
    .
END_MESSAGE_MAP()

void CMyForm :: OnEditSave()
{
    EditSave();
}


Metoda BOOL CWBCursor :: Open(char * Query)

BOOL CWBCursor :: Open()

BOOL CWBCursor :: Open(const char * Query)

Parametry

Querydefinice kurzoru v jazyce SQL

Popis

Metoda otevře kurzor za základě jeho definice uvedené v parametru Query.

Hodnota funkce

Funkce vrací při úspěchu FALSE, při neúspěchu TRUE.


Třída CWBCursTab

class CWBCursTab

Popis

Tato třída definuje objekt, který může za běhu programu reprezentovat kurzor nebo tabulku.

V uživatelských programech se zpravidla používají objekty tříd CWBTable nebo CWBCursor, které jsou potomkem této třídy. Vlastní objekt třídy CWBCursTab lze zpřístupnit voláním metody Get_fcursor nebo CWBViewWnd :: Get_fcursor.

Metody:

Close | uzavření kurzoru spojeného s daným objektem
IsTable | metoda určuje, zda objekt reprezentuje tabulku nebo kurzor
Append | přidání záznamu na konec tabulky
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
Data_export | obecná exportní funkce
Delete | zrušení záznamu
Delete_all_records | vymazání všech záznamů tabulky nebo kurzoru
Get_fcursor | zjištění kurzoru a parametrů formuláře
Insert | vložení záznamu do tabulky
Look_up | vyhledání záznamu podle hodnoty ve sloupci
Read | čtení z databáze
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 attributu 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 attributu proměnné velikosti z databáze
Rec_cnt | zjištění počtu záznamů v tabulce nebo kurzoru
Set_fcursor | nastavení kurzoru a parametrů formuláře
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_var | zápis do 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


Metoda CWBFrameWnd :: GetWindowMenuPopup()

CWBFrameWnd :: GetWindowMenuPopup()

virtual HMENU CWBFrameWnd :: GetWindowMenuPopup(HMENU hMenuBar);

Parametry

hMenuBarHandle menu hlavního okna.

Popis

Metoda vrací pro potřeby správy MDI oken handle submenu Okna (Windows) v menu aplikace. Metodu je třeba přepsat, pokud submenu Okna ve vaší aplikaci nelze standardním způsobem identifikovat. Pod MFC verze 2 a vyšší se submenu Okna rozpozná podle identifikátorů jeho složek, které musí být v rozsahu AFX_IDM_WINDOW_FIRST a AFX_IDM_WINDOW_LAST.

Hodnota funkce

Funkce vrací handle submenu Okna, nebo NULL, pokud toto submenu neexistuje.

Příklad

HMENU CWBFrameWnd::GetWindowMenuPopup(HMENU hMenuBar)
{
    return ::GetSubMenu(hMenuBar, 0);
}


Metoda CWBApp :: OnSetAppErr()

CWBApp :: OnSetAppErr()

virtual void CWBApp :: OnSetAppErr();

Popis

Virtuální metoda, která se volá, pokud se nepodařilo nastavit aplikaci zadanou jako parametr funkce WBAppInit. Umožňuje uživateli reagovat na vzniklou chybu. Implicitní instance vypíše chybové hlášení Zadaná aplikace v databázi není.

Příklad

void CMyApp :: OnSetAppErr()
{
    m_pMainWnd->MessageBox("Aplikace SKLAD v databázi
                           není!\n\nJe naimportovaná?");
}


Třída CWBViewWnd

class CWBViewWnd : public CMDIChildWnd

Popis

Základní třída pro formuláře 602SQL.

Umožňuje ošetřovat zprávy pro formuláře prostřednictvím standardního mechanizmu knihovny MFC. Uživatelský program zpravidla vyderivuje z CWBViewWnd vlastní třídu, ve které doplní metody ošetřující jednotlivé zprávy. Formulář se pak otevírá ve dvou krocích. Nejprve se zkonstruuje nový objekt (zpravidla dynamický pomocí new) a vlastní formulář se otevře voláním metody Open, případně Select_records, Relate_record nebo Active_view. Při zpracovávání zpráv je nutné všechny plně neošetřené zprávy předat funkci DefWindowProc nebo Default.

Metody:

Otevírání a zavírání formuláře

Open | otevření formuláře
Select_records | otevření formuláře s vybranými záznamy
Relate_record | otevření formuláře k editaci relace mezi 2 tabulkami
Register_rec_syn | synchronizování dvou formulářů na stejný záznam
Close_view | uzavření formuláře
PostNcDestroy | zrušení dynamicky vytvořeného objektu třídy CWBViewWnd po uzavření formuláře

Pohyb mezi záznamy a složkami

FirstRec | nastaví formulář na první záznam
LastRec | nastaví formulář na poslední záznam
NextRec | nastaví formulář na následující záznam
PrevRec | nastaví formulář na předchozí záznam
NextPage | nastaví formulář na následující stránku
PrevPage | nastaví formulář na předchozí stránku
FirstItem | přejde na první složku v aktuálním záznamu
LastItem | přejde na poslední složku v aktuálním záznamu
UpItem | přejde o složku výš
DownItem | přejde o složku níž
PrevTab | přejde na předchozí složku v aktuálním záznamu
NextTab | přejde na další složku v aktuálním záznamu
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

Vkládání a mazání záznamů

Insert | vloží do formuláře nový záznam
DelAsk | po dotazu smaže všechny záznamy v tabulce
DelRec | smaže aktuální záznam
UnbindDel | odváže zrušené záznamy

Editace ve formuláři

Cut | vystřihne vybranou část editované položky
Copy | zkopíruje vybranou část editované položky do clipboardu
Paste | vlepí do aktuální položky obsah clipboardu
Get_item_value | zjištění hodnoty ve složce formuláře
Set_item_value | zápis hodnoty do složky formuláře
OpenQBE | přepne formulář do režimu zadávání QBE dotazu
OpenSort | přepne formulář do režimu zadávání uspořádání
AcceptQuery | akceptuje QBE dotaz
CancelQuery | zruší QBE dotaz nebo uspořádání
Reset_view | aktualizace obsahu formuláře
Commit_view | uložení změn ve formuláři do databáze
Roll_back_view | odvolání změn v záznamově synchronizovaném formuláři
EditFind | otevře dialog pro vyhledání řetězce v textovém editačním okně
EditFormat | přeformátuje text v textovém editačním okně
EditRefind | najde další výskyt řetězce v textovém editačním okně
EditReplace | otevře dialog pro náhradu řetězce v textovém editačním okně
EditSave | uloží text editovaný v textovém editačním okně do databáze

Tisk

Print | vytiskne formulář
Print_opt | interaktivní nastavení parametrů tisku sestav
Printer_dialog | volba tiskárny

Stav formuláře

Active_view | zjištění zda je formulář aktivní
Get_view_pos | zjištění čísla vybraného záznamu ve formuláři
Current_item | vrátí číslo složky formuláře, na níž stojí kurzor
QBE_state | vrací indikaci, zda je formulář v režimu zadávání QBE dotazu

Ostatní

Draw_line | nakreslení úsečky v okně
Put_pixel | nakreslení bodu v okně
Get_fcursor | zjištění kurzoru a parametrů formuláře
Set_fcursor | nastavení kurzoru a parametrů formuláře
Pick_window | vytažení formuláře nad ostatní okna
Select_file | výběr souboru
Select_directory | výběr adresáře
MultiAttrs | otevře okno s hodnotami multiatributu
Help | otevře okno s lokální nápovědou
Locks | otevře dialog s nabídkou zamykání záznamů


Metoda CWBViewWnd :: Active_view()

CWBViewWnd :: Active_view()

BOOL CWBViewWnd :: Active_view();

Popis

Metoda Active_view zjišťuje, který formulář je právě aktivní. Objekt inicializovaný pomocí této metody není napojen na mechanismus zpracování zpráv MFC.

Hodnota funkce

Funkce vrací v případě úspěchu TRUE, pokud není otevřen žádný formulář vrací FALSE.

Příklad

CActWnd *ActWnd = new CActWnd();
if (ActWnd && ActWnd->Active_view())
{
   short Flags;
   CWBCursor Curs;
   ActWnd->Get_fcursor(&Curs, &Flags);
   .
   .
   .
}


Metoda CWBFrameWnd :: UpdateMenuProps()

CWBFrameWnd :: UpdateMenuProps()

void CWBFrameWnd :: UpdateMenuProps(HMENU hMainMenu,
    HMENU hWinMenu = (HMENU)-1);

Parametry

hMainMenuhandle menu hlavního okna

hWinMenuhandle submenu Okna (Windows).

Popis

Metoda informuje 602SQL o změně menu hlavního okna. Tuto metodu je třeba volat, jestliže aplikace nastavuje pro formuláře jiné menu než to, které bylo zavedeno při vytváření hlavního okna. Pokud není zadán parametr hWinMenu, bude funkce hledat submenu Okna pomocí virtuální metody GetWindowMenuPopup. Jestliže vaše aplikace otevírá několik formulářů a pro každý formulář má jiné menu, je třeba při ošetřování změny aktivního okna t.j. v metodě OnMDIActivate volat UpdateMenuProps ještě před předáním řízení původní ošetřující rutině.

Příklad

void CMyApp :: OnFaktury()
{
   CFaktury *Faktury = new CFaktury();
   if (Faktury != NULL)
      if (Faktury->Open("*Faktury"))
       {
           CMenu Menu;
           Menu.LoadMenu(IDM_FAKTURY);
           CMenu *WinMenu = GetSubMenu(3);
           Faktury->hMenu = Menu.m_hMenu;
           Faktury->hWinMenu = WinMenu->m_hMenu;
       }
}

void CFaktury :: OnMDIActivate(BOOL bActivate, CWnd* pActWnd,
                 CWnd* pDeactWnd)
{
   if (bActivate)
   {
      CMainFrame *MainFrame = (CMainFrame *)GetMDIFrame();
      MainFrame->UpdateMenuProps(hMenu, hWinMenu);
      MainFrame->SetToolBar(IDM_FAKTURY);
   }
   Default();
}


Metoda CWBApp :: OnLoginErr()

CWBApp :: OnLoginErr()

virtual void CWBApp :: OnLoginErr();

Popis

Virtuální metoda, která se volá, pokud je mezi parametry funkce WBAppInit uvedeno nesprávné jméno uživatele nebo chybné heslo. Umožňuje uživateli reagovat na vzniklou chybu. Implicitní instance vypíše chybové hlášení Uvedeno nesprávné heslo.

Příklad

void CMyApp :: OnLoginErr()
{
   m_pMainWnd->MessageBox("Nemáte právo přístupu k databázi");
}


Metoda CWBViewWnd :: Select_records()

CWBViewWnd :: Select_records()

BOOL CWBViewWnd :: Select_records(const char *ViewDef,
    tcursnum Base, uns32 Flags, short Limit, trecnum *Bindl,
    FARPROC Filter = NULL, CWBViewWnd *ParWnd = NULL);)

Parametry

ViewDefspecifikace formuláře, který má být otevřen

Baseotevřený kurzor nebo konstanta NO_REDIR

Flagspříznaky

Limitmaximální počet vybraných záznamů

Bindlpole složek typu trecnum

Filterrezervováno pro budoucí použití

ParWndukazatel na formulář, který má být vždy pod otevíraným formulářem

Popis

Metoda otevře formulář, který umožní vybrat množinu záznamů z tabulky nebo kurzoru. Detailní popis je uveden v encyklopedii funkcí.

Hodnota funkce

Funkce vrací v případě úspěchu TRUE, v opačném případě FALSE.


Metoda CWBViewWnd :: Open()

CWBViewWnd :: Open()

BOOL CWBViewWnd :: Open(const char *ViewDef,
    tcursnum  Base = NO_REDIR, DWORD Flags = 0, trecnum Pos = 0,
    FARPROC Filter = NULL, CWBViewWnd *ParWnd = NULL);

Parametry

ViewDefspecifikace formuláře, který má být otevřen

Baseotevřený kurzor nebo konstanta NO_REDIR

Flagspříznaky

Posčíslo záznamu, na němž má být formulář otevřen

Filterrezervováno pro budoucí použití

ParWndukazatel na formulář, který má být vždy pod otevíraným formulářem.

Popis

Metoda otevře zadaný formulář a připojí ho k objektu CWBWiewWnd. Detailní popis parametrů je uveden v encyklopedii funkcí.

Hodnota funkce

Funkce vrací v případě úspěchu TRUE, v opačném případě FALSE.


Třída CWBModalViewWnd

class CWBModalViewWnd : public CFrameWnd

Popis

Základní třída pro modální formuláře 602SQL.

Umožňuje otevírat a ovládat modální formuláře. Na třídě jsou definovány stejné metody jako na CWBViewWnd.


Třída CWBCursor

class CWBCursor : public CWBCursTab

Popis

Třída objektů typu kurzor, reprezentuje vlastnosti charakteristické pouze pro kurzory.

Objekt se vytváří ve dvou krocích. Nejprve se zkonstruuje nová instance a vlastní kurzor se pak zpřístupní voláním některé z metod Open, Open_cursor, Open_cursor_direct, ODBC_open_cursor nebo Open_subcursor.

Metody

Open | otevření kurzoru, jehož definice je uložená v databázi
Open | otevření kurzoru na základě SQL dotazu
Close | uzavření kurzoru

Add_record | přidání záznamu do kurzoru
Close_cursor | uzavření kurzoru
Odbc_open_cursor | otevření proměnného kurzoru v ODBC zdroji dat
Open_cursor | otevření pevného kurzoru z databáze
Open_cursor_direct | otevření proměnného kurzoru zadáním dotazu
Open_subcursor | otevření subkurzoru již otevřeného kursoru
Print_view | tisk sestavy
Super_recnum | převod čísla záznamu v subkurzoru na číslo téhož záznamu v superkurzoru
Translate | konverze čísla záznamu


Další metody třídy CWBCursor

Dále jsou na třídě CWBCursor definovány následující metody:

BOOL CWBCursor :: Add_record(trecnum * Recs, short NumOfRecs);
BOOL CWBCursor :: Close_cursor();
BOOL CWBCursor :: Odbc_open_cursor(uns32 Connection, const char * Query);
BOOL CWBCursor :: Open_cursor(tobjnum CursDef);
BOOL CWBCursor :: Open_cursor_direct( const char * Query);
BOOL CWBCursor :: Open_subcursor( const char * SubcurDef, CWBCursor * Subcurs);
BOOL CWBCursor :: Print_view(const char * ViewDef, trecnum FirstRec, trecnum LastRec, FARPROC Filter);
BOOL CWBCursor :: Super_recnum(tcursnum SuperCursor, trecnum SubRecnum, trecnum *SuperRecnum);
BOOL CWBCursor :: Translate(trecnum cRec, short Tbord, trecnum *tRec);

Parametry, hodnoty a význam těchto metod jsou stejné jako u stejnojmenných rutin z encyklopedie funkcí.

Add_record - přidání záznamu do kurzoru

Close_cursor - uzavření kurzoru

Odbc_open_cursor - otevření proměnného kurzoru v ODBC zdroji dat

Open_cursor - otevření pevného kurzoru z databáze

Open_cursor_direct - otevření proměnného kurzoru zadáním dotazu

Open_subcursor - otevření subkurzoru již otevřeného kursoru

Print_view - tisk sestavy

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


Další metody třídy CWBTable

Dále jsou na třídě CWBTable definovány následující metody:

BOOL CWBTable :: Attribute_info(const char * AttrName, tattrib * AttrNum, uns8 * AttrType, uns8 * AttrMult, uns16 * AttrSpecif);
BOOL CWBTable :: Enable_index(sig16 Which, BOOL Enable);
BOOL CWBTable :: Enum_attributes(enum_attr * CallBack);
BOOL CWBTable :: Find_object(const char * Name);
BOOL CWBTable :: Free_deleted();
BOOL CWBTable :: Get_data_rights(const char *UserName, tright * Rights, tdright * rdRights, tdright * wrRights);
BOOL CWBTable :: Set_data_rights(const char * UserName, tright Rights, tdright rdRights, tdright wrRights);
BOOL CWBTable :: Undelete(trecnum Position);
BOOL CWBTable :: Uninst_table();

Parametry, hodnoty a význam těchto metod jsou stejné jako u stejnojmenných rutin z encyklopedie funkcí.

Attribute_info - vyhledání sloupce v tabulce

Enable_index - povoluje/zakazuje použití indexů

Enum_attributes - zjištění atributů v tabulce

Find_object - zjištění čísla objektu

Free_deleted - uvolnění zrušených záznamů v tabulce

Get_data_rights - zjištění práv uživatele k datům

Set_data_rights - nastavení práv k datům

Undelete - obnovení zrušeného záznamu

Uninst_table - uvolnění paměti zabrané tabulkou


Další metody třídy CWBViewWnd

Dále jsou na třídě CWBViewWnd definovány metody:

void  CWBViewWnd :: Close_view();
BOOL  CWBViewWnd :: Commit_view(BOOL can_ask, BOOL report_error);
short CWBViewWnd :: Current_item();
void  CWBViewWnd :: Draw_line(short x1, short y1, short x2, short y2, short colour);
BOOL  CWBViewWnd :: Get_item_value(trecnum intrec, short itemid, char *value);
BOOL  CWBViewWnd :: Get_fcursor(tcursnum * curs, short FAR *flags);
BOOL  CWBViewWnd :: Get_fcursor(CWBCursTab * curs, short FAR *flags);
BOOL  CWBViewWnd :: Get_view_pos(trecnum * irec, trecnum * erec);
void  CWBViewWnd :: Pick_window();
BOOL  CWBViewWnd :: Print_opt();
void  CWBViewWnd :: Printer_dialog();
void  CWBViewWnd :: Put_pixel(short x, short y, short colour);
BOOL  CWBViewWnd :: QBE_state();
BOOL  CWBViewWnd :: Register_rec_syn(HWND hWnd2);
void  CWBViewWnd :: Reset_view(trecnum rec = -1, BOOL reload = TRUE);
void  CWBViewWnd :: Roll_back_view();
BOOL  CWBViewWnd :: Select_file(char *filename);
BOOL  CWBViewWnd :: Select_directory(char *filename);
BOOL  CWBViewWnd :: Set_ext_pos(trecnum pos, short itemnum = -1);
BOOL  CWBViewWnd :: Set_fcursor(tcursnum curs, DWORD flags = 0);
BOOL  CWBViewWnd :: Set_int_pos(trecnum pos, short itemnum = -1);
BOOL  CWBViewWnd :: Set_item_value(trecnum intrec, short itemid, const char * value);

Parametry, hodnoty a význam těchto metod jsou stejné jako u stejnojmenných rutin z encyklopedie funkcí.

Close_view - uzavření formuláře

Commit_view - uložení změn ve formuláři do databáze

Current_item - vrátí číslo složky formuláře, na níž stojí kurzor

Draw_line - nakreslení úsečky v okně

Get_item_value - zjištění hodnoty ve složce formuláře

Get_fcursor - zjištění kurzoru a parametrů formuláře

Get_view_pos - zjištění čísla vybraného záznamu ve formuláři

Pick_window - vytažení formuláře nad ostatní okna

Print_opt - interaktivní nastavení parametrů tisku sestav

Printer_dialog - volba tiskárny

Put_pixel - nakreslení bodu v okně

QBE_state - vrací indikaci zda je formulář v režimu zadávání QBE dotazu

Register_rec_syn - synchronizování dvou formulářů na stejný záznam

Reset_view - aktualizace obsahu formuláře

Roll_back_view - odvolání změn v záznamově synchronizovaném formuláři

Select_file - výběr souboru

Select_directory - výběr adresáře

Set_ext_pos - vybrání záznamu ve formuláři dle absolutního čísla

Set_fcursor - nastavení kurzoru a parametrů formuláře

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


Metoda CWBViewWnd :: Relate_record()

CWBViewWnd :: Relate_record()

BOOL CWBViewWnd :: Relate_record(const char * Relation1,
    const char * ViewDef, tcursnum Base = NO_REDIR,
    uns32 Flags = 0, FARPROC Filter = NULL,
    const char * Relation2 = NULL);

Parametry

Relation1jméno relace (první relace pro M:N)

Viewdefspecifikace formuláře, který má být otevřen

Baseotevřený kurzor nebo konstanta NO_REDIR

Flagspříznaky

Filterprocedura zachytávající zprávy formuláře

Relation2 jméno druhé relace, není-li parametr uveden jedná se o relaci 1:N

Popis

Metoda Relate_record otevře na obrazovce formulář specifikovaný parametrem viewdef , který slouží k editaci relace 1:N nebo M:N mezi dvěma tabulkami. Detailní popis je uveden v encyklopedii funkcí.

Hodnota funkce

Funkce vrací v případě úspěchu TRUE, v opačném případě FALSE.


Metody CWBViewWnd pro editaci složky formuláře

CWBViewWnd - Editace složky

void CWBViewWnd :: Cut();
void CWBViewWnd :: Copy();
void CWBViewWnd :: Paste();

Popis

Metody slouží pro programové ovládání editace složky formuláře.

Cut | Vystřihne vybranou část editované složky a uloží ji do clipboardu
Copy | Zkopíruje vybranou část editované složky do clipboardu
Paste | Vlepí do aktuální složky obsah clipboardu

Příklad

BEGIN_MESSAGE_MAP(CMyForm, CWBViewWnd)
    .
    .
    ON_COMMAND(IDC_COPY, OnCopy)
    .
    .
END_MESSAGE_MAP()

void CMyForm :: OnCopy()
{
    Copy();
}


Metody CWBViewWnd pro vkládání a mazání záznamů

CWBViewWnd - Vkládání a mazání záznamů

void CWBViewWnd :: Insert();
void CWBViewWnd :: DelRec();
void CWBViewWnd :: DelAsk();
void CWBViewWnd :: UnbindDel();

Popis

Metody slouží pro vkládání a rušení záznamů ve formuláři.

Insert | Vloží nový záznam
DelRec | Smaže aktuální záznam
DelAsk | Zobrazí dialog s dotazem, zda si uživatel opravdu přeje smazat všechny záznamy, po kladné odpovědi opravdu smaže všechny záznamy v tabulce, do které formulář vede
UnbindDel | Odváže zrušené záznamy

Příklad

BEGIN_MESSAGE_MAP(CMyForm, CWBViewWnd)
    .
    .
    ON_COMMAND(IDC_INSERT, OnInsert)
    .
    .
END_MESSAGE_MAP()

void CMyForm :: OnInsert()
{
    Insert();
}


Třída CWBTable

class CWBTable : public CWBCursTab

Popis

Třída objektů typu tabulka, reprezentuje vlastnosti charakteristické pouze pro tabulky.

Objekt se vytváří ve dvou krocích. Nejprve se zkonstruuje nová instance a vlastní tabulka se zpřístupní voláním metody Open nebo Find_object.

Metody:

Open | otevření tabulky uložené v databázi
Attribute_info | vyhledání sloupce v tabulce
Enable_index | povoluje/zakazuje použití indexů
Enum_attributes | zjištění sloupců v tabulce
Find_object | zjištění čísla objektu
Free_deleted | uvolnění zrušených záznamů v tabulce
Get_data_rights | zjištění práv uživatele k datům
Set_data_rights | nastavení práv k datům
Undelete | obnovení zrušeného záznamu
Uninst_table | uvolnění paměti zabrané tabulkou


class CWBFrameWnd : public CMDIFrameWnd

Popis

Základní třída pro hlavní okno aplikačního programu 602SQL.

Ošetřuje vytvoření MDI klienta, ovládací lišty, stavového řádku a zabezpečuje vazbu na 602SQLFrameProc. Při uzavírání hlavního okna zajistí odhlášení uživatele a ukončení komunikace s jádrem. Uživatelský program zpravidla vyderivuje z CWBFrameWnd vlastní třídu, ve které doplní metody ošetřující jednotlivé zprávy. Hlavní okno aplikace se pak vytvoří ve dvou krocích. Nejprve se zkonstruuje nový objekt a okno se otevře voláním metody Create nebo LoadFrame.

Metody:

CWBFrameWnd | konstruktor objektu
Def602SQLFrameProc | implicitní procedura hlavního okna, neošetřené zprávy předá API
602SQLFrameProc | implicitní procedura hlavního okna, neošetřené zprávy vrací volající funkci
GetWindowMenuPopup | vrací handle submenu Okna
UpdateMenuProps | informuje 602SQL o změně menu


Konstruktor CWBFrameWnd :: CWBFrameWnd()

CWBFrameWnd :: CWBFrameWnd()

CWBFrameWnd :: CWBFrameWnd(UINT fStyle = 0, UINT WinMenu = 0x8000);

Parametry

fStylestyl hlavního okna

WinMenuindex submenu Okna (Window) v hlavním menu aplikace.

Popis

Konstruktor objektu. Parametr fStyle může být kombinací následujících hodnot:

WBF_NO_TOOLBAR | Okno nebude používat ovládací lištu z 602SQL, tzn. aplikační program si zabezpečí ovládací lištu ve vlastní režii nebo ji nebude mít vůbec.
WBF_NO_STATUSBAR | Okno nebude používat stavový řádek z 602SQL, tzn. aplikační program si zabezpečí stavový řádek ve vlastní režii nebo ho nebude mít vůbec.

Jsou-li nastaveny oba příznaky, nebude 602SQL vytvářet ani MDI klienta a ponechá jeho vytvoření na MFC. Parametr WinMenu udává pořadové číslo submenu Okna v hlavním menu aplikace (počínaje od nuly). Není-li zadán, nebo má-li hodnotu 0x8000, předpokládá se, že submenu Okna je předposlední položkou (poslední je Nápověda). Pokud submenu Okna neexistuje, předává se 0xFFFF.

Příklad

.
.

CMainFrame* pMainFrame = new CMainFrame(WBF_NO_TOOLBAR | WBF_NO_STATUSBAR);

.
.


Metoda CWBApp :: InitInstance()

CWBApp :: InitInstance()

virtual BOOL CWBApp :: InitInstance() = 0;

Popis

V programu je nutné vytvořit vlastní instanci této metody, která vedle ostatních inicializací vytvoří hlavní okno aplikace, zabezpečí jeho vazbu na 602SQLFrameProc (viz třída CWBFrameWnd) a provede inicializaci komunikace s jádrem 602SQL, přihlášení uživatele případně nastavení databázové aplikace (viz. metoda WBAppInit).

Hodnota funkce

Funkce vrací TRUE, pokud inicializace proběhla úspěšně, jinak vrací FALSE.

Příklad

class CMainFrame : public CWBFrameWnd
{
    .
    .
    .
};

BOOL CMyApp :: InitInstance()
{
    CMainFrame * pMainFrame = new CMainFrame();
    DWORD dwStyle = WS_OVERLAPPEDWINDOW | WS_VISIBLE;
    if (!pMainFrame->Create(NULL, AfxGetAppName(), dwStyle,
      CFrameWnd::rectDefault, NULL, MAKEINTRESOURCE(WB_APP_MAINMENU)))
          return(FALSE);
    pMainFrame->ShowWindow(m_nCmdShow);
    pMainFrame->UpdateWindow();
    m_pMainWnd = pMainFrame;
    if (!WBAppInit("Fakturace", NULL, NULL, "MujServer"))
       return(FALSE);
    return TRUE;
}


Metoda CWBApp :: WBAppInit()

CWBApp :: WBAppInit()

BOOL CWBApp:: WBAppInit(const char * ApplName = NULL,
    const char * UserName = NULL, const char * Password = NULL,
    const char * ServerPath = NULL);

Parametry

ApplNamejméno aplikace uložené v databázi

UserNamejméno uživatele

Passwordheslo přidělené uživateli

ServerPathjméno databázového serveru (viz. funkce Link_kernel)

Popis

Funkce naváže spojení se zadaným databázovým serverem, není-li server specifikován, naváže spojení se zaregistrovaným lokálním serverem v aktuálním adresáři, pokud v aktuálním adresáři žádný není, naváže spojení s prvním zaregistrovaným serverem. Dále provede inicializaci komunikace a přihlásí uživatele. Pokud je parametrem UserName prázdný řetězec, přihlásí uživatele Anonymous. Jestliže uživatelské jméno není zadáno, zobrazí se přihlašovací dialogbox. Je-li zadán parametr ApplName, nastaví se příslušná databázová aplikace.

Hodnota funkce

Dojde-li při navazování komunikace k chybě, je-li zadáno neznámé jméno uživatele, případně chybné heslo, nebo je-li zadáno chybné jméno aplikace, vypíše se chybové hlášení a funkce vrátí FALSE. V opačném případě vrací TRUE.

Příklad

.
.

WBAppInit("SKLAD", "Pepa", "Skladnik", "ServerSklad");

.
.


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.


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.


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.


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.


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.


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


Metoda formuláře SelectIntRec

Metody formulářů - přehled

Formát:

form.SelectIntRec(pos : integer; redraw : Boolean) : Boolean;

Parametry:

pos | interní číslo záznamu nebo -1
redraw | překreslit formulář

Popis:

Metoda umožní vybrat (označit) množinu záznamů otevřeného standardního formuláře. Popis viz funkce SelectIntRec

Obdoba v jazyce:

totožná funkce SelectIntRec


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 RecCount

Metody formulářů - přehled

Formát:

form.RecCount(withfictive : Boolean) : Integer;

Parametry:

withfictive příznak, má-li se započítat i fiktivní záznam

Popis:

Metoda vrátí počet záznamů ve formuláři v době zavolání. Podle příznaku lze stanovit, má-li se započítat i fiktivní záznam - obvyklejší je ho nepočítat (withfictive = FALSE)

Obdoba v jazyce:

Téhož lze dosáhnout pomocí posloupnosti funkcí Get_fcursor a Rec_cnt.

Příklad:

zjistit počet záznamů v subformuláři (se jménem subview1):

var
  fo : form Multipokus;
begin
  fo.Open(nil);
  pocet := fo.subview1.Reccount(false);


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 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.


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 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 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.


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.


Metoda formuláře IsIntRecSelected

Metody formulářů - přehled

Formát:

form.IsIntRecSelected(pos : integer) : Boolean;

Parametry:

pos interní číslo záznamu nebo -1

Popis:

Metoda umožní zjistit stav vybrání (označení) záznamů otevřeného standardního formuláře. Popis viz funkce IsIntRecSelected

Obdoba v jazyce:

totožná funkce IsIntRecSelected


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í


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.


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 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.


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 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.


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.


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.


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.


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.


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í


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 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.


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;


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.


Vlastnosti formuláře X, Y, Width, Height

Vlastnosti formuláře X, Y, Width a Height

Vlastnosti formulářů - přehled

Formát:

form.X
form.Y
form.Width
form.Height

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.


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 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í


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.


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 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 Commit_view

Metoda formuláře IsViewChanged

Metody formulářů - přehled

Formát:

form.IsViewChanged : Boolean;

Popis:

Funkce slouží ke zjištění, byla-li v otevřeném formuláři provedena editační změna.

Obdoba v jazyce:

Lze použít obdobnou funkci IsViewChanged.


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í


ActiveX metoda SetCurPos

SetCurPos[OCX metoda]

function SetCurPos(Pos : trecnum; Item : integer; SubNum : integer) : Boolean;

Identifikátor

DID_SETCURPOS(306)

Parametry

Pos | interní (pořadové) číslo záznamu, který má být vybrán, má-li hodnotu NORECNUM, záznam se nezmění, změní se pouze složka
Item | číslo složky, která má být vybrána, není-li zadáno nebo má-li hodnotu -1, změní se pouze záznam
SubNum | identifikace (číslo složky) subpohledu, není-li zadána nebo má-li hodnotu 0, vybere se složka v superpohledu, jinak v subpohledu s tímto číslem.

Popis

Vybere v pohledu složku Item v záznamu Pos.

Hodnota funkce

Funkce vrací TRUE po úspěšném provedení akce, jinak vrací FALSE.

Viz

    GetCurItem, GetCurPos, GetItemValue, SetItemValue


ActiveX metoda CancelQuery

CancelQuery[OCX metoda]

Procedure CancelQuery;

Identifikátor

DID_CANCELQ(204)

Popis

Zruší zadaný QBE dotaz nebo uspořádání a obnoví pohled do původního neomezeného zdroje dat.

Viz

OpenQBE, OpenSort, AcceptQuery


ActiveX metoda GetCurItem

GetCurItem[OCX metoda]

function GetCurItem(SubNum : integer) : integer;

Identifikátor

DID_GETCURITEM(304)

Parametry

SubNum identifikace (číslo složky) subpohledu, není-li zadána nebo má-li hodnotu 0, vrátí identifikaci vybrané složky superpohledu, jinak subpohledu s tímto číslem.

Popis

Vrátí identifikaci právě vybrané složky pohledu.

Viz

    GetCurPos, SetCurPos, GetItemValue, SetItemValue


ActiveX metoda EditRefind

EditRefind[OCX metoda]

Procedure EditRefind;

Identifikátor

DID_ED_REFIND(231)

Popis

Zopakuje poslední vyhledání nebo náhradu řetězce v textovém editačním okně.

Viz

EditText, EditSave, EditFind, EditReplace, EditFormat


ActiveX metoda PrevRec

PrevRec[OCX metoda]

Procedure PrevRec;

Identifikátor

DID_PREVREC(207)

Popis

Přejde na předchozí záznam v pohledu.

Viz

FirstRec, PrevPage, NextRec, NextPage, LastRec


ActiveX metoda OpenQBE

OpenQBE[OCX metoda]

Procedure OpenQBE;

Identifikátor

DID_QBE(201)

Popis

Přepne pohled do režimu zadávání QBE dotazu.

Viz

    OpenSort, AcceptQuery, CancelQuery, QBEState


ActiveX vlastnost DataScr

DataSrc[OCX vlastnost]

Identifikátor

DID_DATASRC(7)

Popis

Zdroj dat pro otevíraný pohled. Může se jednat o jméno databázové tabulky (např. ”MojeTabulka”), jméno SQL dotazu uloženého v databázi (např. ”MujDotaz”) nebo přímo text dotazu (např. ”SELECT * FROM MojeTabulka WHERE ID > 0”). Kategorii zdroje specifikuje vlastnost DataSrcCateg. Není-li zdroj dat zadán, předpokládá se, že bude specifikován v popisu pohledu (viz. vlastnost ViewSrc).


ActiveX metoda NextPage

NextPage[OCX metoda]

Procedure NextPage;

Identifikátor

DID_NEXTPAGE(209)

Popis

Přejde na následující stránku v pohledu.

Viz

FirstRec, PrevPage, PrevRec, NextRec, LastRec


ActiveX metoda PrevTab

PrevTab[OCX metoda]

Procedure PrevTab;

Identifikátor

DID_PREVTAB(214)

Popis

Přejde na předchozí složku v aktuálním záznamu.

Viz

    FirstItem, LastItem, NextTab, UpItem, DownItem


ActiveX metoda OpenSort

OpenSort[OCX metoda]

Procedure OpenSort;

Identifikátor

DID_SORT(202)

Popis

Přepne pohled do režimu zadávání uspořádání.

Viz

    OpenQBE, AcceptQuery, CancelQuery, QBEState


ActiveX vlastnost DataScrCateg

DataSrcCateg[OCX vlastnost]

Identifikátor

DID_DATASRCTG(107)

Popis

Kategorie zdroje dat pro pohled. Může mít některou z následujících hodnot:

CTG_TABLE (1)Zdrojem dat je databázová tabulka

CTG_CURSOR (2)Zdrojem dat je SQL dotaz uložený v databázi

CTG_SELECT(3)Zdrojem dat je text SQL příkazu SELECT

Není-li kategorie specifikována, použije se CTG_TABLE.


ActiveX vlastnost UserName

UserName[OCX vlastnost]

Identifikátor

DID_USERNAME(3)

Popis

Jméno uživatele pro přístup k databázi. Není-li specifikováno, bude se objekt hlásit k databázi jako uživatel Anonymous.


Metody komponenty "602SQL PohledX"

ActiveX komponenta 602SQL PohledX neposkytuje žádné uživatelské rozhraní, metody komponenty slouží k napojení ovládání pohledu na uživatelské rozhraní cílové aplikace. K dispozici jsou tyto skupiny metod:

Pohyb mezi záznamy a složkami

FirstRec
 Na první záznam
LastRec
 Na poslední záznam
NextRec
 Na další záznam
PrevRec
 Na předchozí záznam
NextPage
 Na další stránku
PrevPage
 Na předchozí stránku
FirstItem
 Na první složku v záznamu
LastItem
 Na poslední složku v záznamu
NextTab
 Na další složku v záznamu
PrevTab
 Na předchozí složku v záznamu
UpItem
 O složku výš
DownItem
 O složku níž
GetCurItem
 Vrátí identifikátor aktuální složky
GetCurPos
 Vrátí číslo aktuálního záznamu
SetCurPos
 Přejde do zadané složky v zadaném záznamu

Dotazy a uspořádání

OpenQBE
 Přepne pohled do režimu zadávání QBE dotazu
OpenSort
 Přepne pohled do režimu zadávání uspořádání
AcceptQuery
 Akceptuje QBE dotaz nebo zadané uspořádání
CancelQuery
 Zruší QBE dotaz nebo uspořádání
QBEState
 Vrátí indikaci režimu zadávání QBE nebo uspořádání

Editace složky

Cut
 Vystřihne vybranou část editované položky a uloží ji do clipboardu
Copy
 Zkopíruje vybranou část editované položky do clipboardu
Paste
 Vlepí do aktuální položky obsah clipboardu

Editace v textovém okně

EditFind
 Najde výskyt řetězce v textu
EditFormat
 Přeformátuje text
EditRefind
 Najde další výskyt řetězce v textu
EditReplace
 Otevře dialog pro náhradu řetězce
EditSave
 Uloží editovaný text

Vkládání a rušení záznamů

Insert
 Vloží nový záznam
DelAsk
 Smaže všechny záznamy
DelRec
 Smaže aktuální záznam
UnbindDel
 Odváže zrušené záznamy

Čtení a zápis hodnoty složky

GetItemValue
 Vrátí hodnotu atributu, do kterého vede zadaná složka pohledu
SetItemValue
 Zapíše zadanou hodnotu do složky v pohledu i do příslušného atributu

Synchronizace změn v pohledu a v databázi

Reset
 Uvede do souladu obsah pohledu s obsahem databáze
Commit
 Zapíše změny provedené v pohledu do databáze
RollBack
 Zruší změny provedené v pohledu

Tisky

Print
 Vytiskne pohled na tiskárnu
PrintOpt
 Nastaví parametry generované sestavy
PrintOptDlg
 Otevře dialog pro nastavení parametrů generování sestavy
PrintSel
 Umožňuje programově zvolit tiskárnu a její parametry
PrintSelDlg
 Otevře dialog pro volbu tiskárny

Pomocná okna

MultiAttrs
 Otevře okno s hodnotami multiatributu
EditText
 Otevře editor pro textovou složku
OpenPicture
 Otevře okno s obrázkem
Help
 Otevře okno s lokální nápovědou
Locks
 Otevře dialog s nabídkou zamykání záznamů

Ostatní

ExecStatements
 Provede posloupnost příkazů vnitřního programovacího jazyka
PickApplication
 Spustí aplikaci, které patří aktuální formulář, jako samostatného klienta 602SQL v samostatném hlavním okně

V popisu parametrů a výstupních hodnot byla použita syntaxe vnitřního programovacího jazyka.


ActiveX metoda GetItemValue

GetItemValue[OCX metoda]

function GetItemValue(Item : integer; Pos : trecnum; SubNum : integer) : BSTR;

Identifikátor

DID_GETITEMVAL(307)

Parametry

Item | číslo složky, není-li zadáno nebo má-li hodnotu -1, bude se číst hodnota aktuální složky
Pos | interní (pořadové) číslo záznamu, není-li zadáno nebo má-li hodnotu NORECNUM, vezme se složka v aktuálním záznamu
SubNum | identifikace (číslo složky) subpohledu, není-li zadána nebo má-li hodnotu 0, zjišťuje se obsah složek v superpohledu, jinak v subpohledu s tímto číslem.

Popis

Zjistí skutečný obsah atributu do kterého vede složka Item v záznamu Pos. Bližší popis je uveden v encyklopedii v popisu funkce Get_item_value.

Hodnota funkce

Funkce vrací hodnotu atributu jako řetězec, v případě chyby vrací řetězec “???”.

Viz

    GetCurItem, GetCurPos, SetCurPos, SetItemValue


ActiveX metoda DelAsk

DelAsk[OCX metoda]

Procedure DelAsk;

Identifikátor

DID_DELASK(222)

Popis

Po dotazu smaže všechny záznamy v tabulce, do které pohled vede.

Viz

DelRec, UnbindDel


ActiveX metoda MultiAttrs

MultiAttrs[OCX metoda]

Procedure MultiAttrs;

Identifikátor

DID_INDEX(225)

Popis

Otevře okno s hodnotami multiatributu.


ActiveX metoda SetItemValue

SetItemValue[OCX metoda]

function SetItemValue(Val : untyped; Item : integer; Pos : trecnum; SubNum : integer) : Boolean;

Identifikátor

DID_SETITEMVAL(308)

Parametry

Val | zapisovaná hodnota
Item | číslo složky, není-li zadáno nebo má-li hodnotu -1, bude se zapisovat do aktuální složky
Pos | interní (pořadové) číslo záznamu, není-li zadáno nebo má-li hodnotu NORECNUM, bude se zapisovat do aktuálním záznamu
SubNum | identifikace (číslo složky) subpohledu, není-li zadána nebo má-li hodnotu 0, nastavuje se obsah složek v superpohledu, jinak složek v subpohledu s tímto číslem.

Popis

Zapíše hodnotu Val do složky Item v záznamu Pos i do atributu, do kterého složka vede. Hodnota může být libovolného typu, funkce ji automaticky převede na typ odpovídající databázovému atributu. Bližší popis je uveden v encyklopedii v popisu funkce Set_item_value.

Hodnota funkce

Funkce vrací TRUE po úspěšném provedení akce, jinak vrací FALSE.

Viz

    GetCurItem, GetCurPos, SetCurPos, GetItemValue


Pohled 602SQL jako ActiveX

Jednou z možností, jak zpřístupnit uživateli data spravovaná databázovým systémem 602SQL, je použití formulářů jako tzv. ActiveX komponent.Vývojář může např. do aplikace ve Visual Basicu, Visual C/C++, Borland Delphi nebo do HTML stránky na WWW umístit objekt ActiveX typu 602SQL PohledX a tím začlenit plnohodnotný formulář 602SQL do cizího prostředí. Specifikováním vlastností tohoto objektu (jméno serveru, jméno aplikace, jméno pohledu, ...) určí vzhled pohledu a zdroj dat. Po spuštění aplikace nebo aktivaci HTML stránky se komponenta automaticky přihlásí k zadanému serveru a umožní editovat data jako běžný pohled.

Mechanismus ActiveX je v současné době nejužívanějším nástrojem k vytváření distribuovaných objektů a k i integraci nezávisle implementovaných objektů do aplikací.

Starší označení pro ActiveX je OCX.

602SQL PohledX má toto CLSID:

32F34910-9288-101B-96B8-04021C007002

Viz

  • Vlastnosti
  • Metody
  • Události


ActiveX metoda ExecStatements

ExecStatements[OCX metoda]

function ExecStatements( var statements : string) : Integer;

Identifikátor

DID_EXECSTTMNTS(317)

Popis

Metoda provede posloupnost příkazů vnitřního programovacího jazyka zapsanou v parametru statements.


ActiveX metoda Reset

Reset[OCX metoda]

procedure Reset(extent : integer, rec : trecnum);

Identifikátor

DID_RESET(301)

Parametry

extent | rozsah akcí, není-li zadán, provede se RESET_CONTROLS
rec | interní číslo záznamu v pohledu, není-li zadáno, zaktualizuje se celý obsah pohledu

Popis

Uvede do souladu obsah pohledu na obrazovce s obsahem databáze. Bližší popis je uveden v encyklopedii v popisu funkce Reset_view.


ActiveX metoda DelRec

DelRec[OCX metoda]

Procedure DelRec;

Identifikátor

DID_DELREC(221)

Popis

Smaže aktuální záznam.

Viz

DelAsk, UnbindDel


ActiveX metoda PrintSelDlg

PrintSelDlg[OCX metoda]

Procedure PrintSelDlg;

Identifikátor

DID_PRINTSELDLG(312)

Popis

Otevře na obrazovce standardní dialog pro volbu tiskárny. Provedená volba platí až do nové volby nebo do ukončení práce s 602SQL. Volba tiskárny neovlivní jiné aplikace běžící pod Windows. Programovou volbu tiskárny provádí metoda PrintSel.

Viz

    Print, PrintOpt, PrintOptDlg, PrintSel


Ošetření události

Ošetření událostí (ActiveX)

Má-li uživatelská aplikace reagovat na některou událost, je třeba vytvořit obslužnou rutinu a napojit ji na příslušnou událost. V Microsoft Visual Basicu nebo Borland Delphi se o napojení postará automaticky vývojové prostředí. Pro zvolený objekt nabídne seznam událostí, které jsou k dispozici a po té, co si vývojář nějakou vybere, vygeneruje vývojové prostředí rámec obslužné rutiny, do kterého stačí doplnit pouze vlastní příkazy. V HTML se obslužná rutina napojí na událost pomocí parametru FOR a EVENT v prvku <SCRIPT>. Například ošetření události OnNextRecord (výpis čísla záznamu (interního i externího) na status bar browseru) může v JavaScriptu vypadat například takto:

<OBJECT
CLASSID="clsid:32F34910-9288-101B-96B8-04021C007002"
ALIGN=CENTER WIDTH=275 HEIGHT=156 BORDER=1 HSPACE=5
ID=Formular>

<SCRIPT FOR=Formular EVENT="OnNextRecord(iRec, eRec, Subf)" LANGUAGE="JavaScript">
  window.status = iRec.toString(10) + "/" + eRec.toString(10);
</SCRIPT>

Ve VBScriptu lze vedle této použít také syntaxi:

<SCRIPT LANGUAGE="VBScript">
  Sub Formular_OnNextRecord(iRec, eRec, Subf)
    window.Status  = Cstr(iRec) + "/" + Cstr(eRec)
  end sub
</SCRIPT>

V C++ je třeba obslužné rutiny událostí “zabalit” do rozhraní IDispatch. V inicializační části aplikace se po aktivaci komponenty najde pomocí metody IconnectionPointContainer::FindConnectionPoint její styčný bod a tomu se předá ukazatel na rozhraní IDispatch. Události komponenty 602SQL PohledX mají ID rovno {32F34913-9288-101B-96B8-04021C007002}. Inicializace obsluhy událostí může vypadat např. takto:

DEFINE_GUID(WBFORM_EVENT_ID, 0x32F34913L, 0x9288, 0x101B, 0x96,
            0xB8, 0x04, 0x02, 0x1C, 0x00, 0x70, 0x02);

void CWBFormItem :: InitEventHandler()
{
    LPCONNECTIONPOINTCONTAINER lpConPtCont = NULL;

    if (m_lpObject->QueryInterface(IID_IConnectionPointContainer,
        (LPVOID *)&lpConPtCont) != NOERROR)
        return;
    if (lpConPtCont->FindConnectionPoint(WBFORM_EVENT_ID,
        &m_EVConPt) == NOERROR)
        m_EVConPt->Advise((LPDISPATCH)this, &m_EVCookie);
    if (lpConPtCont)
        lpConPtCont->Release();
}

Komponenta pak vyvolává jednotlivé události prostřednictvím metody IDispatch::Invoke.

STDMETHODIMP CWBFormItem :: Invoke(DISPID dispid, REFIID riid,
    LCID lcid, WORD Flags, DISPPARAMS *Params, VARIANT *pRes,
    EXCEPINFO *pexcepinfo, UINT *puArgErr)
{
    if (Flags == DISPATCH_METHOD)
    {
        switch (dispid)
        {
        case DID_ONNEXTRECORD:
            .
            .
            .
            break;
     case DID_ONITEMCHANGED:
            .
            .
            .
            break;
       .
       .
       .
    }
    return(NOERROR);
}

V rámci uvolňování komponenty je třeba styčný bod uvolnit:

void CWBFormItem :: ReleaseEventHandler()
{
    if (m_EVConPt)
    {
        if (m_EVCookie)
            m_EVConPt->Unadvise(m_EVCookie);
        m_EVConPt->Release();
    }
}


ActiveX metoda EditText

EditText[OCX metoda]

function EditText(Item : integer; Pos : trecnum; x, y, cx, cy : integer) : Boolean;

Identifikátor

DID_EDITTEXT(314)

Parametry

Item | číslo složky, není-li zadáno nebo má-li hodnotu -1, bude se editovat text aktuální složky
Pos | interní (pořadové) číslo záznamu, není-li zadáno nebo má-li hodnotu NORECNUM, vezme se složka v aktuálním záznamu
x, y | pozice okna editoru v klientských souřadnicích hlavního okna aplikace, nejsou-li zadány otevře se editor na pozici 40, 40
cx, cy | rozměry okna editoru, nejsou-li zadány bude, mít okno rozměry 500 x 200

Popis

Otevře editační okno pro textovou složku.

Hodnota funkce

V případě úspěchu vrací funkce TRUE, pokud složka neobsahuje text nebo pokud se nepodařilo editor otevřít, vrací FALSE.

Viz

EditFind, EditReplace, EditRefind, EditFormat


ActiveX vlastnost TopRec

TopRec[OCX vlastnost]

Identifikátor

DID_TOPREC(101)

Popis

Číslo záznamu, na kterém se pohled otevře. Implicitní hodnota je 0.


ActiveX metoda FirstItem

FirstItem[OCX metoda]

Procedure FirstItem;

Identifikátor

DID_FIRSTITEM(211)

Popis

Přejde na první složku v aktuálním záznamu.

Viz

    LastItem, PrevTab, NextTab, UpItem, DownItem


ActiveX metoda LastItem

LastItem[OCX metoda]

Procedure LastItem;

Identifikátor

DID_LASTITEM(212)

Popis

Přejde na poslední složku v aktuálním záznamu.

Viz

    FirstItem, PrevTab, NextTab, UpItem, DownItem


ActiveX metoda AcceptQuery

AcceptQuery[OCX metoda]

Procedure AcceptQuery;

Identifikátor

DID_ACCEPTQ(203)

Popis

Ukončí zadávání QBE dotazu nebo uspořádání a obnoví pohled do dat omezených zadanými podmínkami.

Viz

    OpenQBE, OpenSort, CancelQuery, QBEState


ActiveX metoda EditFormat

EditFormat[OCX metoda]

Procedure EditFormat;

Identifikátor

DID_ED_FORMAT(232)

Popis

Přeformátuje text v textovém editačním okně.

Viz

EditText, EditSave, EditFind, EditReplace, EditRefind


ActiveX metoda EditFind

EditFind[OCX metoda]

Procedure EditFind;

Identifikátor

DID_ED_FIND(229)

Popis

Otevře dialog pro vyhledání řetězce v textovém editačním okně.

Viz

EditText, EditSave, EditReplace, EditRefind, EditFormat


Vlastnosti komponenty "602SQL PohledX"

Vlastnosti (properties) představují základní charakteristiky komponenty. 602SQL PohledX má následující vlastnosti:

Server
 Jméno databázového serveru
ServerIP
 IP adresa databázového serveru
UserName
 Jméno uživatele
Password
 Heslo uživatele
Application
 Jméno databázové aplikace
Project
 Jméno projektu (programu), v jehož kontextu bude objekt pracovat
ViewSrc
 Jméno formuláře uloženého v databázi nebo zdrojový text popisu pohledu
ViewSrcCateg
 Rozlišuje variantu ViewSrc
DataSrc
 Jméno tabulky, dotazu uloženého v databázi nebo zdrojový text dotazu
DataSrcCateg
 Rozlišuje variantu DataSrc
TopRec
 Číslo záznamu, na kterém se formulář otevře

Vlastnosti mají význam pouze při vytváření objektu, vzhled a chování aktivního formuláře už nemohou ovlivnit. K tomu aby bylo možné 602SQL PohledX aktivovat je třeba specifikovat minimálně vlastnosti: Server, Application a ViewSrc nebo DataSrc.


ActiveX metoda NextRec

NextRec[OCX metoda]

Procedure NextRec;

Identifikátor

DID_NEXTREC(208)

Popis

Přejde na následující záznam v pohledu.

Viz

FirstRec, PrevPage, PrevRec, NextPage, LastRec


ActiveX vlastnost Server

Server[OCX vlastnost]

Identifikátor

DID_SERVER (1)

Popis

Jméno databázového serveru, ze kterého bude pohled čerpat data. Musí být zadáno. Pokud daný server není na klientské straně zaregistrován, je třeba ve vlastnosti ServerIP specifikovat jeho IP adresu.


ActiveX metoda Editreplace

EditReplace[OCX metoda]

Procedure EditReplace;

Identifikátor

DID_ED_REPLACE(230)

Popis

Otevře dialog pro náhradu řetězce v textovém editačním okně.

Viz

EditText, EditSave, EditFind, EditRefind, EditFormat


ActiveX metoda NextTab

NextTab[OCX metoda]

Procedure NextTab;

Identifikátor

DID_NEXTTAB(213)

Popis

Přejde na další složku v aktuálním záznamu.

Viz

    FirstItem, LastItem, PrevTab, UpItem, DownItem


ActiveX metoda Insert

Insert[OCX metoda]

Procedure Insert;

Identifikátor

DID_INSERT(220)

Popis

Vloží do pohledu nový záznam.


ActiveX metoda Print

Print[OCX metoda]

Procedure Print;

Identifikátor

DID_PRINT(224)

Popis

Vytiskne pohled na tiskárnu. Nastavení parametrů pro generování sestavy zabezpečuje metoda PrintOpt Tiskárnu lze zvolit pomocí metody PrintOptDlg

Viz

    PrintOpt, PrintDlg


ActiveX metoda FirstRec

FirstRec[OCX metoda]

Procedure FirstRec;

Identifikátor

DID_FIRSTREC(205)

Popis

Přejde na první záznam v pohledu.

Viz

    PrevPage, PrevRec, NextRec, NextPage, LastRec


ActiveX metoda RollBack

RollBack[OCX metoda]

Procedure RollBack;

Identifikátor

DID_ROLLBACK(303)

Popis

Odvolá změny v aktuálním záznamu v záznamově synchronizovaném pohledu a překreslí pohled zpět s hodnotami z databáze. Procedura odpovídá akci ”Odvolat změny v pohledu”.

Viz

Commit


ActiveX metoda PrintSel

PrintSel[OCX metoda]

function PrintSel(var Printer, Port : string; Orient, PaperSize, PaperBin, Quality, Duplex, Color, TrueTtype : short) : Boolean;

Identifikátor

DID_PRINTSEL(311)

Parametry

Printer | jméno tiskárny
Port | jméno výstupního portu, není-li zadáno, použije se LPT1:
Orient | orientace papíru, není-li zadána, provede se tisk na výšku
PaperSize | druh a velikost papíru, implicitní hodnota je A4
PaperBin | způsob podávání papíru, není-li specifikován, použije se horní podavač
Quality | rozlišení tiskárny nebo kvalita tisku, není-li zadáno, nastaví se kvalita ”Koncept”
Duplex | duplexní tisk, není-li specifikován, nastaví se simplex
Color | barevný tisk, není-li zadán, požije se imlicitní pro danou tiskárnu
TrueType | způsob tisku TT fontů na laserových tiskárnách, imlicitně se nastaví tisknout jako grafiku

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 PrintSelDlg . Detailní popis všech parametrů je v encyklopedii u funkce Printer_select.

Hodnota funkce

V případě úspěšného nastavení funkce vrací TRUE, v opačném případě FALSE.

Viz

    Print, PrintOpt, PrintOptDlg, PrintSel


Události komponenty "602SQL PohledX"

Prostřednictvím událostí informují ActiveX objekty klientskou aplikaci o svém stavu. Klientská aplikace může, ale nemusí na události reagovat. Komponenta 602SQL PohledX poskytuje tyto události:

OnCreate | Formulář byl otevřen
OnClose | Formulář byl uzavřen
OnNextRecord | Uživatel přešel na nový záznam
OnItemChanged | Uživatel změnil hodnotu složka
OnResetRecord | Záznam se překresluje
OnReset | Celý formulář se překresluje
OnSubcursor | Formulář přechází k subkurzoru QBE
OnSupercursor | Formulář se vrací k superkurzoru
OnOpenQuery | Uživatel přešel do formuláře pro zadání QBE nebo uspořádání
OnCloseQuery | Uživatel uzavřel formulář pro zadání QBE nebo uspořádání
OnOpenEdit | Uživatel otevřel okno pro editaci sloupce typu Text
OnCloseEdit | Uživatel uzavřel okno pro editaci sloupce typu Text
OnOpenPict | Uživatel otevřel okno pro zobrazení obrázku
OnClosePict | Uživatel uzavřel okno pro zobrazení obrázku

Pokračování:

Ošetření událostí


ActiveX metoda DownItem

DownItem[OCX metoda]

Procedure DownItem;

Identifikátor

DID_DOWNITEM(216)

Popis

Přejde v pohledu o složku níže.

Viz

    FirstItem, LastItem, PrevTab, NextTab, UpItem


ActiveX metoda LastRec

LastRec[OCX metoda]

Procedure LastRec;

Identifikátor

DID_LASTREC(210)

Popis

Přejde na poslední záznam v pohledu.

Viz

FirstRec, PrevPage, PrevRec, NextRec, NextPage


ActiveX vlastnost Project

Project[OCX vlastnost]

Identifikátor

DID_ PROJECT()

Popis

Jméno projektu (programu), v jehož kontextu bude objekt pracovat.


ActiveX metoda PrintOptDlg

PrintOptDlg[OCX metoda]

function PrintOptDlg() : Boolean;

Identifikátor

DID_PRINTOPTDLG(310)

Popis

Otevře na obrazovce dialog, který umožní zvolit tiskárnu a zadat parametry generování sestavy. Programovou volbu tiskárny provádí metoda PrintSel a programové nastavení parametrů sestavy zabezpečuje metoda PrintOpt.

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.

Viz

    Print, PrintDlg, PrintSel, PrintSelDlg


ActiveX metoda EditSave

EditSave[OCX metoda]

Procedure EditSave;

Identifikátor

DID_ED_SAVE(228)

Popis

Uloží text editovaný v textovém editačním okně.

Viz

EditText, EditFind, EditReplace, EditRefind, EditFormat


ActiveX metoda Help

Help[OCX metoda]

Procedure Help;

Identifikátor

DID_HELP(227)

Popis

Otevře okno s lokální nápovědou.


ActiveX metoda Copy

Copy[OCX metoda]

Procedure Copy;

Identifikátor

DID_COPY(218)

Popis

Zkopíruje vybranou část editované položky do clipboardu.

Viz

    Cut, Paste


ActiveX vlastnost Application

Application[OCX vlastnost]

Identifikátor

DID_ APPLICATION(5)

Popis

Jméno databázové aplikace, ke které zdroj pohledu patří. Musí být zadáno.


ActiveX metoda Locks

Locks[OCX metoda]

Procedure Locks;

Identifikátor

DID_LOCKS(226)

Popis

Otevře dialog s nabídkou zamykání záznamů.


ActiveX metoda Commit

Commit[OCX metoda]

function Commit(can_ask, report_error : Boolean) : Boolean;

Identifikátor

DID_COMMIT(302)

Parametry

can_ask | příznak, smí-li se objevit dotaz na uložení dat, není-li zadán, dotaz se neobjeví
report_error | příznak, má-li se v případě chyby otevřít okno s jejím popisem, není-li zadán, okno se neotevře

Popis

Zapíše změny v aktuálním záznamu v záznamově synchronizovaném pohledu do databáze, aniž by bylo třeba opouštět záznam. Přibližně odpovídá akci ”Uložit změny v pohledu”. Bližší popis je uveden v encyklopedii v popisu funkce Commit_view.

Hodnota funkce

Funkce vrací TRUE, pokud se zápis provedl, FALSE v případě chyby.

Viz

    RollBack


ActiveX vlastnost ViewScrCateg

ViewSrcCateg[OCX vlastnost]

Identifikátor

DID_VIEWSRCTG(106)

Popis

Kategorie zdroje popisu pohledu. Může mít některou z následujících hodnot:

CTG_VIEWNAME | (1) | Zdrojem je pohled uložený v databázi
CTG_VIEWSRC | (2) | Zdrojem je text specifikovaný ve ViewSrc

Není-li kategorie specifikována, použije se CTG_VIEWNAME.


ActiveX vlastnost ViewScr

ViewSrc[OCX vlastnost]

Identifikátor

DID_VIEWSRC(6)

Popis

Zdroj popisu otevíraného pohledu. Může jím být jméno pohledu uloženého v databázi nebo přímo zdrojový text pohledu. Kategorii zdroje popisu pohledu určuje vlastnost ViewSrcCateg. Není-li zdroj popisu pohledu zadán, předpokládá se, že je zadán zdroj dat a vytvoří se implicitní pohled do daného zdroje. Pokud není zadán ani zdroj dat, pokus o otevření pohledu zkrachuje. Jsou-li specifikovány obě vlastnosti DataSrc i ViewSrc, otevře se zadaný pohled do zadaného zdroje dat (zdroj dat z DataSrc musí mít stejné atributy jako zdroj dat specifikovaný v popisu pohledu).


ActiveX metoda Paste

Paste[OCX metoda]

Procedure Paste;

Identifikátor

DID_PASTE(219)

Popis

Vlepí do aktuální položky obsah clipboardu.

Viz

    Cut, Copy


ActiveX metoda PickApplication

PickApplication[OCX metoda]

Procedure PickApplication;

Identifikátor

DID_PICKAPPL(316)

Popis

Spustí aplikaci, které patří aktuální pohled, jako samostatného klienta 602SQL v samostatném hlavním okně.


ActiveX metoda OpenPicture

OpenPicture[OCX metoda]

function OpenPicture(Item : integer; Pos : trecnum) : Boolean;

Identifikátor

DID_OPENPICTURE(315)

Parametry

Item | číslo složky, není-li zadáno nebo má-li hodnotu -1, zobrazí se obrázek z aktuální složky
Pos | interní (pořadové) číslo záznamu, není-li zadáno nebo má-li hodnotu NORECNUM, vezme se složka v aktuálním záznamu

Popis

Zobrazí okno s obrázkem, který je uložen v zadané složce, v samostatném okně, není-li obrázek příliš velký, zobrazí se v původní velikosti.

Hodnota funkce

V případě úspěchu vrací funkce TRUE, pokud složka neobsahuje obrázek nebo pokud se nepodařilo okno otevřít, vrací FALSE.


ActiveX metoda PrevPage

PrevPage[OCX metoda]

Procedure PrevPage;

Identifikátor

DID_PREVPAGE(206)

Popis

Přejde na předchozí stránku v pohledu.

Viz

FirstRec, PrevRec, NextRec, NextPage, LastRec


ActiveX vlastnost Password

Password[OCX vlastnost]

Identifikátor

DID_PASSWORD(4)

Popis

Heslo uživatele pro přístup k databázi. Není-li specifikováno, bude se objekt hlásit k databázi s prázdným heslem. Je-li vlastnost Password = ”?”, zobrazí se při aktivaci pohledu přihlašovací dialog. Komponenta heslo při persistentním ukládání vlastností nijak nešifruje, proto pokud uživatelská aplikace potřebuje používat neprázdné heslo, musí si jeho skrytí před nežádoucími zraky zabezpečit sama.


ActiveX metoda GetCurPos

GetCurPos[OCX metoda]

function GetCurPos(SubNum : integer) : trecnum;

Identifikátor

DID_GETCURPOS(305)

Parametry

SubNum identifikace (číslo složky) subpohledu, není-li zadána nebo má-li hodnotu 0, vrátí číslo aktuálního záznamu v superpohledu, jinak v subpohledu s tímto číslem.

Popis

Vrátí interní (pořadové) číslo aktuálního záznamu v pohledu.

Viz

    GetCurItem, SetCurPos, GetItemValue, SetItemValue


ActiveX metoda Cut

Cut[OCX metoda]

Procedure Paste;

Identifikátor

DID_CUT(217)

Popis

Vystřihne vybranou část editované položky a uloží ji do clipboardu.

Viz

    Copy, Paste


ActiveX metoda UpItem

UpItem[OCX metoda]

Procedure UpItem;

Identifikátor

DID_UPITEM(215)

Popis

Přejde o složku výše.

Viz

FirstItem, LastItem, PrevTab, NextTab, DownItem


ActiveX vlastnost ServerIP

ServerIP[OCX vlastnost]

Identifikátor

DID_SERVERIP (2)

Popis

IP adresa databázového serveru. Musí být zadána, jestliže na klientské straně není server zaregistrován.


ActiveX metoda PrintOpt

PrintOpt[OCX metoda]

procedure PrintOpt(fRec, lRec : trecnum; fPage, lPage, Copies : short; Collate : boolean; var fName : string);

Identifikátor

DID_PRINTOPT(309)

Parametry

fRec | interní číslo prvního tištěného záznamu
lRec | interní číslo posledního tištěného záznamu, není-li zadáno, bude se tisknout do posledního záznamu
fPage | číslo první tištěné stránky, není-li zadáno, bude se tisknout od první stránky
lPage | číslo poslední tištěné stránky, není-li zadáno bude se tisknout do poslední stránky
Copies | počet kopií, pokud není zadán bude se tisknout jedna kopie
Collate | příznak, zda snášet kopie, implicitní hodnota je TRUE
fName | jméno výstupního souboru, pokud není zadáno, bude se tisknout na tiskárnu

Popis

Provede nastavení parametrů vytváření sestavy. Nastavení platí až do nového nastavení. Interaktivní nastavení těchže parametrů umožňuje metoda PrintOptDlg

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.

Viz

    Print, PrintOptDlg, PrintSel, PrintSelDlg


ActiveX metoda QBEState

QBEState[OCX metoda]

function QBEState() : Boolean;

Identifikátor

DID_QBESTATE(313)

Popis

Vrací indikaci, zda je pohled právě ve stavu zadávání QBE dotazu nebo uspořádání.

Hodnota funkce

Pokud je pohled právě v režimu zadávání QBE dotazu nebo uspořádání, vrátí TRUE, jinak vrátí FALSE.

Viz

    OpenQBE, OpenSort, AcceptQuery, CancelQuery


ActiveX metoda UnbindDel

UnbindDel[OCX metoda]

Procedure UnbindDel;

Identifikátor

DID_UNBINDDEL(223)

Popis

Odváže zrušené záznamy.

Viz

DelRec, DelAsk


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 602SQL a chcete tuto aplikaci převézt kompletně do cizího ODBC zdroje dat.


Úprava zdroje dat (System DSN)

Úprava zdroje dat 602SQL (System DSN)

Při vytvoření nové databáze ve 602SQL 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 Řídicí konzole 602SQL .

2. V seznamu vyberte zdroj dat 602SQL vytvořený při instalaci (se jménem podle jména serveru) a stiskněte tlačítko Configure. Musí se objevit dialogové okno Nastavení přístupu k datům ve 602SQL signalizující, že byly nalezeny instalační rutiny 602SQL ODBC driveru. V opačném případě instalujte znovu 602SQL 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.


602SQL 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 602SQL 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 602SQL 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 602SQL 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


Vytvoření zdroje dat (File DSN)

Vytvoření zdroje dat 602SQL (File DSN)

Nový File DSN vedoucí do 602SQL 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 602SQL.

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 "602SQL 8.0 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 602SQL 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ý.


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 602SQL.


Úprava zdroje dat (File DSN)

Úprava zdroje dat 602SQL (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]
DSN=602SQL_ServerVyroba
  • popisující vše potřebné
[ODBC]
DRIVER=602SQL 6 driver

UID=;prázdné uživatelské jméno

SERVER_ACCESS=wb6;jméno serveru

SCHEMA=AplMoje;jméno aplikace


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 602SQL. 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řístup 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.


Vytvoření zdroje dat (System DSN)

Vytvoření zdroje dat 602SQL (System DSN)

Nový zdroj dat vedoucí do 602SQL 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 602SQL.

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 602SQL Driver a stiskněte OK.

5. Vyplňte údaje o zdroji dat do dialogového okna Nastavení přístupu k datům ve 602SQL. 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.).


Ří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.


Přenosy dat - popis přenosu

Ve většině případů přenosů dat vyhovuje popis automaticky navržený po stisku tlačítka Vytvořit popis v návrháři. 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. 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 602SQL, 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 602SQL, 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 602SQL 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 602SQL do 602SQL. 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 602SQL 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 602SQL (soubor TDT) lze číst data pouze do existující tabulky ve 602SQL. Do takového souboru (TDT) lze exportovat data pouze z tabulky ve 602SQL nebo z odpovědi na dotaz. Mimo to jsou dovoleny všechny kombinace vstupu a výstupu.

Pokud tabulka 602SQL, 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ů.


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 602SQL
 | * Subjekty práv ve 602SQL
 | * Programy v klientském jazyce - úvod


Spojování řetězců (klientský jazyk)

Spojování řetězců pomocí +

Řetězce se v klientském jazyce dají spojovat pomocí operátoru +. Výsledný řetězec bude mít maximální délku 4090 znaků

Ekvivalentní příkaz jazyka je Strcat.

Pro spojování řetězců do výsledného řetězce delšího 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);


Řídicí panel - PROGRAMY

Program v klientském programovacím jazyce je posloupnost příkazů jazyka 602SQL. 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í (začne se provádět). Je-li zapnut ladicí režim klienta, vykonávání se zastaví na prvním řádku a jsou k dispozici příkazy debuggeru
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 (vymazání z databáze).
Duplikovat | vytvoření 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 (totéž co Modifikovat)
Práva k objektu | nastavení objektových práv
Ladit | otevře editor a spustí ladicí překlad a běh programu, téhož lze dosáhnout z editoru
Překlad a běh | otevře editor a spustí normální překlad a běh, téhož lze dosáhnout z editoru


Funkce s prefixem cd_

Klientský program v externím jazyce má k dispozici většinou 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 602SQL. 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ě přidávané funkce mají většinou již pouze variantu s cd_. V textu jsou však na ně odkazy bez tohoto prefixu.

Více o aplikacích v externích jazycích nalzenete zde.


(Untitled)

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,TinyInt 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.


(Untitled)

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ý, listovací 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 - viz Relační subpohled.

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..


(Untitled)

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ů.


(Untitled)

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;


(Untitled)

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.


(Untitled)

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 nebo celé číselné typy.Editační combo lze použít pro sloupce Real, Money, String, Date, Time, Timestamp a Boolean.

Podrobnosti o dotazu - viz Dotaz ve složce Combo.

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 (s vlastní nápovědou), 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.

Podrobnosti o dotazu - viz Dotaz ve složce Combo.


(Untitled)

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.


(Untitled)

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);


(Untitled)

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.


Vnitřní formát definice replikačního vztahu

Replikační vztahy definuje autor aplikace a využívá k tomu zpravidla interaktivní návrhář, který je součástí vývojového prostředí. V některých speciálních případech může být potřebné vytvořit replikační vztah programem.

Replikační vztah je objektem patřícím k aplikaci, je uložen v tabulce objektů OBJTAB a programy s ním mohou pracovat podle pravidel popsaných v manuálu.

Nový replikační vztah se z programu vytvoří voláním funkce Insert_object s parametrem CATEG_REPLREL. Do takto vytvořeného objektu (nebo do libovolného existujícího replikačního vztahu) se zapíše jeho definice v textové podobě vytvořená podle níže uvedených syntaktických pravidel:

  • Definice začíná číslem ležícím v rozsahu 0 až 3 (včetně) udávajícím způsob řešení replikačních konfliktů. Jednotlivé hodnoty odpovídají po řadě přepínačům na první záložce dialogového okna pro editaci replikačního vztahu.

  • Dále následují dvě části se shodnou syntaxí odpovídající po řadě nastavení parametrů v replikačních pravidlech na stranách žádající o replikační vztah a akceptující replikační vztah.

  • Každá část začíná dvěma celými čísly udávajícími počet hodin a minut replikační periody.

  • Za nimi následuje posloupnost záznamů odpovídajících jednotlivým tabulkám účastnícím se replikování.

  • Záznam o tabulce se skládá z hvězdičky, jména tabulky, replikační podmínky uvedené jako řetězec znaků v apostrofech (smí být prázdná), čísla 0 nebo 1 udávajících, zda se replikuje zrušení záznamu (1: ano, 0: ne), a seznamu jmen replikovaných sloupců.

Příklad definice replikačního vztahu:

3
0 2
*`OBJEDNÁVKY` '' 1 `CÍSLO ZBOZÍ` `DEALER` `POCET KUSU`
`CÍSLO OBJEDNÁVKY` `DNE` `DATUM` `CÍSLO_ZBOZÍ`
`POCET_KUSU` `CÍSLO_OBJ`
0 2
*`CENÍK` '' 1 `EVID. CÍSLO` `NÁZEV ZBOZÍ` `CENA` `TRÍDA`
`TRÍDA ZBOZÍ` `POPIS ZBOZÍ` `PLATÍ DO` `EVID_CÍSLO`
`NÁZEV` `PLATNOST` `POPIS`
*`OBJEDNÁVKY` 'Is_repl_destin(_W5_UNIKEY)' 0
`POTVRZENO KUSU` `POTVRZENO`


Novinky v replikacích ve verzi 7.0

Novinky v replikacích od verze 7.0

1) Podrobněji se vypisují do logu chyby kvůli duplicitě klíčů a replikační konflikty

Duplicita klíčů

Nastane, když v paketu přijde záznam, který podle _W5_UNIKEY odpovídá nějakému záznamu v replikované tabulce a podle jiného unikátního klíče odpovídá jinému záznamu v této tabulce. Pro snadnější vyhledání konfliktních záznamů vypíše 602SQL Serevr do logu tabulku, ve které řádky tvoří lokální záznam, došlý záznam a záznam, s nímž je došlý záznam v konfliktu a sloupce tvoří všechny unikátní klíče. Tabulka má tvar:

Duplicita klíčů v tabulce Table (nn): již existuje záznam se stejným klíčem
 | Záznam | Key1 | Key2
Místní | č.záz. podle _W5_UNIKEY | Místní Val1 | Místní Val2
Došlá |  | Došlá Val1 | Došlá Val2
Konflikt | č.záz. v konfliktu. | Konfliktní Val1 | Konfliktní Val2

V případě vkládání nového záznamu:

Duplicita klíčů v tabulce Table (nn): již existuje záznam se stejným klíčem
 | Záznam | Key1 | Key2
Došlá |  | Došlá Val1 | Došlá Val2
Konfl. | č.záz. v konfliktu | Konfliktní Val1 | Konfliktní Val2

Replikační konflikt

Nastane, když oba servery změní zároveň stejný záznam, kvůli automatické funkci replikací má vždy přednost hodnota otcovského serveru. Aby měla obsluha nějakou informaci o konfliktních hodnotách, vypíše se do logu tabulka unikátních klíčů a rozdílných atributů. Tabulka má tvar:

Replikační konflikt: přednost má místní/došlá hodnota
Aplikace Appl, tabulka Table, záznam nn
 | Key1 | Key2 | Key3 | Key4
Místní | Místní Val1 | Místní Val2 | Místní Val3 | Místní Val4
Došlá | Došlá Val1 | Došlá Val2 | Došlá Val3 | Došlá Val4

2) Pokud místní server nemůže kvůli závažné chybě zpracovat replikační paket, odešle protějšímu serveru paket typu "Zamítnutí replikace" a odesílající server vypíše do logu hlášení:

Server Xy nemohl zpracovat replikační paket č. ii
V aplikaci Appl, v tabulce Table, v záznamu č. nn došlo k chybě:

Chybové hlášení

3) Když server dostane žádost o replikaci a nemá co replikovat, nebo při vytváření paketu dojde k závažné chybě, odešle paket typu "Odmítnutí žádosti o replikaci" a žádající server vypíše do logu hlášení:

Čtu paket od Xy typu Odmítnutí žádosti o replikaci
Není co replikovat / jiné chybové hlášení

4) Přidány prostředky pro klientskou reakci na chyby replikací - viz podrobnosti;


Systémové sloupce zabezpečující replikace

_W5_ZCR

Zvolení vlastnosti Umožnit replikaci změn přidá do tabulky skrytý sloupec _W5_ZCR. Na serveru existuje globální čítač změn, který se inkrementuje při každé změně v replikovatelné tabulce (i pokud změnu vyvolá došlý replikační paket). Aktuální hodnota čítače se zapíše do sloupce _W5_ZCR v modifikovaném záznamu. V tabulce REPLTAB se udržuje pro danou aplikaci a cílový server hodnota globálního čítače při poslední replikaci. Když server obdrží požadavek na replikaci ven, přečte si z tabulky REPLTAB minulou hodnotu citace, ze sdílených tabulek vybere záznamy, které mají hodnotu _W5_ZCR mezi minulou a aktuální hodnotou globálního čítače, záznamy odešle na cílový server a do tabulky REPLTAB zapíše aktuální hodnotu globálního čítače.

_W5_UNIKEY

Zvolení vlastnosti Umožnit replikaci změn přidá do tabulky skrytý sloupec _W5_UNIKEY. Při každém vložení nového záznamu do tabulky se do něj zapíše hodnota, která se skládá z UUID domovského serveru a hodnoty čítače pro danou tabulku. Pokud záznam přišel v rámci replikace z jiného serveru, přepíše se hodnotou klíče ze zdrojového serveru. Jako unikátní klíč pro replikace lze také použít primární klíč. Pokud tabulka nemá ani _W5_UNIKEY ani primární klíč, skončí pokus o replikaci takovéto tabulky chybou.

_W5_LUO

Zvolení vlastnosti Bránit vzniku ozvěn přidá do tabulky skrytý sloupec _W5_LUO. Při každé změně v záznamu se do něj zapíše UUID domovského serveru. Pokud byla změna vyvolána replikací záznamu z jiného serveru, přepíše se hodnotou UUID serveru, ze kterého záznam přišel. Při replikaci ven se záznamy, které mají hodnotu sloupce shodnou s UUID cílového serveru neposílají.

_W5_TOKEN

Zvolení vlastnosti Předávat editačního peška přidá do tabulky skrytý sloupec _W5_TOKEN. Hodnotu sloupce tvoří čítač a tři příznaky:

TOKEN_HAVE (0x8000) | mám peška
TOKEN_HOLDED (0x4000) | peška někdo drží
TOKEN_REQUESTED (0x2000) | požádal jsem správce o peška

Možné stavy příznaků jsou:

TOKEN_HAVE | Mám peška, nedržím ho
TOKEN_HAVE + TOKEN_HOLDED | Mám peška, držím ho
0 | Nemám peška
TOKEN_REQUESTED | Nemám peška, správce dosud neodpověděl na žádost
TOKEN_HOLDED | Nemám peška, drží ho správce
TOKEN_HOLDED + TOKEN_REQUESTED | Nemám peška, správce ho také nemá

Implicitní hodnota při vytvoření nového záznamu je TOKEN_HAVE. Pokud není tento příznak nastaven, nelze do záznamu zapsat žádné změny. Požádat o peška znamená odeslat žádost o replikaci záznamu s danou hodnotou _W5_UNIKEY. Server, který není správcem pešků, posílá tuto žádost správci pešků, správce pešků posílá tuto žádost všem ostatním serverům.

_W5_DETECT1

Zvolení vlastnosti Detekovat replikační konflikty přidá do tabulky skrytý sloupec _W5_DETECT1. Při vytvoření nového záznamu se jeho hodnota vynuluje. Pokud záznam přijde od serveru, který je otcem pro detekci replikačních konfliktů, zapíše se do sloupce aktuální hodnota globálního čítače změn (_W5_DETECT1[0] – slouží k detekci, zda v záznamu došlo od poslední replikace ke změně) a hodnota čítače změn z otcovského serveru (_W5_DETECT1[1] – představuje číslo verze záznamu podle otcovského serveru). Při replikaci ven se zapisuje do paketu pro každý záznam vedle replikovaných atributů také číslo verze podle otce, otec zapisuje aktuální hodnotu _W5_ZCR, syn hodnotu _W5_DETECT[1].


Řídicí panel - REPLIKAČNÍ VZTAH

Řídicí panel - REPLIKAČNÍ VZTAHY

Replikační vztahy definuje autor aplikace proto, aby jimi popsal možné způsoby replikací dat z této aplikace do její kopie na protějším serveru. Při navazování spojení s protějším serverem pro zahájení replikací se vybere jeden replikační vztah, který se použije jako vzor pro replikační pravidla.

Replikační vztahy patří mezi back-endové objekty aplikace.

Základní akce, které je možno s replikačními vztahy 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 replikační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 replikačního vztahu do souboru
Importovat | import replikačního vztahu ze souboru
Práva | nastavení objektových práv

Replikační vztah lze také vytvořit jako kopii nastavených replikačních pravidel (tlačítkem v dialogu Replikační pravidla).


Ří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


Lišta řídicího panelu

Při vybrané aplikaci na řídicím panelu 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 (včetně kompletních složek!) 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 folderu se dvěma tečkami 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 klienta - otevře plovoucí okno, kam se vypisují informace o dění a o chybách v klientovi. Lze zde také nalézt, pod jakým jménem je uživatel přihlášen.

Řídicí konzole SQL Serveru - otevře centrální ovládací a konfigurační konzoli serveru.

Příkazová konzole SQL Serveru - otevře okno pro zadání textového SQL příkazu.

Obnovení objektů - znovunačtení objektů vybrané aplikace.

Č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ář.


Ří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


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 602SQL, 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 602SQL
 | * Připojení objektu


Řídicí panel - SYSTÉMOVÉ TABULKY

Mezi systémové tabulky ve 602SQL patří:

Tabulka objektů (OBJTAB) - zde jsou uloženy veškeré objekty všech aplikací vyjma tabulek. Tabulku objektů 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 kromě smazání nebo obnovení smazaného.

Tabulka replikačních serverů (SERVERTAB) - obsahuje názvy a parametry zaregistrovaných replikačních serverů. Nelze editovat kromě smazání nebo obnovení smazaného.

Tabulka replikačních pravidel (REPLTAB) - seznam replikačních pravidel uložených na serveru. Nelze editovat kromě smazání nebo obnovení smazaného.

Tabulka klíčů (KEYTAB) - seznam digitálních klíčů vydaných uživatelům. Nelze editovat kromě smazání nebo obnovení smazaného.

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 (uživatelům či skupinám) právo vkládat záznamy do systémových tabulek TABTAB, OBJTAB a USERTAB (lze tím zakázat, aby běžný uživatel nemohl vytvářet své aplikace).

Viz také: | * Řídicí panel
 | * Složka Systém


Volba souboru

Se soubory, ukládanými na disk pod správu operačního systému, se ve 602SQL 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í dialog 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


Ří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 - 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 | po varování celou aplikaci se všemi komponentami odstraní z databáze (nelze odvolat)
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 a navázání/ukončení sdílení
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)


Nalezení řetězce vtextu 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í. Tlačítkem Detaily můžete zvolit jen některé kategorie objektů.

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


Ří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
Ukázat text | needitovatelné zobrazení textové definice objektu
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.


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 602SQL z jiné aplikace téže databáze - přepínač je v poloze Tabulky z ostatních aplikací ve 602SQL.

  • 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 602SQL
 | * Připojení tabulky ODBC
 | * Připojení objektu do aplikace


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é 602SQL automaticky vytvoří, otevřete-li přímo tabulku nebo dotaz.


Připojení tabulky 602SQL

Připojení tabulky 602SQL k aplikaci

Tzv. spojovací tabulka je objekt, který je odkazem na tabulku 602SQL 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


Parametry klienta 602SQL

Okno Nastavení parametrů klienta slouží pro nastavení globálních provozních parametrů klienta 602SQL. Parametry jsou uloženy v textovém 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é 602SQL 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é 602SQL 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 602SQL.

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 602SQL 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í 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).


Ří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


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 602SQL 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.


Š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. 602SQL 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;

  • při dalším exportu aplikace se zašifrované objekty exportují zašifrovaně (nutno zvolit znovu Exportovat zašifrovaně, v opačném případě export skončí chybou při nalezení prvního zašifrovaného objektu);

  • 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í.


Spuštění procedury - popis dialogu

Proceduru nebo funkci v jazyce SQL je možné spustit z řídicího panelu aplikace nebo z textového editoru. 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 uvedeny jména a typy prvních až 10 parametrů. Pro vstupní a vstupně-výstupní parametry (označené IN nebo INOUT) lze zadat jejich hodnoty. Po provedení procedury se v dialogu zobrazí hodnoty vstupně-výstupních a výstupních parametrů (označených OUT nebo INOUT) a případná hodnota funkce.

Slouží-li procedura k vytvoření nebo rušení objektů, seznamy objektů na řídicím panelu je nutno po jejím provedení ručně nechat aktualizovat.


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


Ří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
Import aplikace | naimportuje aplikaci z disku do databáze
Vytvořit aplikaci | vytvoří novou prázdnou aplikaci
Rychlost spojení | program vyzkouší rychlost spojení s vybraným serverem a nechá rozhodnout, není-li spojení neúnosně pomalé


Řídicí panel - RELACE

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í nákresu
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 z nákresu
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ů 602SQL 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ů z nákresu
 | * Nákres čá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é z nákresu, 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
 | * Nákres části aplikace
 | * Dialog Správa relace
 | * Definování relačních vztahů v nákresu


Řídicí panel - NÁKRES

Řídicí panel - NÁKRESY

Nákresy slouží k alternativnímu způsobu zobrazení skupiny komponent 602SQL. 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! V dřívějších verzích se místo označení nákres používal ve stejném významu pojem schéma, pro možnou kolizi se slovem SCHEMA v SQL (kde je to synonymum pro aplikaci), došlo k přejmenování.

Otevřít | otevře se okno nákresu bez možnosti úprav
Vytvořit | otevře se prázdné okno nákresu v editačním režimu, pomocí pravého tlačítka myši vkládejte objekty
Modifikovat | otevře se okno nákresu v editačním režimu, ovládání pomocí pravého tlačítka myši
Zrušit | zrušení označeného nákresu
Duplikovat | vytvoření přesné kopie označeného nákresu
Exportovat | export popisu nákresu do souboru
Importovat | import popisu nákresu ze souboru
Práva k objektu | nastavení objektových práv


(Untitled)

Vlastnosti složky Přepínač:

Value

Text

TextColor

Checked


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 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_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í.


(Untitled)

Vlastnosti složky Obrázek:

BackColor

Length

Format


(Untitled)

Vlastnosti složky editovatelné combo:

Value

Text

BackColor

TextColor

Format

Precision


(Untitled)

Vlastnosti složky Tlačítko:

Text


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í.


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 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í.


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í.


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.


(Untitled)

Vlastnosti složky Záložky:

Page


(Untitled)

Metody složky Formátovaný text (RTF):

Refresh

SetFocus

IsNull

SetNull

ReadFile

WriteFile

Selection

Handle


(Untitled)

Vlastnosti složky Kalendář:

Value

Text

BackColor

TextColor


(Untitled)

Vlastnosti složky Needitovatelné (překládané) combo:

Value

Text

BackColor

TextColor

SelIndex


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í.


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í.


(Untitled)

Metody složky Kalendář:

Refresh

SetFocus

Set_font

Handle


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í.


(Untitled)

Vlastnosti složky Editační pole víceřádkové:

BackColor

TextColor

Length


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.


(Untitled)

Metody složky Needitovatelné (překládané) combo:

Refresh

SetFocus

IsNull

SetNull

Set_font

ResetCombo

Handle


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í.


(Untitled)

Metody složky Záložky:

Set_font

Handle


(Untitled)

Metody složky DTP:

Refresh

SetFocus

IsNull

SetNull

Set_font

Handle


(Untitled)

Vlastnosti složky Formátovaný text (RTF):

BackColor

Length


(Untitled)

Vlastnosti složky Nápis:

BackColor

TextColor

Text


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.


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í.


(Untitled)

Metody složky Nápis:

SetFocus

IsNull

SetNull

Set_font

Handle


(Untitled)

Vlastnosti složky Posuvník:

Value

Text

BackColor


(Untitled)

Vlastnosti složky DTP:

Value

Text

Format


(Untitled)

Metody složky Posuvník:

Refresh

SetFocus

IsNull

Handle


(Untitled)

Vlastnosti složky Označovací čtverec:

Value

Text

TextColor

Checked


(Untitled)

Vlastnosti složky Hodnota:

Value

Text

BackColor

TextColor

Format

Precision


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.


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.


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í.


(Untitled)

Vlastnosti složky Rám a čára

BackColor


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.


(Untitled)

Metody složky Tlačítko:

SetFocus

Set_font

Handle


(Untitled)

Vlastnosti složky Text (neformátovaný):

BackColor

TextColor

Length


(Untitled)

Metody složky Hodnota:

Refresh

SetFocus

IsNull

SetNull

Set_font

Handle


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.


(Untitled)

Metody složky Obrázek:

Refresh

SetFocus

IsNull

SetNull

Open

ReadFile

WriteFile

Handle


(Untitled)

Metody složky Editační pole víceřádkové:

Refresh

SetFocus

IsNull

SetNull

Set_font

ReadFile

WriteFile

Selection

Handle


(Untitled)

Vlastnosti složky Seznam:

BackColor

TextColor

SelIndex


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í.


(Untitled)

Metody složky Podpis:

SetFocus

SetNull

Set_font

Signature_state

Signature_sign

Signature_check

Handle


(Untitled)

Metody složky Text (neformátovaný):

Refresh

SetFocus

IsNull

SetNull

Set_font

Open

ReadFile -

WriteFile -

Handle


(Untitled)

Vlastnosti složky Podpis:

BackColor

TextColor


(Untitled)

Metody složky Označovací čtverec:

Refresh

SetFocus

IsNull

SetNull

Set_font

Handle


(Untitled)

Metody složky Seznam:

Refresh

SetFocus

IsNull

SetNull

Set_font

Handle


(Untitled)

Metody složky editovatelné combo:

Calendar

Refresh

SetFocus

IsNull

SetNull

Set_font

ResetCombo

Selection

Handle


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.


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.


(Untitled)

Metody složky Editační pole jednořádkové:

Refresh

SetFocus

IsNull

SetNull

Set_font

Calendar

Selection

Handle


(Untitled)

Metody složky přepínač:

Refresh

SetFocus

IsNull

SetNull

Set_font

Handle


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í.


(Untitled)

Vlastnosti složky OLE:

Length


(Untitled)

Vlastnosti složky Editační pole jednořádkové:

Value

Text

BackColor

TextColor

Format

Precision


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í.


(Untitled)

Metody složky OLE:

Refresh

SetFocus

IsNull

SetNull

Open

ReadFile

WriteFile

Handle


(Untitled)

Metody složky ActiveX:

SetFocus

IsNull

SetNull

Open

Handle


(Untitled)

Rutina

Souhrnné označení pro funkce a procedury uložené na serveru (Stored Procedures)


Chyby a jejich ošetřování v SQL

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 602SQL jsou chyby označovány číslem. Některé z těchto chyb odpovídají některému sqlstate, jiné jsou specifické po 602SQL. 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 602SQL 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 602SQL. 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. Pomocí těchto výjimek NELZE odchytit i chyby při kompilaci vloženého SQL příkazu volaného pomocí SQL_execute.

Od verze 7 jsou v jazyce zavedeny systémové proměnné sqlstate typu CHAR pro zjištění hodnoty sqlstate a sqlcode typu INT ve významu čísla chyby 602SQL. Lze je využít v handlerech pro podrobnější ošetření nebo logování chybových stavů.

Podrobnější rozdělení všech chyb do kategorií podle možnosti reakce na jejich výskyt lze nalézt zde.

Název sqlstate | číslo chyby ve 602SQL | sqlstate
Kurzor nelze nastavit na neexistující záznam | 139 | 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

Příklad použití proměnné sqlstate:

Obecný handler pro všechny chyby

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
  BEGIN
    CALL log_write("Procedura ... - "||sqlstate||' '||Int2str(sqlcode));
  END;


Názvy sloupců tabulek v SQL

Názvy sloupců tabulek (SQL)

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 CLOB 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)


(Untitled)

Skalární dotaz

Dotaz, jehož odpověď obsahuje jediný sloupec; např. SELECT id_firmy FROM Adresar


Kompatibilita SQL

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

Starší verze serveru 602SQL 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ší 602SQL 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 602SQL 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, v jejímž popisu je také seznam možných voleb. Aktuální nastavení vrací funkce Get_sql_option. V prostředí serveru lze aktuální nastavení číst a měnit pomocí systémové proměnné @@sqloptions.

Po připojení se nového klienta na server jsou všechny jeho volby nastaveny dle vlastnosti serveru DefaultSQLOption. Pokud hodnota této vlastnosti není změněna, je zapnuta ve všech volbách kompatibilita se staršími verzemi 602SQL.


SQL ve 602SQL - obsah

SQL ve 602SQL

Popis jazyka je rozdělen do následujících kapitol.

  • Jazyk SQL

  • Způsoby použití

  • Lexikální elementy

  • Datové typy

  • Databázové tabulky

  • Práva a subjekty práva v SQL

  • Funkce SQL

  • Dotazy

  • Výrazy

  • Podmínka

  • Příkazy SQL

  • Deklarace

  • Řídicí příkazy

  • Rutiny uložené na serveru

  • Triggery

  • Sekvence

  • Kurzory

  • Transakce a body návratu

  • Vlákna a synchronizace

  • Chyby a výjimky

  • Systémové objekty


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)

Příklad 3:

Vybrat firmy, které mají alespoň jednu fakturu větší než 5000

SELECT DISTINCT (SELECT nazev
                 FROM Firmy
                 WHERE Firmy.cislo=Faktury.firma) AS Nazev, castka
FROM Faktury
WHERE castka > 5000
  • 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)


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í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ářů


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 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ářů


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ářů


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


Import dat do 602SQL

Importem dat se rozumí přenos dat obsažených v souboru do tabulky 602SQL. 602SQL je schopna číst soubory v těchto formátech:

  • interní formát 602SQL (používá se hlavně pro archivační účely a pro přenos dat mezi instalacemi 602SQL); 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 602SQL.

    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 602SQL. 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
    * Navrhování a změna tabulek ve vývojovém prostředí
    * Import aplikace
    * Návrhář přenosu dat


Řídicí panel - TABULKY

Veškerá data spravovaná 602SQL 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ů.
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 mezi záznamy nebyly zrušené a uvolněné záznamy (uvolněné záznamy mohou být na konci, tj. za posledním platným záznamem). Pořadí záznamu nemusí být zachováno - akce se proto 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.


Export dat z 602SQL

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 602SQL. 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
 | * Navrhová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 Bezpečnost databáze ).

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 - viz Práva k jednotlivým záznamům. 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. Není-li zatržen, obsah tabulky se nepřenáší. Zatržením čtverce se zpřístupní další dílčí nastavení:

Vytvořit univerzální klíč pro replikaci - do tabulky se přidá skrytý binární sloupec sloužící jako (celosvětově) unikátní klíč pro identifikaci replikovaných záznamů; není-li příznak zapnut, používá se vlastní primární klíč tabulky, pak ale musí autor zajistiti jeho unikátnost mezi replikujícími servery.

Bránit vzniku ozvěn - 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 data replikují jen jedním směrem. není-li příznak zapnut při obousměrné replikaci, vzroste objem přenášených dat na dvojnásobek, ale nedojde z tohoto titulu k žádným chybám.

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; přijímací server pak uplatní pravidlo zvolené při definování replikačního vztahu.

Při definici tabulky pomocí SQL příkazu CREATE TABLE se vlastnosti a příznaky zadávají nepovinně za jménem tabulky takto:

Nezaznamenávat změny do journalu | NO_JOURNAL
Přidělovat práva k jednotlivým záznamům | REC_PRIVILS
Umožnit koloběh dokumentů | DOCFLOW
Umožnit replikaci změn | ZCR
Vytvořit univerzální klíč pro replikaci | UNIKEY
Bránit vzniku ozvěn | LUO
Předávat editačního peška | TOKEN
Detekovat replikační konflikty | DETECT

Viz

  • Návrh tabulky ve sdílené aplikaci


Funkce _sqp_define_log

_sqp_define_log

FUNCTION _sqp_define_log(IN logname CHAR(31), IN pathname CHAR(256), IN format(50)) RETURNS BOOLEAN;

Parametry

logname | jméno logu, velikost písmen se ignoruje
pathname | jméno souboru, do něhož se bude log zapisovat
format | formát řádky v logu

Od verze

7.0

Hodnota funkce

Funkce vrátí TRUE pokud uspěje. Vrací FALSE při chybě, která může být způsobena tím, že log zadaného jména již existuje, že se nepodaří vytvořit či otevřít soubor na zadaném místě, nebo nedostatkem paměti.

Popis

Funkce vytvoří nový log a přidělí mu jméno logname, které lze využívat ve funkci _sqp_trace. pro nastavení logování činnosti SQL serveru. Log se zapisuje do souboru zadaného parametrem pathname. Pokud je pathname prázdné, soubor se vytvoří ve stejném adresáři jako základní log serveru, pod jménem logname a s příponou txt. Pokud zadaný soubor již existuje, bude se log zapisovat na jeho konec.

Základní log serveru (označovaný prázdným jménem) je definován automaticky při startu serveru a není třeba pro něj tuto funkci volat.

Založení logu může provádět jen Provozní správce databáze - viz Administrování SQL serveru.

Pokud je parametr format prázdný, pak se log vytváří ve standardním formátu. Odlišný formát lze zadat tak, že se v parametru format uvede formátovací řetězec znaků podle pravidel pro funkce sprinf jazyka C, v němž se místa, do nichž mají být doplněny proměnné informace, označí takto:

%d - datum, den a měsíc
%D - datum, den, měsíc a rok
%t - čas, hodina a minuta
%T - čas, hodina, minuta a sekunda
%s - označení situace (jedno písmeno)
%u - jméno uživatele nebo služebního procesu
%c - číslo klienta
%e – unikátní číslo session (spojení klienta se serverem)
%a – jméno otevřeného schématu
%m - text hlášení

Například standardnímu formátu logu odpovídá formát "%d %t %s %u %m". Ve formátovacím řetězci lze uvést nejvýše 10 takových parametrů, délka formátovacího řetězce je nejvýše 50 znaků.

Viz

  • _iv_recent_log
  • _iv_pending_log_reqs
    Příklad:

    Zapněte při startu serveru zápis SQL příkazů a logování klientů do pomocného logu DEBUGLOG:

    PROCEDURE _ON_SERVER_START();
BEGIN
  CALL _sqp_define_log('debuglog','c:\pom\debuglog.log','%d %t %s %a %u %m');

  CALL _sqp_trace(TRACE_LOGIN, '', '', 'debuglog', 3);
  CALL _sqp_trace(TRACE_SQL,   '', '', 'debuglog', 3);
END


Funkce _sqp_trace

_sqp_trace

function _sqp_trace(IN situation INTEGER, IN username CHAR(31), IN objectname CHAR(63), IN logname CHAR(31), IN kontext_extent INTEGER) RETURNS BOOLEAN;

Parametry

situation | číslo situace, jejíž logování se má ovlivnit
username | jméno uživatele, jehož akce se mají logovat, je-li prázdné, míní se všichni uživatele
objectname | jméno tabulky, k níž se vztahuje požadavek na logování
logname | jméno logu, do něhož se loguje, je-li prázdné, míní se standardní log
kontext_extent | určuje rozsah informací v logu, případně vypíná logování

Od verze

7.0

Popis

Funkce zařadí nový požadavek na logování určité situace nebo změní či zruší platný požadavek na logování.

Čísla situací v parametru situation jsou označena konstantami popsanými zde.

Pro situace vztahující se k manipulaci s daty v tabulkách uvádí parametr objectname jméno tabulky, které se logování týká. Jméno lze prefixovat jménem schématu (aplikace), pokud prefix není uveden, míní se právě vybrané schéma. Tabulka musí existovat již během volání této funkce.

Pokud je jméno logu logname neprázdné, pak musí označovat již existující log, například vytvořený dřívějším voláním funkce _sqp_define_log.

Parametr username musí označovat existující uživatelské jméno. Nelze v něm použít jméno uživatele, který bude teprve založen.

Hodnoty parametru kontext_extent určují míru vypisovaných informací o kontextu, v němž situace nastala. Existují tři stupně kontextu:

  • 0 - logování se neprovádí - tato hodnota ruší dříve zadaný požadavek na logování;

  • 1 - zpráva bez kontextu;

  • 2 - zpráva obsahující nejbližší kontextem situace;

  • 3 - zpráva obsahující údaje o všech rekurzivně zanořených kontextech, v nichž situace nastala.

Kontext větší než 1 má smysl zejména při logování uživatelských chyb, SQL příkazů a manipulací s tabulkou. Nastavením kontextu 0 se logování vypíná.

Nastavení může provádět jen Provozní správce databáze, požadavek na trasování čtení a zápisu dat jen Bezpečnostní správce databáze - viz Administrování SQL serveru.

Persistence požadavků

Po vypnutí a opětovném zapnutí serveru se zachovají pouze požadavky na logování do základního logu serveru, bez vazby na jméno uživatele nebo jméno tabulky.

Hodnota funkce

Funkce vrací TRUE, pokud úspěšně zařadila nebo zrušila zadaný požadavek na logování. Vrací FALSE při chybě, která může být způsobena zadáním jména neexistujícího uživatele nebo objektu.

Příklad:

V proceduře _ON_SERVER_START můžete pro vývoj aplikací zapnout podrobné trasování do zvláštního logu, do něhož má přístup jen správce, a nastavení běžného logu např. takto:

PROCEDURE _ON_SERVER_START();
BEGIN
  CALL Log_write("nastaven debuglog");

  CALL _sqp_define_log('debuglog','c:\pom\debuglog.log','%d %t %s %a %u %m');
  CALL _sqp_trace(TRACE_SERVER_FAILURE, '', '', 'debuglog', 3);
  CALL _sqp_trace(TRACE_START_STOP,     '', '', 'debuglog', 3);
  CALL _sqp_trace(TRACE_LOGIN,          '', '', 'debuglog', 3);
  CALL _sqp_trace(TRACE_SERVER_INFO,    '', '', 'debuglog', 3);
  CALL _sqp_trace(TRACE_USER_ERROR,     '', '', 'debuglog', 3);
  CALL _sqp_trace(TRACE_SQL,            '', '', 'debuglog', 3);
  CALL _sqp_trace(TRACE_CURSOR,         '', '', 'debuglog', 3);
  CALL _sqp_trace(TRACE_LOG_WRITE,      '', '', 'debuglog', 3);
  CALL _sqp_trace(TRACE_PROCEDURE_CALL, '', '', 'debuglog', 3);
  CALL _sqp_trace(TRACE_TRIGGER_EXEC,   '', '', 'debuglog', 3);

  CALL Log_write("nastaven běžný log");
  CALL _sqp_trace(TRACE_SERVER_FAILURE, '', '', '', 1);
  CALL _sqp_trace(TRACE_START_STOP,     '', '', '', 1);
  CALL _sqp_trace(TRACE_USER_ERROR,     '', '', '', 1);
  CALL _sqp_trace(TRACE_LOG_WRITE,      '', '', '', 1);
  CALL _sqp_trace(TRACE_REPLICATION,    '', '', '', 0);
  CALL _sqp_trace(TRACE_DIRECT_IP,      '', '', '', 0);
  CALL _sqp_trace(TRACE_REPLIC_MAIL,    '', '', '', 0);
  CALL _sqp_trace(TRACE_REPLIC_COPY,    '', '', '', 0);
  CALL _sqp_trace(TRACE_REPL_CONFLICT,  '', '', '', 0);
END

Viz

  • _iv_recent_log
  • _iv_pending_log_reqs


Příklad trasování chyb a zjišťování informací o chybě

V níže uvedeném příkladu programu ve vnitřním jazyce se vytvoří tabulka ATAB s integritním omezením TESTA. Definuje se log MYLOG, do něhož se mají zaznamenávat uživatelské chyby, prováděné SQL příkazy a vkládání záznamů do tabulky ATAB. První příkaz INSERT proběhne správně, v druhém je porušeno integritní omezení.

var error_text:string[200];
    suppl:string[31];
    level, kont_type, par1, par2, par3, par4 : integer;
begin
  #sql CREATE TABLE ATAB (A INTEGER, CONSTRAINT TESTA CHECK (Odd(a)));
  #sql CALL _sqp_define_log('MYLOG', '', '');
  #sql CALL _sqp_trace(TRACE_USER_ERROR, '', '', 'MYLOG', 3);
  #sql CALL _sqp_trace(TRACE_SQL,        '', '', 'MYLOG', 3);
  #sql CALL _sqp_trace(TRACE_INSERT, '', 'ATAB', 'MYLOG', 3);
  #sql INSERT INTO ATAB VALUES(1);
  #sql INSERT INTO ATAB VALUES(2);
  Get_error_num_text(Sz_error, error_text, 200);
  Get_server_error_suppl(suppl);
  level:=0;
  repeat
    Get_server_error_context(level, kont_type, par1, par2, par3, par4);
    level:=level+1;
  until kont_type=0;
#sql DROP TABLE ATAB
end.

Po provedení tohoto programu jsou v souboru MYLOG.TXT tyto zápisy:

22.9. 18:02 S ANONYMOUS Provádím SQL příkaz [SQL: call _sqp_trace(TRACE_INSERT, '', 'ATAB', 'MYLOG', 3);]
22.9. 18:02 S ANONYMOUS Provádím SQL příkaz [SQL: INSERT INTO ATAB VALUES(1);]
22.9. 18:02 i ANONYMOUS Vkládám záznam[Inserting to table 98 (ATAB), record 0] [SQL: INSERT INTO ATAB VALUES(1);]
22.9. 18:02 S ANONYMOUS Provádím SQL příkaz [SQL: INSERT INTO ATAB VALUES(2);]
22.9. 18:02 i ANONYMOUS Vkládám záznam[Inserting to table 98 (ATAB), record 1] [SQL: INSERT INTO ATAB VALUES(2);]
22.9. 18:02 E ANONYMOUS Porušeno integritní omezení TESTA databázové tabulky[ table 98 (ATAB), record 1]
22.9. 18:05 S ANONYMOUS Provádím SQL příkaz [SQL: DROP TABLE ATAB]

Funkce Get_error_num_text vrátí řetězec:

Porušeno integritní omezení TESTA databázové tabulky

Funkce Get_server_error_suppl vrátí řetězec

TESTA

Funkce Get_server_error_context pro level=0 vrátí typ kontextu 1 (tabulka), v par1 je číslo tabulky a v par2 číslo záznamu.

Funkce Get_server_error_context pro level=0 vrátí typ kontextu 0 (konec kontextu).

Viz

  • Zjišťování detailů poslední chyby
  • Logování a trasování


Řídicí panel serveru - UŽIVATELÉ

Řídicí panel - UŽIVATELÉ

Uživatelé jsou základním subjektem práva v 602SQL. 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é: * Export a import všech uživatelů (a skupin)


Přihlášení se uživatele

Každý, kdo chce pracovat s 602SQL, se musí předem přihlásit. Smyslem přihlášení se je sdělit 602SQL 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. V případě, že správce zamezil anonymnímu přístupu, nebudou se v combu z bezpečnostních důvodů nabízet jména uživatelů, a po případném pokusu o přihlášení jako ANONYMOUS bude jakákoliv činnost znemožněna.

Viz také: * Subjekty práv ve 602SQL


Řídicí panel serveru - SKUPINY UŽIVATEL

Řídicí panel - SKUPINY UŽIVATELŮ

Skupiny uživatelů jsou subjektem práva v 602SQL. 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é: * Export a import všech uživatelů (a skupin)


Řídicí panel - ROLE

Role jsou subjektem práva ve 602SQL. 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, jméno nesmí začínat číslicí
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


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.

WidthA3WidthA22 Viz také: | * Skupiny záznamů v sestaváchWidthA3WidthA22
 | * Vytváření pohledů
 | * Návrh sestav


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 editační 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.


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ářů


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.

WidthA3WidthA22 Viz také: | * Skupiny záznamů v sestaváchWidthA3WidthA22
 | * Vytváření pohledů
 | * Návrh sestav


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


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

WidthA3WidthA22 Viz také: | * Skupiny záznamů v sestaváchWidthA3WidthA22
 | * Vytváření pohledů
 | * Návrh sestav
WidthA3WidthA22 | * Okno Seznam vlastnostíWidthA3WidthA22


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 602SQL.

Pokračování: * Definování skupin v sestavě

WidthA3WidthA22 Viz také: | * Návrh sestavWidthA3WidthA22
 | * Vytváření pohledů
WidthA3WidthA22 | * Okno Seznam vlastnostíWidthA3WidthA22


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 602SQL. 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.

WidthA3WidthA22 Viz také: | * Návrh sestavWidthA3WidthA22
 | * Vytváření pohledů
WidthA3WidthA22 | * Okno Seznam vlastnostíWidthA3WidthA22


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, TinyInt, 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, TinyInt, 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 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ů
 | * Okno Seznam vlastností


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ů


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) 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


Automaticky generované agregační funkce

Automaticky generované složky s agregačními (souhrnnými) funkcemi

Položka menu návrháře sestav 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.

WidthA3WidthA22 Viz také: | * Skupiny záznamů v sestaváchWidthA3WidthA22
 | * Vytváření pohledů
 | * Návrh sestav


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ářů


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

b) na obrazovku - viz Preview

c) do souboru - viz Výstup do souboru ;


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


Výstup sestavy do souboru

Výstup sestavy do textového souboru je jedním ze způsobů, jak z 602SQL 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.


Výběr formuláře pro nový OLE objekt

Při vytváření nového OLE objektu typu Pohled 602SQL 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í 602SQL - 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


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:

- znamená, že je záznam vybrán, na obrazovce je totéž, co v databázi;

- informuje, je záznam na obrazovce byl přepsán a změny dosud nebyly zapsány do databáze;

- ří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.


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.

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í.


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.


Volba tiskárny

Ve 602SQL 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 602SQL, 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.


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 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 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 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 jako v předchozím případě.


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.


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


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


602SQL jako OLE server

Chcete-li umístit do cizího dokumentu Pohled 602SQL, 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 602SQL. 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 602SQL.

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 602SQL, pak tento OLE objekt poskytuje následující specifické akce:

Aktivovat - spustit OLE server 602SQL 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 602SQL v samostatném okně a otevřít daný formulář.

Modifikovat - spustit OLE server 602SQL 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 602SQL a do menu programu přibude nápověda 602SQL.

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


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)


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


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 602SQL disponuje možností, jak exportu vybraných záznamů dosáhnout. Na ovládací liště stiskněte tlačítko . Otevře se dialogové okno umožňující přenosy dat.

Pokračování: * Exportní dialog


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.


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 . 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 602SQL, 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


602SQL 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 602SQL 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


Grafy ve 602SQL

V soustavě objektů 602SQL 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 602SQL v grafovém serveru MagicGraf602. Na straně 602SQL 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í 602SQL 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.


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


Ří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 602SQL. 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í


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. 602SQL může sloužit jako OLE server - do cizího prostředí (např. textového editoru) lze umístit objekt typu Pohled 602SQL a v něm aktivovat plnohodnotné prostředí formuláře 602SQL, 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.


Okno pro zadání dotazu QBE

Zadání QBE dotazu

Po stisku ovládacího tlačítka 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 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 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.


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 602SQL, 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.


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.


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.


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.


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.


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.

602SQL 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í;

4) při otevření dotazu se umístí zámky pro čtení na všechny záznamy s definicemi dotčených tabulek (tabulka TABTAB);

5) při otevření tabulky se umístí zámek pro čtení na záznam s definicí tabulky (tabulka TABTAB);

6) při editaci objektu se umístí zámek pro přepis na záznam s definicí objektu (tabulka OBJTAB).

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.

Přehled aktuálních zámků a jejich vlastníků dá systémový dotaz _IV_LOCKS nebo Konfigurační konzole 602SQL (větev Zámky).


(Untitled)

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.


(Untitled)

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.


(Untitled)

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.


(Untitled)

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ě.


(Untitled)

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


(Untitled)

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ě.


(Untitled)

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ě.


(Untitled)

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é;


(Untitled)

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


(Untitled)

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.


(Untitled)

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ů


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 602SQL 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.


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


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.


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...


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 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


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í 602SQL prostřednictvím některého z 602SQL 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.


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.


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 602SQL.


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 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..


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 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 602SQL 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 jsou komponenty WBC konektoru

Komponenty WBC konektoru

Jsou to SQL příkazy a zdrojové texty ve vnitřním programovacím jazyku 602SQL, 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 602SQL

3. GetVariable - zpřístupňují globální proměnné programů aplikace 602SQL v HTW šabloně

4. komentář - používá se na psaní krátkých poznámek k WBC konektoru

Pokračování:

Jak vytvořit komponentu.

Jak editovat komponentu.

Jak smazat komponentu.

Jak změnit pořadí komponent.


Co je WBC konektor

WBC konektor je buď samostatný objekt kategorie WWW objekty v databázi 602SQL, 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 602SQL, 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í 602SQL. Tento Návrhář je i v tomto případě využíván.

Podrobný popis WBC konektoru naleznete v referenční příručce.


Záložka WWW objekty

Zde se nastavují parametry 602SQL 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 602SQL, větev Nastavení Internet Klientů).


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 602SQL. Každá komponenta Program může mít nastavený tzv. projekt. Projektem rozumíme objekt typu program definovaný v aplikaci 602SQL 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.


602SQL 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 602SQL 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á”.


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 602SQL, 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.


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 602SQL, 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.


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ě 602SQL, nebo v manuálech k 602SQL.

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.


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


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í 602SQL. 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 602SQL, 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.


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 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 602SQL serverem.


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.


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 602SQL 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 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 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í 602SQL. Práce s Návrhářem dotazů je popsána v manuálech, které jsou dodávány s 602SQL, 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í 602SQL. 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 602SQL, 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 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.


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í 602SQL.

Podrobný popis HTW šablony naleznete v referenční příručce.


Ří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


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 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 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.


Úvod do vytváření dynamických HTML stránek pomocí 602Textu a 602SQL

Ú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 602SQL. V této nápovědě naleznete spíše návody "jak na to..." a popisy součástí klienta 602SQL. Referenční příručka je další součástí této nápovědy..

K čemu slouží tato technologie?

Pomocí dynamických HTML stránek lze vytvořit internetové uživatelské rozhraní libovolné aplikace napsané ve 602SQL.

Nejlepším příkladem použití dynamických HTML stránek je produkt eShop602 (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. 602SQL server (případně také 602SQL602 Personální databáze)

2. 602SQL Internet klienta (je součástí dodávky 602SQL 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. 602SQL (libovolnou instalaci) - součástí 602SQL 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

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 602SQL Internet klientovi, přebírá od něj sestavenou stránku a odesílá ji browseru

3. 602SQL 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. 602SQL 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

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í.

602SQL 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 602SQL).

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.


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 602SQL, 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 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


Backup_database_file

C/C++ Pascal

BOOL cd_Backup_database_file(cdp_t cdp, const char * file_name)
function cd_Backup_database_file(cdp : cdp_t; file_name : PChar) : Boolean;

Parametry

cdp
kontextová proměnná klienta
file_name
jméno souboru, do něhož se vytvoří záloha

Od verze

7.0c

Popis

Funkce vytvoří kopii databázového souboru do souboru file_name. Pokud je file_name prázdné, pak se použije adresář pro zálohování zadaný na konfiguračním panelu a standardně vytvořené jméno zálohy ve tvaru YYMMDDhh.mmX, kde YYMMDD je rok, měsíc a den, hhmm je hodina a minuta, X je A až D pro jednotlivé části databázového souboru.

Během zálohování se pozastaví většina činností serveru. Po vytvoření zálohy se vyvolá systémový trigger _on_backup.

Návratová hodnota

Funkce vrací FALSE při úspěchu a TRUE při chybě.

Viz

  • Jak lze provádět kompletní zálohování databáze?


Active_routine_name

SQL

function Active_routine_name(IN level INT); returns CHAR(67);

Parametry

level
vzdálenost volající rutiny

Od verze

8.0

Popis

Funkce zjišťuje a vrací jméno rozpracované rutiny (procedury nebo funkce), která, přímo nebo nepřímo, zavolala právě prováděnou rutinu. Je-li level rovno 1, vrací bezprostředně volající rutinu, pro vyšší hodnoty postupně vzdálenější rutiny. Pro level rovno 0 vrací jméno právě prováděné rutiny. Je-li level záporné, NULL nebo větší než počet volajících rutin, funkce vrací prázdný řetězec.

Funkce slouží k diagnostickým účelům, například v handlerech.

Návratová hodnota

Jméno rutiny se vrací ve tvaru `jméno_schématu`.`jméno_rutiny`.

Příklad

Funkce vypíše do logu posloupnost rozpracovaných rutin.

declare procedure Call_stack();
begin
  declare i int;   declare name char(67);
  set i=0;
 cycle:
  loop
    set name=Active_routine_name(i);
    if name IS NULL then leave cycle; end if;
    call Log_write(name);
    set i=i+1;
  end loop;
end;


Admin_mode

SQL

FUNCTION Admin_mode(IN name Identifier, IN category INT, IN mode BOOLEAN); RETURNS BOOLEAN;

Parametry

name
jméno objektu (uložené procedury nebo dotazu)
category
kategorie objektu, CATEG_PROC nebo CATEG_CURSOR
mode
požadavek na zapnutí, vypnutí nebo zjištění administrátorského módu

Od verze

8.0

Popis

Funkce slouží k řízení administrátorského režimu provádění uložených procedur a vyhodnocování dotazů. Je-li tento režim zapnut, pak se při provádění procedury nebo vyhodnocování dotazu nekontrolují práva k datům a objektům ve stejném schématu. Pokud procedura v administrátorském režimu zavolá jinou proceduru ze stejného schématu, pak také ona se bude provádět v administrátorském režimu.

Je-li parametr mode roven TRUE, pak funkce zapne administrátorský režim pro proceduru nebo dotaz name, je-li mode rovno FALSE, pak administrátorský režim vypne. Je-li mode rovno NULL, pak se režim nezmění, pomocí návratové hodnoty funkce lze však zjistit jeho aktuální stav.

Funkci Admin_mode může volat s parametrem mode jiným než NULL pouze uživatel obsazený do role Author.

Parametr name může být zadán ve tvaru jméno_schématu.jméno_objektu. Pokud jméno schématu není uvedeno, objekt se hledá v právě nastaveném schématu.

Návratová hodnota

Funkce vrací TRUE, pokud objekt name byl před jejím zavoláním v administrátorském režimu, nebo FALSE, pokud nebyl.

Funkce vrací NULL při chybě (například pokud volající klient není obsazen do role Author nebo pokud name označuje neexistující proceduru).

Příklad

CALL Admin_mode(APL1.PROC1, CATEG_PROC, TRUE);

Viz

  • Práva při provádění uložených procedur a vyhodnocování dotazů


Break_user

C/C++ Pascal

BOOL cd_Break_user(cdp_t cdp, int client_number);
function cd_Break_user(cdp : cdp_t; client_number : Integer) : Boolean;

Parametry

cdp
kontextová proměnná klienta
client_number
číslo klienta

Od verze

7.0c

Popis

Funkce přeruší provádění požadavku klienta s číslem client_number na serveru. Pokud klient s tímto číslem neexistuje nebo server pro něj právě neprovádí žádný požadavek, funkce neudělá nic.

Funkci může volat pouze provozní správce databáze.

Funkce slouží k vnějšímu násilnému přerušení provádění dlouho trvajícího požadavku klienta, například zodpovídání špatně položeného dotazu, zacyklení v proceduře na serveru nebo nekonečné čekání na zámek. Funkce nepřeruší čekání klienta na semafor nebo čekání ve funkci Sleep.

Je-li požadavek klienta přerušen uvnitř provádění transakce, provede se Rollback.

Číslo klienta lze zjistit například z výsledku dotazu _iv_logged_users nebo funkcí Client_number .

Návratová hodnota

Funkce vrací FALSE při úspěchu a TRUE při chybě.

Příklad

Pro ukončení požadavku uživatele 'David' nejprve zjistíme jeho číslo:
SELECT client_number FROM _iv_logged_users INTO :cli_num WHERE login_name='David'
a poté provozní správce zavolá funkci cd_Break_user:
cd_Break_user(cdp, cli_num);

Viz

  • Systémový dotaz _iv_logged_users


connect

C/C++ Pascal

int cd_connect(cdp_t cdp, const char * serv_name, int show_type);
function cd_connect(cdp : cdp_t; server_name : PChar; show_type : integer) : integer;

Parametry

cdp
kontextová proměnná klienta
serv_name
jméno serveru
show_type
způsob zobrazení okna automaticky spuštěného serveru

Od verze

7.0

Popis

Funkce naváže spojení klienta s databázovým serverem server_name. Tento server musí být na počítači klienta registrován.

Funkce cd_connect se musí se volat jako součást obálky aplikace vytvořené v jazyce C/C++ nebo Pascal/Delphi předtím, než zašlete serveru první požadavek. Funkce nahrazuje zastaralé funkce link_kernel a interf_init. Vytvořené spojení musí klient před ukončením práce uzavřít voláním procedury disconnect.

Parametr show_type se uplatní pouze tehdy, pokud se v důsledku provedení této funkce spouští lokální server. Spuštěný server předá tento parametr svému hlavnímu oknu při prvním volání Windows API funkce ShowWindow. Doporučujeme použít hodnotu SW_MINIMIZE definovanou v hlavičkovém souboru windows.h . Je-li parametr show_type roven -1, funkce nespustí lokální server (server musí předem běžet).

Návratová hodnota

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.

Zprávu o případné chybě při provádění funkce lze zobrazit v dialogovém okně pomocí procedury Kernel_error_box.

Příklad

cdp_init(&cd);
if (cd_connect(&cd, "MY_SERVER", SW_MINIMIZE) == KSE_OK)
{ if (!cd_Login(&cd, username, password))
    if (!cd_Set_application(&cd, schemana_name))
    ................................................
  cd_disconnect(&cd);
}

Viz

  • Procedura disconnect
  • Funkce cdp_init
  • Kostra aplikace v externím jazyce


disconnect

C/C++ Pascal

void cd_disconnect(cdp_t cdp);
procedure cd_disconnect(cdp : cdp_t);

Parametry

cdp
kontextová proměnná klienta

Od verze

7.0

Popis

Procedura ukončí spojení klienta na server. Tuto funkci je nutno volat před skončením aplikace, která se připojila na server voláním funkce cd_connect. Po zavolání této funkce již klient nesmí posílat žádné požadavky na server.

Příklad

cdp_init(&cd);
if (cd_connect(&cd, "MY_SERVER", SW_MINIMIZE) == KSE_OK)
{ if (!cd_Login(&cd, username, password))
    if (!cd_Set_application(&cd, schemana_name))
    ................................................
  cd_disconnect(&cd);
}

Viz

  • Funkce connect


Export_appl_param

C/C++ Pascal

BOOL Export_appl_param(cdp_t cdp, t_export_param * ep);
function Export_appl_param(cdp : cdp_t; var ep : t_export_param) : Boolean;

Parametry

cdp
kontextová proměnná klienta
ep
parametry exportu

Od verze

8.0

Popis

Funkce exportuje otevřenou aplikaci do souborů. Vlastnosti exportu jsou popsány ve struktuře ep takto:

Složka | význam
cbSize | velikost struktury t_export_param v bajtech
hParent | rodičovské okno pro případné dialogy
with_data | exportovat včetně dat v tabulkách
with_role_privils | exportovat včetně práv rolí
with_usergrp | exportovat včetně práv uživatelů a skupin
exp_locked | exportovat zašifrovaně
back_end | exportovat pouze back-end
date_limit | pokud obsahuje nenulovou hodnotu, udává datum a exportují se pouze objekty změněné po tomto datu, je-li nula, exportují se všechny komponenty aplikace
file_name | plná cesta k výstupnímu souboru s příponou APL, udává zároveň adresář pro umístění ostatních souborů vzniklých při exportu; je-li NULL, funkce zobrazí dialog na výběr souboru
long_names | je-li TRUE, pak se jména souborů přímo odvodí ze jmen objektů, je-li FALSE, pak jména souborů budou zkrácena na formát 8.3

Návratová hodnota

Funkce vrací TRUE při úspěchu a FALSE při chybě.

Viz

  • Export_appl_ex
  • Export_appl
  • Import_appl


Get_membership

SQL

function Get_membership(IN subject_name CHAR(31), IN subject_categ INT, IN container_name CHAR(31), IN container_categ INT, IN transitive BOOLEAN); returns BOOLEAN;

Parametry

subject_name
jméno subjektu práv (uživatele, skupiny)
subject_categ
kategorie subjektu práv subject_name
container_name
jméno subjektu práv (skupiny, role)
container_categ
kategorie subjektu práv container_name
transitive
příznak povolující nepřímé náležení

Od verze

7.0f

Popis

Funkce umožňuje zjistit stav náležení mezi subjektem práv subject_name a subjektem práv container_name.

Pokud parametr state má hodnotu FALSE nebo NULL, pak funkce zjistí, zda první subjekt je přímo zařazen do druhého. Pokud parametr state má hodnotu TRUE, pak funkce zjistí, zda první subjekt patří do druhého, ať už přímo nebo nepřímo, přes jiný subjet práv. Tak lze zjistit například nepřímé obsazení uživatele do role prostřednictvím skupiny uživatelů.

Je-li druhý subjekt role, pak lze její jméno container_name prefixovat jménem schématu, do něhož role patří.

Návratová hodnota

Funkce vrací NULL v případě chyby. Jinak funkce vrací TRUE, je-li první subjekt zařazen do druhého, nebo FALSE, pokud zařazen není.

Příklad

Zjištění zařazení uživatele David do role Účetní:

SET patri = Get_membership('David', CATEG_USER, 'Účetní', CATEG_ROLE, TRUE);

Viz

  • Systémový dotaz na náležení mezi subjekty práv _iv_subject_membership
  • Klientská funkce GetSet_group_role
  • Funkce SQL Set_membership na nastavování náležení mezi subjekty práv


Get_property_value

Interní programovací jazyk C/C++ Pascal SQL

function Get_property_value(var owner, name : string; num : integer; var buffer : string; buffer_size : integer) : Boolean;
BOOL cd_Get_property_value(cdp_t cdp, const char * owner, const char * name, int num, char * buffer, unsigned buffer_size, unsigned * valsize = NULL);
function cd_Get_property_value(cdp : cdp_t; owner, name : PChar; num : integer; buffer : PChar; buffer_size : integer; var valsize : integer) : Boolean;
function Get_property_value(IN owner CHAR(32), IN name CHAR(36), IN num INT); RETURNS CHAR(254);

Parametry

cdp
kontextová proměnná klienta
owner
majitel vlastnosti
name
jméno vlastnosti
num
číslo hodnoty vlastnosti
buffer
výstupní parametr: hodnota vlastnosti
buffer_size
velikost proměnné buffer v bajtech
valsize
výstupní parametr: velikost přečtené hodnoty v bajtech, nepoužívá se

Od verze

8.0

Popis

Funkce přečte hodnotu vlastnosti name majitele owner. Pokud vlastnost má více než jednu hodnotu (např. Dir1, Dir2), pak číslo hodnoty udává parametr num, v opačném případě musí mít parametr num hodnotu 0.

Funkce volaná klientem vrací hodnotu vlastnosti v řetězci buffer, funkce volaná v SQL ji vrací jako svoji hodnotu. Hodnota vlastnosti se vrací v podobě řetězce znaků. Pokud jde o vlastnost s číselnou hodnotou, parametr buffer obsahuje dekadický zápis hodnoty. Pokud zápis hodnoty je delší nebo roven buffer_size, je seříznut zprava tak, aby se vešel do proměnné buffer i s ukončující nulou.

V parametrech name a owner se nerozlišují velká a malá písmena.

Majitel vlastností SQL serveru se označuje řetězcem "@SQLSERVER".

Návratová hodnota

Funkce vrací na klientské straně FALSE při úspěchu a TRUE při chybě. V SQL funkce vrací hodnotu vlastnosti.

Příklad

Zjistit číslo portu SQL serveru

  if not Get_property_value("@SQLSERVER","IPPort",0,buff,255) then
    Info_box("Port SQL Serveru",buff);

Viz

  • Vlastnosti a jejich nastavování
  • Přehled nastavitelných vlastností serveru
  • Funkce Set_property_value


Get_sql_option

Interní programovací jazyk C/C++ Pascal SQL

function Get_sql_option(var optval : Integer) : Boolean;
BOOL [cd_]Get_sql_option([cdp_t cdp,] uns32 * optval);
function [cd_]Get_sql_option([cdp : cdp_t;] var optval : uns32) : Boolean;
FUNCTION Get_sql_option(); RETURNS INT;

Parametry

cdp
kontextová proměnná klienta
optval
výstupní parametr: aktuální nastavení příznaků kompatibility

Od verze

8.0

Popis

Funkce dovoluje zjistit, jak jsou pro přihlášeného klienta nastaveny příznaky kompatibility jazyka SQL.

Návratová hodnota

V jazyce SQL funkce vrací nastavení příznaků kompatibility. V ostatních prostředích funkce vrací FALSE při úspěchu a TRUE při chybě.

Viz

  • Set_sql_option
  • Kompatibilita s normami SQL a staršími verzemi 602SQL


Invalidate_cached_table_info

Interní programovací jazyk C/C++ Pascal

procedure Invalidate_cached_table_info;
void [cd_]Invalidate_cached_table_info([cdp_t cdp]);
procedure [cd_]Invalidate_cached_table_info([cdp : cdp_t]);

Parametry

cdp
kontextová proměnná klienta

Od verze

8.0

Popis

Tato procedura vymaže informace o struktuře tabulek na serveru dočasně uložené u klienta.

Proceduru je třeba zavolat poté, co klient změní strukturu některé tabulky, například provedením příkazu ALTER TABLE nebo zavoláním uložené procedury, která takový příkaz provádí.


Set_membership

SQL

function Set_membership(IN subject_name CHAR(31), IN subject_categ INT, IN container_name CHAR(31), IN container_categ INT, IN state BOOLEAN); returns BOOLEAN;

Parametry

subject_name
jméno subjektu práv (uživatele, skupiny)
subject_categ
kategorie subjektu práv subject_name
container_name
jméno subjektu práv (skupiny, role)
container_categ
kategorie subjektu práv container_name
stav
stav náležení

Od verze

7.0c

Popis

Funkce umožňuje zjístit nebo změnit stav náležení mezi subjektem práv subject_name a subjektem práv container_name.

Pokud parametr state má hodnotu TRUE, pak funkce zařadí první subjekt do druhého. Pokud parametr state má hodnotu FALSE, pak funkce vyřadí první subjekt z druhého. Pokud parametr state má hodnotu NULL, pak funkce zjistí, zda první subjekt je zařazen do druhého.

Je-li druhý subjekt role, pak lze její jméno container_name prefixovat jménem schématu, do něhož role patří.

Návratová hodnota

Funkce vrací NULL v případě chyby. Pokud parametr state má hodnotu TRUE nebo FALSE, funkce vrací při úspěchu TRUE. Pokud parametr state má hodnotu NULL, funkce vrací TRUE, je-li první subjekt zařazen do druhého, nebo FALSE, pokud zařazen není.

Příklad

Zařazení uživatele David do skupiny Účetní:

CALL Set_membership('David', CATEG_USER, 'Účetní', CATEG_GROUP, TRUE);

Viz

  • Systémový dotaz na náležení mezi subjety práv _iv_subject_membership
  • Klientská funkce GetSet_group_role
  • Funkce SQL Get_membership na zjišťování náležení mezi subjekty práv


Set_property_value

Interní programovací jazyk C/C++ Pascal SQL

function Set_property_value(var owner, name : string; num : integer; var buffer : string) : Boolean;
BOOL cd_Set_property_value(cdp_t cdp, const char * owner, const char * name, int num, char * buffer, int valsize = -1);
function cd_Set_property_value(cdp : cdp_t; owner, name : PChar; num : integer; buffer : PChar; valsize : integer) : Boolean;
function Set_property_value(IN owner CHAR(32), IN name CHAR(36), IN num INT, IN buffer CHAR(254)); RETURNS BOOLEAN;

Parametry

cdp
kontextová proměnná klienta
owner
majitel vlastnosti
name
jméno vlastnosti
num
číslo hodnoty vlastnosti
buffer
hodnota vlastnosti
valsize
velikost hodnoty v bajtech, použijte hodnotu -1

Od verze

8.0

Popis

Funkce zapíše hodnotu vlastnosti name majitele owner uvedenou v řetězci buffer. Pokud vlastnost má více než jednu hodnotu, pak číslo hodnoty udává parametr num, v opačném případě musí mít parametr num hodnotu 0.

Hodnota vlastnosti se uvádí v podobě řetězce znaků. Pokud jde o vlastnost s číselnou hodnotou, parametr buffer obsahuje dekadický zápis hodnoty.

V parametrech name a owner se nerozlišují velká a malá písmena.

Majitel vlastností SQL serveru se označuje řetězcem "@SQLSERVER". Většinu vlastností SQL serveru smí nastavovat provozní správce, ostatní vlastnosti bezpečností správce.

Návratová hodnota

Funkce vrací FALSE při úspěchu a TRUE při chybě.

Viz

  • Vlastnosti a jejich nastavování
  • Přehled nastavitelných vlastností serveru
  • Funkce Get_property_value


cd_SQL_host_prepare

C/C++ Pascal

BOOL cd_SQL_host_prepare(cdp_t cdp, const char * statement, uns32 * handle, const t_clivar * hostvars, unsigned hostvars_count);
function cd_SQL_host_prepare(cdp : cdp_t; statement : PChar; var handle : uns32; hostvars : p_clivar; hostvars_count : Integer) : Boolean;

Parametry

cdp
kontextová proměnná klienta
statement
SQL příkaz nebo poslupnost příkazů oddělených středníky
handle
výstupní parametr: handle připraveného příkazu
hostvars
pole popisů proměnných klienta použitých v příkazu statement
hostvars_count
počet složek pole hostvars

Od verze

8.0

Popis

Funkce připraví k provedení příkaz zadaný parametrem statement a v případě úspěchu vrátí jeho handle. Tento handle lze poté použít v příkazu cd_SQL_exec_prepared k provedení příkazu. Handle musí být později zrušen voláním funkce cd_SQL_drop;

Všechny proměnné klienta, na které se odkazuje v příkazu, musí být popsány v poli hostvars. Počet složek tohoto pole je v parametru hostvars_count.

Ve vnitřním programovacím jazyce existuje obdobná funkce SQL_prepare, která však nevyžaduje popis použitých proměnných klienta.

Návratová hodnota

Funkce vrací FALSE při úspěchu a TRUE při chybě.

Příklad

  char xname[21];  int count;
  t_clivar clivars[2] = {
   { "ANAME", MODE_IN,  ATT_STRING, 20, xname,  sizeof(xname), 0 },
   { "CNT",   MODE_OUT, ATT_INT32,   0, &count, sizeof(count), 0 } };
  uns32 handle;
  if (cd_SQL_host_prepare(cdp,
    "INSERT INTO NAMES(NAME) VALUES(:ANAME); SELECT COUNT(*) INTO :CNT FROM NAMES",
    &handle, clivars, 2)) cd_Signalize(cdp);
  else
  { strcpy(xname, "David");
    if (cd_SQL_exec_prepared(cdp, handle, NULL, NULL)) cd_Signalize(cdp);
    strcpy(xname, "Adam");
    if (cd_SQL_exec_prepared(cdp, handle, NULL, NULL)) cd_Signalize(cdp);
    cd_SQL_drop(cdp, handle);
  }

Viz

  • Způsoby použití jazyka SQL
  • Proměnné klientských aplikací v příkazech SQL
  • cd_SQL_exec_prepared
  • cd_SQL_drop;


_sqp_log_write

SQL

procedure _sqp_log_write(IN message CHAR(), IN logname CHAR(31), IN kontext_extent INTEGER);

Parametry

message
textová zpráva
logname
jméno logu, do něhož se má zapisovat
kontext_extent
rozsah kontextu v logu, viz _sqp_trace

Od verze

8.0

Popis

Procedura zapíše zprávu uvedenou v parametru message do logu logname. Jméno logu musí označovat dříve definovaný log nebo může být prázdné pro standardní log.

Návratová hodnota

Funkce vrací FALSE při úspěchu a TRUE při chybě.

Viz

  • Logování a trasování
  • _sqp_define_log


Obsah 602SQL dokumentace

Seznam subsekcí:

  • Mapa dokumentace k 602SQL
  • Licence
  • 602SQL server
  • Jazyk SQL
  • Vývoj aplikací
  • Encyklopedie funkcí
  • Instalace 602SQL a šíření aplikací
  • Tvorba dynamických WWW stránek
  • Rozhraní pro přístup na SQL server
  • Doplňky


Insert_record_ex

C/C++ Pascal

BOOL [cd_]Insert_record_ex([cdp_t cdp,] tcurstab curs, trecnum * position, unsigned colcount, const t_column_val_descr * colvaldescr);
function [cd_]Insert_record_ex([cdp : cdp_t;] curs : tcurstab; var position : trecnum; colcount : integer; colvaldescr : pt_column_val_descr) : Boolean;

Parametry

cdp
kontextová proměnná klienta
curs
číslo tabulky nebo otevřeného kurzoru
position
číslo vloženého záznamu
colcount
počet zapisovaných sloupců uvedených v colvaldescr
colvaldescr
popis hodnot sloupců

Od verze

7.0c

Popis

Funkce vloží záznam do tabulky nebo kurzoru stejným způsobem jako SQL příkaz INSERT. Hodnoty se zapíšou do sloupců uvedených v poli colvaldescr, ostatní sloupce budou mít ve vloženém záznamu své implicitní hodnoty. Číslo vloženého záznamu se vrátí v position.

Funkce nahrazuje zastaralou funkci Write_record volanou po Insert.

Funkce neumožňuje zapisovat hodnoty multiatributů.

Provedení funkce může vyvolat akce aktivní referenční integrity a triggery.

Popis sloupců v colvaldescr:

Pole colvaldescr obsahuje colcount záznamů tohoto typu:

struct t_column_val_descr
{ int          column_number;  // pořadové číslo sloupce v tabulce nebo kurzoru
  const void * column_value;  // ukazatel na hodnotu, která se má zapsat do sloupce
  int          value_length;  // délka hodnoty v column_value
};

Pokud ukazatel column_value je NULL, pak se do sloupce zapíše hodnota NULL. Údaj value_length se použije pouze pro sloupce proměnné velikosti, pro ostatní sloupce se ignoruje.

Návratová hodnota

Funkce vrací FALSE při úspěchu, TRUE při chybě.

Viz

  • Write_record
  • Write_record_ex


Dokumentace systému 602SQL

602SQL je integrovaný relační databázový systém pro prostředí Windows a Linux založený na modelu klient-server.

Co zahrnuje 602SQL?

Na serveru 602SQL je implementován jazyk SQL, jehož verze vychází z normy ANSI/ISO na úrovni SQL 2 Intermediate level, ale navíc umožňuje psát procedury a triggery pomocí jazyka dle normy SQL 3. Jazyk zahrnuje například bohatou množinu datových typů, aktivní referenční integritu i silné relační operace jako OUTER JOIN nebo INSERSECT.

Mezi nadstandardní rysy serveru patří systém práv dovolující přidělovat oprávnění na úrovní sloupců i řádků v tabulkách, schopnost replikovat data, fulltextová indexace dokumentů, těsná integrace s elektronickou poštou nebo debuggery pro pohodlné ladění procedur prováděných na straně serveru i u klienta.

Bezpečnost serveru střeží množství mechanismů, které kontrolují přístup k databázi, provádějí zálohování dat a vedou journal změn, zajišťují atomicitu prováděných transakcí.

Pro přístup na server je k dispozici ODBC driver, nativní rozhraní pro jazyky C/C++, Pascal/Delphi, komponenty pro komunikaci s databází na vyšší úrovni, ODMA rozhraní.

Pro prostředí Windows 602SQL zahrnuje efektivní nástroje pro vývoj uživatelského rozhraní aplikací. Umožňují vizuální návrh formulářů, sestav, menu, tabulek, dotazů a dalších komponent, jejich propojovíní do funkčních celků a také programování front-endu v jazyce blízkém Pascalu.

Pro přístup do databáze z WWW prohlížečů jsou k dispozici CGI klienti (včetně FastCGI a ISAPI), PHP modul, JDBC driver a také ActiveX komponenta pro začlenění databázového formuláře do webové stránky. Pro snadnější úvod do vývoje webových aplikací je k dispozici interaktivní návrhář.

Co zde naleznete?

Na tomto místě můžete nalézt rozsáhlou dokumentaci, která pokrývá většinu oblastí 602SQL. Pro orientaci využijte mapu dokumentace.

Jak prohlížet dokumentaci?

Dokumentace v komprimované podobě v souboru s příponou CHM se dá prohlížet pouze pod Windows. Dokumentace v rozbalené podobě je na webových stránkách Software602, a.s. a také v linuxové verzi. Dá se číst pomocí webového prohlížeče a disponuje stromovým obsahem a rejstříkem. Funkčnost byla otestována pod prohlížeči Internet Explorer a Mozilla. U některých dalších prohlížečů byla zaznamenána omezena funčnost, například pro Konqueror je trvale rozbalený strom obsahu.

Seznam subsekcí:

  • Mapa dokumentace k 602SQL
  • Licence
  • 602SQL server
  • Jazyk SQL
  • Vývoj aplikací
  • Encyklopedie funkcí
  • Instalace 602SQL a šíření aplikací
  • Tvorba dynamických WWW stránek
  • Rozhraní pro přístup na SQL server
  • Doplňky


wb_err_str

$str=wb_err_str(identifikátor spojení)

Parametry

identifikátor spojení
Identifikátor spojení získaný získaným voláním wb_connect.

Popis

Funkce vrátí text poslední chyby 602SQL serveru.

Návratová hodnota

Textový popis poslední chyby.

Příklad

  error_reporting(0);
  $sqlstat="...";
  wb_exec($conn, $sqlstat); /* může dojít k chybě */
  echo "<br><b>" . wb_err_str($conn). "</b><br>";
  error_reporting(E_ALL);


wb_import_file

wb_import_file(identifikátor spojení, prom_file, prenos)

Parametry

identifikátor spojení
Identifikátor spojení získaný získaným voláním wb_connect.
prom_file
Proměnná se souborem, který byl vybrán na straně browseru uživatelem pomocí tagu INPUT type=file a zaslaný webserveru.
prenos
V databázi uložený přenos dat (objekt typu program).

Popis

Příkaz umožňuje datový soubor prom_file (odeslaný pomocí HTML formuláře) načíst do databáze (do tabulky). Pro vlastní import musí být v aplikaci připravený objekt typu Přenos dat nazvaný prenos, který předem počítá s formátem (většinou textového, např. CSV) souboru.

Návratová hodnota

TRUE v případě úspěchu, FALSE pokud dojde k chybě.


Write_record_ex

C/C++ Pascal

BOOL [cd_]Write_record_ex([cdp_t cdp,] tcurstab curs, trecnum position, unsigned colcount, const t_column_val_descr * colvaldescr);
function [cd_]Write_record_ex([cdp : cdp_t;] curs : tcurstab; position : trecnum; colcount : integer; colvaldescr : pt_column_val_descr) : Boolean;

Parametry

cdp
kontextová proměnná klienta
curs
číslo tabulky nebo otevřeného kurzoru
position
číslo záznamu
colcount
počet zapisovaných sloupců uvedených v colvaldescr
colvaldescr
popis hodnot sloupců

Od verze

7.0c

Popis

Funkce modifikuje obsah záznamu v tabulce nebo kurzoru stejným způsobem jako SQL příkaz UPDATE. Hodnoty se zapíšou pouze do sloupců uvedených v poli colvaldescr, ostatní zůstanou nezměněny.

Funkce nahrazuje zastaralou funkci Write_record.

Funkce neumožňuje zapisovat hodnoty multiatributů.

Provedení funkce může vyvolat akce aktivní referenční integrity a triggery.

Popis sloupců v colvaldescr:

Pole colvaldescr obsahuje colcount záznamů tohoto typu:

struct t_column_val_descr
{ int          column_number;  // pořadové číslo sloupce v tabulce nebo kurzoru
  const void * column_value;  // ukazatel na hodnotu, která se má zapsat do sloupce
  int          value_length;  // délka hodnoty v column_value
};

Pokud ukazatel column_value je NULL, pak se do sloupce zapíše hodnota NULL. Údaj value_length se použije pouze pro sloupce proměnné velikosti, pro ostatní sloupce se ignoruje.

Návratová hodnota

Funkce vrací FALSE při úspěchu, TRUE při chybě.

Viz

  • Write_record
  • Insert_record_ex