programování aplikací pro internet

ASP a databáze


Pro začátek vytvoříme databázi v MS Accessu ta však není určena na profesionální nasazení na nějakém velkém projektu, ale pro naše testování plně postačí. Je to desktopová aplikace, která není schopna odpovídat na desítky dotazů za minutu. Pokud vaše stránky někdy umistíte na internet, asi využijete spíše MS SQL SERVER.

Databázi uložíme jako C:\Databáze\zkouska.mdb. Je lepší umisťovat databáze s důležitými daty jinam než do adresářů vašeho serveru - jsou více chráněny proti jednoduchému stáhnutí, což ve většině případů nechcete. V ní vytvoříme tabulku zkousku se čtyřmi poli (sloupci): ID, Jmeno, Prijmeni a Funkce. První pole, ID, slouží jako primární klíč - tedy něco, čím lze jednoznačně identifikovat každý záznam (řádek) v tabulce. Žádný jiný záznam v jedné tabulce nemůže mít stejné ID.

rozhraní ODBC a vytvoření DSN

ASP přistupuje k tabulkám pomocí rozhraní Open Database Connectivity (ODBC). Tam nastavíme Data Service Name (DSN) databáze. DSN popisuje cestu k databázi (zdroji dat). To velice zjednodušuje přístup k databázi - dlouhou cestu k různým databázím nemusíme vypisovat ve všech našich stránkách, ale napíšeme jen jméno DSN. A pokud databázi přemístíme, změníme cestu jen na jednom místě, a nikoliv ve všech stránkách. DSN nastavíte takto: jdětě na Start - Nastavení - Ovládací panely - Zdroje dat ODBC. Tam přepněte na kartu Systémové DSN, následně kliknětě na tlačítko Přidat. Vyberete "ovladač, pro který chcete vytvořit zdroj dat". V našem případě je to Microsoft Access Driver (*.mdb) a zmáčkněte Dokončit. Zobrazí se vám další okno. Do Názvu zdroje dat napište zkouska, do popisu například "Zkouška připojení ke zdroji dat" a databázi zkouska.mdb vyberte kliknutím na tlačítko Vybrat v prostřední části nabídky. Odklikněte OK a na záložce Systémové DSN vidíte nově přidanou Zkousku .

vložení záznamu do databáze

A protože již máme potřebné kroky za sebou, pustíme se do první ukázky. Jelikož použijeme jen jednu proměnnou, myslím, že bychom mohli její deklaraci přeskočit. Další krok je otevření spojení s databází:

Set conn = Server.CreateObject ("ADODB.Connection")
conn.Open ("Zkouska")

Protože ASP při práci s databázemi využívá komponentu ActiveX Data Objects (ADO), musíme vytvořit jejich instanci. Komponenta ale v sobě skrývá tři objekty (Connection, Command a Recordset), my však použijeme Connection, neboť ostatní dva teď nepotřebujeme. Po vytvoření instance objektu pak otevřeme pomocí DSN databázi Zkousku.

Dalším krokem bude kód na přidání dvou řádků do databáze:

conn.Execute ("INSERT INTO zkouska(Jmeno,Prijmeni,Funkce) VALUES('Karel','Hora','majitel')")
conn.Execute ("INSERT INTO zkouska(Jmeno,Prijmeni,Funkce) VALUES('Jana','Peterková','sekretářka')")

Takto se do tabulky databáze vloží dva nové řádky. Příkaz conn.Execute vykoná dotaz v SQL. Pro vložení záznamu do tabulky se využívá INSERT INTO, který se vyplňujě takto: INSERT INTO nazev_tabulky(sloupec1,...,sloupecN) VALUES(hodnota1,...,hodnotaN).

Posledním krokem je uzavření tabulky a uvolnění paměti po objektu Connection:

conn.Close
Set conn = Nothing

A celý kód pak vypadá takto:

<%
Dim conn
Set conn = Server.CreateObject ("ADODB.Connection")
conn.Open ("Zkouska")
conn.Execute ("INSERT INTO zkouska(Jmeno,Prijmeni,Funkce) VALUES('Karel','Hora','majitel')")
conn.Execute ("INSERT INTO zkouska(Jmeno,Prijmeni,Funkce) VALUES('Jana','Peterková','sekretářka')")
conn.Close
Set conn = Nothing
%>

úprava záznamu

V naší jednoduché modelové situaci máme živnostníka Karla Horu, který zaměstnává sekratářku Janu Peterkovou. Po nějaké době sekretářka podá výpověď, a tak pan Hora je nucen přijmout novou, např. slečnu Evu Sedláčkovou. A tak bude muset svou databázi upravit. Kód začíná i končí stejně, mění se jen ta střední část. Místo příkazu INSERT INTO použijeme jiný - pro modifikaci:

conn.Execute ("UPDATE zkouska SET Jmeno='Eva', Prijmeni='Sedláčková' WHERE ID=2")

Tímto kódem jsme přepsali Janu Peterkovou na Evu Sedláčkovou. Příkaz UPDATE se zapisuje takto: UPDATE nazev_tabulky SET nazev_sloupce1=nova_hodnota1, ... , nazev_sloupceN=nova_hodnotaN WHERE podminka. Podmínku máme ID=2, takže se informace modifikují jen na řádku s ID 2.

celý kód

<%
Dim conn
Set conn = Server.CreateObject ("ADODB.Connection")
conn.Open ("Zkouska")
conn.Execute ("UPDATE zkouska SET Jmeno='Eva', Prijmeni='Sedláčková' WHERE ID=2")
conn.Close
Set conn = Nothing
%>

mazání záznamů

Pan Hora přijmul dalšího zaměstnance (blíže nespecifikované funkce), po půl roce jej propustí, protože s ním není spokojen. A rozhodne se, že místo něj nepřijme žádného nového - tím pádem jen vymaže jeden záznam v tabulce:

conn.Execute ("DELETE FROM zkouska WHERE ID=3")

Syntaxe: DELETE FROM nazev_tabulky WHERE podminka.

výpis obsahu tabulky

V další - a poslední - situaci pan Hora potřebuje vypsat obsah tabulky zaměstnanců. Začneme deklarací proměnných, připojením k databázi a načtením dat:

<%
Dim conn, rs
Set conn = Server.CreateObject ("ADODB.Connection")
conn.Open ("Zkouska")
Set rs = conn.Execute ("SELECT * FROM zkouska")
%>

Příkazem conn.Execute (SELECT * FROM zkouska) vybereme z tabulky úplně všechna data (select = vybrat). Abychom s nimi mohli pracovat, přidáme je k proměnné rs . Tím vytvoříme instanci objektu Recordset, představující množinu záznamů vrácených databázovým programem jako odpověď na jemu poslaný SQL kód.

Za tímto kódem začneme stránku HTML, tabulku, a uděláme hlavičku k tabulce:

<html>
<head>
<title>Výpis</title>
</head>
<body>
<table border="1">
<tr>
<td><b>ID</b></td>
<td><b>Jméno</b></td>
<td><b>Příjmení</b></td>
<td><b>Funkce</b></td>
</tr>

Pak následuje zase kód ASP:

Do Until rs.EOF
Response.write "<tr><td>" & rs("ID") & "</td>"
Response.write "<td>" & rs("Jmeno") & "</td>"
Response.write "<td>" & rs("Prijmeni") & "</td>"
Response.write "<td>" & rs("Funkce") & "</td></tr>"
rs.MoveNext
Loop
Set rs = Nothing
conn.Close
Set conn = Nothing
%>

"Do While Not rs.EOF ... Loop" představuje smyčku (cyklické opakování). Pomocí smyčky můžeme opakovat vybranou část kódu tak dlouho, dokud bude platit stanovená podmínka. Kdybychom chtěli podmínku ve smyčce volně přeložit, zní asi takto: "Opakuj kód, dokud není ukazatel v tabulce na konci". Tímto kódem vypisujeme záznamy z databáze do přehledné tabulky pracovníků. Jedno zpracování smyčky vypíše jeden řádek. Příkazem rs.MoveNext se ukazatel v tabulce po zpracování řádku posune na řádek další, a zajistí se tak zpracování celé tabulky. Nakonec uzavřeme databázi a uvolníme paměť dosud zabranou objekty Recordset a Connection.

celý kód

<%
Dim conn, rs
Set conn = Server.CreateObject ("ADODB.Connection")
conn.Open ("Zkouska")
Set rs = conn.Execute ("SELECT * FROM zkouska")
%>
<html>
<head>
<title>Výpis</title>
</head>
<body>
<table border="1">
<tr>
<td><b>ID</b></td>
<td><b>Jméno</b></td>
<td><b>Příjmení</b></td>
<td><b>Funkce</b></td>
</tr>
<%
Do Until rs.EOF
Response.write "<tr><td>" & rs("ID") & "</td>"
Response.write "<td>" & rs("Jmeno") & "</td>"
Response.write "<td>" & rs("Prijmeni") & "</td>"
Response.write "<td>" & rs("Funkce") & "</td></tr>"
rs.MoveNext
Loop
Set rs = Nothing
conn.Close
Set conn = Nothing
%>
</table>
</body>
</html>


příklady:

první jednoduchá ukázka