LibreOfficeLogo

Příručka aplikace Base 7.3

Příloha A 
Běžné úlohy databáze

 

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í

Pulkit Krishna

Jenna Sargent

Steve Fanning

Vasudev Narayanan

Olivier Hallot

 

Pro předchozí vydání

Randolph Gamo

Robert Großkopf

Pulkit Krishna

Jost Lange

Hazel Russman

Jenna Sargent

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

Ctrl + klepnutí a/nebo klepnutí pravým tlačítkem v závislosti na operačním systému 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

 

Úvod

Jak se naše databáze rozrůstá a začleňuje do našeho podnikání, bude nutné řešit administrativní úkoly, abychom databázi udrželi v rozumných a bezpečných podmínkách a mohli ji co nejlépe využívat. V této kapitole jsou uvedeny některé informace o datových typech, funkcích a uložených procedurách databáze, příkazech Base UNO, administrativních a opravných procedurách.

Čárové kódy

Aby bylo možné použít funkci tisku čárového kódu, musí být nainstalováno písmo ean13.ttf. Toto písmo je volně dostupné. Například jako v následující adrese vrácené vyhledávačem: https://graphicore.github.io/librebarcode/documentation/ean13.html

Čárové kódy EAN13 lze vytvořit pomocí souboru ean13.ttf takto:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Číslo

Velká písmena, A=0 B=1 atd.

*

Malá písmena, a=0 b=1 atd.

+

Obrázek 1:  Schematické uspořádání třináctimístného čárového kódu EAN-13

Viz také dotaz Barcode_EAN13_ttf_command v ukázkové databázi Media_without_Macros.

Datové typy pro editor tabulek

Tabulka 1: Datové typy celých čísel

Typ

Možnost

HSQLDB

Rozsah

Velikost v paměti

Tiny Integer

TINYINT

TINYINT

28 = 256 | – 128 to + 127

1 bajt

Small Integer

SMALLINT

SMALLINT

216 = 65536 | – 32768 do + 32767

2 bajty

Integer

INTEGER

INTEGER | INT

232 = 4294967296 | – 2147483648 do + 2147483647

4 bajty

BigInt

BIGINT

BIGINT

264

8 bajtů

Tabulka 2: Datové typy čísel s plovoucí desetinnou čárkou

Typ

Možnost

HSQLDB

Rozsah

Velikost v paměti

Desetinné číslo

DECIMAL

DECIMAL

Neomezený počet, až 50 míst v grafickém uživatelském rozhraní, pevná desetinná čárka, dokonalá přesnost

proměnná

Číslo

NUMERIC

NUMERIC

Neomezený počet, až 50 míst v grafickém uživatelském rozhraní, pevná desetinná čárka, dokonalá přesnost

proměnná

Float

FLOAT

(místo toho se používá DOUBLE)

 

 

Reálná část

REAL

REAL

 

 

Double

DOUBLE

DOUBLE [PRECISION] | FLOAT

Nastavitelný, ne přesný, maximálně 15 desetinných míst

8 bajtů

Tabulka 3: Datové typy textu

Typ

Možnost

HSQLDB

Rozsah

Velikost v paměti

Text

VARCHAR

VARCHAR

Nastavitelný

proměnná

Text

VARCHAR_
IGNORECASE

VARCHAR_
IGNORECASE

Nastavitelný, rozsah ovlivňuje třídění

proměnná

Text (pevný)

CHAR

CHAR | CHARACTER

Nastavitelný, zbytek aktuálního textu nahrazen mezerami

pevná

Memo

LONGVARCHAR

LONGVARCHAR

 

proměnná

Tabulka 4: Datové typy data a času

Typ

Možnost

HSQLDB

Rozsah

Velikost v paměti

Datum

DATE

DATE

 

4 bajty

Čas

TIME

TIME

 

4 bajty

Datum/čas

TIMESTAMP

TIMESTAMP | DATETIME

Nastavitelný (0,6 – znamená 6 milisekund)

8 bajtů

Tabulka 5: Další datové typy

Typ

Možnost

HSQLDB

Rozsah

Velikost v paměti

Ano/Ne

BOOLEAN

BOOLEAN | BIT

 

 

Binární pole (pevné)

BINARY

BINARY

Jako Integer

pevná

Binární pole

VARBINARY

VARBINARY

Jako Integer

proměnná

Image

LONGVARBINARY

LONGVARBINARY

Jako Integer

proměnná, určená pro větší obrázky

OTHER

OTHER

OTHER | OBJECT

 

 

V definicích tabulek a při změně datových typů v dotazech pomocí funkcí „convert“ nebo „cast“ se u některých datových typů očekává informace o počtu znaků (a), přesnosti (g, odpovídající celkovému počtu znaků) a počtu desetinných míst (d). Typy jsou CHAR(a), VARCHAR(a), DOUBLE(g), NUMERIC(g, d), DECIMAL(g, d) a TIMESTAMP(g).

TIMESTAMP(g) může nabývat pouze dvou hodnot: '0' a '6'. '0' znamená, že v desetinné části (desetiny, setiny...) nebudou uloženy žádné sekundy. Přesnost časových značek lze zadat pouze přímo pomocí příkazů SQL. Pokud tedy ukládáme časy z nějakého sportu, musíme předem nastavit TIMESTAMP(6) pomocí Nástroje > SQL.

Datové typy v LibreOffice Basic

Tabulka 6: Číselné datové typy

Typ

Odpovídá v HSQLDB

Výchozí hodnota

Poznámky

Požadavky na paměť

Integer

SMALLINT

0

216 = – 32768 až + 32767

2 bajty

Long

INTEGER

0

232 = – 2147483648 až + 2147483647

4 bajty

Single

 

0.0

Desetinný oddělovač: .

4 bajty

Double

DOUBLE

0.0

Desetinný oddělovač: .

8 bajtů

Currency

Připomíná DECIMAL, NUMERIC

0.0000

4 pevná desetinná místa

8 bajtů

Tabulka 7: Další datové typy

Typ

Odpovídá v HSQLDB

Výchozí hodnota

Poznámky

Požadavky na paměť

Boolean

BOOLEAN

False

1 = ano, vše ostatní: ne.

1 bajt

Datum

TIMESTAMP

00:00:00

Datum a čas

8 bajtů

String

VARCHAR

Prázdný řetězec

Až 65536 znaků

proměnná

Objekt

OTHER

Null

 

proměnná

Variant

 

Prázdné

Může přijmout jakýkoli (jiný) datový typ

proměnná

Převod dat představuje velké riziko, zejména v případě číselných hodnot. Například primární klíče v databázích jsou nejčastěji typu INTEGER. Pokud jsou tyto hodnoty načítány makrem, musí být proměnná, ve které jsou uloženy, typu Long, protože velikostně odpovídá typu INTEGER v Base. Odpovídající instrukce pro čtení je getLong.

Vestavěné funkce a uložené procedury

Ve vestavěné HSQLDB jsou k dispozici následující funkce. Jednu nebo dvě funkce však lze použít pouze při volbě Spustit SQL příkaz přímo. Tím se zabrání úpravě těchto dotazů.

Funkce, které pracují s grafickým uživatelským rozhraním, jsou označeny [Funguje v grafickém uživatelském rozhraní]. Funkce, které fungují pouze v přímých příkazech SQL, jsou označeny [Direct SQL – nefunguje v grafickém uživatelském rozhraní].

Číselné funkce

Poznámka

Protože se zde jedná o čísla s pohyblivou řádovou čárkou, dbejme na nastavení polí v dotazech. Zobrazení desetinných míst je většinou omezeno, takže v některých případech může dojít k neočekávaným výsledkům. Například ve sloupci 1 může být uvedeno 0,00, ale ve skutečnosti obsahuje 0,001 a ve sloupci 2 1000. Pokud je sloupec 3 nastaven tak, aby zobrazoval sloupec 1 * sloupec 2, zobrazí se ve skutečnosti 1.

Tabulka 8: Číselné funkce

Funkce

Popis

ABS(d)

Vrátí absolutní hodnotu čísla.
[Pracuje v grafickém uživatelském rozhraní]

ACOS(d)

Vrací arkuskosinus.
[Pracuje v grafickém uživatelském rozhraní]

ASIN(d)

Vrací arkussinus.
[Pracuje v grafickém uživatelském rozhraní]

ATAN(d)

Vrací arkustangens.
[Pracuje v grafickém uživatelském rozhraní]

ATAN2(a,b)

Vrátí arkustangens pomocí souřadnic, kde a je hodnota osy x, b hodnota osy y.
[Pracuje v grafickém uživatelském rozhraní]

BITAND(a,b)

Jak binární tvar a, tak binární tvar b musí mít na stejné pozici 1, aby výsledek byl 1.

BITAND(3,5) dává 1; 0011 AND 0101 = 0001
[Pracuje v grafickém uživatelském rozhraní]

BITOR(a,b)

Buď binární tvar a nebo binární tvar b musí mít na dané pozici jedničku, aby výsledkem byla jednička.

BITOR(3,5) yields 7; 0011 OR 0101 = 0111
[Pracuje v grafickém uživatelském rozhraní]

CEILING(d)

Vrací nejmenší celé číslo, které není menší než d.
[Pracuje v grafickém uživatelském rozhraní]

COS(d)

Vrací kosinus.
[Pracuje v grafickém uživatelském rozhraní]

COT(d)

Vrací kotangens.
[Pracuje v grafickém uživatelském rozhraní]

DEGREES(d)

Převádí radiány na stupně.
[Pracuje v grafickém uživatelském rozhraní]

EXP(d)

Vrací hodnotu d-té mocniny čísla e ( e: (2.718...) ).
[Pracuje v grafickém uživatelském rozhraní]

FLOOR(d)

Vrací největší celé číslo, které není větší než d.
[Pracuje v grafickém uživatelském rozhraní]

LOG(d)

Vrací přirozený logaritmus se základem e.
[Pracuje v grafickém uživatelském rozhraní]

LOG10(d)

Vrátí logaritmus se základem 10.
[Pracuje v grafickém uživatelském rozhraní]

MOD(a,b)

Vrátí zbytek jako celé číslo při dělení 2 celých čísel.

MOD(11,3) vrátí 2, protože 3*3+2=11
[Pracuje v grafickém uživatelském rozhraní]

PI()

Vrací π (3.1415...).
[Pracuje v grafickém uživatelském rozhraní]

POWER(a,b)

ab , POWER(2,3) = 8, protože 2 na 3 = 8
[Pracuje v grafickém uživatelském rozhraní]

RADIANS(d)

Převádí stupně na radiány.
[Pracuje v grafickém uživatelském rozhraní]

RAND()

Vrátí náhodné číslo větší nebo rovno 0,0 a menší než 1,0.
[Pracuje v grafickém uživatelském rozhraní]

ROUND(a,b)

Zaokrouhluje číslo a na b desetinných míst.
[Pracuje v grafickém uživatelském rozhraní]

ROUNDMAGIC(d)

Řeší problémy se zaokrouhlováním, které vznikají při používání čísel s pohyblivou řádovou čárkou. 3.11-3.1-0.01 není přesně 0, ale v grafickém rozhraní se zobrazuje jako 0. ROUNDMAGIC z ní udělá skutečnou nulovou hodnotu.
[Pracuje v grafickém uživatelském rozhraní]

SIGN(d)

Vrací –1, pokud je d menší než 0, 0, pokud je d rovno 0, a 1, pokud je d větší než 0.
[Pracuje v grafickém uživatelském rozhraní]

SIN(A)

Vrací sinus úhlu v radiánech.
[Pracuje v grafickém uživatelském rozhraní]

SQRT(d)

Vrací druhou odmocninu.
[Pracuje v grafickém uživatelském rozhraní]

TAN(A)

Vrací tangens úhlu v radiánech.
[Pracuje v grafickém uživatelském rozhraní]

TRUNCATE(a,b)

Zkrátí číslo a na b desetinných míst.

TRUNCATE(2.37456,2) = 2.37
[Pracuje v grafickém uživatelském rozhraní]

Textové funkce

Tabulka 9: Textové funkce

Funkce

Popis

ASCII(s)

Vrací kód ASCII prvního písmene řetězce.
[Pracuje v grafickém uživatelském rozhraní]

BIT_LENGTH(str)

Vrací délku textového řetězce str v bitech.
[Pracuje v grafickém uživatelském rozhraní]

CHAR(c)

Vrátí písmeno odpovídající ASCII kódu c.
[Pracuje v grafickém uživatelském rozhraní]

CHAR_LENGTH(str)

Vrací délku řetězce str ve znacích.
[Pracuje v grafickém uživatelském rozhraní]

CONCAT(str1,str2)

Spojí řetězce str1 a str2.
[Pracuje v grafickém uživatelském rozhraní]

'str1'||'str2'||'str3' nebo 'str1'+'str2'+'str3'

Spojí řetězce str1, str2 a str3. Jednodušší alternativa ke CONCAT.
[Pracuje v grafickém uživatelském rozhraní]

DIFFERENCE(s1,s2)

Vrací rozdíl v anglické výslovnosti mezi řetězci s1 a s2. Výstupem je pouze celé číslo. 0 znamená, že znějí stejně. Například „for“ a „four“ dávají 0, „king“ a „wing“ dávají 1, „see“ a „sea“ dávají 0.
[Pracuje v grafickém uživatelském rozhraní]

HEXTORAW(s1)

Převádí hexadecimální kód na jiné znaky.
[Pracuje v grafickém uživatelském rozhraní]

INSERT(s,start,len,s2)

Vrací textový řetězec s nahrazenou částí textu. Počínaje znakem "start" se z textu "s" vyřízne délka "len" a nahradí se textem "s2".

INSERT(„Bundesbahn“, 3, 4, mmel ) převede Bundesbahn na Bummelbahn, přičemž délka vloženého textu může být větší než délka odstraněného textu, aniž by to způsobilo nějaké problémy. Takže INSERT(„Bundesbahn“, 3, 5, s a B ) dává výsledek „Bus und Bahn“.
[Pracuje v grafickém uživatelském rozhraní]

LCASE(s)

Převede řetězec na malá písmena.
[Pracuje v grafickém uživatelském rozhraní]

LEFT(s,count)

Vrátí počet znaků zadaný pomocí count  od začátku řetězce s.
[Pracuje v grafickém uživatelském rozhraní]

LENGTH(s)

Vrací délku řetězce s ve znacích.
[Pracuje v grafickém uživatelském rozhraní]

LOCATE(search,s,[start])

Vrátí první shodu hledaného výrazu v řetězci s. Shoda je uvedena jako číslo posunu: (1 = vlevo, 0 = nenalezeno).

Nastavení počátečního bodu v rámci textového řetězce není povinné.
[Pracuje v grafickém uživatelském rozhraní]

LTRIM(s)

Odstraní počáteční mezery a netisknutelné znaky ze začátku textového řetězce.
[Pracuje v grafickém uživatelském rozhraní]

OCTET_LENGTH(str)

Vrací délku textového řetězce v bajtech. To odpovídá dvojnásobku délky řetězce.
[Pracuje v grafickém uživatelském rozhraní]

RAWTOHEX(s1)

Převádí na šestnáctková čísla, obráceně než HEXTORAW().
[Pracuje v grafickém uživatelském rozhraní]

REPEAT(s,count)

Opakuje textový řetězec s-krát.
[Pracuje v grafickém uživatelském rozhraní]

REPLACE(s,replace,s2)

Nahradí všechny existující výskyty slova replace v textovém řetězci s, řetězcem s2.
[Pracuje v grafickém uživatelském rozhraní]

RIGHT(s,count)

Opak funkce LEFT; vrací poslední počet znaků na konci textového řetězce.
[Pracuje v grafickém uživatelském rozhraní]

RTRIM(s)

Odstraní všechny mezery a netisknutelné znaky z konce textového řetězce.
[Pracuje v grafickém uživatelském rozhraní]

SOUNDEX(s)

Vrací čtyřznakový kód odpovídající zvuku s.  Shoduje se s funkcí DIFFERENCE().
[Pracuje v grafickém uživatelském rozhraní]

SPACE(count)

Vrací počet mezer.
[Pracuje v grafickém uživatelském rozhraní]

SUBSTR(s,start[,len])

Zkratka pro SUBSTRING.
[Pracuje v grafickém uživatelském rozhraní]

SUBSTRING(s,start[,len])

Vrací text s od počáteční pozice (1=vlevo). Pokud je délka len vynechána, je vrácen celý řetězec.
[Pracuje v grafickém uživatelském rozhraní]

UCASE(s)

Převede řetězec na velká písmena.
[Pracuje v grafickém uživatelském rozhraní]

LOWER(s)

Jako LCASE(s).
[Pracuje v grafickém uživatelském rozhraní]

UPPER(s)

Jako UCASE(s).
[Pracuje v grafickém uživatelském rozhraní]

Funkce data a času

Tabulka 10: Funkce data a času

Funkce

Popis

CURDATE()

Vrací aktuální datum.
[Pracuje v grafickém uživatelském rozhraní]

CURTIME()

Vrací aktuální čas.
[Pracuje v grafickém uživatelském rozhraní]

DATEDIFF(string, datetime1, datetime2)

Rozdíl data mezi dvěma daty – porovnává hodnoty data a času.

Položka v řetězci určuje jednotky, ve kterých se rozdíl vrací: ms=milisekunda, ss=sekunda, mi=minuta, hh=hodina, dd=den, mm=měsíc, yy=rok.

Pro řetězec lze použít jak dlouhou, tak krátkou formu.
[Pracuje v grafickém uživatelském rozhraní]

DAY(date)

Vrací den v měsíci (1-31).
[Pracuje v grafickém uživatelském rozhraní]

DAYNAME(date)

Vrací anglický název dne.
[Pracuje v grafickém uživatelském rozhraní]

DAYOFMONTH(date)

Vrátí den v měsíci (1-31). Synonymum pro DAY().
[Pracuje v grafickém uživatelském rozhraní]

DAYOFWEEK(date)

Vrátí den v týdnu jako číslo (1 představuje neděli).
[Pracuje v grafickém uživatelském rozhraní]

DAYOFYEAR(date)

Vrátí den v roce (1-366).
[Pracuje v grafickém uživatelském rozhraní]

HOUR(time)

Vrací hodinu (0-23).
[Pracuje v grafickém uživatelském rozhraní]

MINUTE(time)

Vrací minutu (0-59).
[Pracuje v grafickém uživatelském rozhraní]

MONTH(date)

Vrací měsíc (1-12).
[Pracuje v grafickém uživatelském rozhraní]

MONTHNAME(date)

Vrací anglický název měsíce.
[Pracuje v grafickém uživatelském rozhraní]

NOW()

Vrátí aktuální datum a aktuální čas společně jako časové razítko. Alternativně lze použít CURRENT_TIMESTAMP.
[Pracuje v grafickém uživatelském rozhraní]

QUARTER(date)

Vrátí čtvrtletí roku (1-4).
[Pracuje v grafickém uživatelském rozhraní]

SECOND(time)

Vrací sekundovou část času (0-59).
[Pracuje v grafickém uživatelském rozhraní]

WEEK(date)

Vrátí týden v roce (1-53).
[Pracuje v grafickém uživatelském rozhraní]

YEAR(date)

Vrátí část roku v položce data.
[Pracuje v grafickém uživatelském rozhraní]

CURRENT_DATE

Synonymum pro CURDATE(), SQL-Standard.
[Pracuje v grafickém uživatelském rozhraní]

CURRENT_TIME

Synonymum pro CURTIME(), SQL-Standard.
[Pracuje v grafickém uživatelském rozhraní]

CURRENT_TIMESTAMP

Synonymum pro NOW(), SQL-Standard.
[Pracuje v grafickém uživatelském rozhraní]

Funkce připojení k databázi

Poznámka

Kromě funkce IDENTITY(), která nemá v Base žádný význam, lze všechny tyto příkazy provést pomocí přímého příkazu SQL.

Tabulka 11: Funkce připojení k databázi

Funkce

Popis

DATABASE()

Vrací název databáze, ke které toto připojení patří.
[Pracuje v grafickém uživatelském rozhraní]

USER()

Vrací uživatelské jméno tohoto připojení.
[Přímý SQL –
nefunguje s grafickým uživatelským rozhraním]

CURRENT_USER

Standardní funkce SQL, synonymum pro USER().
[Pracuje v grafickém uživatelském rozhraní]

IDENTITY()

Vrací poslední hodnotu pole automatické hodnoty, které bylo vytvořeno v aktuálním spojení. Používá se v makrech k převodu primárního klíče v jedné tabulce na cizí klíč pro jinou tabulku.
[Pracuje v grafickém uživatelském rozhraní]

Funkce systému

Tabulka 12: Systémové funkce

Funkce

Popis

IFNULL(exp,value)

Pokud je exp NULL, vrátí se value, jinak se vrátí exp. Alternativně lze jako rozšíření použít funkci COALESCE(). Exp a value musí mít stejný datový typ.
[Funguje v grafickém uživatelském rozhraní]

CASEWHEN(exp,v1,v2)

Pokud je exp true, vrátí se v1, jinak v2. Alternativně lze použít CASE WHEN. CASE WHEN funguje lépe s grafickým uživatelským rozhraním.
[Funguje v grafickém uživatelském rozhraní]

CONVERT(term,type)

Převede term na jiný datový typ.
[Funguje v grafickém uživatelském rozhraní]

CAST(term AS type)

Synonymum pro CONVERT().
[Funguje v grafickém uživatelském rozhraní]

COALESCE(expr1,expr2,expr3,...)

Pokud expr1 není NULL, vrátí se expr1, jinak se zkontroluje expr2, pak expr3 atd.
[Funguje v grafickém uživatelském rozhraní]

NULLIF(v1,v2)

Pokud se v1 rovná v2, vrátí se NULL, jinak se vrátí v1.
[Funguje v grafickém uživatelském rozhraní]

CASE v1 WHEN v2 THEN v3 [ELSE v4] END

Pokud se v1 rovná v2, je vrácena hodnota v3. V opačném případě je vrácena hodnota v4 nebo NULL, pokud neexistuje podmínka ELSE.
[Přímý SQL –
nefunguje s grafickým uživatelským rozhraním]

CASE WHEN expr1 THEN v1[WHEN expr2 THEN v2] [ELSE v4] END

Pokud je expr1 true, vrátí se  v1 [volitelně lze nastavit další podmínky]. V opačném případě je vrácena hodnota v4 nebo NULL, pokud neexistuje podmínka ELSE.
[Funguje v grafickém uživatelském rozhraní]

EXTRACT ({YEAR | MONTH | DAY | HOUR | MINUTE | SECOND} FROM <datum nebo čas>)

Může nahradit mnoho funkcí data a času. Vrátí rok,  měsíc, den atd. z data nebo hodnoty data a času.
[Funguje v grafickém uživatelském rozhraní]

POSITION(<řetězcový výraz> IN <řetězcový výraz>)

Pokud je první řetězec obsažen v druhém, je uvedena odchylka prvního řetězce, jinak je vrácena 0.
[Funguje v grafickém uživatelském rozhraní]

SUBSTRING(<řetězcový výraz> FROM <číselný výraz> [FOR <číselný výraz>])

Vytvoří část textového řetězce od pozice zadané ve FROM, volitelně až do délky zadané ve FOR.
[Funguje v grafickém uživatelském rozhraní]

TRIM([{LEADING | TRAILING | BOTH}] FROM <řetězcový výraz>)

Netisknutelné speciální znaky a mezery jsou odstraněny.
[Funguje v grafickém uživatelském rozhraní]

Řídicí znaky pro použití v dotazech

Pole lze v dotazech propojovat. Dvě pole v

SELECT "Jméno", "Příjmení" FROM "Tabulka"

se stanou jedním polem pomocí:

SELECT "Jméno"||' '||"Příjmení" FROM "Tabulka"

Zde se vkládá další mezera. Může to být jakýkoli znak; pokud je uzavřen v '', bude interpretován jako text. Někdy je však nutné vložit netisknutelné znaky, například nové řádky, například při přípravě zpráv. Zde je krátký seznam řídících znaků. Více informací o nich najdeme na https://en.wikipedia.org/wiki/Control_character.

Tabulka 13: Řídicí znaky pro použití v dotazech

Kód

Název

Poznámky

CHAR( 9 )

Vodorovný tabulátor

 

CHAR( 10 )

Posun o řádku

V dopisech hromadné korespondence a v nástroji Návrhář sestav vytvoří zalomení řádku (Linux, Unix, Mac).

CHAR( 13 )

CR - carriage return (návrat vozíku)

Zalomení řádku v kombinaci s Carriage return v systému Windows CHAR(13)||CHAR(10).
Lze použít i v systémech Linux a Mac, proto univerzální varianta.

Některé příkazy UNO pro použití s tlačítkem

Tlačítko může mít přímo navázány různé příkazy UNO. Za tímto účelem je třeba zvolit Vlastnosti: Tlačítko > Činnost > Otevřít dokument / webovou stránku a pak například URL > .uno:RecSearch, aby se otevřela funkce vyhledávání. Často je třeba zvolit Při kliknutí získat zaměření > Ne, pokud akce přistupuje přímo k jinému ovládacímu prvku způsobem, který vyžaduje, aby byl v zaměření, například .uno:Paste, který může vložit obsah schránky.

Následující seznam obsahuje pouze několik příkazů. Všechny příkazy z nástrojové lišty navigace jsou již použitelné v tlačítku, ale lze je také vytvořit pomocí příkazů UNO. Mnoho příkazů lze zjistit pomocí záznamníku maker, který k nim často používá dispečera.

Tabulka 14: Ukázkové příkazy UNO

Příkaz UNO

Používá se pro ...

.uno:RecSearch

Otevření funkce vyhledávání ve formuláři.

.uno:Paste

Vložit ze schránky. Funguje pouze pro Při kliknutí získat zaměření > Ne

.uno:Copy

Zkopíruje vybraný obsah do schránky. Funguje pouze pro Při kliknutí získat zaměření > Ne

.uno:Print

Otevření dialogového okna pro tisk formuláře.

.uno:PrintDefault

Tisk na výchozí tiskárně bez zobrazení dialogového okna.

Informační tabulky pro HSQLDB

Uvnitř databáze jsou informace o všech vlastnostech tabulek a jejich vzájemných vazbách uloženy v oblasti INFORMATION_SCHEMA. Tyto informace umožňují vytvářet makra v aplikaci Base, která pro své procedury vyžadují jen velmi málo argumentů. Aplikace je uvedena v příkladové databázi v modulu Údržba – procedura Table_purge pro kontrolu dialogových oken.

V dotazu lze jednotlivé informace a všechna pole, která k nim patří, zadat následujícím způsobem:

SELECT * FROM ″INFORMATION_SCHEMA″.″SYSTEM_ALIASES″

Na rozdíl od běžné tabulky je zde nutné použít INFORMATION_SCHEMA jako předponu k  příslušnému názvu z následujícího seznamu:

SYSTEM_ALIASES

SYSTEM_ALLTYPEINFO

SYSTEM_BESTROWIDENTIFIER

SYSTEM_CACHEINFO

SYSTEM_CATALOGS

SYSTEM_CHECK_COLUMN_USAGE

SYSTEM_CHECK_CONSTRAINTS

SYSTEM_CHECK_ROUTINE_USAGE

SYSTEM_CHECK_TABLE_USAGE

SYSTEM_CLASSPRIVILEGES

SYSTEM_COLUMNPRIVILEGES

SYSTEM_COLUMNS

SYSTEM_CROSSREFERENCE

SYSTEM_INDEXINFO

SYSTEM_PRIMARYKEYS

SYSTEM_PROCEDURECOLUMNS

SYSTEM_PROCEDURES

SYSTEM_PROPERTIES

SYSTEM_SCHEMAS

SYSTEM_SEQUENCES

SYSTEM_SESSIONINFO

SYSTEM_SESSIONS

SYSTEM_SUPERTABLES

SYSTEM_SUPERTYPES

SYSTEM_TABLEPRIVILEGES

SYSTEM_TABLES

SYSTEM_TABLETYPES

SYSTEM_TABLE_CONSTRAINTS

SYSTEM_TEXTTABLES

SYSTEM_TRIGGERCOLUMNS

SYSTEM_TRIGGERS

SYSTEM_TYPEINFO

SYSTEM_UDTATTRIBUTES

SYSTEM_UDTS

SYSTEM_USAGE_PRIVILEGES

SYSTEM_USERS

SYSTEM_VERSIONCOLUMNS

SYSTEM_VIEWS

SYSTEM_VIEW_COLUMN_USAGE

SYSTEM_VIEW_ROUTINE_USAGE

SYSTEM_VIEW_TABLE_USAGE

Následující dotaz poskytuje úplný přehled všech tabulek v databázi s typy polí, primárními klíči a cizími klíči:

SELECT
"A"."TABLE_NAME",
"A"."COLUMN_NAME",
"A"."TYPE_NAME",
"A"."NULLABLE",
"B"."KEY_SEQ" AS "PRIMARYKEY",
"C"."PKTABLE_NAME" || '.' || "C"."PKCOLUMN_NAME" AS "FOREIGNKEY FOR"
FROM "INFORMATION_SCHEMA"."SYSTEM_COLUMNS" AS "A"
  
LEFT JOIN "INFORMATION_SCHEMA"."SYSTEM_PRIMARYKEYS" AS "B"
  
ON ( "B"."TABLE_NAME" = "A"."TABLE_NAME" AND "B"."COLUMN_NAME" =
  
"A"."COLUMN_NAME" )
  
LEFT JOIN "INFORMATION_SCHEMA"."SYSTEM_CROSSREFERENCE" AS "C"
  
ON ( "C"."FKTABLE_NAME" = "A"."TABLE_NAME" AND
  
"C"."FKCOLUMN_NAME"    = "A"."COLUMN_NAME" )
WHERE "A"."TABLE_SCHEM" = 'PUBLIC'

Oprava databáze pro soubory *.odb

Pravidelné zálohování dat by mělo být při používání počítače standardem. Záložní kopie jsou nejjednodušším způsobem, jak se vrátit k napůl aktuálnímu stavu dat. V praxi to však často chybí.

Formuláře, dotazy a sestavy lze vždy zkopírovat pomocí schránky do nové databáze, pokud byla uložena předchozí verze databáze. Pokud však z nějakého důvodu již nelze aktuální databázi otevřít, hlavním problémem se stává přístup k datům.

V případě náhlého selhání počítače se může stát, že otevřené databáze (interní databáze HSQLDB) již nelze v LibreOffice otevřít. Místo toho se při pokusu o otevření databáze zobrazí dotaz na filtr odpovídající formátu.

Problém spočívá v tom, že část dat v otevřené databázi je obsažena v pracovní paměti a do mezipaměti se kopíruje pouze dočasně. Teprve po uzavření souboru je celá databáze zapsána zpět do souboru a znovu zabalena.

Obnovení archivačního souboru databáze

Pro opětovné získání přístupu k datům může být užitečný následující postup:

  1. Vytvoříme kopii databáze pro následující kroky.

  2. Zkusíme kopii otevřít pomocí archivačního programu. V případě souborů *.odb se jedná o komprimovaný formát, archiv Zip. Pokud soubor nelze otevřít přímo, zkusíme jej přejmenovat z  *.odb na *.zip. Pokud se neotevře, je naše databáze již neuložená.

  3. Po otevření databázového souboru v archivačním programu se vždy zobrazí následující složky:

Grafik2

Obrázek 2: Základní struktura souborů komprimovaných do souboru ODB pro "prázdnou" databázi

  1. Soubor databáze musí být dekomprimován. Nejdůležitější informace, pokud jde o data, jsou v podsložce databáze v souborech datascript.

  2. Možná bude nutné se podívat do souboru script a otestovat, zda v něm nejsou rozpory. Tento krok však lze ponechat na fázi testování. Soubor script obsahuje především popis struktury tabulky.

  3. Vytvoříme nový prázdný databázový soubor a otevřeme jej pomocí archivačního programu.

  4. Nahradíme soubory datascript v novém databázovém souboru soubory rozbalenými v kroku 4.

  5. Zavřeme archivační program. Pokud bylo nutné soubor před otevřením v archivačním programu přejmenovat na *.zip (záleží na operačním systému), přejmenujeme jej nyní znovu na *.odb.

  6. Otevřeme databázový soubor v LibreOffice. Měli bychom mít opět přístup ke svým tabulkám.

  7. Jak velkou část dotazů, formulářů a sestav lze podobným způsobem obnovit, je třeba dále testovat.

Viz také: http://forum.openoffice.org/en/forum/viewtopic.php?f=83&t=17125

Další informace o archivačních souborech databáze

V praxi obsahuje archivní soubor databáze nejen základní složku pro databázi a složku META-INF, která je určena pro formát OpenDocument, ale také další složky pro ukládání formulářů a sestav. Popis základní struktury formátu OpenDocument najdeme na adrese https://en.wikipedia.org/wiki/OpenDocument_technical_specification.

Následující pohled zobrazuje databázi obsahující tabulky, formulář a sestavu. Není zřejmé, že databáze obsahuje také dotaz. Dotazy nejsou uloženy v samostatných složkách, ale v souboru content.xml. Informace potřebné ke spuštění dotazu jsou jednoduché části kódu SQL.

Image1

Obrázek 3: Databázový soubor obsahující kromě tabulek a dotazů také uložené informace pro formulář a sestavu

Zde je náhled jednoho z archivních souborů databáze.

mimetype

application/vnd.oasis.opendocument.base

eine

 

Tento malý textový soubor obsahuje pouze upozornění, že tento archivní soubor je databázový soubor ve formátu OpenDocument.

content.xml pro databázi bez obsahu

<?xml version="1.0" encoding="UTF-8"?>
<office:document-content
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML"
xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
xmlns:ooo="http://openoffice.org/2004/office"
xmlns:ooow="http://openoffice.org/2004/writer"
xmlns:oooc="http://openoffice.org/2004/calc"
xmlns:dom="http://www.w3.org/2001/xml-events"
xmlns:db="urn:oasis:names:tc:opendocument:xmlns:database:1.0" xmlns:xforms="http://www.w3.org/2002/xforms"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:rpt="http://openoffice.org/2005/report"
xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:grddl="http://www.w3.org/2003/g/data-view#"
xmlns:tableooo="http://openoffice.org/2009/table"
xmlns:drawooo="http://openoffice.org/2010/draw"
xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/"
office:version="1.2">
  
<office:scripts/>
  
<office:font-face-decls/>
  
<office:automatic-styles/>
  
<office:body>
     
<office:database>
        
<db:data-source>
           
<db:connection-data>
              
<db:connection-resource xlink:href="sdbc:embedded:hsqldb"/>
              
<db:login db:is-password-required="false"/>
           
</db:connection-data>
           
<db:driver-settings
              
db:system-driver-settings=""
              
db:base-dn=""
              
db:parameter-name-substitution="false"/>
           
<db:application-connection-settings
              
db:is-table-name-length-limited="false"
              
db:append-table-alias-name="false"
              
db:max-row-count="100">
              
<db:table-filter>
                 
<db:table-include-filter>
                    
<db:table-filter-pattern>%</db:table-filter-pattern>
                 
</db:table-include-filter>
              
</db:table-filter>
           
</db:application-connection-settings>
        
</db:data-source>
     
</office:database>
  
</office:body>
</office:document-content>

Začíná verzí XML a použitou znakovou sadou. Vše, co následuje, je vlastně jeden nezalomený řádek. Výše připravený pohled by měl vše objasnit. Prvky, které patří k sobě, jsou označeny značkami.

Počáteční definice začínající xmlns: (jmenný prostor XML) udávají jmenné prostory, ke kterým lze přistupovat zevnitř souboru. Pak se uvažuje o poněkud konkrétnějších pojmech. Zde je zřejmé, že máme co do činění s interní databází HSQLDB a že pro přístup není vyžadováno heslo.

content.xml pro databázi s obsahem

Následující obsah je pouze výňatkem ze souboru content.xml, aby byla jasná jeho struktura.

<office:scripts/>
<office:font-face-decls>
  
<style:font-face style:name="F" svg:font-family=""/>
</office:font-face-decls>
<office:automatic-styles>
  
<style:style
     
style:name="co1"
     
style:family="table-column"
     
style:data-style-name="N0"/>
  
<style:style
     
style:name="co2"
     
style:family="table-column"
     
style:data-style-name="N107"/>
  
<style:style style:name="ce1" style:family="table-cell">
     
<style:paragraph-properties fo:text-align="start"/>
  
</style:style>
  
<number:number-style style:name="N0" number:language="de" number:country="DE">
     
<number:number number:min-integer-digits="1"/>
  
</number:number-style>
  
<number:currency-style
     
style:name="N107P0"
     
style:volatile="true"
     
number:language="de"
     
number:country="DE">
     
<number:number
        
number:decimal-places="2"
        
number:min-integer-digits="1"
        
number:grouping="true"/>
     
<number:text> </number:text>
     
<number:currency-symbol
        
number:language="de"
        
number:country="DE">
     
</number:currency-symbol>
  
</number:currency-style>

Zde je pole definováno jako pole měny. Uvádí se počet desetinných míst, odstup mezi čísly a symbolem měny a samotný symbol měny. V níže uvedeném příkladu se měna a národní prostředí vztahují k Německu.

   <number:currency-style
     
style:name="N107"
     
number:language="de"
     
number:country="DE">
    
 <style:text-properties fo:color="#ff0000"/>
    
 <number:text>-</number:text>
    
 <number:number
       
 number:decimal-places="2"
       
 number:min-integer-digits="1"
       
 number:grouping="true"/>
    
 <number:text> </number:text>
    
 <number:currency-symbol
       
 number:language="de"
       
 number:country="DE">€
   
  </number:currency-symbol>
   
  <style:map style:condition="value()&gt;=0" style:apply-style-name="N107P0"/>
  </number:currency-style>

Druhý výpis uvádí, že do určité hodnoty by se měna měla zobrazovat červeně („ff0000“).

</office:automatic-styles>
<office:body>
  
<office:database>
     
<db:data-source>

Tato položka z výše uvedeného souboru content.xml se všemi svými podpoložkami odpovídá prázdnému souboru archivu databáze.

      </db:data-source>
     
<db:forms>
        
<db:component
           
db:name="Receipts"
           
xlink:href="forms/Obj12"
           
db:as-template="false"/>
     
</db:forms>

Soubor archivu databáze obsahuje podsekci, ve kterém jsou uloženy podrobnosti formuláře. Formulář je v uživatelském rozhraní označen jako Receipts.

      <db:reports>
        
<db:component
           
db: name="Receipts"
           
xlink:href="reports/Obj12"
           
db:as-template="false"/>
     
</db:reports>

Soubor archivu databáze obsahuje také podsekci, ve kterém jsou uloženy podrobnosti o sestavě. Tato sestava je v uživatelském rozhraní označena také jako Receipts.

      <db:queries>
        
<db:query
           
db:name="Sales_calc"
           
db:command="SELECT &quot;a&quot;.*, ( SELECT &quot;Price&quot; *
              
&quot;a&quot;.&quot;Total&quot; FROM &quot;Stock&quot; WHERE
              
&quot;ID&quot; = &quot;a&quot;.&quot;Stock_ID&quot; ) AS
              
&quot;Total*Price&quot; FROM &quot;Sales&quot; AS &quot;a&quot;"/>
     
</db:queries>

Všechny dotazy jsou uloženy přímo v souboru content.xml. &quot; znamená dvojité uvozovky. Výše uvedený dotaz v tomto příkladu je ve skutečnosti poměrně složitý a obsahuje mnoho korelovaných poddotazů. Zde jej uvádíme ve zkrácené podobě.

      <db:table-representations>
        
<db:table-representation db:name="Receipts"/>
        
<db:table-representation db:name="Sales"/>
        
<db:table-representation db:name="Stock">
           
<db:columns>
              
<db:column
                 
db:name="ID"
                 
db:style-name="co1"
                 
db:default-cell-style-name="ce1"/>
              
<db:column
                 
db:name="MWSt"
                 
db:style-name="co1"
                 
db:gefault-cell-style-name="ce1"/>
              
<db:column
                 
db:name="Price"
                 
db:style-name="co2"
                 
db:default-cell-style-name="ce1"/>
              
<db:column
                 
db:name="Stock"
                 
db:style-name="co1"
                 
db:default-cell-style-name="ce1"/>
           
</db:columns>
        
</db:table-representation>
     
</db:table-representations>

To ukazuje, jak se mají zobrazovat různé tabulky. Zde jsou uloženy vlastnosti zobrazení jednotlivých sloupců: v tomto příkladu jsou uložena nastavení pro tabulku Stock s jejími poli – ID, MWSt atd.. Zřejmě zde bylo něco přímo zadáno, čímž se trochu změnily sloupce tabulky.

   </office:database>
</office:body>

V souboru content.xml je v podstatě přímo uložen obsah dotazů a informace o vizuálním vzhledu tabulek. Dále je zde definice připojení k databázi. Nakonec přicházejí informace o formulářích a sestavách.

settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<office:document-settings
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="http://www.w3.org/2000/svg" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
xmlns:ooo="http://openoffice.org/2004/office" xmlns:db="urn:oasis:names:tc:opendocument:xmlns:database:1.0"
office:version="1.2"/>

U databáze bez dalšího obsahu jsou zde uloženy pouze základní definice. S obsahem se ukládají také různá nastavení. Po spuštění výše uvedené definice se uloží následující nastavení z ukázkové databáze.

<office:settings>
  
<config:config-item-set config:name="ooo:view-settings">
     <config:config-item-set config:name="Queries">
        
<config:config-item-set config:name="Calculate_sales">
           
<config:config-item-set config:name="Tables">
              
<config:config-item-set config:name="Table1">
                 
<config:config-item config:name="WindowName"
                    
config:type="string">Verkauf</config:config-item>
                 
<config:config-item config:name="WindowLeft"
                    
config:type="int">153</config:config-item>
                 
<config:config-item config:name="ShowAll"
                    
config:type="boolean">true</config:config-item>
                 
<config:config-item config:name="WindowTop"
                    
config:type="int">17</config:config-item>
                 
<config:config-item config:name="WindowWidth"
                    
config:type="int">120</config:config-item>
                 
<config:config-item config:name="WindowHeight"
                    
config:type="int">120</config:config-item>
                 
<config:config-item config:name="ComposedName"
                    
config:type="string">Verkauf</config:config-item>
                 
<config:config-item config:name="TableName"
                    
config:type="string">Verkauf</config:config-item>
              
</config:config-item-set>
           
</config:config-item-set>
           
<config:config-item config:name="SplitterPosition"
              
config:type="int">105</config:config-item>
           
<config:config-item config:name="VisibleRows"
              
config:type="int">1024</config:config-item>
        
</config:config-item-set>
     
</config:config-item-set>
  
</config:config-item-set>
  
<config:config-item-set config:name="ooo:configuration-settings">
     
<config:config-item-set config:name="layout-settings">
        
<config:config-item-set config:name="Tables">
           
<config:config-item-set config:name="Table1">
              
<config:config-item config:name="WindowName"
                 
config:type="string">Verkauf</config:config-item>
              
<config:config-item config:name="WindowLeft"
                 
config:type="int">186</config:config-item>
              
<config:config-item config:name="ShowAll"
                 
config:type="boolean">false</config:config-item>
              
<config:config-item config:name="WindowTop"
                 
config:type="int">17</config:config-item>
              
<config:config-item config:name="WindowWidth"
                 
config:type="int">120</config:config-item>
              
<config:config-item config:name="WindowHeight"
                 
config:type="int">120</config:config-item>
              
<config:config-item config:name="ComposedName"
                 
config:type="string">Verkauf</config:config-item>
              
<config:config-item config:name="TableName"
                 
config:type="string">Sales</config:config-item>
           
</config:config-item-set>
           
<config:config-item-set config:name="Table2">
              
... (identical config:type-Points as "Table1"
              
<config:config-item config:name="TableName"
                 
config:type="string">Ware</config:config-item>
           
</config:config-item-set>
           
<config:config-item-set config:name="Table3">
              
... (identical config:type-Points as "Table1"
              
<config:config-item config:name="TableName"
                 
config:type="string">Receipts</config:config-item>
           
</config:config-item-set>
        
</config:config-item-set>
     
</config:config-item-set>
  
</config:config-item-set>
</office:settings>

Celý přehled se týká různých zobrazení oken pro dotaz Calculate_sales a tabulek Sales, Stock a Receipts. Poslední dvě jsou zde uvedeny ve zkrácené podobě. Pokud by tato nastavení v chybném souboru *.odb chyběla, nevadilo by to. Při dalším otevření příslušného okna by se znovu vytvořila.

META-INF/manifest.xml

<?xml version="1.0" encoding="UTF-8"?>
<manifest:manifest    
  
xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0">
  
<manifest:file-entry
     
manifest:full-path="/"
     
manifest:media-type="application/vnd.oasis.opendocument.base"/>
  
<manifest:file-entry
     
manifest:full-path="database/script"
     
manifest:media-type=""/>
  
<manifest:file-entry
     
manifest:full-path="database/properties"
     
manifest:media-type=""/>
  
<manifest:file-entry
     
manifest:full-path="settings.xml"
     
manifest:media-type="text/xml"/>
  
<manifest:file-entry
     
manifest:full-path="content.xml"
     
manifest:media-type="text/xml"/>
</manifest:manifest>

Tento soubor ve složce META-INF udává složku s obsahem celého archivu databáze. Protože tento soubor pracuje s prázdnou databází, je v něm pouze pět položek. Databázový archiv, který obsahuje formuláře a sestavy, bude mít mnohem složitější soubor META-INF.

database/properties

#HSQL Database Engine 1.8.0.10

#Sun Jul 14 18:02:08 CEST 2013

hsqldb.script_format=0

runtime.gc_interval=0

sql.enforce_strict_size=true

hsqldb.cache_size_scale=8

readonly=false

hsqldb.nio_data_file=false

hsqldb.cache_scale=13

version=1.8.0

hsqldb.default_table_type=cached

hsqldb.cache_file_scale=1

hsqldb.lock_file=true

hsqldb.log_size=10

modified=no

hsqldb.cache_version=1.7.0

hsqldb.original_version=1.8.0

hsqldb.compatible_version=1.8.0

Soubor vlastností obsahuje základní nastavení interní databáze HSQLDB.

database/script

SET DATABASE COLLATION "German"

CREATE SCHEMA PUBLIC AUTHORIZATION DBA

CREATE USER SA PASSWORD ""

GRANT DBA TO SA

SET WRITE_DELAY 60

Soubor skriptu obsahuje výchozí nastavení pro připojení k databázi, nastavení jazyka atd. Zde se objeví uživatel SA, který bude popsán později.

V databázi s obsahem obsahuje tento soubor základní definice tabulek.

SET DATABASE COLLATION "German"
CREATE SCHEMA PUBLIC AUTHORIZATION DBA

Tabulky jsou definovány před definicí uživatele databáze. Nejprve se v mezipaměti vytvoří tabulky se svými poli.

CREATE CACHED TABLE "Stock"
  
("ID" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL
  
PRIMARY KEY,"Stock" VARCHAR(50),"Price" DECIMAL(8,2),"MWSt" TINYINT)

CREATE CACHED TABLE "Sales"
  
("ID" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL
  
PRIMARY KEY,"Total" TINYINT,"Stock_ID" INTEGER,"Receipt_ID" INTEGER,
  
CONSTRAINT SYS_FK_59 FOREIGN KEY("Stock_ID") REFERENCES "Stock"("ID"))

CREATE CACHED TABLE "Receipts"
  
("ID" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL
  
PRIMARY KEY,"Date" DATE)

Poté se provedou změny v tabulce, aby se zajistila konzistence relací (REFERENCES).

ALTER TABLE "Sales" ADD CONSTRAINT SYS_FK_76 FOREIGN KEY("Receipt_ID")
  
REFERENCES "Receipts"("ID")

SET TABLE "Stock" INDEX'608 20'

SET TABLE "Sales" INDEX'1872 1656 1872 12'

SET TABLE "Receipts" INDEX'2232 1'

Po nastavení pozice indexu v datovém souboru (zde se objevuje pouze v souboru skriptu, ale nikdy se nezadává přímo v SQL) se automaticky inkrementující pole v tabulkách (automatické hodnoty) nastaví tak, aby při zadání nového záznamu poskytovala další hodnotu. Předpokládejme, že poslední zadaná hodnota v poli ID tabulky Stock je 19. Automatické zvyšování pak začíná na hodnotě 20.

ALTER TABLE "Stock" ALTER COLUMN "ID" RESTART WITH 20
ALTER TABLE "Sales" ALTER COLUMN "ID" RESTART WITH 12
ALTER TABLE "Receipts" ALTER COLUMN "ID" RESTART WITH 1
CREATE USER SA PASSWORD ""
GRANT DBA TO SA
SET WRITE_DELAY 60

Správa interní databáze Firebird

Interní databáze Firebird je v současné době k dispozici pouze jako experimentální funkce. Chceme-li vytvořit takovou databázi nebo upravit již vytvořenou, musíme vybrat Nástroje > Možnosti > LibreOffice > Pokročilé > Volitelné (Nestabilní) možnosti > Povolit experimentální funkce.

Následující odkaz umožňuje nahlásit významné chyby v interní databází Firebird a řešit je společně s týmem LibreOffice: Hlášení chyb pro Firebird v aplikace Base.

Uživatelé si oproti HSQLDB všimnou následujících rozdílů:

  1. Pokud je poli přidělen typ Integer a je deklarováno jako primární klíč, zdá se, že je možné mu přidělit automaticky se zvyšující hodnotu. Při uložení však toto nastavení bez upozornění zmizí.

  2. Při zadávání nových záznamů se tyto záznamy automaticky neukládají do databáze. Tlačítko Uložit je třeba použít pro každou položku. Ve vestavěné HSQLDB není explicitní ukládání záznamů nutné.

  3. Aliasy jsou v dotazech zcela ignorovány. Alias lze vytvořit, ale nezobrazí se v záhlaví tabulky dotazu.

  4. Není možné vytvářet podmínky, ačkoli je externí databáze Firebird podporují.

  5. Desetinné a číselné datové typy jsou v současné době chybné.  Tyto typy jsou jediné, které zajišťují přesné hodnoty, zejména pokud se jedná o desetinná místa. Proto jsou preferovanými poli pro hodnoty měn. V současné době lze zadávat pouze hodnoty s nejvýše jedním desetinným místem.

Zpřístupnění automatických hodnot

Následující kód zadaný pomocí Nástroje > SQL může pomoci vyřešit problém s neposkytováním automatických hodnot.

CREATE TABLE "Table1" ( "ID" INTEGER NOT NULL PRIMARY KEY, "Name" VARCHAR(20) NOT NULL );

CREATE GENERATOR GEN_T1_ID;

SET GENERATOR GEN_T1_ID TO 0;

Poté je třeba zavřít okno pro zadávání SQL a vybrat Pohled > Obnovit tabulky. Teprve když se tabulka objeví a v některých případech až po (neúspěšném) pokusu o vytvoření záznamu, lze vytvořit následující spouštěč.

CREATE TRIGGER T1_BI FOR "Table1" ACTIVE BEFORE INSERT POSITION 0 AS
BEGIN
IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(GEN_T1_ID, 1);
END;

I poté lze v tabulce vytvořit mnoho záznamů v položce Name, aniž by byl vytvořen záznam v položce ID. V poli ID se zobrazuje pouze 0. Teprve po stisknutí tlačítka Update se zobrazí skutečně přiřazené hodnoty. Spouštěč poskytuje hodnoty začínající číslicí 1.

Obsah