ASP kezdőknek 3 – Adatbázisok

Az ASP egyik legtöbbet használt funkciója az adatbázisokkal való munka. Ebben a részben ezzel fogok foglalkozni.

Az adatbázisokról pár szóban

Egy weboldalt az adatbázisok használata tehet igazán dinamikussá. Az adatbázisok segítségével rengeteg interaktív szolgáltatást valósíthatunk meg. Pl.: fórum, vendégkönyv, képeslapküldő, statisztika, stb. Adatokat gyűjthetünk látogatóinkról, kikérhetjük véleményüket egy szavazógéppel, vagy regisztráltathatjuk őket egy szolgáltatásra.

Milyen adatbázist használjunk?

Az ASP szkript gyakorlatilag bármilyen ODBC kompatíbilis adatbázissal képes együttműködni, de a három leggyakrabban használt adatbázis az Access, a MySQL és az MSSQL. Itt most az Access adatbázisok használatát fogom ismertetni, de túl sok különbség nincsen a használatuk között.

Egy adatbázishoz is lehet többféle módon kapcsolódni. Kapcsolódhatunk egy előre definiált DNS-en keresztül is, de tekintve, hogy nem minden szerveren használhatunk DNS kapcsolatokat és a DNS nélküli kapcsolat gyorsabb, én ezt a módszert választottam.

Kapcsolódás az adatbázishoz

Ahhoz, hogy használni tudjunk egy adatbázist, előbb fel kell építenünk vele a kapcsolatot. Ezt a következő ASP kóddal tehetjük meg:

Dim Conn

Set Conn = Server.CreateObject("ADODB.Connection")

Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db.mdb"))

A fenti példában az első sor megadja, hogy milyen típusú adatbázist szeretnénk használni, a második sor pedig megnyitja az adatbázist (a db.mdb helyére az adatbázis nevét és elérési útját kell írni), amit azután a Conn objektumon keresztül tudunk használni. Fontos, hogy ha módosítani is szeretnénk az adatbázist, akkor olyan könyvtárba tegyük, melyen engedélyezve van az írásjog (IUSR számára). A megnyitott adatbázisból azután SQL parancsokkal, tranzakció alapon tudunk olvasni és írni.

Lekérdezések

Ennek a cikknek nem célja az SQL parancsok ismertetése, hisz ezekkel sok vaskos könyv foglalkozik. Itt csak a legfontosabb SQL parancsokat ismertetném.

Első példámban az adatbázis egyik táblájának meghatározott rekordját olvassuk ki:

Dim Adatok

Set Adatok = Conn.Execute("Select * from tabla where ID=33")

Ez a parancs az adatbázis tabla nevű táblájából kiolvassa az összes mező adatát, ahol a rekordazonosító 33. Ez után a mezőkre a következő módon hivatkozhatunk:

Valtozo = Adatok(0)

Valtozo2 = Adatok(1)

A rekord mezői tehát az adatok tömb elemei lettek. Fontos megjegyezni, hogy a rekord első mezője a tömb 0. (nulladik) eleme lett. Ez után a kapott adatokat feldolgozhatjuk, kiírhatjuk, vagy áttölthetjük egy másik adatbázisba. Az első példaprogram (aspdb1.asp) egy adatbázis megadott táblájából kérdez le egy rekordot, és kiírja az eredményt.

Hozzáadás

Ha egy új rekordot szeretnénk beszúrni az adatbázisba, azt a következőképpen tehetjük meg:

Conn.Execute("Insert Into tabla (mezo1,mezo2,mezo3) values (123, 'abc','2003.03.06.')")

Ez a sor a tabla nevű táblába beszúr egy új rekordot, ahol a mezo1, mezo2 és mezo3 mezők értéke rendre 123 (numerikus érték), abc (szöveges érték) és 2003.03.06. (dátum). A beszúráskor az azonosító (ID) mező értékét nem kell megadni, hiszen ez automatikusan generálódik. A közvetlen értékek helyett természetesen változókat is használhatunk. Ilyenkor & jelekkel kel összefűzni az SQL parancs részleteit és a változókat. A második példaprogram (aspdb2.asp) egy űrlap adatait tárolja el az adatbázisban

Törlés

A törlés legalább olyan fontos, mint a lekérdezés vagy a bővítés. A törléssel azonban vigyáznunk kell, mert az ASP-n keresztül nincs megerősítési kérelem, és ha valamit elírunk, akár az adatbázis teljes tartalmát vagy egy tábla tartalmát is törölhetjük. Ezért a törléseket érdemes előbb az Access-en belül teszteli, és csak akkor beszúrni az ASP-be, ha biztosak vagyunk abban, hogy csak azt fogja törölni, amit szeretnénk.

Pl.:

Conn.Execute("Delete from tabla where ID=33")

A fenti sor a tabla nevű táblából kitörli a 33-as rekordot.

Módosítás

Az adatbázisban lévő rekordokat persze módosítani is tudnunk kell. A módosítás viszonylag egyszerű:

 Conn.Execute("Update tabla set mezo1=456, mezo2='def', mezo3='2003.03.07.' where ID=33")

Ez a parancs a tabla nevű tábla 33-as rekordját módosítja, megadva az egyes mezők új értékeit. Ha nem írunk szűrőfeltételt (where) a parancsba, akkor az összes rekordot módosítani fogja. Ennek statikus adatokkal nyilván nincs értelme, hiszen akkor minden rekord egyforma (vagy nagyon hasonló) lenne, de megadhatunk hivatkozásokat is a jelenlegi rekordokra, pl.:

mezo1=mezo1+10

Így a mező aktuális értékéhez adunk hozzá 10-et. Ez a módszer dátum formátum esetén is használható. Ilyenkor x napot adunk a dátumhoz.

További lehetőségek

Az ASP adatbázis kapcsolatán keresztül gyakorlatilag bármilyen SQL parancsot végrehajthatunk, itt most csak a legfontosabbakat ismertettem. Érdemes tehát próbálgatni, hiszen gyakorlat teszi a mestert. A legjobb módszer az, ha az Access SQL szerkesztőjét használjuk. Ott közvetlenül az adatbázison hajthatjuk végre a parancsokat, látjuk az eredményt, ezen kívül az esetleges hibákat is ki tudjuk szűrni. Az Accessben ráadásul nem is muszáj közvetlen SQL kódot írni, felépíthetjük a lekérdezést az Access eszközeivel, majd megnézhetjük, hogy az hogyan is néz ki SQL-ben. Ez az egyik legjobb módszer az SQL alap szintű megtanulására.

Az adatbázis lezárása

Fontos tudni, hogy a megnyitott adatbázis kapcsolat addig foglalja a szerver memóriáját, amíg azt le nem zárjuk. Ha a látogató bezárja a böngészőjét, akkor az adatbázis kapcsolat is lezárul, de, hogy ne terheljük feleslegesen a szervert, jobb, ha minden nyitott objektumot lezárunk. Ide nem csak az adatbázis kapcsolatok értendők, hanem a megnyitott lekérdezési adatok is. Az alábbi példában lezárjuk az összes kapcsolatot, ami ebben a cikkben szerepelt:

Adatok.Close

Set Adatok = Nothing

Conn.Close

Set Conn = Nothing

Ezeket az objektumokat nem kötelező lezárni, de a szerver kímélése miatt ajánlott. Sok ASP webszolgáltató szabályzatában is benne van, hogy az objektumokat lehetőleg zárják le a szkriptek.

Megtanultuk tehát az adatbázisok kezelésének alapjait. Aki olvasta mindhárom cikket, akár már egyszerűbb ASP alkalmazásokat is készíthet. A következő részben egy - a látogatók nyomon követéséhez nélkülözhetetlen - technikát mutatok be: a session-ök (menetek) és a cookie-k (sütik) használatát.

Karsai Balázs