Vysoká škola ekonomická v Praze Fakulta informatiky a statistiky Vyšší odborná škola informačních služeb v Praze
Petr Soukup
Možnosti publikace informací z databáze Microsoft Office Access na web Bakalářská práce
2010
Poděkování Na tomto místě bych rád poděkoval vedoucímu bakalářské práce Ing. Davidu Klimánkovi, Ph.D. za čas věnovaný při konzultačních hodinách a některé připomínky k práci. Dále děkuji rodině za podporu a trpělivost.
Prohlášení Prohlašuji, že jsem bakalářskou práci na téma Možnosti publikace informací z databáze Microsoft Office Access na web zpracoval samostatně a použil pouze zdrojů, které cituji a uvádím v seznamu použité literatury.
V Praze dne 30.6.2010
Podpis
Abstrakt Bakalářská práce se zabývá možnostmi publikace informací z databáze Microsoft Office Access 2003 na web. Cílem této práce je popsat dostupná řešení pro manipulaci s daty a dále způsob, jakým se dají data publikovat na webovou stránku. V práci popisuji některé vlastnosti databáze Microsoft Office Access související s tématem, technickou specifikaci databáze, dále některé z programových metod pro přístup k databázi. Součástí práce je praktická ukázka, která ověřuje teoretický rozbor problematiky. Pro praktické řešení úlohy využívám jednak technologie lokálního serveru IIS osobního počítače od společnosti Microsoft, dále používám veřejné webové servery s implementovanou technologií ASP.NET, ASP a PHP.
Abstract This bachelor thesis focuses on opportunitiy of publishing information from the Microsof Office Access 2003 database on web. The first aim of this thesis is to describe available solution for manipulating with data and the second is to find a way, how the data can be published on web sites. In this thesis I describe some attribute of database Microsoft Office Access related to the theme, technic specification of database, and next some of programe methods for access to database. A part of the thesis is a demonstration, which tests a teorethical analyse of problems. For a demonstration of this theme I use techlonogy of local server IIS on local computer from the Microsoft Corporation, next I use technology Public Web Servers with implementated technology ASP.NET, ASP and PHP.
1 Obsah 1
OBSAH .............................................................................................................................................. 6
2
ÚVOD ................................................................................................................................................ 8
3
TEORETICKÁ ČÁST...................................................................................................................... 9 3.1
OHLÉDNUTÍ DO MINULOSTI ........................................................................................................ 9
3.2
O PRODUKTU MS ACCESS ....................................................................................................... 10
3.2.1
MS Access jako RDBMS..................................................................................................... 12
3.2.2
Architektura MS Access...................................................................................................... 15
3.3
4
3.3.1
Statické webové stránky...................................................................................................... 20
3.3.2
Dynamické webové stránky ................................................................................................ 20
3.3.3
Datová stránka ................................................................................................................... 22
3.3.4
SharePoint.......................................................................................................................... 24
3.3.5
XML.................................................................................................................................... 26
PRAKTICKÁ ČÁST ...................................................................................................................... 30 4.1
NÁVRH A VYTVOŘENÍ DATABÁZE ............................................................................................ 30
4.1.1
Určení účelu databáze........................................................................................................ 30
4.1.2
Specifikace úloh, které bude databáze vykonávat (Analýza úloh) ...................................... 30
4.1.3
Konceptuální model databáze ............................................................................................ 31
4.1.4
Určení primárních klíčů ..................................................................................................... 32
4.1.5
Vytvoření relací mezi tabulkami......................................................................................... 32
4.1.6
Fyzický model databáze...................................................................................................... 32
4.1.7
Vytvoření databáze Receptář.............................................................................................. 33
4.2
STRUKTURA A UMÍSTĚNÍ WEBOVÉ APLIKACE ........................................................................... 38
4.2.1
Analýza serverových technologií pro publikaci webové aplikace ...................................... 38
4.2.2
Popis webové aplikace ....................................................................................................... 40
4.2.3
Struktura webové aplikace ................................................................................................. 40
4.3 4.3.1 4.4 4.4.1 4.5 4.5.1 5
NATIVNÍ ZPŮSOBY PREZENTACE DAT NA WEB Z DATABÁZE MS ACCESS ................................. 19
PREZENTACE V PROSTŘEDÍ ASP.NET...................................................................................... 41 Přístup k databázi MS Access v prostředí ASP.NET .......................................................... 41 PREZENTACE V PROSTŘEDÍ PHP .............................................................................................. 47 Přístup k databázi MS Access v prostředí PHP.................................................................. 47 PREZENTACE V PROSTŘEDÍ ASP .............................................................................................. 51 Přístup k databázi MS Access v prostředí ASP. ................................................................. 51
ZÁVĚR ............................................................................................................................................ 56 5.1
ZHODNOCENÍ MOŽNOSTÍ PUBLIKACE DAT NA WEBU................................................................. 56
5.2
MOŽNOSTI POUŽITÍ JINÝCH DATABÁZOVÝCH ZDROJŮ .............................................................. 56
6
6
SEZNAM POUŽITÝCH ZDROJŮ............................................................................................... 57
7
PŘÍLOHY ....................................................................................................................................... 60
7
2 Úvod Implementace databází do internetového prostředí je nezbytnou nutností pro snadnější práci s velkým množstvím informací. Současné elektronické datové základny jsou vysoce inteligentními a efektivními nástroji pro práci s daty. Využití databází v tržní společnosti usnadňuje prognózu budoucího vývoje podnikatelských subjektů. Databáze jsou využívány k operacím s daty pro business analýzy, orientaci ve výsledcích nebo pro plánování budoucích rozhodnutí společností. Možnost umístění databáze na internetovou síť přinesl až pokrok ve vývoji dynamických webových aplikací spolupracujících s databázemi. Hlavní podstata tématu mé práce spočívá v možnostech publikace dat z databáze Microsoft Office Access na web. K řešení tohoto úkolu využívám databázi Microsoft Office Access 2003. Práce je rozdělena na teoretickou a praktickou část. Praktická část se věnuje názorné ukázce. K ověření funkcionality zadaného tématu používám dostupné technologie operačních systémů Windows XP Professional a Windows 7. Testování webové aplikace provádím na lokálním serveru osobního počítače Microsoft IIS. Publikaci webové aplikace provádím na veřejných serverech s implementací technologie ASP.NET, ASP a PHP.
8
3 Teoretická část 3.1 Ohlédnutí do minulosti Na úvod teoretické části práce si dovolím ohlédnout se několik let zpět na počátky publikace informací na web. Začátkem tohoto vývoje byl výzkum komunikace mezi počítači na území USA. Počítačová síť byla zprvu vyvíjena pro armádní a akademické účely v období 50. let. V roce 1969 byla vytvořena síť ARPANET [18] využívající technologii přepojování paketů, považujeme ji za základní kámen sítě Internet, označovaného často termínem World Wide Web. Informace na Internetu jsou publikovány a zobrazovány pomocí informačního systému – hypertextu, hypertextových dokumentů, které umožňují snadné zobrazování, údržbu a vyhledávání informací a obsahují další odkazy na zdroje informací [4]. Internet je v dnešní době celosvětově rozšířené a enormně obsáhlé informační médium, sloužící jako zdroj informací také k obchodní činnosti nebo jako nástroj pro finanční subjekty. Tady nachází své uplatnění kromě staticky zobrazených textů právě možnost dynamického přístupu a práce s daty, která se ukládají do databází. Databáze se tedy stávají také zdrojem informací pro webové stránky. Je vytvářena řada aplikací pracujících nad databázemi. Existence dynamických nástrojů pro vytváření webových stránek umožňuje autorům stránek, společnostem publikujících své stránky a konečně ostatním uživatelům Internetu přinášet neustále nové čerstvé informace ze světa. Webové stránky spolupracující s databázemi informují denně potenciální zákazníky o nových výrobcích a jejich dostupnosti. Obecně lze databázi definovat jako nástroj pro shromáždění a uspořádání informací nebo uspořádanou množinu prvků (dat, informací, atd.) uloženou na paměťovém médiu. Za historickou primitivní databázi, jenž je dávným předchůdcem dnešních databází, je považována i tzv. „kartotéka“[2]. Obsahuje řazení objektů dle abecedy a souhrn všemožných informací na nosném médiu - papíře. Od papírových databází - kartoték směřoval vývoj ke zpracování dat stroji. Jako jedno z významných strojových zpracování velkého množství dat lze považovat sčítání lidu v USA roku 1980. Data byla zpracovávána na elektromechanických strojích. Paměťovým médiem byl děrný štítek. Budoucnost vývoje hromadného zpracování dat plynula vpřed a vývoj přinesl jazyky, kterými jsou ovládána elektronická databázová
9
úložiště dnes. Jedním z jazyků byl programovací jazyk Cobol, od roku 1960 se stal po mnoho dalších let nejrozšířenějším jazykem pro hromadné zpracování dat[16]. Od roku 1974 se vyvíjejí první verze dotazovacího jazyka SQL[5]. Na technologii SQL je založena řada databázových systémů, které se dnes využívají jako úložiště dat pro internetové aplikace. Jmenujme např. MySQL, databázový systém, volně šiřitelný software, hodně dnes používaný pro snadnou implementovatelnost na různé operační systémy (Linux, MS Windows). Jmenujme dále MS SQL Server, relační databázový a analytický systém využívaný často v internetových obchodech. Nesmíme zapomenout na vysoce výkonný moderní multiplatformní systém Oracle nebo SyBase. Cílem této práce je vyzkoušet možnosti práce s daty na Internetu také pomocí databázového systému Microsoft Office Access (dále MS Access).
3.2 O Produktu MS Access Databáze MS Access je součástí kancelářského balíku MS Office sady Professional od edice Office 97 nebo dostupná jako samostatný produkt[9]. Následující tabulka zobrazuje aktuální edice MS Office 2007.
Obr. 1. - Edice MS Office 2007[10]
Téma této práce je zpracováno na databázi MS Access 2003. O některých podstatných sledovaných změnách ve srovnání s novější verzí produktu MS Access 2007 se v práci také zmiňuji.
10
Databáze MS Access poskytuje uživatelům jedno z nejjednodušších a nejflexibilnějších RDBMS1 na trhu. Jedná se o typ souborové databáze, což přináší jistou výhodu v manipulaci, přenosu databáze např. pomocí flashdisku nebo jiného média. Databázi je možné použít buď jako samostatný systém RDBMS na jedné pracovní stanici nebo ve sdíleném režimu klient / server dostupnou pro více stanic. Databáze tak může být zdrojem informací pro webovou stránku. Při práci s větším množstvím dat či sdílení databázové aplikace s dalšími uživateli MS Access je možnost vytvořit nad databází projekt, pomocí něhož lze sdílet data v daleko mocnějším datovém úložišti MS SQL Serveru. Koncepce Accesovské databáze, popřípadě databázového projektu, zahrnuje výhodu spolupracovat v rámci balíku MS Office s ostatními programy. Podporovaná je aplikace Word, Excel, Outlook, jiná databáze Access, PowerPoint ale i obyčejný textový soubor. V tomto smyslu je možné např. z aplikace Word připravit definici dat pro samotnou databázi.
Produkt MS Access patří k těm, které umožňují velmi rychlý vývoj aplikací s minimálními programátorskými znalostmi. Aplikace může posloužit uživatelům při kancelářských pracích, které nevyžadují odborné znalosti práce s databází. Některé z dalších výhod produktu MS Access: •
Znatelná úspora času při tvorbě administrace
•
Rychlejší odezva
•
Tvorba reportů
•
Snadná tvorba maker
•
Jednoduchost ovládání
•
Možnost integrace se stávajícími aplikacemi v MS Access
Avšak jako produkt, který by měl být nasazený jako zdroj dat pro webovou aplikaci, převládá mnoho zásadních omezení. •
Pokud chcete mít vaší webovou aplikaci skutečně rychlou, vyvarujte se použití (.mdb) souboru - tzv. Access databázi. Access databáze totiž není koncipována pro webové nasazení a jako taková nedisponuje patřičným výkonem. Například
1
RDBMS - viz kap. 3.2.1
11
už jen proto, že jde o soubor a nikoli o plnohodnotnou databázi, do ní nelze souběžně zapisovat. Čili pokud by dva návštěvníci vašich stránek chtěli zapsat do této databáze, první provede zápis a druhý již musí čekat. Což může v konečném důsledku znamenat i toto: pokud by bylo na vašich stránkách více zákazníků najednou, nemusel by poslední vydržet čekat a vy o něj přijdete[3]. •
Další nevýhodou (.mdb) databáze je skutečnost, že i pro vyhledání jediného záznamu je nutno otevřít celý soubor. Kromě vyššího zatížení serveru z toho vyplývá i další zpomalení oproti plnohodnotné databázi, jakou je například MSSQL, PostgreSQL nebo MySQL[3].
•
Poslední skrytou, ale často významnou nevýhodou je, že v případě použití (.mdb) souboru zpracovává všechny úkoly webový server. Tedy pouze jeden stroj. Při použití plnohodnotné databáze však část, kdy se pracuje s daty z databáze vykoná databázový server. V podstatě pak pracují dva servery [3].
3.2.1 MS Access jako RDBMS Jedná se o databázový systém založený na relačních modelech, systém pro řízení relační databáze, spravující databázi, umožňující komunikaci s klienty (lokálními nebo vzdálenými), umožňující vstupy a výstupy dat a jejich integritu. RDBMS tvoří rozhraní mezi aplikačními programy a uloženými daty [20], [6].
Praktické realizace systémů RDBMS: •
DB/2
•
Firebird
•
Microsoft SQL Server
•
MySQL
•
Oracle
•
PostgreSQL
•
Sybase
RDBMS [20], [6] pracuje na principu matematické teorie relací. Hodnoty v databázi jsou uspořádány do dvojdimenzionálních tabulek. Tabulka obsahuje jednak
12
sloupce - pole (fields) a řádky - záznamy (rows). S dalšími podpůrnými informacemi jako (indexy, triggery, constraints apod.) tabulky dohromady tvoří databázi.
Obr. 2. - Tabulka v relačním modelu dat
Typ RDBMS databáze umožňuje mezi tabulkami vytvářet vazby, které jsou reprezentovány relačními vztahy (relace). Vazba může nabývat nejrůznějších podob a vždy záleží na dalších okolnostech a podmínkách její existence. Jednou z hlavních podmínek pro definování vztahu je existence nejméně dvou tabulek [20]. Relační vztahy Relační vztahy slouží ke svázání dat, která spolu souvisejí, ale jsou umístěny v různých databázových tabulkách. Pak můžeme snadno vyhledávat hodnoty v souvisejících tabulkách, integrovat sloupce z více tabulek do jedné kontingenční tabulky, kontingenčního grafu nebo filtrovat data v jedné tabulce podle sloupců dat v souvisejících tabulkách atd. Spojení tabulek se provádí pomocí primárních klíčů, pokud jsou definovány. Rozlišujeme mezi čtyřmi typy tzv. kardinalit vztahů [7].
Dokumenty
Kategorie ID Long integer
1:N
ID Long integer kategorieID Long integer
Obr. 3. - Ukázka kardinality vztahu 1:N •
Mezi daty v tabulkách není žádná spojitost, proto nedefinujeme žádný vztah.
•
Relace 1:1 – každému záznamu tabulky A odpovídá právě jeden záznam v tabulce B a naopak.
13
•
Relace 1:N – každému záznamu v tabulce A odpovídá množina záznamů v tabulce B, ale každý záznam v tabulce B přísluší k nejvýše jednomu záznamu v tabulce A. Jedná se o nejčastěji realizovaný typ relace, neboť odpovídá mnoha situacím v reálném životě.
•
Relace M:N - každému záznamu tabulky A odpovídá množina záznamů tabulky B a naopak každému záznamu tabulky B odpovídá množina záznamů tabulky A. V databázové praxi bývá tento vztah z praktických důvodů nejčastěji realizován kombinací dvou vztahů 1:N a 1:M, které ukazují do pomocné tabulky složené z kombinace obou použitých klíčů tzv. spojovací tabulka.
Relační databáze jsou obecně nejrozšířenějším typem zejména pro tyto vlastnosti:
Výhody •
Jednoduchost a pochopitelnost databáze
•
Základ v matematické teorii
•
Široké rozšíření
•
Implementace standardizovaných jazyků SQL, QBE
•
Logická a fyzická nezávislost dat na databázové aplikaci
Nevýhody •
Malá modelovací síla
•
Zjednodušení reality
•
Jednoduché datové typy
•
Oddělení objektů od chování, které oproti tomu obsahují výše zmíněné ostatní typy datových úložišť
V informačním prostředí nalezneme nejenom typy databází relačních. Rozlišujeme další typy databází: •
Objektově orientované
•
Deduktivní
•
Temporární
•
Objektově relační a jiné.
14
3.2.2 Architektura MS Access MS Access [20] obsahuje několik hlavních objektů v rámci databáze. Oproti jiným systémům sem musíme zařadit i všechny další objekty týkající se uložených dat, objekty které jsou definovány pro automatizaci činností. Zmíněnými hlavními objekty jsou Tabulka, Dotaz, Formulář, Sestava, Datová stránka, Makro, Modul.
MS Access dále zajišťuje hlavní potřebné funkce pro tyto operace: •
Definice dat
•
Manipulace s daty
•
Řízení dat
Definování dat – data definition MS Access [20] umožňuje definovat druh dat (např. čísla nebo znaky), se kterými chceme pracovat a způsob, jakým mají být uložena. Dále poskytuje definice pravidel pro zajištění integrity, způsob, jak mají být data formátována nebo jak mají být ověřována. Můžeme definovat platné hodnoty či rozsahy dat. MS Access 20032 nabízí výběr z devíti datových typů[20]. Přehled datových typů Datový typ Text
Použití
Velikost
Určen pro text nebo
Umožňuje uložení až 255
kombinaci textu a čísel.
znaků. Maximální počet
Lze jej použít rovněž pro
znaků, které lze zadat, je
čísla, která se nepoužívají
určen vlastností Velikost
v matematických
pole.
výpočtech Memo
Určen pro delší texty a čísla Umožňuje uložení až 65 536 znaků
Číslo
Slouží k ukládání dat
Umožňuje uložení 1, 2, 4
určených pro matematické
nebo 8 bajtů.
výpočty s výjimkou 2
Důležitou změnou ve verzi Microsoft Access 2007 je změna datových typů, jaké používá
standardizovaný jazyk SQL.[11]
15
výpočtů zahrnujících peněžní hodnoty Datum/čas
Určen pro datum a čas
Velikost je 8 bajtů
Měna
Tento typ slouží k ukládání
Velikost je 8 bajtů
peněžních hodnot. Zabraňuje zaokrouhlování v průběhu výpočtů Automatické číslo
Pole tohoto typu obsahují
Velikost je 4 bajty
jedinečná po sobě jdoucí čísla (s přírůstkem 1) nebo náhodná čísla, která jsou vkládána automaticky při přidání záznamu Ano/Ne
Určen pro data, která
Velikost je 1 bit
mohou nabývat pouze jedné ze dvou možných hodnot, jako je Ano/Ne, Pravda/Nepravda, Zapnuto/Vypnuto Objekt OLE
Určen pro objekty OLE
Maximální velikost je 1
(například dokumenty
gigabajt (je omezena též
aplikace Microsoft Word,
místem na disku)
tabulky aplikace Microsoft Excel, obrázky, zvukové soubory nebo jiné binární soubory s daty) vytvořené v jiných programech prostřednictvím OLE Hypertextový odkaz
Průvodce vyhledáváním
Slouží k ukládání
Umožňuje uložení až
hypertextových odkazů
64 000 znaků
Slouží k vytváření polí,
Tento typ vyžaduje stejnou
která posléze umožňují
velikost jako primární
vybrat hodnotu z jiné
klíč odpovídající
16
tabulky nebo ze seznamu
vyhledávacímu poli
hodnot pomocí pole se seznamem. Zvolíte-li tuto možnost ze seznamu datových typů, spustí se průvodce, který dané pole nadefinuje podle vašich pokynů
MS Access dále umožňuje nastavit některé z vlastností vztahující se na zvolený datový typ: •
Formát pole
•
Počet desetinných míst
•
Vstupní maska
•
Titulek
•
Výchozí hodnota
•
Ověřovací pravidlo
•
Ověřovací text
Pro zajištění jedinečnosti pole MS Access používá primární klíč datový typ Automatické číslo. Z některých dalších vlastností umožňují nastavení vztahující se na tabulku její výslednou podobu zobrazení (datový list, kontingenční tabulka, graf), popis tabulky, zobrazení při tisku a další. Manipulace s daty – data manipulation Kromě nástrojů, pomocí nichž MS Access data řadí (vzestupně, sestupně), prohledává, vyhledává hodnoty mezi daty, či je dokáže filtrovat, MS Access využívá pro komunikaci s databázovým systémem standardizovaný dotazovací jazyk SQL [20]. Dotaz lze v prostředí aplikace vytvořit i pomocí grafického návrhového prostředí. Začínající uživatel tak nemusí nutně ovládat syntaxi jazyka SQL. Nicméně specifické složitější dotazy SQL není možné v návrhovém prostředí vytvořit.
17
Dotaz SQL lze složit v jednom ze dvou typů syntaxe jazyka SQL - ANSI-893 nebo ANSI-924. Výchozím nastavením pro nové databáze MS Access je režim ANSI-89 - tradiční syntaxe SQL. Výchozí režim ANSI dotazu SQL pro MS Access 2003 je ANSI-89. Řízení dat – data control Mezi funkce řízení dat můžeme zařadit zajištění integrity dat, zabezpečení dat. MS Access [20] umožňuje definovat, kteří uživatelé nebo skupiny budou mít přístup k objektům databáze. MS Access [20] řídí souběžné zpracování dat v případě umístění databáze na síťový server nebo do sdílené složky. Informace čerpá ze souboru (.ldb) Pokud otevřeme soubor databáze MS Access (.mdb) v režimu sdílení, aplikace MS Access vytvoří soubor informací o uzamčení (.ldb), který obsahuje název počítače a jméno každého uživatele, který sdílí databázi. Pokud dojde k úpravě stejného záznamu více osobami MS Access zobrazí informativní zprávy, které pomohou při řešení konfliktu. Výstup jednoho nebo více databázových objektů můžeme zobrazovat ve statických nebo dynamických stránkách. Datovou stránkou můžeme zobrazit či upravit data uložená v databázi, přidat data nebo s nimi jinak manipulovat. Stránka může zahrnovat také data z dalších zdrojů, např. Excel. Uživatelé, pracující na různých pracovištích na vlastních replikách databáze, mohou kopie po skončení práce synchronizovat přes síť. V následující tabulce je přehled oprávnění, které je možné přiřadit jednak k databázi jako celku nebo k jednotlivým objektům v rámci databáze [20].
3
Režim ANSI-89 popisuje tradiční syntaxi jazyka SQL stroje Jet (Databázový stroj Microsoft Jet: Část
databázového systému aplikace Access, která načítá a ukládá data z uživatelských a systémových databází. Lze si ho představit jako správce dat, na kterém jsou vytvořeny databázové systémy, například aplikace Access). Tento režim do značné míry odpovídá specifikaci ANSI-89 Level 1, ale není s touto specifikací zcela kompatibilní. Určité funkce specifikace ANSI-89 dotazu SQL nejsou implementovány a zástupné znaky odpovídají specifikaci jazyka Visual Basic for Applications (VBA), nikoli specifikaci SQL.[12] 4
Režim ANSI-92 používá nová vyhrazená slova, syntaktická pravidla a zástupné znaky, které zvyšují
možnosti vytváření dotazů, filtrů a příkazů SQL. Tento režim do značné míry odpovídá specifikaci ANSI92 Level 1, ale není s touto specifikací zcela kompatibilní. Tento režim dotazu se více podobá syntaxi ANSI a zástupné znaky odpovídají specifikaci SQL.[12]
18
Oprávnění
Povolují uživateli
Otevírání/spouštění Otevření databáze, formuláře nebo sestavy nebo spuštění makra v databázi Výhradní přístup
Otevření databáze pro výhradní přístup
Čtení návrhu
Zobrazení tabulek, dotazů, formulářů, sestav nebo maker v návrhovém zobrazení
Změna návrhu
Zobrazení a změny návrhu tabulek, dotazů, formulářů, sestav nebo maker nebo odstranění těchto objektů
Správa
Pro databáze změny hesla databáze, replikace databáze a změna vlastností po spuštění
Pro tabulky, dotazy, formuláře, sestavy a makra plný přístup k těmto objektům včetně možnosti přidělovat oprávnění Čtení dat
Zobrazení dat v tabulkách a dotazech
Aktualizace dat
Zobrazení a změna, nikoli však vložení nebo odstranění dat v tabulkách a dotazech
Vyhledání dat
Zobrazení a vložení, nikoli však změna nebo odstranění dat v tabulkách a v dotazech
Odstraňování dat
Zobrazení a odstranění, nikoli však změna nebo vložení dat v tabulkách a v dotazech
Uživatelské a skupinové účty uživatelů databází poskytují jednotlivým uživatelům různé kombinace oprávnění pro přístup k informacím a prostředkům obsaženým v databázi.
3.3 Nativní způsoby prezentace dat na web z databáze MS Access Databázové aplikace byly mezi posledními, které se objevily na síti WWW. Nicméně jsou dnes nejčastějším typem webových aplikací. MS Access nabízí několik možností, jak informace uložené v databázi publikovat na Internet nebo Intranet. V této části bych se chtěl zaměřit na jednotlivé vlastní nástroje MS Access pro prezentaci na webové stránky.
19
3.3.1 Statické webové stránky Statické webové stránky fungují na principu zobrazení statických dat. Jsou to stránky s neměnným obsahem, někdy nazývané jako ploché stránky. Data jsou aktuální pouze v době vytvoření statické HTML stránky. V případné spolupráci s databází pokud bude databáze rozšířena o nové hodnoty, statická stránka nezobrazí žádné změny, zůstane tedy neaktuální. Pro aktualizaci je nutné znovu stránku vytvořit nebo exportovat. V případě, že bychom chtěli být informováni o změnách v databázi, jsou statické stránky pro tuto funkci nedostatečné. MS Access [20] nabízí jednoduchý způsob, jakým umístit data z databáze na web. Je jím generování statických stránek. Pomocí nástroje Export dat vyexportujeme hodnoty uložené v databázi do stránky (.html) souboru. MS Access umožňuje exportovat objekty Tabulka, Dotaz, Formulář a Sestava. Protože generovaná stránka nevypadá mnohdy dle našich představ, MS Access nabízí definovat tzv. Možnosti výstupu HTML. Do stránky je možné připojit šablonu v podobě stylu CSS z již předpřipravených šablon od Microsoft nebo vlastní.
3.3.2 Dynamické webové stránky Rozdíl mezi statickými a dynamickými stránkami spočívá v tom, že statické stránky nemění svůj obsah od okamžiku vytvoření, zatímco dynamické stránky vznikají znovu a znovu právě v okamžiku jejich vyvolání. Obsah HTML stránky již není staticky umístěný v souboru, ale je generován. Jde tedy o dynamicky generované stránky. Dynamické webové stránky se velmi hodí pro zpřístupňování rozsáhlých databází, podnikových informačních systémů ovládaných pouze pomocí webového prohlížeče. Jestliže chceme, aby naše stránka vyexportovaná z databáze zobrazovala často aktualizované informace, MS Access [20] poskytuje nástroj pro export dat do stránek ASP. Umožňuje exportovat objekty Tabulka, Dotaz a Sady záznamů pro Formuláře.
K provozování stránky ASP musíme splnit tyto požadavky: •
Webový server IIS verze 3.0 a vyšší
•
Webová stránka musí mít příponu .asp
•
Stránka musí být umístěna ve složce, která je určena pro webový server
•
Webový server musí mít ovladače ODBC
20
Export informací do stránky ASP v MS Access vyžaduje definovat název zdroje dat, z kterého bude stránka čerpat. Pokud máme databázi zabezpečenou, můžeme zadat přihlašovací údaje - uživatelské jméno a heslo. Protože se jedná o skriptovací technologie ASP, musíme uvést výchozí server pro zpracování skriptů, kde bude stránka publikována. Na Obr. 4. je vidět nastavení lokálního serveru počítače.
Obr. 4. - Nastavení možností výstupu ASP stránek
Stejně tak jako u statických stránek, můžeme nastavit vzhled dokumentu dle šablony nebo v možnostech nastavení vzhledu datových stránek. Pokud sdílíme databázi na síti, je dále nutné definovat systémový zdroj dat Systémové DSN z důvodu použití služby operačním systémem a pro připojení vzdálených uživatelů. Název zdroje dat Systémové DSN se musí shodovat s definovaným zdrojem při exportu stránky ASP.
21
Obr. 5. - Definování systémového zdroje dat v Správci zdrojů dat ODBC
3.3.3 Datová stránka Další způsob prezentace dat z MS Access umožňuje Datová stránka. Datová stránka [13] byla poprvé představena ve verzi MS Access 2000 a objevila se i ve verzích MS Access 2002 a 2003. Nynější verze 2007 již datové stránky nepodporuje [13]. Datové stránky umožňují interaktivně pracovat s daty z webového prohlížeče v prostředí osobního počítače nebo Intranetu. Nejsou určeny pro rozšíření na celosvětovém webu. Svým chováním připomínají stránky ASP, neboť zobrazují aktuální data. Rozdíl mezi stránkou ASP a Datovou stránkou je, že datová stránka nevyžaduje nezbytné umístění na server. Stránka může být umístěna kdekoli v souborovém systému. Výsledný soubor exportované Datové stránky je typu (.htm). MS Access [20], [13] používá k sestavení Datové stránky kombinaci různých technologií, ke kterým patří datové formuláře HTML, Office Web Components a MS Office Data Source ActiveX aktivované z dynamického HTML. V konečné podobě je však standardně sestavena pomocí značek HTML pro webový prohlížeč.
22
Obr. 6. - Logická architektura datové stránky[20]
Datové stránky tvoříme buď nástroji pro vytváření stránek v Návrhovém zobrazení, nebo pomocí Průvodce návrhem. Další možností je programování bez použití již zmiňovaného interaktivního prostředí MS Access jazykem VBScript. Stejně jako stránka ASP, musí mít Datové stránky definovaný přístup k databázi. Pokud je databáze sdílena v prostředí sítě, cestu k databázi definujeme v UNC formátu. V případě, že databázi nesdílíme, postačí nastavení tzv. absolutní cesty. Nastavení přístupu k databázi najdeme ve vlastnostech řetězce ConnectionFile a ConnectionString. Tyto řetězce jsou součástí objektu - ovládacího prvku zdroje MSODSC [20], který je připojen ke každé Datové stránce formou jazyka XML.
Příklad kódu - ukázka řetězce ConnectionString datové stránky:
Provider=Microsoft.Jet.OLEDB.4.0; User ID=Admin; Data Source=C:\Bakalarska prace\bakalar.mdb; Mode=Share Deny None; Extended Properties=""; Persist Security Info=False; Jet OLEDB:System database=""; Jet OLEDB:Registry Path=""; Jet OLEDB:Database Password=""; Jet OLEDB:Engine Type=0; Jet OLEDB:Database Locking Mode=1; Jet OLEDB:Global Partial Bulk Ops=2;
23
Jet OLEDB:Global Bulk Transactions=1; Jet OLEDB:New Database Password=""; Jet OLEDB:Create System Database=False; Jet OLEDB:Encrypt Database=False; Jet OLEDB:Don't Copy Locale on Compact=False; Jet OLEDB:Compact Without Replica Repair=False; Jet OLEDB:SFP=False
Datová stránka obsahuje hlavní komponentu - ovládací panel. Panel je sestaven z několika objektů ADO [14], které používá MSODSC [20] k načtení dat pomocí databázového stroje JET5, nebo odesláním SQL příkazů v případě MS SQL Serveru. Pomocí tohoto panelu se můžeme pohybovat informacemi v databázi. Při vylepšení stránek, například rozšířením stránek vlastním kódem, je možné se na kterýkoliv ovládací prvek odkázat a individuálně mu nastavit výchozí funkčnost.
Obr. 7. - Ovládací panel datové stránky
Zdroj dat může stránka získat nejenom z interních zdrojů databáze MS Access, ale i z MS SQL Serveru verze 6.5 nebo vyšší. Omezení použití této stránky je v podpoře webového prohlížeče. Stránku lze zobrazit pouze pomocí MS Internet Explorer 5.0 a vyšší. Zabezpečení datové stránky např. před neoprávněným přístupem můžeme provést jednak zabezpečením odkazu datové stránky nebo zabezpečením vlastního souboru stránky. Pokud bychom potřebovali chránit data, která jsou k dispozici prostřednictvím stránky, musíme zabezpečit databázi, ke které je stránka připojena, nebo nastavit možnosti zabezpečení aplikace Internet Explorer [20].
3.3.4 SharePoint Technologie SharePoint je početná skupina komponent v interakci, která podporuje MS Access od verze 2002 [20]. Kladným aspektem SharePoint technologie
5
Databázový stroj Microsoft Jet: Část databázového systému aplikace Access, která načítá a ukládá data
z uživatelských a systémových databází. Lze si ho představit jako správce dat, na kterém jsou vytvořeny databázové systémy, například aplikace Access. viz. http://technet.microsoft.com/enus/library/cc966378.aspx
24
je efektivní spolupráce v rámci podniku nebo jednotlivců online. Ve zkratce uvedu některé z funkcí této technologie: •
Vytvoření samostatných pracovních prostorů pro skupiny
•
Přiřazení uživatelů jednotlivým skupinám
•
Správa práv (nastavení práv jiné skupině k úpravám dat nebo posílání příspěvků)
•
Informace o projektech, jejich stav, úkoly
•
Fulltextové prohledávání dokumentů
•
Jednoduché zadávání a presentace informací
•
Pouze webový prohlížeč pro práci
•
Přístup odkudkoliv z internetu a firemní sítě
Způsob spolupráce aplikací SharePoint a MS Access 2003 [20] je založen na třech základních postupech pro práci s informacemi - import, export a propojení se službou SharePoint Services. Forma exportu dat databáze probíhá pomocí průvodce, kterému zadáváme přístupové údaje jako adresu našeho webu v SharePoint. Můžeme nastavit popisek exportovaného objektu nebo jeho název. Adresu webu píšeme standardně do protokolu, například http://NazevPracovnihoWebu. Vytvořenou kopii dat na serveru v podobě seznamů můžeme sdílet s ostatními uživateli. Při importu dat z SharePoint do MS Access musíme vybrat cílovou databázi, do které chceme importovat obsah z SharePoint taktéž pomocí průvodce. A rovněž jako u exportu dat vyplníme cestu na web SharePoint a vybereme, který seznam chceme importovat. Propojení SharePoint a MS Access provede připojení k seznamu na SharePoint. Při změnách v MS Access jsou změny uloženy taktéž na serveru. Pokud propojíme exportovanou tabulku zpět, uživatelé tak mohou provádět změny, které jsou aktualizovány v obou aplikacích. Zabezpečení dat na SharePoint je řízeno pomocí oprávnění. MS Office SharePoint Server 2007 zahrnuje již 32 oprávnění rozdělené do tří kategorií[26]: •
List permissions
•
Site permissions
•
Personal permissions
25
Novější produkt MS Access 2007 nabízí lepší podporu z SharePoint, kde můžeme přesouvat celé databáze, které zůstávají propojeny s tabulkami databáze. Z důvodu nemožnosti přístupu do prostředí serveru SharePoint uvádím pouze obecné teoretické informace z ověřených zdrojů.
3.3.5 XML XML [21] je značkovací jazyk založený na standardech podléhající konsorciu W3C. Jazyk je určen především pro výměnu dat mezi aplikacemi a pro publikování dokumentů na webu. Avšak určení jazyka XML je mnohem obšírnější a jeho budoucí uplatnění by mělo být nejen v již zmíněných příkladech. Aplikace MS Access podporuje import, export dat ve formátu XML a transformaci dat do a z jiných formátů pomocí souborů souvisejících s formátem XML. O jazyku XML se mluví jako o nástupci HTML. Ve srovnání s jazykem HTML umožňuje sestavení dokumentu v přehlednější formě díky možnosti definovat vlastní párové značky (tagy).
Příklad kódu - kód XML konkrétního výrobku a jeho vlastností
Hifi věž SuperSound PX 537 8356 <měna>Kč
Pokud chceme exportovat data z MS Access, součástí exportovaného dokumentu XML mohou být až čtyři typy souborů: •
Datový dokument (.xml)
•
Schéma dat (.xsd)
•
Presentace dat (.xsl)
•
Webový balíček (.htm)
Samostatným souborem s obsahem dat v požadovaném jazyce XML je Datový dokument (.xml), kde jsou zapsány pouze hodnoty z databáze. Slovo pouze v předcházející větě znamená, že oproti jazyku HTML, kde jednotlivé tagy určují, jak se má daná část stránky zobrazit, XML dokument toto neumí. Pro definici vzhledu dokumentu XML se používají tři stylové jazyky CSS, XSL a DSSSL[20], [23]. Vzhled je tudíž plně oddělen od stránky s daty. MS Access může přidat při exportu dat XML definici vzhledu dokumentu soubor XSL. XSL [20], [22] je
26
vytvořen pomocí syntaxe XML, jenž poskytuje prostředky pro formátování dat XML prostřednictvím šablony stylů. Datový soubor XML pak obsahuje značku odkazující na soubor se stylováním XSL.
Příklad kódu - ukázka výstupu nestylovaného dokumentu XML ve webovém prohlížeči
1 <jmeno>Alexander <prijmeni>Hejkal
Pokud chceme data prezentovat na webové stránce jako stylovaný dokument, MS Access umožňuje proces transformace dokumentu XML do Webového balíčku. Výsledný soubor (.htm) obsahuje příkazy nezbytné k sestavení dalších tří uvedených souborů pro webový prohlížeč. Soubor (.htm) obsahuje kód VBScript, který provádí ONLOAD webové stránky a skript, který používá DOM [24] ke konverzi informací XML do jazyka HTML.
Příklad kódu - ukázka funkce transformace XML a XSL do výsledné HTML stránky: <SCRIPT LANGUAGE="VBScript"> Option Explicit Function ApplyTransform() Dim objData, objStyle Set objData = CreateDOM LoadDOM objData, "autori.xml" Set objStyle = CreateDOM LoadDOM objStyle, "autori.xsl" Document.Open "text/html","replace" Document.Write objData.TransformNode(objStyle) End Function Function CreateDOM() On Error Resume Next Dim tmpDOM Set tmpDOM = Nothing Set tmpDOM = CreateObject("MSXML2.DOMDocument.5.0") If tmpDOM Is Nothing Then Set tmpDOM = CreateObject("MSXML2.DOMDocument.4.0") End If If tmpDOM Is Nothing Then Set tmpDOM = CreateObject("MSXML.DOMDocument") End If Set CreateDOM = tmpDOM
27
End Function Function LoadDOM(objDOM, strXMLFile) objDOM.Async = False objDOM.Load strXMLFile If (objDOM.ParseError.ErrorCode <> 0) Then MsgBox objDOM.ParseError.Reason End If End Function
Transformaci provádí soubor XSLT [20], [22], jenž je podmnožinou jazyka XSL. Jazyk XSL slouží k definování formátu dokumentů XML a jazyk XSLT definuje strukturu dat. Transformace je provedena ihned po exportu.
Posledním souborem je Schéma XSD [20], [25] z něhož mohou jiné aplikace zjistit, jaké prvky a atributy obsahují data, které prvky jsou povinné a které nepovinné, v jakém pořadí je nutné je zobrazit a mnoho dalších informací. Schéma XSD je vytvořeno taktéž v syntaxi XML a výběrem příslušné možnosti v dialogovém okně Exportovat XML jej lze přímo vložit do datového souboru XML nebo propojit s externím souborem schématu.
28
29
4 Praktická část 4.1 Návrh a vytvoření databáze Při vytváření samotné aplikace pracující nad databází je právě databáze základním stavebním prvkem. Návrhu struktury databáze by mělo být věnováno dostatečné množství času. Podcenění návrhu databáze se nemusí vyplatit zejména v jejím budoucím provozu nebo pozdějších změnách. Při návrhu je nutné rozmyslet jednak strukturu tabulek, datové typy v tabulkách, definování vazeb mezi jednotlivými tabulkami, jaký typ dat budeme ukládat. Dále je rozhodující odhadnout, jaký objem dat bude databáze obsahovat, jak veliký objem dat bude přenášen, jakou platformu databáze zvolit v interakci s aplikací. Neméně důležité je definování hlavních úloh, které bude databázová aplikace implementovat, definování primárních a cizích klíčů a další. Pro účely prezentace mé práce jsem navrhl v prostředí MS Access 2003 databázi Receptář. Databáze je spíše jednoduššího charakteru, avšak dostačující pro mé účely. Obsahuje čtyři tabulky. Databáze Receptář v okamžiku ukončeného testování obsahovala v hlavní tabulce (dokumenty) kolem 150 záznamů. Důraz při návrhu byl kladen na využití různých datových typů MS Access a na následující práci s nimi. Hlavním důvodem pro vytvoření databáze Receptář byla možnost získání elektronických dat receptů. Součástí návrhu je konceptuální a generovaný fyzický model databáze.
4.1.1 Určení účelu databáze Databáze Receptář je úložiště kuchařských receptů. Hodnoty z databáze se zobrazují na dynamické webové stránce formou prezentace. S daty je možné manipulovat pomocí editačního webového rozhraní. Soupis hlavních úloh databázové aplikace uvádím v následující Analýze úloh.
4.1.2 Specifikace úloh, které bude databáze vykonávat (Analýza úloh) •
Pořizování dat – vkládání jednotlivých záznamů (receptů)
•
Mazání dat - možnost odstraňovat záznamy (recepty)
•
Editace dat – možnost opravovat či doplňovat záznamy (např. vkládat obrázky)
•
Zobrazení dat – výpis jednotlivých receptů na webové stránce
30
•
Filtrování dat – možnost výběru dat dle zadaných požadavků
4.1.3 Konceptuální model databáze Konceptuální datový [17], [8] model popisuje strukturu a sémantiku dat a je implementačně nezávislý na databázovém systému. Zobrazuje a popisuje objekty v databázi a vztahy mezi nimi z hlediska jejich významu a chování. Výsledkem konceptuálního modelování je implementačně nezávislé databázové schéma, tj. schéma obecně aplikovatelné v jakémkoli technicko-programovém prostředí.
Kategorie ID Long integer <M> nazev T ext (50) poznamky T ext (255) Identifier_1 0,n 1:N 1,1 Dokumenty Long integer <M> ID title Text (200) active Boolean slozeni Long characters popis Long characters usrDate Date upDate Date
Prilohy ID Long integer <M> stream OLE streamFileName Text (255) streamT ype Text (50) streamSize Number crtFlag Number
Identifier_1 1,1
Identifier_1 1:N*
0,n Autori ID Long integer <M> jmeno Text (50) prijmeni Text (50) e-mail Text (255) Identifier_1
Obr. 8. - Konceptuální model databáze Receptář
31
4.1.4 Určení primárních klíčů Primární klíč v každé tabulce je sloupec s označením ID. Jedná se tedy o jedinečnou hodnotu v tabulce, zároveň žádné pole, které je definováno jako primární klíč, nesmí obsahovat hodnotu NULL.
4.1.5 Vytvoření relací mezi tabulkami K vytvoření relací mezi tabulkami jsem kromě primárních klíčů definoval cizí klíče. V hlavní tabulce (dokumenty) jsem definoval cizí klíče tabulek (kategorie, autori). Propojil jsem zdrojový sloupec, známý jako primární klíč (pk), v tabulce (kategorie) s cílovým sloupcem, známým jako cizí klíč (fk), v tabulce (dokumenty). Stejný postup jsem aplikoval i na tabulku autori. Relace mezi tabulkou (dokumenty) a tabulkou (prilohy) je pouze přes (pk) tabulek. Realizace relací mezi tabulkami jsou vidět na Obr. 9.
4.1.6 Fyzický model databáze Fyzický model [17] je databázový model umožňující zobrazit a popsat objekty v databázi a vztahy mezi nimi s ohledem na jejich implementaci v konkrétním technickoprogramovém prostředí - v tomto případě v MS Access, daném strukturou datové základny a typem DBMS. Logický model rozšiřuje konceptuální model o podrobnosti specifické pro dané prostředí, např. datové typy, realizaci vazeb mezi daty, integritní omezení.
32
Kategorie ID LONG nazev TEXT(50) poznamky TEXT(255) 0,n
FK_DOKUMENT _1:N_KAT EGORI
1,1 Dokumenty ID kategorieid autorid title active slozeni popis usrDate upDate
LONG LONG LONG TEXT(200) YESNO LONGCHAR LONGCHAR DATE DATE
Prilohy ID stream streamFileName streamType streamSize crtFlag
1,1
LONG OLEOBJECT TEXT(255) TEXT(50) NUMERIC NUMERIC
FK_DOKUMENT _1:N*_AUTORI
0,n Autori ID jmeno prijmeni e-mail
LONG TEXT(50) TEXT(50) TEXT(255)
Obr. 9. - Fyzický model databáze Receptář
4.1.7 Vytvoření databáze Receptář V této struktuře databáze jsem se snažil použít všechny datové typy, které databáze MS Access nabízí. Hlavní tabulka databáze (dokumenty) obsahuje přibližně 150 záznamů, v tabulce (prilohy) je stejný počet fotografií. Celková velikost databáze je přibližně 3,5 MB. Primární roli na velikosti databáze hrají uložené obrázky. Rozměr obrázků je 160 x 120 obrazových bodů a fyzická velikost jednoho obrázku přibližně 20 KB.
Strukturu databáze jsem vytvořil v návrhovém prostředí MS Access 2003. Prázdnou databázi jsem dále nahrál na veřejný webový server http://www.peso.asp2.cz. Zde jsem databázi spravoval, přidával, rušil a opravoval jednotlivé záznamy. Ke správě databáze slouží webová stránka napsaná technologií ASP.NET. Databázi tedy lze modifikovat z libovolného počítače, připojeného k Internetu. Konečnou podobu databáze jsem pro potřeby prezentace dalších technologií ASP a PHP zkopíroval na ostatní servery.
33
Struktura tabulky - dokumenty Tabulka dokumenty je hlavní tabulka databáze, obsahuje základní údaje o receptech.
dokumenty - popis receptů Název dat ID
Popis Identifikátor receptu -
Datový typ Automatické číslo
primární klíč kategorieID
Cizí klíč
Číslo
autorID
Cizí klíč
Číslo
title
Název receptu
Text
active
Platnost záznamu
Ano/Ne
slozeni
Složení receptu,
Memo
ingredience popis
Postup přípravy receptu
Memo
usrDate
Datum vložení receptu
Datum a čas
upDate
Datum poslední editace
Datum a čas
receptu
Příklad kódu - vytvoření tabulky dokumenty pomocí jazyka SQL: create TABLE dokumenty ( id AUTOINCREMENT not null, kategorieid long, autorid long, title text (255), active bit, slozeni memo, popis memo, usrdate date, upddate date, CONSTRAINT PK_dokumenty PRIMARY KEY(id));
34
Struktura tabulky - prilohy Tabulka prilohy obsahuje fotografie jednotlivých receptů. S tabulkou dokumenty je propojena přes položky dokumenty.id a prilohy.id. Mimo samotné fotografie ve formátu (.jpeg) je v tabulce uložena hodnota - velikost fotografie (v bytech) a název souboru. Fotografie je uložena v datovém typu objekt OLE6, pouze v binárních datech.
prilohy - fotografie receptů Název dat ID
Popis Identifikátor fotografie -
Datový typ Číslo
primární klíč stream
Fotografie uložená v
Objekt OLE
binárních datech streamFileName
Název souboru fotografie
Text
streamType
Typ položky stream (jpg,
Text
jpeg, atd.) streamSize
Velikost položky stream
Číslo
crtFlag
Způsob uložení položky
Číslo
stream - (0 = vytvořeno v PHP; 1 = vytvořeno v ASP.NET base64; 2 = vytvořeno v ASP.NET byte array)
Příklad kódu - vytvoření tabulky prilohy pomocí jazyka SQL: create TABLE prilohy ( id long not null, stream oleobject, streamfilename text (255), streamtype text (50), streamsize long, crtflag smallint);
6
Speciální datový typ databáze MS Access, ostatní databáze používají názvy např. IMAGE, BLOB
35
Struktura tabulky - autori Tabulka autori obsahuje jména autorů jednotlivých receptů. Tabulka autori je propojena s tabulkou dokumenty pomocí položek dokumenty.autorid a autori.id.
autori - jméno autora receptů Název dat
Popis Identifikátor receptu -
ID
Datový typ Automatické číslo
primární klíč jmeno
Jméno
Text
prijmeni
Příjmení
Text
e-mail
e-mail
Text
Příklad kódu - vytvoření tabulky autori pomocí jazyka SQL: create TABLE autori ( id AUTOINCREMENT not null, jmeno text(50), prijmeni text(50), email text(255), CONSTRAINT PK_autori PRIMARY KEY(id));
Struktura tabulky - kategorie Tabulka kategorie popisuje jednotlivé skupiny receptů, recepty jsou podle ní seskupovány a tříděny. Slouží k jednodušší prezentaci receptů. Tabulku kategorie je možné propojit s tabulkou dokumenty pomocí položek kategorie.id a dokumenty.kategorieid.
kategorie - členění receptů do skupin Název dat ID
Popis Identifikátor kategorie /
Datový typ Číslo
primární klíč nazev
Název kategorie
Text
poznamky
Poznámka
Text
36
Příklad kódu - vytvoření tabulky kategorie pomocí jazyka SQL: create TABLE kategorie ( id AUTOINCREMENT not null, nazev text (50), poznamka text (255), CONSTRAINT PK_kategorie PRIMARY KEY(id));
Alternativní varianta Alternativní způsob je vytvoření databáze s pomocí komponent ADO [14] v nějakém programovacím nebo skriptovacím jazyce7. Pro ukázku vytvoření databáze jsem použil scriptovací jazyk JavaScript v technologii ASP. Bylo nutné vytvořit podobnou webovou stránku, kterou zde také uvádím a umístit ji na webový server. Tento postup při vytváření databáze není jistě tak příjemný jako interaktivní návrh. Avšak i tento způsob může najít svá uplatnění. Pokud budeme důsledně všechny změny databáze promítat do tohoto vytvářecího skriptu, máme v krátké chvíli vždy k dispozici aktuální definici databáze. Tento skript do určité míry nahrazuje tzv. uloženou proceduru8 (skript není uložen v databázi).
Příklad kódu - vytvoření, definice a plnění databáze a tabulek pomocí ADO komponent: <%@ Language=JavaScript Codepage="1250" %> <% var var var var var var
adOpenForwardOnly = 0; adLockReadOnly = 1; adCmdText = 1; adUseClient = 3; adOpenDynamic = 2; adLockPessimistic = 2;
try { var var var var var
__Debug = true; cat; conn; sql; rs;
var DatabaseFullPath = "c:/Bakalarska prace/test.mdb";
7
k použití ADO [14] komponent je nutné mít nainstalovanou knihovnu MDAC viz.
http://msdn.microsoft.com/en-us/library/ms810805.aspx 8
uložená procedura - je posloupnost SQL příkazů uložená v databázi, kterou je možné volat obdobně jako
samotný příkaz SQL. Databáze MS Access však uložené procedury v pravém slova smyslu nepodporuje. Podporuje tzv. Dotazy, dotaz však může obsahovat pouze jediný SQL příkaz.
37
var sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + DatabaseFullPath + "'"; Response.Write('\nDB Connection String = ' + sConnectionString + '
'); cat = Server.CreateObject("ADOX.Catalog"); cat.Create(sConnectionString); conn = Server.CreateObject("ADODB.Connection"); conn.open(sConnectionString); sql = "create TABLE kategorie (id AUTOINCREMENT not null, nazev text(50), poznamka text(255), CONSTRAINT PK_kategorie_ PRIMARY KEY(id));"; rs = Server.CreateObject("ADODB.Recordset"); rs.cursorLocation = adUseClient; if (__Debug) Response.Write('\nDB execute= ' + sql + '
'); rs.open(sql, conn, adOpenDynamic, adLockPessimistic); sql = "insert into [kategorie] ( nazev, poznamka ) values ('Polévky a zavářky',null);"; rs = Server.CreateObject("ADODB.Recordset"); rs.cursorLocation = adUseClient; if (__Debug) Response.Write('\nDB execute= ' + sql + '
'); rs.open(sql, conn, adOpenDynamic, adLockPessimistic); sql = "insert into [kategorie] ( nazev, poznamka ) values ('Omáčky',null);"; rs = Server.CreateObject("ADODB.Recordset"); rs.cursorLocation = adUseClient; if (__Debug) Response.Write('\nDB execute= ' + sql + '
'); rs.open(sql, conn, adOpenDynamic, adLockPessimistic); sql = "insert into [kategorie] ( nazev, poznamka ) values ('Hovězí maso',null);"; rs = Server.CreateObject("ADODB.Recordset"); rs.cursorLocation = adUseClient; if (__Debug) Response.Write('\nDB execute= ' + sql + '
'); rs.open(sql, conn, adOpenDynamic, adLockPessimistic); conn.close(); } catch (e) { ZpracujException("Create DB",e); } function ZpracujException(msg, ex) { text = "[" + msg + "]Error name: [" + ex.name + "];Error message: [" + ex.message + "]"; Response.Write(text); } %>
4.2 Struktura a umístění webové aplikace 4.2.1 Analýza serverových technologií pro publikaci webové aplikace Webový server je zpravidla počítač, který realizuje webové služby pomocí serverového softwaru. Je připojen k počítačové síti, přijímá a vyřizuje požadavky protokolu HTTP. Požadavky, které zpracuje, poskytne klientům, v tomto případě webovým prohlížečům. Jedná se tedy o model klient /server.
38
Důležitým požadavkem pro publikaci informací z databáze MS Access na web je, že webový server musí obsahovat či podporovat instalaci ovladačů pro přístup do databáze. Jsou to ovladače: •
Microsoft Access Driver (*.mdb)
•
Microsoft.Jet.OLEDB.4.0
Dalším důležitým požadavkem pro publikaci informaci z databáze MS Access je serverová podpora, implementace zvolené technologie (ASP.NET, ASP, PHP). Apache HTTP Server Apache HTTP Server [19], [15] je softwarový webový server s otevřeným kódem pro GNU/Linux, BSD, Solaris, Mac OS X, Microsoft Windows a další platformy. V současné době dodává prohlížečům na celém světě většinu internetových stránek.
Obr. 10. - Graf provozu jednotlivých serverů na trhu 1995 - June 2010[15]
Standardní podpora ze strany Apache HTTP Serveru pro databázi MS Access neexistuje. Přístup k (.mdb) databázi je možný pouze na serverech s OS Windows. Nicméně existují některé nástroje, které databázi umí zpřístupnit i pod non-Windows platformou. Jedním z těchto nástrojů je MDB Tools pod licencí GPL. MDB Tools9 je především knihovna (LibMDB) pro přístup k datům z databázových souborů (.mdb), dále pak několik vrstev nad touto knihovnou umožňující pracovat s daty a provádět další operace. 9
viz. http://www.abclinuxu.cz/clanky/ruzne/mdb-tools-ms-access-trochu-jinak-i
39
Při výběru veřejného serveru, na který bych umístil svoji prezentaci, se mi nepodařilo najít Apache HTTP Server, který by podporoval přístup k databázi MS Access. ISS - Internet Information Services Server Server IIS [15] je druhý nejpoužívanější server hned za Apache HTTP Server. Průzkum ukazuje, že na serveru IIS běží přibližně 37.13% ze všech webových stránek. Kromě již standardních a předpokládaných služeb, jimiž je podpora ASP, ASP.NET, SSL, Perlu, PHP a dalších, je integrován také jednoduchý SMTP server. Server IIS podporuje databázi MS Access10, MS SQL, a další.
4.2.2 Popis webové aplikace Aplikace je zobrazena na webové stránce v třísloupcovém layoutu se záhlavím. V záhlaví je uveden název prezentace, dále vstupní textové pole a tlačítko pro vyhledání textu v datech databáze (funkce Hledat). Zadaný text se vyhledává v názvu receptu, v ingrediencích receptu a v popisu postupu přípravy receptu. V levém sloupci layoutu je uveden seznam kategorií receptů s počtem položek v každé kategorii. Ve středním sloupci se zobrazuje zkrácený náhled všech receptů příslušné kategorie nebo detail vybraného receptu včetně fotografie. V pravém sloupci se generuje text, který může být využit např. jako reklamní panel. Názvy kategorií v levém sloupci fungují jako odkazy. Při výběru příslušné kategorie se mění obsah prostředního sloupce dle zvolené kategorie receptů. Taktéž zkrácený popis receptu v středním sloupci funguje jako odkaz na detailní zobrazení receptu. Dále se v prostředním sloupci zobrazuji všechny recepty vybrané funkcí (Hledat) bez ohledu na příslušnost k jednotlivým kategoriím.
4.2.3 Struktura webové aplikace Prezentační webová aplikace se nachází na třech různých serverech. Z důvodu nenalezení konfigurace veřejného serveru, která by podporovala současně, všechny použité technologie ASP.NET, ASP a PHP. 10
Nicméně nemusí zmíněný driver obsahovat. Pak je nutná jeho instalace. Veřejný server asp2.cz, který
používám k prezentaci dat na internetu v parametrech uvádí podporu databáze MS Access. Pokud bychom testovaly databázi MS Access na osobním serveru počítače, s instalací produktu MS Access se potřebný driver nainstaluje.
40
•
aplikace ASP.NET
http://www.peso.asp2.cz
•
aplikace ASP
http://www.peso2.webng.com
•
aplikace PHP
https://purpa.helpsoft.cz/bakalar
Pro vzhled, stylování aplikace používám shodný CSS soubor, aplikace tak vypadá ve všech třech technologiích identicky. Při distribuci aplikace na jednotlivé veřejné servery jsem zde umístil pouze soubory, které jsou pro provoz příslušné aplikace nezbytně nutné. Aplikaci je také možné nainstalovat a spustit na lokálním serveru. Tuto variantu jsem testoval na operačním systému Windows XP a Windows 7.
4.3 Prezentace v prostředí ASP.NET 4.3.1 Přístup k databázi MS Access v prostředí ASP.NET Prezentační aplikaci v prostředí ASP.NET jsem vytvářel pomocí vývojového nástroje Microsoft Visual studio 2008. Aplikaci jsem vyvíjel a testoval na lokálním serveru IIS osobního počítače. Kód aplikace na straně serveru jsem psal v jazyce C#. Zkompilovanou aplikaci jsem pomocí FTP klienta umístil na veřejný server. Umístění aplikace Webová aplikace je umístěna na adrese http://www.peso.asp2.cz
Výpis souborové struktury aplikace: 04.05.2010
14:15
27.04.2010 31.03.2010 19.03.2010 05.03.2010 26.04.2010 18.05.2010 25.05.2010 26.04.2010 12.04.2010 26.04.2010
14:20 15:28 18:14 19:38 16:45 10:19 14:52 13:45 20:12 16:35
27.04.2010 26.04.2010 26.04.2010 25.02.2010
14:20 16:45 16:45 23:30
04.05.2010 27.04.2010
10:44 21:13
bakalar
21
6 2 2
393 126 124 476 458 987 463 453 062
bakalarNET default.htm downloaddb.aspx getimage.aspx mainpage.aspx pouzitiado.aspx pouzitiado_1.aspx presentace.aspx showimage.aspx WebLogin.aspx
bin 36 352 bakalar.dll 52 736 bakalar.pdb 445 440 Ionic.Zip.dll css 4 341 stylesheet.css
41
04.05.2010 27.04.2010 27.04.2010 27.04.2010
10:44 21:13 21:13 21:13
26.04.2010 28.05.2010
14:06 13:44
04.05.2010 16.03.2010
10:52 19:41
obr 459 headerasp.jpg 439 headernet.jpg 434 headerphp.jpg Data 3˙502˙080 bakalar.mdb 11 441 default.htm 9 611 Web.config
Sránky aplikace ASP.NET Aplikace se skládá z webových stránek uvedených dále v seznamu. Jednotlivé stránky v aplikaci plní tyto funkce:
Webové stránky
Popis
mainpage.aspx
pořízení, oprava, rušení dat v databázi
presentace.aspx
zobrazení dat z databáze ve struktuře Receptář
showimage.aspx
zobrazení všech obrázků z databáze
getimage.aspx
stránka se používá pro čtení a zobrazení jednoho obrázku z databáze, je volaná ve stránce mainpage.aspx, presentace.aspx, showimage.aspx
downloaddb.aspx
stránka umožňuje download databáze ze serveru pro potřeby zálohování
WebLogin.aspx
přihlašovací formulář použitý při editaci databáze, zajišťuje přístup k databázi pouze oprávněným osobám
Pro přístup k databázi jsem použil vestavěné objekty a třídy technologie ADO.NET [1], umístěné ve jmenném prostoru System.Data.OleDb. Jedná se o komponenty: •
OleDbConnection
•
OleDbCommand
•
OleDbDataReader
•
OleDbDataAdapter
42
Dále jednotlivé komponenty krátce popíši a uvedu zjednodušené příklady použití. Komplexní použití komponent je vidět ve zdrojovém kódu webové prezentační aplikace. OleDbConnection Objekt OleDbConnection slouží k navázání spojení s databází (datovým zdrojem). Přebírá důležitý parametr ConnectionString. ConnectionString je připojovací řetězec obsahující, jaký poskytovatel bude použit pro spojení s databází, název databáze, místo uložení databáze a případně další parametry jako jméno uživatele, který se k databázi připojuje a popř. bezpečnostní heslo.
Příklad kódu - příklad ConnectionString do databáze nechráněné heslem: string DBConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("~/data/bakalar.mdb");
Příklad kódu - příklad ConnectionString do databáze chráněné heslem: string DBConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("~/data/bakalar_aaa.mdb") + ";Jet OLEDB:Database Password=aaa;";
OleDbCommand Objekt OleDbCommand jako parametr přebírá SQL příkaz nebo název uložené procedury, které se mají nad databází vykonat. OleDbDataReader, OleDbDataAdapter Komponenta OleDbDataAdapter použije dříve nastavené objekty OleDbConnection a OleDbCommand. Dle komponenty OleDbCommand vrátí požadovanou strukturu dat.
Příklad kódu - příklad použití s komponentou OleDbDataReader: using using using using using using using using
System; System.Collections.Generic; System.Linq; System.Web; System.Web.UI; System.Web.UI.WebControls; System.Data; System.Data.OleDb;
namespace bakalar.bakalarNET { public partial class pouzitiado : System.Web.UI.Page
43
{ protected void Page_Load(object sender, EventArgs e) { Process(); } private void Process() { // deklaruj proměnné pro připojení a čtení dat OleDbConnection conn = null; OleDbCommand cmd = null; OleDbDataReader reader = null; try { // připrav připojovací řetězec string DBConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("~/data/bakalar.mdb"); // otevři připojení conn = new OleDbConnection(DBConnStr); conn.Open(); try { // připrav řetězec s dotazem string sql = @"SELECT dokumenty.*, prilohy.streamsize, prilohy.streamfilename, prilohy.streamtype, prilohy.crtflag, kategorie.nazev, autori.jmeno + ' ' + autori.prijmeni as jmenoprijmeni FROM ((dokumenty LEFT JOIN prilohy ON dokumenty.id = prilohy.id) INNER JOIN kategorie ON dokumenty.kategorieid = kategorie.id) INNER JOIN autori ON dokumenty.autorid = autori.id ORDER BY dokumenty.id "; // proveď dotaz cmd = new OleDbCommand(sql, conn); cmd.CommandType = CommandType.Text; reader = cmd.ExecuteReader(); try { // zpracuj výslednou sadu dat while (reader.Read()) { Response.Write("[" + reader["id"] + "] "); Response.Write("" + reader["title"] + ""); Response.Write(reader["popis"] + ""); } } finally { // uzavři reader reader.Close(); } } finally { // uzavři spojení conn.Close(); } } // ošetři chyby catch (Exception e) { Response.Write("Chyba: " + e.Message); } } }}
44
Příklad použití s komponentou OleDbDataAdapter: using using using using using using using using
System; System.Collections.Generic; System.Linq; System.Web; System.Web.UI; System.Web.UI.WebControls; System.Data; System.Data.OleDb;
namespace bakalar.bakalarNET { public partial class pouzitiado_1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Process(); } private void Process() { // deklaruj proměnné pro připojení a čtení dat OleDbConnection conn = null; OleDbCommand cmd = null; OleDbDataAdapter da = null; try { // připrav připojovací řetězec string DBConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("~/data/bakalar_aaa.mdb") + ";Jet OLEDB:Database Password=aaa;"; //string DBConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("~/data/bakalar.mdb"); // otevři připojení conn = new OleDbConnection(DBConnStr); conn.Open(); try { // připrav řetězec s dotazem string sql = @"SELECT dokumenty.*, prilohy.streamsize, prilohy.streamfilename, prilohy.streamtype, prilohy.crtflag, kategorie.nazev, autori.jmeno + ' ' + autori.prijmeni as jmenoprijmeni FROM ((dokumenty LEFT JOIN prilohy ON dokumenty.id = prilohy.id) INNER JOIN kategorie ON dokumenty.kategorieid = kategorie.id) INNER JOIN autori ON dokumenty.autorid = autori.id ORDER BY dokumenty.id "; // proveď dotaz cmd = new OleDbCommand(sql, conn); cmd.CommandType = CommandType.Text; da = new OleDbDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); // připoj získaná data k zobrazovací komponentě this.Repeater1.DataSource = dt; this.Repeater1.DataBind(); } finally { // uzavři spojení conn.Close(); } }
45
// ošetři chyby catch (Exception e) { Response.Write("Chyba: " + e.Message); } } } }
K výše uvedenému kódu musí být na .aspx stránce definovaná komponenta Repeater, která zobrazuje získaná data.
Příklad kódu - .aspx stránky s komponentou Repeater <SeparatorTemplate>
Příklad kódu - uložení nového záznamu do databáze: // deklaruj proměnné pro připojení a čtení dat OleDbConnection conn = null; OleDbCommand cmd = null; // připrav připojovací řetězec string DBConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("~/data/bakalar_aaa.mdb") + ";Jet OLEDB:Database Password=aaa;"; //string DBConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("~/data/bakalar.mdb"); // otevři připojení conn = new OleDbConnection(DBConnStr); // připrav řetězec s QSL příkazem pro insert string sql = @"insert into [dokumenty] ([kategorieid],[autorid],[title],[active],[popis],[upddate],[slozeni],[usrdate ]) values (@kategorieid ,@autorid, @title, @active, @popis ,now(), @slozeni, @usrdate )"; // definuj object OleDbCommand cmd = new OleDbCommand(sql, conn); cmd.CommandType = CommandType.Text; // naplń vstupní parametry SQL příkazu int i = int.Parse(((DropDownList)Tools.SearchControl(this.FormView1, "ddlSkupina")).SelectedValue); cmd.Parameters.AddWithValue("@kategorieid", i); i = int.Parse(((DropDownList)Tools.SearchControl(this.FormView1, "ddlAuthor")).SelectedValue); cmd.Parameters.AddWithValue("@autorid", i);
46
string s = ((TextBox)Tools.SearchControl(this.FormView1, "tbTitle")).Text; cmd.Parameters.AddWithValue("@title", s); bool b = ((CheckBox)Tools.SearchControl(this.FormView1, "chbActive")).Checked; cmd.Parameters.AddWithValue("@active", Convert.ToInt16(b)); s = ((TextBox)Tools.SearchControl(this.FormView1, "tbPopis")).Text; cmd.Parameters.AddWithValue("@popis", s); s = ((TextBox)Tools.SearchControl(this.FormView1, "tbSlozeni")).Text; cmd.Parameters.AddWithValue("@slozeni", s); DateTimeFormatInfo myInv = new CultureInfo("cs-CZ", true).DateTimeFormat; myInv.DateSeparator = "."; myInv.TimeSeparator = ":"; myInv.FullDateTimePattern = "dd.M.yyyy hh:mm:ss"; s = ((TextBox)Tools.SearchControl(this.FormView1, "tbUsrDate")).Text; cmd.Parameters.AddWithValue("@usrdate", DateTime.Parse(s, myInv)); // otevři spojení s datbází conn.Open(); // proveď příkaz insert i = cmd.ExecuteNonQuery(); // uzavři spojení s databází conn.Close();
4.4 Prezentace v prostředí PHP 4.4.1 Přístup k databázi MS Access v prostředí PHP Prezentační aplikaci v prostředí PHP jsem vytvářel ve vývojovém prostředí NetBeans. Aplikace je napsaná v jazyce PHP verze 5.2.9. Aplikaci jsem vyvíjel a testoval opět na lokálním serveru IIS. V případě použití lokálního serveru IIS je třeba nainstalovat a nakonfigurovat distribuci prostředí PHP pro podporu souborů s příponou (.php). Tyto distribuce najdeme na webové stránce http://www.php.net/downloads.php. Umístění aplikace Webová aplikace je umístěna na adrese https://purpa.helpsoft.cz/bakalar
Výpis souborové struktury aplikace: 04.05.2010
14:15
bakalar
27.06.2010
20:43
bakalarPHP
03.03.2010 26.04.2010 28.05.2010 28.05.2010 28.05.2010 28.05.2010 26.04.2010 03.05.2010
16:32 13:06 11:36 11:36 13:42 13:42 12:57 14:55
27.06.2010
20:37
529 2˙992 1˙111 1˙111 1˙117 1˙117 15˙976 17˙235
default.htm getimage.php pouzitiCOM.php pouzitiCOM.txt pouzitiodbc.php pouzitiodbc.txt presentace.php presentaceCOM.php inc
47
26.04.2010
12:28
4˙582 HSfunc.inc
27.06.2010 27.04.2010
20:37 21:04
27.06.2010 18.04.2010 18.04.2010 16.04.2010
20:37 00:31 00:34 22:49
27.06.2010 28.05.2010
20:48 13:44
27.05.2010
19:05
css 4˙341 stylesheet.css obr 459 headerasp.jpg 439 headernet.jpg 434 headerphp.jpg Data 3˙502˙080 bakalar.mdb 11˙974 default.htm
Stránky aplikace PHP Aplikace se skládá z webových stránek uvedených dále v seznamu. Jednotlivé stránky v aplikaci plní tyto funkce:
Webové stránky
Popis zobrazení dat z databáze ve struktuře Receptář pomocí PHP funkcí
presentace.php
ODBC zobrazení dat z databáze ve struktuře
presentaceCOM.php
Receptář pomocí PHP třídy COM stránka se používá pro čtení a zobrazení jednoho obrázku z databáze, je volaná ve
getimage.php
stránce presentace.php
Na uvedených webových stránkách jsou použity funkce ze souboru hsfunc.php11. Při psaní aplikace v prostředí PHP se vyskytly některé problémy. Zpočátku jsem se nemohl připojit k databázi a chybová hlášení, které PHP zobrazovalo, nebyla dostatečně vypovídající pro odstranění problémů. Dále jsem nenašel žádný volně dostupný veřejný bezplatný server, který by podporoval přístup z PHP do databáze MS Access. Avšak aplikaci se mi podařilo umístit na veřejně dostupný server jedné soukromé firmy. Aplikace zde běží na serveru IIS Windows Server 2008 a nikoliv na serveru Apache HTTP Server, který je pro PHP typický.
11
hsfunc.php - nadstavba pro tvorbu tagů HTML
48
Některé specifické požadavky při použití PHP Na lokálním serveru ISS je nutné povolit oprávnění pro zápis skupině Users do adresáře, kde je umístěna databáze.
Příklad kódu - chybová hláška související s nastavením oprávnění Users: Error: [opendb] S1000 | [Microsoft][Ovladač ODBC pro Microsoft Access]Obecná chyba Nelze otevřít klíč registru Temporary (volatile) Jet DSN for process 0x3a8 Thread 0x1fc DBC 0x14fc214 Jet.
Dále je třeba nastavit v souboru php.ini hodnotu odbc.defaultlrl = 8000000. Pokud není provedeno nastavení, nezobrazují se nebo se zobrazují pouze částečné fotografie12.
Poté, co jsem otestovanou aplikaci umístil na veřejný server, zjistil jsem, že se v textu nezobrazuje diakritika. Webovou stránku jsem upravil tak, aby se k databázi přistupovalo pomocí PHP třídy COM [27], kdy je možné použít komponenty ADO [14] a při připojení k databázi specifikovat požadovanou kódovou stránku.
Příklad kódu - příklad otevření databáze pomocí třídy COM $conn = new COM("ADODB.Connection", NULL, 1250); $conn->open($domain);
Příklad kódu - použití řetězce ConnectionString s ODBC a COM: $filename = '../data/bakalar.mdb'; $db_filename = realpath($filename); // pro odbc_ $domain = 'Driver={Microsoft Access Driver (*.mdb)};Dbq='. $db_filename; // mozne pro COM $domain = 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=' .$db_filename;
Příklad přístupu k databázi MS Access z prostředí PHP Příklad kódu - použití PHP s funkcí ODBC:
Nastavení souvisí se čtením položek typu objekt OLE z databáze.
49
$cursr = "SQL_CUR_DEFAULT"; $conn = null; $conn = odbc_connect($domain,$userid,$passwd,$cursr); $sql = " SELECT dokumenty.*, "; $sql .= " prilohy.streamsize, prilohy.streamfilename, prilohy.streamtype, prilohy.crtflag, "; $sql .= " kategorie.nazev, "; $sql .= " autori.jmeno + ' ' + autori.prijmeni as jmenoprijmeni "; $sql .= " FROM ((dokumenty LEFT JOIN prilohy ON dokumenty.id = prilohy.id) "; $sql .= " INNER JOIN kategorie ON dokumenty.kategorieid = kategorie.id) "; $sql .= " INNER JOIN autori ON dokumenty.autorid = autori.id "; $sql .= " ORDER BY 1"; $rs = odbc_exec($conn,$sql); while (odbc_fetch_row($rs)) { echo ("[" . odbc_result($rs,"id") . ") "); echo ("" . odbc_result($rs,"title") . ""); echo (odbc_result($rs,"popis") . ""); } $conn->close(); ?>
Příklad kódu - použití PHP třídy COM a ADODB: open($domain); $sql = " SELECT dokumenty.*, "; $sql .= " prilohy.streamsize, prilohy.streamfilename, prilohy.streamtype, prilohy.crtflag, "; $sql .= " kategorie.nazev, "; $sql .= " autori.jmeno + ' ' + autori.prijmeni as jmenoprijmeni "; $sql .= " FROM ((dokumenty LEFT JOIN prilohy ON dokumenty.id = prilohy.id) "; $sql .= " INNER JOIN kategorie ON dokumenty.kategorieid = kategorie.id) "; $sql .= " INNER JOIN autori ON dokumenty.autorid = autori.id "; $sql .= " ORDER BY 1"; $rs = $conn->execute($sql); while (!$rs->EOF) { echo ("[" . $rs->Fields("id")->value . "] "); echo ("" . $rs->Fields("title")->value . "
"); echo ($rs->Fields("popis")->value . "
"); $rs->MoveNext(); } $conn->close(); ?>
50
4.5 Prezentace v prostředí ASP 4.5.1 Přístup k databázi MS Access v prostředí ASP. Prezentační aplikaci v prostředí ASP jsem vytvářel taktéž ve vývojovém prostředí Microsoft Visual studio 2008. Aplikaci jsem vyvíjel a testoval opět na lokálním serveru IIS. Aplikace je napsaná v jazyce JavaScript. Umístění aplikace Webová aplikace je umístěna na adrese http://peso2.webng.com
Výpis souborové struktury aplikace 04.05.2010
14:15
bakalar
04.05.2010 31.03.2010 26.04.2010 27.05.2010 27.05.2010 29.03.2010 27.05.2010 27.05.2010 27.05.2010 27.05.2010 26.04.2010
14:15 14:19 14:48 15:38 15:38 17:22 18:54 18:54 14:16 14:16 15:14
26.04.2010 30.03.2010 14.04.2010
14:53 14:33 15:26
04.05.2010 27.04.2010
10:44 21:13
css 4 341 stylesheet.css
04.05.2010 27.04.2010 27.04.2010 27.04.2010
10:44 21:13 21:13 21:13
obr 459 headerasp.jpg 439 headernet.jpg 434 headerphp.jpg
26.04.2010 28.05.2010
14:06 13:44
04.05.2010
10:52
272 3˙492 4˙980 4˙980 1˙069 2˙324 2˙324 1˙823 1˙823 14˙388
bakalarASP Default.htm dokumenty.asp generatet.asp generatet.txt getimage.asp jscreatedb.asp jscreatedb.txt pouzitiado.asp pouzitiado.txt presentace.asp
lib 6 201 db.asp 23 204 HSfunc.asp
Data 3˙502˙080 bakalar.mdb 11 441 default.htm
Technologie ASP poskytuje výborné podmínky pro přístup k databázi MS Access. Je to dáno tím, že všechny použité prvky tj. ASP, ADO [14] i MS Access jsou produkty firmy Microsoft Corporation. Ze stránek ASP se k databázi přistupuje pomocí komponent ADO [14], objektů ADODB.Connection a ADODB.Recordset. ASP stránku je možné napsat ve skriptovacím jazyce VBScript nebo JavaScript. Microsoft preferuje VBScript. Oba skriptovací jazyky disponují metodou
51
Server.CreateObject, která na serveru vytvoří potřebné objekty z knihovny ADO [14]. Pomocí těchto objektů můžeme přistupovat k databázi. Objektu ADODB.Connection je nutné opět předat řetězec ConnectionString. Objekt ADODB.Recordset převezme příkaz SQL a vrátí požadovanou množinu dat. Následně data může zobrazit.
Příklad kódu - přístup k databázi MS Access z prostředí ASP: <%@ Language=JavaScript Codepage="1250" %> <% try { var adOpenForwardOnly = 0; var adLockReadOnly = 1; var adCmdText = 1; var adUseClient = 3 var DBConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("/bakalar/data/bakalar_aaa.mdb") + ";Jet OLEDB:Database Password=aaa;"; //Response.Write(DBConnStr); var conn = Server.CreateObject("ADODB.Connection"); conn.open(DBConnStr); var rs = Server.CreateObject("ADODB.Recordset"); rs.cursorLocation = adUseClient; var sql =
"SELECT dokumenty.*, " + "prilohy.streamsize, prilohy.streamfilename, prilohy.streamtype, prilohy.crtflag, " + "kategorie.nazev, " + "autori.jmeno + ' ' + autori.prijmeni as jmenoprijmeni " + "FROM ((dokumenty LEFT JOIN prilohy ON dokumenty.id = prilohy.id) " + "INNER JOIN kategorie ON dokumenty.kategorieid = kategorie.id) " + "INNER JOIN autori ON dokumenty.autorid = autori.id " + "ORDER BY dokumenty.id "; rs.open(sql, conn, adOpenForwardOnly, adLockReadOnly, adCmdText); while (!rs.eof) { Response.Write( "[" + Server.HTMLEncode(rs.Fields("id").Value) + "] "); Response.Write( "" + Server.HTMLEncode(rs.Fields("title").Value) + ""); Response.Write( Server.HTMLEncode(rs.Fields("popis").Value) + ""); rs.moveNext(); } rs.close(); conn.close(); } catch (e) { text = "[Chyba:]Error name: [" + e.name + "];Error message: [" + e.message + "]"; Response.Write(text); } %>
52
Stránky aplikace ASP Aplikace se skládá z webových stránek uvedených dále v seznamu. Jednotlivé stránky v aplikaci plní tyto funkce:
Webové stránky presentace.asp
Popis zobrazení dat z databáze ve struktuře Receptář
getimage.asp
stránka se používá pro čtení a zobrazení jednoho obrázku z databáze, je volaná ve stránce presentace.asp
Na obou webových stránkách jsou použity funkce ze souborů db.asp13 a hsfunc.asp14. Již jsem se zmiňoval o možností vytvoření ASP stránky zobrazující data z MS Access databáze použitím funkce Export dat do stránky ASP15. V následujícím příkladu jsem vygeneroval stránku z výběrového dotazu SQL uloženého v databázi a exportoval jej do stránky ASP. Tento exportovaný zdrojový kód v jazyce VBScript, jsem dále upravil.
Příklad kódu - vygenerovaná a následně upravená ASP stránka: <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=windows-1250"> <TITLE>generovana ASP stranka <% Dim path, connStr path = Server.MapPath("/bakalar/data/bakalar.mdb") connStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & path Set conn = Server.CreateObject("ADODB.Connection") conn.open connStr,"","" sql = "SELECT dokumenty.id, dokumenty.kategorieid, dokumenty.title, dokumenty.slozeni, dokumenty.popis, dokumenty.upddate, prilohy.stream, prilohy.streamsize, prilohy.streamfilename, prilohy.streamtype, prilohy.crtflag, kategorie.nazev, autori.jmeno+' '+autori.prijmeni AS jmenoprijmeni FROM ((dokumenty LEFT JOIN prilohy ON dokumenty.id=prilohy.id) INNER JOIN kategorie ON dokumenty.kategorieid=kategorie.id) INNER JOIN autori ON dokumenty.autorid=autori.id ORDER BY 1 " Set rs = Server.CreateObject("ADODB.Recordset")
13
db.asp - nadstavba nad objekty ADO[14]
14
hsfunc.asp - nadstavba pro tvorbu tagů HTML
15
viz kap. 3.3.2
53
rs.Open sql, conn, 3, 3 %> select_detail id | kategorieid | title | slozeni | popis | upddate | stream | streamsize | streamfilename | streamtype | crtflag | nazev | jmenoprijmeni |
<% On Error Resume Next rs.MoveFirst do while Not rs.eof %> <%=Server.HTMLEncode(rs.Fields("id").Value)%>
| <%=Server.HTMLEncode(rs.Fields("kategorieid").Value)%>
| <%=Server.HTMLEncode(rs.Fields("title").Value)%>
| <%=Server.HTMLEncode(rs.Fields("slozeni").Value)%> | <%=Server.HTMLEncode(rs.Fields("popis").Value)%>
| <%=Server.HTMLEncode(rs.Fields("upddate").Value)%> | />
|
54
COLOR=#000000><%=Server.HTMLEncode(rs.Fields("streamsize").Value)%> | <%=Server.HTMLEncode(rs.Fields("streamfilename").Value)%>
| <%=Server.HTMLEncode(rs.Fields("streamtype").Value)%> | <%=Server.HTMLEncode(rs.Fields("crtflag").Value)%> | <%=Server.HTMLEncode(rs.Fields("nazev").Value)%>
| <%=Server.HTMLEncode(rs.Fields("jmenoprijmeni").Value)%>
|
<% rs.MoveNext loop%>
55
5 Závěr Výše uvedené příklady ukázaly, že databázi MS Access pro prezentaci dat na webu lze použít. Bez problémů je to možné všude tam, kde jsou dostupné ADO[14] komponenty nebo v prostředí .NET Framework. Tato podmínka však výrazně omezuje prostor použití tohoto řešení prezentace dat a vyřazuje převážnou většinu webů postavených na serverech APACHE.
5.1 Zhodnocení možností publikace dat na webu Pokud se však zaměříme na posouzení vhodnosti použití této databáze, musíme dospět k názoru, že databáze k tomuto účelu není příliš vhodná. Neexistuje možnost vzdálené správy databáze přímo na webu. Databáze není stavěná na velký rozsah dat. Při přístupu k databázi více uživateli současně, může dojít ke kolizi.
5.2 Možnosti použití jiných databázových zdrojů MS Access je možné získat jako součást balíku MS Office cena cca 14 500 Kč, nebo zakoupit samostatně cena cca 6 500 Kč. (Alza 6/2010). Oproti tomu databázi SQLExpress s daleko lepšími parametry poskytuje firma Microsoft zdarma. Tato databáze však není souborová. Pokud bychom trvali na tomto požadavku souborové databáze, doporučoval bych spíše databázi SQLite. Databáze je zdarma a přístup k ní je podporován i na serverech APACHE.
56
6 Seznam použitých zdrojů [1] - Bill, Evjen; Scott, Hanselman; Farhan, Muhammad; Devin, Rader; Srinivasa, Sivakumar -- ASP.NET 2.0 : Programujeme profesionálně -- [překlad z angličtiny Karel Voráček] -- Brno : Computer Press, 2006 -- 1224 s. : il. [2] - Linnaeus, Carl -- Carl Linnaeus Invented The Index Card -- ScienceDaily LLC [online] -- c2010 -- Dostupný z WWW: [3] - Forpsi -- Připojení k MDB (MS Access) databázi -- FORPSI [online] -- c2010 -Dostupný z WWW: [4] - Landow, George P. -- Hypertext: The Convergence of Contemporary Critical Theory and Technology -- Baltimore: Johns Hopkins University Press, 1992. [5] - Chamberlin, Donald D.; Boyce, Raymond F. (1974) -- "SEQUEL: A Structured English Query Language" (PDF) -- Proceedings of the 1974 ACM SIGFIDET Workshop on Data Description, Access and Control (Association for Computing Machinery): 249–264. -- Dostupný z WWW: [6] - Kocan, Marek -- Databáze dneška – seriál -- DBsvět.cz [online] -- c2004 [cit. 2010-03-16] -- Dostupný z WWW: [7] - Kosek, Jiří -- Jak pracují databáze na Webu, Co je to databáze -- Téměř vše o WWW.kosek.cz [online] -- c2006 -- Dostupně z WWW: [8] - MACÁK, Petr -- Administrace databázového systému ORACLE -- ISBN 978-80245-1441-3 [9] - Microsoft Corporation -- Office Download Catalog-- Microsoft Office Online [online] -- c2010 -- Dostupný z WWW: [10] - Microsoft Corporation -- Přehled systému Microsoft Office 2007 -- Microsoft Office Online [online] -- c2010 -- Dostupný z WWW: [11] - Microsoft Corporation -- What's new in Microsoft Office Access 2007 -- Microsoft Office Online [online] -- c2010 -- Dostupný z WWW:
57
[12] - Microsoft Corporation -- Režim ANSI dotazu SQL (MDB) [online] -- c2010 -Dostupný z WWW: [ 13 ] - Microsoft Corporation -- Nápověda a postupy k aplikaci Access 2003 -Microsoft Office Online [online] -- c2010 [cit. 2010-03-16] -- Dostupný z WWW: [14] - Microsoft Corporation -- Microsoft ActiveX Data Object ADO -- Microsoft Developer Network Library [online] -- c2010 [cit. 2010-03-16] -- Dostupný z WWW: [15] - Netcraft Ltd -- June 2010 Web Server Survey -- c2010 -- Dostupný z WWW: http://news.netcraft.com/archives/category/web-server-survey/ [16] - Tišnovský, Pavel -- Programování mainframů: COBOL -- Root.cz [online] -c2010 -- Dostupný z WWW: [17] - Pokorný, Jaroslav -- Databázové systémy a jejich použití v informačních systémech / Jaroslav Pokorný -- Praha : Academia, 1992 -- 313 s -- ISBN 80-2000177-8 [18] - Roberts, Larry -- Lawrence Roberts Manages The ARPANET Program -- Living Internet [online] -- c2010 -- Dostupný z WWW: [19] - The Apache Software Foundation -- Apache HTTP Server Project -- c2009 -Dostupný z WWW: [20] - Viescas, John L. -- Microsoft Mistrovství v Microsoft Office Access 2003 -Computer Press, duben 2005 -- 968 s. : il. -- ISBN: 80-251-0537-7 [21] - W3C -- Extensible Markup Language (XML) -- c2010 -- Dostupný z WWW: [ 22 ] - W3C -- The Extensible Stylesheet Language Family (XSL) -- c2010 -Dostupný z WWW: <www.w3.org/Style/XSL/> [23] - W3C -- Web Style Sheets -- c2010 -- Dostupný z WWW: [24] - W3C -- Document Object Model (DOM) -- c2010 -- Dostupný z WWW: [25] - W3C -- XML Schema Part 0: Primer Second Edition -- c2010 -- Dostupný z WWW:
58
[26] - Microsoft Corporation -- Permission levels and permissions -- Microsoft Office Online [online] -- c2010 [cit. 2010-03-16] -- Dostupný z WWW: [27] - Gilmore, W. Jason -- Velká kniha PHP 5 & MySQL -- [překlad z angličtiny RNDr. Jan Pokorný] -- Brno : Zoner Press, 2005 -- 712 s. : il.
59
7 Přílohy I. Terminologický slovník II. Obsah CD III. Obrázky webových aplikací
60
I. Terminologický slovník ADO - ActiveX Data Object ANSI - American National Standards Institute ARPANET - Advanced Research Projects Agency Network ASP - Active Server Pages COM - Component Object Model CSS - Cascading Style Sheets DBMS - Database Management System DSN - Database source name DSSSL - Document Style Semantics and Specification Language HTML - HyperText Markup Language IIS - Internet Information Services MDAC - Microsoft Data Access Components MSODSC - Microsoft Office Data Source Control ODBC - Open Database Connectivity QBE - Query by Example RDBMS - Relational database management system SQL - Structured Query Language UNC - Universal Naming Convention WWW - World Wide Web W3C - World Wide Web Consortium XML - Extensible Markup Language XSD - XML Schema Definition XSL - eXtensible Stylesheet Language XSLT - eXtensible Stylesheet Language Transformations
61
II. Obsah CD Adresář
Obsah
/txt
Text bakalářské práce ve formátu .pdf
/bakalar
Zdrojové soubory aplikace
62
III. Obrázky webových aplikací
Obr. 11.- prezentace ASP.NET
Obr. 12.- editační prostředí ASP.NET
63
Obr. 13.- prezentace ASP
Obr. 14. - prezentace PHP
64