LibreOfficeLogo

Příručka aplikace Base 7.3

Kapitola 7
Propojení s databázemi

 

Autorská práva

Tento dokument je chráněn autorskými právy © 2022 týmem pro dokumentaci LibreOffice. Přispěvatelé jsou uvedeni níže. Dokument lze šířit nebo upravovat za podmínek licence GNU General Public License (https://www.gnu.org/licenses/gpl.html), verze 3 nebo novější, nebo the Creative Commons Attribution License (https://creativecommons.org/licenses/by/4.0/), verze 4.0 nebo novější.

Všechny ochranné známky uvedené v této příručce patří jejich vlastníkům.

Přispěvatelé

Pro toto vydání

Vasudev Narayanan

Steve Fanning

 

Pro předchozí vydání

Robert Großkopf

Pulkit Krishna

Jost Lange

Dan Lewis

Hazel Russman

Jochen Schiffers

Jean Hollis Weber

 

 

Zpětná vazba

Jakékoli připomínky nebo návrhy k tomuto dokumentu prosím směřujte do fóra dokumentačního týmu na adrese https://community.documentfoundation.org/c/documentation/loguides/ (registrace je nutná) nebo pošlete e-mail na adresu: loguides@community.documentfoundation.org.

Poznámka

Vše, co napíšete do fóra, včetně vaší e-mailové adresy a dalších osobních údajů, které jsou ve zprávě napsány, je veřejně archivováno a nemůže být smazáno. E-maily zaslané do fóra jsou moderovány.

Datum vydání a verze programu

Vydáno Srpen 2022. Založeno na LibreOffice 7.3 Community.
Jiné verze LibreOffice se mohou lišit vzhledem a funkčností.

Používání LibreOffice na systému macOS

Některé klávesové zkratky a položky nabídek jsou v systému macOS jiné než v systémech Windows a Linux. V následující tabulce jsou uvedeny nejdůležitější rozdíly, které se týkají informací v této knize. Podrobnější seznam se nachází v nápovědě aplikace.

Windows nebo Linux

Ekvivalent pro macOS

Akce

Výběr v nabídce Nástroje > Možnosti

LibreOffice > Předvolby

Otevřou se možnosti nastavení.

Klepnutí pravým tlačítkem

Control + klepnutí a/nebo klepnutí pravým tlačítkem myši v závislosti na nastavení počítače

Otevře se místní nabídka.

Ctrl (Control)

(Command)

Používá se také s dalšími klávesami.

Alt

⌥ (Option)

Používá se také s dalšími klávesami.

Ctrl+Q

+ Q

Ukončí LibreOffice

 

Obecné poznámky k propojení databází

Pomocí aplikace Base můžeme dokumenty v aplikacích LibreOffice Writer a Calc používat různými způsoby jako zdroje dat. To znamená, že použití aplikace Base není nutně vázáno na registraci databází v konfiguraci LibreOffice. Externí formuláře mohou také přímo komunikovat s aplikací Base, pokud je zadána cesta ke zdrojům dat.

Registrace databází

Mnoho funkcí, jako je tisk štítků nebo použití dat pro dopisy s poli, vyžaduje registraci databáze v konfiguraci LibreOffice.

Pomocí Nástroje > Možnosti > LibreOffice Base > Databáze > Nový můžeme zaregistrovat databázi pro následné použití jinými komponentami LibreOffice.

Image2

Obrázek 1: Registrace databáze pro použití jinými komponentami LibreOffice

Vyhledáme databázi pomocí prohlížeče souborů a připojíme ji k LibreOffice podobným způsobem jako v případě jednoduchého formuláře. Samotné databázi dáme vhodný informativní registrovaný název, například název souboru databáze. Název slouží jako alias, který lze použít i v dotazech do databáze.

Prohlížeč zdrojů dat

Prohlížeč zdrojů dat v aplikaci Writer a Calc umožňuje přístup k tabulkám a dotazům všech registrovaných databází pod jejich registrovanými názvy. Prohlížeč otevřeme pomocí Zobrazit > Zdroje dat nebo stisknutím kláves Ctrl+Shift+F4 , případně klepnutím na ikonu na Standardní nástrojové liště.

Ikona Zdroje dat není na Standardní nástrojové liště obvykle viditelná. Chceme-li ji zviditelnit, klepneme pravým tlačítkem myši na tlačítko Uložit a otevřeme tuto nástrojovou lištu. Přejdeme dolů na Viditelná tlačítka. Tím se otevře seznam všech tlačítek. Přejdeme dolů až téměř k dolní části a najdeme tlačítko Zdroje dat. Klepnutím na něj jej zviditelníme na pravém konci nástrojové lišty.

Tip

Pokud používáme notebook, bude možná nutné stisknout klávesy Ctrl + fn + shift + F4. Klávesa fn (funkce) umožňuje používat klávesy F pro více než jednu funkci.

graphics41

Obrázek 2: Tlačítko Zdroje dat na Standardní nástrojové liště

Registrované zdroje dat se zobrazují na levé straně prohlížeče zdrojů dat, který je ve výchozím nastavení umístěn v horní části pracovní plochy. Zdroj dat použité literatury je ve výchozím nastavení součástí LibreOffice. Ostatní zdroje dat jsou uvedeny pod svými registrovanými názvy.

graphics3

Obrázek 3: Registrované zdroje dat zobrazené ve stromu názvů na levé straně prohlížeče zdrojů dat

Klepnutím na rozbalovací znaménko před názvem databáze otevřeme databázi a zobrazíme podsložky pro dotazy a tabulky. Ostatní podsložky databáze zde nejsou k dispozici. Interní formuláře a sestavy jsou přístupné pouze otevřením samotné databáze.

Teprve po klepnutí na složku Tabulky je databáze skutečně zpřístupněna. U databází chráněných heslem je třeba v tomto okamžiku zadat heslo.

Vpravo od stromu názvů se zobrazí vybraná tabulka. Lze ji upravovat stejně jako v aplikaci Base. Přímý vstup do tabulek je však třeba ve velmi složitých relačních databázích provádět opatrně, protože tabulky jsou propojeny cizími klíči. Například níže uvedená databáze má samostatné tabulky pro názvy ulic, poštovních směrovacích čísel a obcí.

Image9

Obrázek 4: Výběrem tabulky ve stromu názvů zobrazíme údaje o složkách na pravé straně prohlížeče zdrojů dat.

Pro správné zobrazení dat (ale bez možnosti úprav) jsou vhodnější dotazy nebo pohledy.

Mnohé ikony na nástrojové liště (obrázek 5) budou známé ze zadávání dat do tabulek. (Ikony na vašem displeji se mohou lišit od ikon na obrázku.)

Hlavní nové ikony jsou uvedeny v poslední části: Data na text, Data na pole, Hromadná korespondence, Zdroj dat aktuálního dokumentu, Průzkumník zapnout/vypnout. Jejich použití je popsáno níže s využitím tabulky Reader v databázi Media.

graphics26

Obrázek 5: Výchozí přiřazení tlačítek na nástrojové liště Data tabulky prohlížeče zdrojů dat

Data na text

Tip

Pomocí této metody lze data vkládat přímo na konkrétní místa v textovém dokumentu nebo do konkrétních buněk tabulky. I když lze data do těchto míst zadat, jejich vložení zaručuje jejich přesnost. To je důležité při použití sloučení pošty, o kterém bude řeč později.

Při odesílání stejného dokumentu různým osobám je zaručeno, že všichni obdrží naprosto stejné údaje.

Výběrem jednoho nebo více záznamů aktivujeme funkce Data na text a Data na pole.

graphics33

1

Data na text

2

Data na pole

3

Hromadná korespondence

Obrázek 6: Výběrem datového záznamu aktivujeme ikonu Data do textu na nástrojové liště Data tabulky.

Pokud nyní zvolíme Data do textu, zobrazí se Průvodce provedením potřebného formátování (obrázek 7).

Tři možnosti zadávání dat jako textu jsou: jako tabulka, jako jednotlivá pole, nebo jako běžný text.

Na obrázku 7  je zobrazena možnost Vložit data jako tabulku. V případě číselných polí a polí s daty lze formát databáze změnit na zvolený formát. V opačném případě se formátování provede automaticky při výběru polí tabulky. Pořadí polí se nastavuje pomocí šipek.

graphics32

Obrázek 7: Dialogové okno Vložit sloupce databáze s vybraným přepínačem Tabulka

Jakmile jsou vybrány sloupce tabulky, aktivuje se tlačítko Vlastnosti pro danou tabulku. To umožňuje nastavit obvyklé vlastnosti tabulky aplikace Writer (šířka tabulky, šířka sloupců atd.).

Zaškrtávací políčko Vložit záhlaví tabulky určuje, zda je vyžadováno záhlaví tabulky. Pokud není zaškrtnuto, nebude pro nadpisy vyhrazen žádný samostatný řádek.

Řádek vybraný pro záhlaví tabulky lze převzít z názvů sloupců nebo lze záznam vypsat s ponecháním místa pro pozdější úpravu záhlaví. Vybereme možnost Vytvořit jen řádek.

Pomocí tlačítka Automatický formát můžeme otevřít dialogové okno s několika předformátovanými styly tabulek. Kromě navrhovaného výchozího stylu lze všechny formáty přejmenovat. (Můžeme také přidat autoformáty; za tímto účelem nejprve vytvoříme tabulku v požadovaném formátu. Poté vybereme tabulku a klepnutím na tlačítko Přidat přidáme její formát do seznamu.) Tabulku můžeme také formátovat ve Writeru tak, že ji vybereme a zvolíme formát ze seznamu Styly tabulky na kartě Styly v postranní liště; seznam stylů tabulky je stejný jako seznam formátů v dialogovém okně Automatický formát.

Chceme-li vytvořit tabulku s vybranými záznamy a sloupci, klepneme na tlačítko OK v dialogovém okně Vložit databázové sloupce.

Image10

Obrázek 8: Dialogové okno Automatický formát

Vkládání dat jako polí umožňuje pomocí minieditoru umístit v textu postupně různá pole tabulky. Takto vytvořený text lze také opatřit stylem odstavce. I v tomto případě lze formátování dat a čísel zadat samostatně nebo je lze načíst přímo z nastavení tabulky v databázi.

graphics10

Obrázek 9: Dialogové okno Vložit sloupce databáze se zaškrtnutým přepínačem Pole

Takto vložená pole do textu lze následně jednotlivě vymazat nebo použít pro hromadnou korespondenci.

Pokud zvolíme možnost Vložit data jako text, jediný rozdíl oproti použití polí je ten, že pole zůstávají propojena s databází. Při vkládání jako text se přenese pouze obsah zadaných polí, nikoli odkaz na skutečnou databázi.

Výsledky obou postupů jsou porovnány níže.

Image11

Obrázek 10: Porovnání možností Data jako pole a Data jako text

Pole mají šedá pozadí. Pokud na pole najedeme kurzorem myši, zobrazí se nápověda, že pole jsou propojena s databází Media, s tabulkou Reader a v rámci této tabulky s polem ID.

Tak například dvojité klepnutí na pole ID otevře následující přehled. Tím je zřejmé, které pole bylo vytvořeno pomocí procedury Vložit data jako pole. Jedná se o stejný typ pole, který je zobrazen pomocí Vložit > Pole > Další pole > Databáze.

Jednodušší je vytvořit takové pole výběrem záhlaví sloupce tabulky v prohlížeči zdrojů dat a jeho přetažením do dokumentu pomocí myši. Tímto způsobem můžeme vytvořit přímo formulářový dopis.

graphics35

Obrázek 11: Dvojitým klepnutím na vložené pole se otevře dialogové okno Upravit pole

Data na pole

Tip

Tato metoda je užitečná, když se dokument posílá několika osobám, z nichž každé se pošlou některé údaje, které jsou specifické pouze pro ni. To se provádí pomocí hromadné korespondence.

Knihovny například rozesílají lidem oznámení se seznamem médií, která si vypůjčili a nevrátili včas. Seznam se obvykle u každé osoby liší, ale všichni dostanou nějaké varování. Typ varování samozřejmě závisí na době, která uplynula od doby, kdy mělo být médium vráceno. Všichni, kteří spadají do určitého časového období, obdrží stejné upozornění.

Vložení dat do polí (viz obrázek 7):

  1. Klepnutím na levý okraj jednoho z testovacích řádků jej zvýrazníme.

  2. Klepnutím na tlačítko Data na textu otevřeme průvodce Vložit databázové sloupce.

  3. Zvolíme přepínač, Pole.

  4. Přesuneme pole databáze, která chceme použít, z levého seznamu do pravého v požadovaném pořadí. Text lze přidat stejně jako na obrázku 9.

  5. Chceme-li na tato pole použít konkrétní styl odstavce, vybereme jej z rozevíracího seznamu Styly odstavce.

  6. Klepneme na OK.

Tip

Vkládání dat do textu se provádí stejným způsobem jako vkládání dat do polí. Jediný rozdíl je v tom, zda vybereme volbu Text, nebo Pole. Rozdíl je ve vzhledu v dokumentu nebo tabulce, jak je uvedeno níže. Vlevo jsou to data na text, vpravo data na pole.

Image18

Obrázek 12: Levá strana vložena jako text; pravá strana vložena jako pole

Tip

Po vložení pole lze hodnoty, které se v něm zobrazují, měnit. Vybereme záznam (řádek) s ID = 1 a klepneme na tlačítko Data na pole.

Image19

Obrázek 13: Data vložená jako pole se mohou měnit

Hromadná korespondence

Tlačítko Hromadná korespondence spustí Průvodce hromadnou korespondencí. Formulářový dopis sestavuje svá data z různých tabulek, takže je třeba nejprve spustit databázi. V databázi pak vytvoříme nový dotaz, který zpřístupní požadovaná data.

graphics42

Obrázek 14: Ikona Hromadná korespondence na nástrojové liště Tabulka dat

Chceme-li spustit databázi, klepneme pravým tlačítkem myši na samotnou databázi nebo na některou z jejích tabulek či dotazů; tím se okamžitě obnoví zobrazení v prohlížeči zdrojů dat. Poté lze vyvolat Průvodce hromadnou korespondencí klepnutím na příslušné tlačítko.

Zdroj dat aktuálního dokumentu

Klepnutím na tlačítko Zdroj dat aktuálního dokumentu otevřeme přímé zobrazení tabulky, která tvoří základ pro data vložená do dokumentu. Ve výše uvedeném příkladu se zobrazí tabulka Reader z databáze Media.

Průzkumník zapnout/vypnout

Přepnutím tlačítka Průzkumník zapnout/vypnout se zobrazí nebo skryje strom adresářů v levé části zobrazení tabulky. To v případě potřeby umožňuje větší prostor pro zobrazení dat. Chceme-li přistupovat k jiné tabulce, musíme Průzkumník znovu zapnout.

Vytváření dokumentů hromadné korespondence

Průvodce hromadnou korespondencí je přístupný také z prohlížeče databáze. Tento průvodce umožňuje v malých krocích vytvořit pole adresy a pozdravu ze zdroje dat. V zásadě můžeme tato pole vytvořit bez použití Průvodce. Zde si na příkladu projdeme jednotlivé kroky Průvodce. V následujících krocích k tomu použijeme Průvodce. Tentokrát bude zdrojem dat dotaz, konkrétně Readeradresses společnosti Media. Vyhledáme ji v rozevíracím seznamu Dotaz stejně jako dříve tabulku Reader v rozevíracím seznamu Tabulka.

Tip

Odebrání libovolného textového dokumentu v aplikaci Writer, pokud obsahuje odkazy na databázi. Nelze vytvořit nový odkaz na tento dokument, pokud je starý odkaz stále aktivní. Začneme novým dokumentem, který může být bez názvu, nebo šablonou dopisu, která neobsahuje žádné odkazy.

Image3

Obrázek 15: Průvodce hromadnou korespondencí – krok 1

Výchozí dokument pro formulářový dopis je dokument, ke kterému budou připojena pole databáze.

Sloučený dokument je dokument obsahující údaje pro různé osoby, kterým mají být zaslány formulářové dopisy. Ve sloučeném dokumentu není žádná vazba na zdroj dat. Je podobný výstupu funkce Vložit data jako text.

Image4

Obrázek 16: Průvodce hromadnou korespondencí – krok 2

Průvodce hromadnou korespondencí může vytvářet dopisy nebo e-maily pomocí záznamů z databáze. V tomto příkladu vytvoříme dopisy pomocí tabulky Reader databáze Media.

Image5

Obrázek 17: Průvodce hromadnou korespondencí – krok 3

Zadání bloku adres umožňuje nejrozsáhlejší konfiguraci. Navrhovaný seznam adres pochází z aktuálně vybraného dotazu nebo tabulky v aktuálně vybrané databázi.

Krok 3 určuje celkový vzhled bloku adres, který lze dále přizpůsobit klepnutím na tlačítko Další. Viz obrázek 17. Levá Adresa je již vybrána a tento blok bude použit.

Image20

Obrázek 18: Změna obsahu bloku adres pomocí dialogového okna Upravit blok adres

Je třeba doplnit jeden prvek: <Address Line 2>. Provedeme to následovně:

  1. Klepneme na tlačítko Další.

  2. Přetáhneme prvek <Address Line 2> v seznamu Address elements a umístíme jej napravo od prvku <Address Line 1>.

  3. Pokud mezi těmito dvěma prvky není mezera, klepneme na šipku vpravo na pravé straně dialogového okna a vytvoříme mezeru.

  4. Klepneme na OK.

  5. Vybrat blok s adresou: klepneme na OK.

Prvek <Title> je třeba přesunout o řádek níže a umístit jej před prvky <First Name> <Last Name>. Nezapomeneme mezi <Title> a <First Name> udělat mezeru. Pomocí čtyř šipek vpravo přesuneme nejprve <Last Name> a poté <First Name>.

Krok 3 slouží k propojení pojmenovaných polí v bloku adres se správnými poli v databázi. Průvodce zpočátku rozpozná pouze ta databázová pole, která mají přesně stejné názvy jako ta, která Průvodce používá. V tomto příkladu se žádné z polí neshoduje, takže v tomto kroku bude nutné vybrat všechna pole z rozevíracích seznamů.

graphics18

Obrázek 19: Přiřazení polí zdroje dat k prvkům adresy pomocí dialogového okna Přiřadit pole

Zde jsou prvky adresy přiřazeny k odpovídajícím prvkům z dotazu databáze úspěšně přeneseného pomocí Průvodce hromadnou korespondencí. Pro náhled se opět použije první záznam v dotazu.

Nastavení databáze v podstatě končí krokem 4. Zde je třeba pouze vybrat, z jakého pole se má pohlaví příjemce převzít. Toto pole již bylo pojmenováno, takže je třeba zadat pouze obsah pole pro příjemce ženského pohlaví.

Poznámka

Protože průvodce má v tomto bodě chybu, osobní pozdrav se vytvoří pomocí převodu dat na text, jak je popsáno výše. Konkrétně pole Salutation poskytne správný titul pro každou osobu. Zbytek pozdravu se vytvoří zadáním do sloučeného dokumentu.

  1. Chceme-li tuto stránku dokončit, zrušíme zaškrtnutí políčka Vložit personalizované oslovení.

  2. Obecné oslovení neprovádíme žádné změny. Bude nahrazen později, ale je nutný k určení místa, kde má být v dopise pozdrav.

Image7

Obrázek 20: Vytvoření pozdravu v kroku 4 Průvodce hromadnou korespondencí

Klepneme na Další >. V kroku 5 můžeme upravit umístění bloku adresy a pozdravu na stránce. (Viz obrázek 21.) Poté klepneme na Dokončit.

Image8

Obrázek 21: Průvodce hromadnou korespondencí – krok 5

Nyní dokončíme rozvržení dokumentu hromadné korespondence. Obsahuje pole Address Block, kde jsme je umístili.

Image6

Obrázek 22: Dokument Writer po dokončení interakce s Průvodcem hromadnou korespondencí

Nyní pomocí funkce Data na text nahradíme pozdrav.

  1. Nahradíme To whom it may concern za Dear.

  2. Přetáhneme <Salutation> na jedno místo za Dear.

  3. Přetáhneme <FirstName> na jedno místo za <Salutation>.

  4. Přetáhneme položku <LastName> na jedno místo za položku <FirstName>.

Image21

Obrázek 23: Aktualizovaný pozdrav

Vybereme horní záznam v okně Zdroj dat na jeho začátku. Poté klepneme na tlačítko Data na text a zobrazíme data zadaná do polí.

Image22

Obrázek 24: Data z prvního záznamu zdroje dat zobrazeného v dokumentu Writeru

Nyní máme dokument Writeru, do kterého můžeme psát obsah dopisu. Chceme-li sloučit pole a vytisknout dopisy, zvolíme nabídku Soubor > Tisk. Zobrazí se následující zpráva. Stiskneme tlačítko Ano.

Image13

Obrázek 25: Dialog pro potvrzení tisku dopisů hromadné korespondence

Nyní se zobrazí dialogové okno Hromadná korespondence (obrázek 26), kde můžeme volitelně vybrat záznamy, které chceme zahrnout nebo vyloučit, a zvolit tisk dopisů nebo jejich uložení do souboru. Další podrobnosti nalezneme v kapitole 14, Hromadná korespondence, v příručce Průvodce aplikací Writer.

Image14

Obrázek 26: Dialogové okno Hromadná korespondence

Tisk štítků

Soubor > Nový > Štítky spustí Průvodce štítky. Otevře dialogové okno, které zahrnuje všechny otázky formátování a obsahu štítků, a to ještě předtím, než se vytvoří samotné štítky. Nastavení v tomto dialogovém okně se uloží do osobních nastavení uživatele.

Základní nastavení obsahu se nachází na kartě Popisky (obrázek 27). Pokud u textu štítku zaškrtneme políčko Adresa, budou mít všechny štítky stejný obsah převzatý z nastavení LibreOffice pro uživatele programu.

Jako příklad opět použijeme databázi Addresses. Přestože další výběrové pole má nadpis Tabulky, jsou zde uvedeny jak tabulky, tak dotazy, stejně jako v prohlížeči zdrojů dat.

Pomocí tlačítek se šipkami můžeme do editoru vkládat jednotlivá pole databáze. Název databázového pole Surname je zde nastaven na <Addresses.MailMergeQuery.1.Surname>. Sekvence je tedy <database.Table.1.database field>.

V editoru můžeme pracovat s klávesnicí. Tak například můžeme na začátek vložit zalomení řádku, aby se štítky netiskly přímo na horní okraj, ale aby byl obsah vytištěn zcela a jasně viditelný.

Formát lze vybrat na kartě Štítky. Zde je začleněno velké množství značek štítků, takže většina ostatních nastavení na kartě Formát není nutná.

graphics12

Obrázek 27: Dialogové okno Štítky, karta Štítky

Pomocí karty Formát (obrázek 28) můžeme přesně nastavit velikost štítku. Nastavení má význam pouze v případě, že není známa značka a typ štítků. Pro tisk štítků o šířce 7,00 cm potřebujeme šířku stránky o něco větší než 3*7,00 cm = 21,00 cm. Teprve pak se na stránce vytisknou tři štítky za sebou.

graphics11

Obrázek 28: Dialogové okno Štítky, karta Formát

graphics13

Obrázek 29: Dialogové okno Štítky, karta Možnosti

Na kartě Možnosti můžeme určit, zda se má vytvořit pouze jeden štítek, nebo celá stránka štítků. Stránka se pak vyplní postupně údaji ze záznamů databáze, počínaje prvním záznamem. Pokud je záznamů více, než se vejde na stránku, další stránka se automaticky zaplní další sadou záznamů.

Zaškrtávací políčko Synchronizovat obsahy propojí všechny štítky dohromady, takže následné změny v rozvržení kteréhokoli štítku se použijí na všechny ostatní štítky. Chceme-li přenést upravený obsah, použijeme tlačítko  Synchronizovat, které se zobrazí při vytváření štítku, pokud jsme toto políčko zaškrtli.

Tlačítkem Nový dokument vytvoříme dokument obsahující vybraná pole.

Po zahájení procesu tisku se zobrazí potvrzovací dialogové okno znázorněné na obrázku 25  (jako u dopisů hromadné korespondence). Výběrem možnosti Ano vyplníme pole databáze adres odpovídajícím obsahem.

Zdroj dat pro tisk štítků není vyhledáván automaticky, pouze je předem vybrána databáze. Vlastní dotaz musí zadat uživatel, protože v tomto případě se nejedná o tabulku.

Po výběru dotazu a příslušných záznamů (v tomto případě Všechny) lze zahájit tisk. Zejména při prvních testech je vhodné v dialogovém okně Hromadné korespondence zvolit Výstup do souboru (obrázek 26), čímž se štítky uloží jako dokument. Možnost uložení do několika dokumentů není vhodná pro tisk štítků, ale spíše pro dopisy různým příjemcům, se kterými lze následně pracovat.

Přímé vytváření dokumentů hromadná korespondence a štítků

Místo Průvodce můžeme vytvářet dokumenty hromadné korespondence a štítky přímo.

Hromadná korespondence pomocí myši

Pole pro hromadnou korespondenci lze přebírat z prohlížeče databáze pomocí myši.

graphics39

Obrázek 30: Použití myši k vytvoření hromadné korespondence

Levým tlačítkem myši vybereme záhlaví tabulky. Podržíme tlačítko stisknuté a přetáhneme kurzor v textovém dokumentu. Kurzor změní svůj tvar na symbol vložení. Pole MailMerge je vloženo do textového dokumentu, zde je zobrazeno v úplném popisu, který je viditelný pomocí Zobrazit > Názvy polí.

Vytváření hromadných dopisů výběrem polí

Pole pro hromadnou korespondenci lze vložit pomocí Vložit > Pole > Další pole > Databáze.

graphics28

Obrázek 31: Použití dialogového okna Pole, karta Databáze pro vložení polí pro hromadnou korespondenci

Zde jsou k dispozici všechny tabulky a dotazy ve vybrané databázi. Pomocí tlačítka Vložit můžeme vkládat různá pole jedno po druhém přímo do textu na aktuální pozici kurzoru.

Pokud chceme vytvořit pozdrav, který je v dopisech hromadné korespondence obvyklý, můžeme použít skrytý odstavec nebo skrytý text: Vložit > Pole > Další pole > Funkce > Skrytý odstavec. U obou variant dbáme na to, aby nebyla splněna námi formulovaná podmínka, protože chceme, aby byl odstavec viditelný.

Aby se formule Vážená paní <Surname> objevila pouze v případě, že se jedná o ženu, postačí splnit následující podmínku:

[Media.Readeraddresses.Salutation] ! = "Mrs."

Jediný problém, který zbývá, je, že možná neexistuje žádné příjmení. Za těchto okolností by se mělo objevit "Vážený pane/paní", takže tuto podmínku musíme vložit. Celkový výraz vypadá takto:

[Media.Readeraddresses.Salutation] ! "Mrs." OR NOT

[Media.Readeraddresses.Salutation]

To vylučuje možnost, že by se tento odstavec objevil v případě, že se nejedná o ženu nebo není uvedeno příjmení.

Stejným způsobem můžeme vytvořit položky pro mužský rod a chybějící položky pro zbývající dva typy pozdravů.

Pozdrav v poli adresy lze samozřejmě vytvořit úplně stejným způsobem, ať už je pohlaví uvedeno kdekoli.

Další informace jsou uvedeny v nápovědě LibreOffice v části Skrytí textu a Podmíněný text.

Samozřejmě by bylo ještě jednodušší, kdyby někdo, kdo rozumí databázím, vložil celý pozdrav přímo do dotazu. To lze provést pomocí korelovaného poddotazu (viz kapitola 5, Dotazy).

Pro štítky je zajímavý zejména typ pole Další záznam. Pokud je tento typ pole zvolen na konci štítku, bude následující štítek vyplněn daty z následujícího záznamu. Typické štítky pro sekvenční tisk štítků vypadají jako na následujícím obrázku, když pomocí Zobrazení > Názvy polí zviditelníme příslušná označení polí:

graphics29

Obrázek 32: Typický výběr polí pro sekvenční tisk štítků

U posledního štítku na stránce je třeba zohlednit skutečnost, že po přerušení stránky se automaticky vyvolá další záznam. Zde by se typ pole Další záznam neměl vyskytovat. V opačném případě dojde k vynechání záznamu, protože dojde k dvojímu skoku záznamu.

Tip

Vytváření dopisů pro hromadnou korespondenci je možné také přímo z databázového formuláře. Jediným požadavkem je, aby byla databáze zaregistrována v LibreOffice.

Při tvorbě hromadné korespondence nezapomeňme zvolit Zobrazení > Normální. Tím se zajistí správné umístění prvků na stránce. Pokud je pak formulář vytištěn, zobrazí se obvyklý dotaz pro hromadnou korespondenci.

Tento typ hromadné korespondence má tu výhodu, že k tisku nepotřebujeme žádné jiné soubory než soubor *.odb.

Externí formuláře

Pokud mají být jednoduché vlastnosti formuláře dostupné v LibreOffice použity v jiných komponentách, jako jsou Writer a Calc, stačí zobrazit nástrojovou lištu Návrh formuláře pomocí Zobrazit > Nástrojové lišty > Návrh formuláře a poté otevřít Navigátor formulářem. Můžeme vytvořit formulář, nebo, jak je popsáno v kapitole 4, Formuláře, vytvořit formulářové pole. Karta Data v dialogovém okně Vlastnosti formuláře vypadá trochu jinak než při vytváření formulářů přímo v databázovém souboru ODB.

graphics30

Obrázek 33: Horní část dialogu Vlastnosti formuláře, karta Data s externím zdrojem dat

Image1

Obrázek 34: Horní část dialogu Vlastnosti formuláře, karta Data s interním zdrojem dat.

Při použití externího formuláře je nutné zvolit zdroj dat samostatně. Tlačítkem vpravo od pole se seznamem zdrojů dat otevřeme prohlížeč souborů. Lze vybrat libovolný soubor ODB. Pole pro zdroj dat navíc obsahuje odkaz začínající file:///.

Pokud se místo toho podíváme do obsahu seznamu, uvidíme databáze, které jsou již v LibreOffice zaregistrovány pod svými registrovanými názvy.

Formuláře se vytvářejí úplně stejným způsobem jako v samotné aplikaci Base.

Takto vytvořené formuláře se ve výchozím nastavení zobrazují při každém otevření souboru v režimu úprav, nikoliv chráněné proti zápisu jako v aplikaci Base. Abychom zabránili náhodné úpravě formuláře, můžeme soubor otevřít pouze pro čtení pomocí Soubor > Vlastnosti > Zabezpečení. Soubor můžeme dokonce chránit před změnou pomocí hesla. V kancelářských systémech je také možné prohlásit celý soubor za chráněný proti zápisu. To stále umožňuje vstup do polí formuláře, ale ne pohyb v polích nebo zadávání textu mezi nimi.

Tip

Formuláře lze také rychle vytvářet přetažením. Za tímto účelem otevřeme databázi, vyhledáme příslušnou tabulku nebo dotaz a vybereme záhlaví tabulky.

V aplikaci Writer vybereme pomocí levého tlačítka myši příslušné nadpisy polí, podržíme stisknuté klávesy Shift a Ctrl a kurzor myši se změní na symbol odkazu. Poté přetáhneme nadpisy do dokumentu Writer.

Pole můžeme přetáhnout do souborů Calc bez použití dalších kláves. Symbol kopírování se zobrazí jako kurzor myši.

V obou případech se vytvoří vstupní pole s přiřazeným štítkem. Odkaz na zdroj dat se vytvoří při prvním skutečném zadání dat, takže zadávání dat do takového formuláře může začít ihned po operaci přetažení.

Výhody externích formulářů

Pro práci s databází není nutné nejprve otevřít aplikaci Base. Proto nepotřebujeme další otevřené okno na pozadí.

V již hotové databázi lze stávajícím uživatelům databáze následně bez problémů zaslat vylepšený formulář. Při vývoji dalších formulářů mohou nadále používat databázi a nemusí kopírovat složité externí formuláře z jedné databáze do druhé.

Formuláře pro databázi lze měnit podle potřeb uživatele. Uživatelům, kteří nemají oprávnění opravovat data nebo vytvářet nové záznamy, mohou ostatní uživatelé zaslat aktuální soubor dat a jednoduše nahradit svůj soubor *.odb, aby měli k dispozici aktuální zobrazení. To by mohlo být užitečné například pro databázi organizace, kde všichni členové výboru dostanou databázi, ale pouze jedna osoba může údaje upravovat; ostatní mohou stále prohlížet adresy svých oddělení.

Nevýhody externích formulářů

Uživatelé musí vždy instalovat formuláře a aplikaci Base se stejnou adresářovou strukturou. Jen tak může být přístup do databáze bez chyb. Vzhledem k tomu, že odkazy jsou uloženy relativně k formuláři, stačí uložit databázi a její formuláře do společného adresáře.

Externě lze vytvářet pouze formuláře, nikoli dotazy nebo sestavy. Pouhý pohled na dotaz proto musí projít formulářem. Naproti tomu sestava vyžaduje otevření databáze. Případně by bylo možné ji alespoň částečně vytvořit pomocí hromadné korespondence.

Použití databáze v aplikaci Calc

Data lze použít v aplikaci Calc pro účely výpočtu. Za tímto účelem je nejprve nutné zpřístupnit data v listu aplikace Calc.

Zadávání dat do aplikace Calc

Do aplikace Calc lze zadávat data různými způsoby.

Vybereme tabulku levým tlačítkem myši a přetáhneme ji do pracovního listu aplikace Calc. Kurzor nastaví levý horní roh tabulky. Vytvoří se tabulka s názvy polí. Prohlížeč zdrojů dat v tomto případě nenabízí možnosti Data na text nebo Data na pole.

Data přetažená do aplikace Calc tímto způsobem vykazují následující vlastnosti:

Při importu se neimportují pouze data, ale také vlastnosti polí, které se během importu načítají a působí na ně. Pole, jako jsou čísla domů, která byla deklarována jako textová pole, jsou po vložení do Calcu formátována jako text.

Z importu se stane oblast aplikace Calc, které je ve výchozím nastavení přiřazen název Import1. K datům lze později přistupovat pomocí této oblasti. Volba Data > Obnovit oblast umožňuje, aby byl rozsah případně doplněn o nová data z databáze.

Image17

Obrázek 35: Přetažení tabulky zdroje dat do listu Calc

-

graphics7

Obrázek 36: Dialogové okno Definice databázové oblasti zobrazující automaticky vytvořenou databázovou oblast Import1

Importovaná data nejsou formátována jinak, než jak to vyžadují vlastnosti databázových polí.

Pomocí místní nabídky tabulky můžeme také vytvořit kopii dat. V tomto případě však nejde o import, ale pouze o kopii. Vlastnosti datových polí nejsou načítány společně s nimi, ale jsou určeny aplikací Calc. Kromě toho jsou názvy polí formátovány jako záhlaví tabulky.

graphics8

Obrázek 37: Kopírování tabulky z levé strany prohlížeče zdrojů dat

Image16

Obrázek 38: Kopírování tabulky z pravé strany prohlížeče zdrojů dat

Rozdíl je vidět zejména v databázových polích, která jsou formátována jako text. Při importu je aplikace Calc změní na textová pole, která jsou zarovnána vlevo jako ostatní text. Tato čísla pak již nelze použít při výpočtech.

Pokud je znovu exportujeme, zůstanou data zachována v původní podobě.

Image15

Obrázek 39: Porovnání importovaných a zkopírovaných dat v aplikaci Calc

Tip

Importem dat do aplikace Calc se přepíše předchozí obsah a také veškeré předchozí formátování. Pokud mají být data důsledně exportována do stejné tabulky, měli bychom pro import dat použít samostatný list. Data se pak načtou do druhého listu pomocí výrazu jménotabulky.názevpole. Pole v tomto listu lze vhodně naformátovat bez rizika přepsání formátování.

Tip

Záznamy lze také kopírovat přímo z databáze pomocí schránky nebo přetažením myší. Pokud je tabulka nebo dotaz přetažen do tabulky aplikace Calc, vloží se celý obsah. Pokud je otevřena tabulka nebo dotaz a je vybrán jeden nebo více záznamů, zkopírují se po přetažení pouze tyto záznamy spolu s názvy polí.

Export dat z aplikace Calc do databáze

Vybereme data v listu aplikace Calc. Podržíme stisknuté levé tlačítko myši a přetáhneme data, která chceme převést do databáze, do oblasti tabulky v prohlížeči databází.

graphics38

Obrázek 40: Kopírování dat z Calc do databázové tabulky

Kurzor změní svůj vzhled a ukáže, že je možné něco vložit.

Otevře se první okno Průvodce importem. Další kroky průvodce jsou popsány v kapitole 3, Tabulky, v části „Import dat z jiných zdrojů“.

Převod dat z jedné databáze do druhé

V průzkumníku prohlížeče zdrojů dat lze tabulky kopírovat z jedné databáze do druhé tak, že vybereme zdrojovou tabulku levým tlačítkem myši, podržíme tlačítko stisknuté a přetáhneme ji do cílové databáze v kontejneru tabulek. Tím se zobrazí dialogové okno pro kopírování tabulek.

Tímto způsobem lze například databáze určené pouze pro čtení (zdroje dat, jako jsou adresáře z programu elektronické pošty nebo tabulky v tabulkovém procesoru) použít jako základ pro databázi, ve které jsou data editovatelná. Data lze také přímo kopírovat při přechodu na jiný databázový program (například při přechodu z PostgreSQL na MySQL).

Pokud chceme, aby nová databáze měla jiné relace než původní, můžeme to zařídit pomocí vhodných dotazů. Ti, kteří nejsou dostatečně odborně zdatní, mohou místo toho použít aplikaci Calc. Stačí přetáhnout data do tabulky a připravit je k importu do cílové databáze pomocí prostředků, které aplikace Calc nabízí.

Aby byl import do nové databáze co nejčistší, měly by být tabulky připraveny předem. Díky tomu lze s dostatečným předstihem rozpoznat problémy s formátováním a problémy s vytvářením primárních klíčů.

Import záznamů do tabulky pomocí schránky

Pokud jsou záznamy k dispozici v tabulkové podobě, lze je vložit do databáze aplikace Base pomocí schránky a průvodce.

V aplikaci Base se import zahájí klepnutím pravým tlačítkem myši na cílovou tabulku. V místní nabídce pod volbou Kopírovat jsou příkazy ImportovatImportovat obsah. Pokud vybereme Vložit, Průvodce importem již vybere tabulku a Připojit data. Vložit jinak poskytuje pouze dotaz na importní filtr. K dispozici jsou možnosti HTML a RTF.

Pokud místo toho klepneme pravým tlačítkem myši do kontejneru tabulky, Průvodce importem nám nabídne pouze možnost vytvořit novou tabulku.

Importování PDF záznamů

Pokud chceme importovat data z různých externích zdrojů, je nejlepší zvolit formát, který zabrání úpravám formuláře během zadávání dat. Pomocí Writeru můžeme vytvářet formuláře ve formátu PDF,   umístit je online a nechat si vyplněné formuláře vrátit, například jako přílohy e-mailu. Chybí jen co nejjednodušší zadání údajů do databáze aplikace Base. Příklad ilustruje takový způsob importu.

Poznámka

Databáze Example_PDFFormular_Import.odb pro tuto sestavu je obsažena v ukázkových databázích k této knize.

Vytvoření PDF formuláře

Formulář PDF je vytvořen jako externí formulář bez propojení s databází. Pomocí Zobrazit > Nástrojové lišty > Ovládací prvky formuláře se zobrazí potřebné prvky formuláře, které lze vložit podle potřeby.

Formát PDF bohužel nerozlišuje mezi číselnými poli, daty a textovými poli. Pro zde uvedený příklad stačí pro všechny položky použít textová pole. Ostatní formáty polí ve formuláři aplikace Writer budou při exportu do PDF nevyhnutelně ztraceny.

Formuláře PDF mohou mít v zásadě následující pole:

Bild1

Obrázek 41: Testovací dokument PDF, který má být načten do databáze Base

Testovací formulář obsahuje celkem 4 textová pole. V části Vlastnosti: Textové pole > Obecné > Název při použití následující metody importu bychom měli vždy zvolit název pole použitý v databázové tabulce, abychom se vyhnuli problémům s názvy polí a jejich obsahem.

Nápovědy se zobrazují při čtení záznamů, ale nezobrazují se v každém prohlížeči PDF.

Aby bylo zajištěno, že formulář skutečně obsahuje záznamy, měl by být po zadání dat uložen v prohlížeči PDF pomocí možnosti nabídky Soubor > Uložit jako. Konkrétní příkaz pro provedení tohoto úkonu se může u různých prohlížečů lišit. Bez tohoto postupu prohlížeč zobrazí záznamy po otevření formuláře v našem počítači, ale ve skutečnosti je načte z dočasně uloženého souboru prohlížeče, nikoli přímo ze souboru PDF. Pokud je pak formulář přenesen do jiného počítače, bude prázdný.

Čtení záznamů z PDF formuláře

Formulář pro databázi aplikace Base je vzhledově velmi jednoduchý. Je propojen s tabulkou a zobrazuje právě načtené záznamy. Nejnovější záznamy jsou uvedeny v kontrolní tabulce výše.

Bild3

Obrázek 42: Data formuláře načtená do aplikace Base z dokumentu PDF

Makro pro načítání záznamů se zadává v části Vlastnosti: Tlačítko > Události > Provést akci.

K vyčítání záznamů používáme open source program pdftk. Program je volně dostupný pro Windows i Linux. Linuxové distribuce jej mají většinou jako balíček ve svých repozitářích. Uživatelé systému Windows jej najdou na adrese https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/.

Záznamy načtené pomocí pdftk se zapisují do textového souboru, který vypadá takto:

Bild2

Každé pole je v souboru zastoupeno pěti až šesti řádky. Pro makro jsou důležité řádky FieldName (měl by být stejný jako FieldName v cílové tabulce), FieldValue (obsah pole po uložení souboru PDF) a FieldJustification (poslední řádek položky).

Celý proces importu je řízen pomocí maker. Formulář PDF musí být uložen ve stejné složce jako databáze. Záznamy se z něj načtou do textového souboru a poté se z něj načtou do databáze. Takto se pokračuje u všech souborů PDF ve složce. Staré záznamy by proto měly být ze složky pokud možno odstraněny, protože funkce nekontroluje duplicitu.

SUB PDF_Form_Import(oEvent AS OBJECT)

   DIM inNumber AS INTEGER

   DIM stRow AS STRING

   DIM i AS INTEGER

   DIM k AS INTEGER

   DIM oDatasource AS OBJECT

   DIM oConnection AS OBJECT

   DIM oSQL_Command AS OBJECT

   DIM oResult AS OBJECT

   DIM stSql AS STRING

   DIM oDB AS OBJECT

   DIM oFileAccess AS OBJECT

   DIM inFields AS INTEGER

   DIM stFieldName AS STRING

   DIM stFieldValue AS STRING

   DIM stFieldType AS STRING

   DIM stDir AS STRING

   DIM stDir2 AS STRING

   DIM stPDFForm AS STRING

   DIM stFile AS STRING

   DIM stTable AS STRING

   DIM inNull AS INTEGER

   DIM aFiles()

   DIM aNull()

   DIM stCommand AS STRING

   DIM stParameter AS STRING

   DIM oShell AS OBJECT

Po deklaraci proměnných je uveden počet polí ve formuláři PDF. Počet začíná od 0, takže hodnota 3 ve skutečnosti znamená celkem čtyři pole. Pomocí tohoto počtu lze zjistit, zda byla načtena všechna data pro daný záznam, takže je připraven k přenosu do tabulky.

   inFields = 3

   stTable = "Name"

   oDatasource = ThisComponent.Parent.CurrentController

   If NOT (oDatasource.isConnected()) THEN

      oDatasource.connect()

   END IF

   oConnection = oDatasource.ActiveConnection()

   oSQL_Command = oConnection.createStatement()

Připojení k databázi je vytvořeno. Čte se cesta k databázovému souboru v souborovém systému. Pomocí této cesty se obsah složky načte do pole aFiles. Smyčka kontroluje každý název souboru v poli, zda nekončí příponou .pdf. Velká a malá písmena se nerozlišují, protože všechny výsledky hledání jsou převedeny na malá písmena pomocí Lcase.

   oDB = ThisComponent.Parent

   stDir = Left(oDB.Location,Len(oDB.Location)-Len(oDB.Title))

   oFileAccess = createUnoService("com.sun.star.ucb.SimpleFileAccess")

   aFiles = oFileAccess.getFolderContents(stDir, False)

   FOR k = 0 TO uBound(aFiles())

      IF LCase(Right(aFiles(k),4)) = ".pdf" THEN

         stDir2 = ConvertFromUrl(stDir)

         stPDFForm = ConvertFromUrl(aFiles(k))

Pro určení příkazu pro načtení dat je nutné znát konvence adresování souborů v operačním systému. Původní adresa URL začínající na file:// se proto musí přizpůsobit aktuálnímu systému. Příkaz pro spuštění programu pdftk závisí na operačním systému. Může mít příponu .exe nebo třeba úplnou cestu k programu, například
.
C:\ Program Files (x86)\pdftk\pdftk.exe nebo přípona nemusí být vůbec vyžadována. GetGuiType slouží k určení typu používaného systému: 1 znamená Windows, 3 macOS a 4 Linux. Následující kroky rozlišují pouze mezi systémem Windows a ostatními systémy.

Poté se použije funkce Shell(), která konzoli předá příslušný příkaz pro spuštění pdftk. Argument True zajistí, že LibreOffice počká, dokud se proces shellu neukončí.

         IF GetGuiType = 1 THEN '()

            stCommand = "pdftk.exe"

         ELSE      

            stCommand = "pdftk"

         END IF

         stParameter = stPDFForm & " dump_data_fields_utf8 output "
           
& stDir2 & "PDF_Form_Data.txt"

         Shell(stCommand,0,stParameter,True)

         stFile = stDir & "PDF_Form_Data.txt"

         i = -1

         inNumber = FreeFile

Funkce FreeFile určuje, který další volný datový kanál je v operačním systému k dispozici. Tento kanál se načte jako celé číslo a použije se k přímému připojení k právě vytvořenému datovému souboru PDF. Ke čtení souboru se používá instrukce INPUT. To probíhá mimo kancelářský balík LibreOffice. Externí záznamy se pak načtou do LibreOffice.

         OPEN stFile FOR INPUT AS inNumber

            DO WHILE NOT Eof(inNumber)

               LINE INPUT #inNumber, stRow

Datový soubor PDF se nyní načítá řádek po řádku. Kdykoli se vyskytne výraz FieldName, je zbývající obsah řádku považován za název pole ve formuláři PDF a vzhledem ke způsobu, jakým byl formulář definován, také za název databázového pole, do kterého se mají data zapsat.

Všechny názvy polí jsou přímo kombinovány pro použití v pozdějších příkazech SQL. V praxi to znamená, že názvy polí jsou uzavřeny ve dvojitých uvozovkách a odděleny čárkami.

Kromě toho dotaz pro každý název pole určuje typ pole v tabulce. Datum a desetinné hodnoty se musí přenášet jiným způsobem než text.

               IF instr(stRow, "FieldName: ") THEN

                  IF stFieldName = "" THEN

                     stFieldName = """"+mid(stRow,12)+""""

                  ELSE

                     stFieldName = stFieldName & ",""" + mid(stRow,12)+""""

                  END IF

                  stSql = "SELECT TYPE_NAME FROM INFORMATION_SCHEMA.SYSTEM_COLUMNS
                    WHERE TABLE_NAME = '"
+ stTable + "' AND
                    COLUMN_NAME = '"
+ mid(stRow,12) + "'"

                  oResult = oSQL_Command.executeQuery(stSql)

                  WHILE oResult.next

                     stFieldType = oResult.getString(1)

                  WEND

               END IF

Stejně jako u názvů polí, tak i u hodnot polí. Nesmí však být uvozeny dvojitými uvozovkami, ale musí být připraveny v souladu s požadavky kódu SQL. To znamená, že text musí být uvozen jednoduchými uvozovkami, data musí být převedena tak, aby odpovídala konvencím SQL atd. K tomu slouží dodatečná externí funkce SQL_Value.

               IF instr(stRow, "FieldValue: ") THEN

                  IF stFieldValue = "" THEN

                     stFieldValue = SQL_Value(mid(stRow,13), stFieldType)

                  ELSE

                     stFieldValue = stFieldValue & "," &
                       
SQL_Value(mid(stRow,13), stFieldType)

                  END IF

               END IF

Pokud je nalezen výraz FieldJustification, znamená to konec kombinovaného bloku názvu pole a vlastností. Čítač i, který bude následně porovnán s dříve deklarovaným čítačem polí inFields, se tedy zvýší o 1.

Pokud se i a inFields rovnají, lze příkaz SQL dát dohromady. Musíme však zajistit, aby se z prázdných formulářů nevytvářely prázdné záznamy. Proto se předtím kontroluje, zda jsou všechny hodnoty polí NULL. V takových případech se příkaz SQL spustí okamžitě. V opačném případě je záznam zařazen pro vložení do tabulky Name.  Poté se proměnné vrátí na výchozí hodnoty a lze načíst další formulář PDF.

               IF instr(stRow, "FieldJustification:") THEN

                  i = i + 1

               END IF

               IF i = inFields THEN

                  aNull = Split(stFieldValue,",")

                  FOR n = 0 TO Ubound(aNull())

                     IF aNull(n) = "NULL" THEN inNull = inNull + 1

                  NEXT

                  IF inNull < inFields THEN

                     stSql ="INSERT INTO """ + stTable + """(" + stFieldName + ")"

                     stSql = stSql + "VALUES (" + stFieldValue + ")"

                     oSQL_Command.executeUpdate(stSql)

                  END IF

                  stFieldName = ""

                  stFieldValue = ""

                  stFieldType = ""

                  i = -1

                  inNull = 0

               END IF

            LOOP

         CLOSE inNumber

Na konci postupu zůstane jeden soubor PDF_Form_Data.txt. Tento soubor je vymazán. Poté se formulář znovu načte, aby bylo možné zobrazit načtené záznamy.

         Kill(stFile)

      END IF

   NEXT

   oEvent.Source.Model.Parent.reload()

END SUB

Pokud text obsahuje znak "'", bude tento znak při vkládání SQL považován za značku konce textu. Kód SQL pro příkaz vložení selže, pokud následuje jakýkoli další text, který není uzavřen v jednoduchých uvozovkách. Aby se tomu zabránilo, musí být každá jednoduchá uvozovka v textu maskována další jednoduchou uvozovkou. To je úkolem funkce String_to_SQL.

FUNCTION String_to_SQL(st AS STRING) AS STRING

   IF InStr(st,"'") THEN

      st = Join(Split(st,"'"),"''")

   END IF

   String_to_SQL = st

END FUNCTION

Data v souboru PDF se načítají jako text. Jejich správnost nelze předem zkontrolovat.

Při psaní dat v angličtině se den, měsíc a rok oddělují tečkami nebo častěji pomlčkami. Den a měsíc mohou mít jednu nebo dvě číslice. Rok může mít dvě nebo čtyři číslice.

V kódu SQL musí data začínat čtyřmístným rokem a musí být zapsána ve formátu RRRR-MM-DD. Zadaná data proto musí projít procesem převodu.

Zadané datum je rozděleno na části den, měsíc a rok. Den a měsíc jsou opatřeny počáteční nulou a poté zkráceny na dvě číslice. Tím je ve všech případech zajištěn dvoumístný údaj.

Pokud je část roku již čtyřmístná (větší než 1000), hodnota se nemění. V opačném případě, pokud je rok větší než 30, se předpokládá, že datum patří do minulého století, a je třeba přidat rok 1900. Všechna ostatní data jsou přiřazena k aktuálnímu století.

FUNCTION Date_to_SQLDate(st AS STRING) AS STRING

   DIM stDay AS STRING

   DIM stMonth AS STRING

   DIM stDate AS STRING

   DIM inYear AS INTEGER

   stDay = Right("0" & Day(CDate(st)), 2)

   stMonth = Right("0" & Month(CDate(st)), 2)

   inYear = Year(CDate(st))

   IF inYear = 0 THEN

      inYear = Year(Now())

   END IF

   IF inYear > 1000 THEN

   ELSEIF inYear > 30 THEN

      inYear = 1900 + inYear

   ELSE

      inYear = 2000 + inYear

   END IF

   stDate = inYear & "-" & stMonth & "-" & stDay

   Date_to_SQLDate = stDate

END FUNCTION

Funkce SQL_Value kombinuje tuto funkci s níže uvedeným nastavením NULL a poskytuje tak volající funkci správně formátované hodnoty pro vstup do databáze.

Prázdná pole mají hodnotu NULL. Odpovídající pole v tabulce bude rovněž prázdné.

FUNCTION SQL_Value(st AS STRING, stType AS STRING) AS STRING

   DIM stValue AS STRING

   IF st = "" THEN

      SQL_Value = "NULL"

Pokud se jedná o pole s datem a jeho obsah má být rozpoznatelný jako datum, musí být jeho obsah převeden do formátu data SQL. Pokud není rozpoznatelné jako datum, mělo by pole zůstat prázdné.

   ELSEIF stType = "DATE" THEN

      IF isDate(st) THEN

         SQL_Value = "'" & Date_to_SQLDate(st) & "'"

      ELSE

         SQL_Value = "NULL"

      END IF

Desetinné pole může obsahovat čárky místo desetinných míst a za nimi desetinná místa. V jazycích Basic a SQL je desetinným oddělovačem vždy tečka. Čísla obsahující čárku se proto musí převést. Pole musí obsahovat číslo, takže ostatní znaky, jako jsou jednotky, musí být odstraněny. To provádí funkce Val().

   ELSEIF stType = "DECIMAL" THEN

      stValue = Str(Val(Join(Split(st,","),".")))

Veškerý ostatní obsah je považován za text. Jednoduché uvozovky jsou maskovány další jednoduchou uvozovkou a celý výraz je opět uzavřen v jednoduchých uvozovkách.

   ELSE

      SQL_Value = "'" & String_to_SQL(st) & "'"

   END IF

END FUNCTION

Další podrobnosti o konstrukci maker nalezneme v kapitole 9, Makra. Tento příklad jednoduše ukazuje, že je možné přenášet data z formulářů PDF do databáze aplikace Base, aniž by bylo nutné kopírovat hodnoty pole po poli pomocí schránky. Konstrukce výše uvedeného postupu byla záměrně ponechána velmi obecná a bylo by třeba ji přizpůsobit konkrétním situacím.

Obsah