Adatbázis kezelés - DAO (Data Access Objects) programozás II.

Az előző alkalommal áttekintettük a DAO objektum-hierarchia legmagasabb szintjén álló DBEngine objektum fontosabb jellemzőit, metódusait. A mostani alkalommal - a már mellékelt mintaprogram segítségével - bemutatom a DAO többi objektumának főbb tulajdonságait, jellemzőit és hogy miképpen alkalmazhatjuk őket adatbázis kezelő alkalmazásainkban.

Először is nézzük meg a program indító eljárását (Sub Main()). Az alkalmazás szempontjából az eljárás következő három sora a legfontosabb.
 

Set wspDAO = DBEngine.CreateWorkspace("DAO_I", "admin", "",                                       dbUseJet) DBEngine.Workspaces.Append wspDAO Set dbDAO = wspDAO.OpenDatabase(App.Path & "\DAO_I.mdb", False)

Az első sor egy Workspace objektumot hoz létre. Az objektum a már előzőekben említett DBEngine CreateWorksapce metódusával kerül definiálásra - egy Jet munkaterületet definiálunk DAO_I néven. Ezután az így létrehozott munkaterületet hozzáfűzzük a DBEngine Workspaces objektumgyűjteményéhez.

Most nézzük meg egy kicsit közelebbről egy ilyen Workspace objektum főbb jellemzőit, és hogy konkrétan mit is jelent egy munkaterület az adatbázis-kezelés szempontjából.

Először is nézzük meg mit is jelent maga a Workspace objektum. A Workspace objektumok segítségével különböző adatbázis szintű munkafolyamatokat valósíthatunk meg. Megnyitott adatbázisokat tartalmaznak (munkafolyamatban adatbázisokat és kapcsolatokat nyithatunk meg), biztosítják az egyidejű tranzakciók végrehajtását, valamint MSJet munkaterületen a megfelelő adatvédelmet (felhasználói szintű adatvédelem).

Egy Workspace objektum létrehozásakor a következő paramétereket kell megadnunk: Name (név), UserName (felhasználónév), Password(jelszó),Type(típus).

Szintaxis:

Set munkaterület = CreateWorkspace(név, felhasználó, jelszó, típus)

Nézzük meg, hogy egy nyitott munkaterületen milyen műveleteket végezhetünk. Mint azt már említettem a definiált Workspace objektumokon különböző (a típusának megfelelő) adatbázisokat nyithatunk meg. Esetünkben a megnyitandó adatbázis egy MSJet adatforrás, melynek megnyitására a következő programsort alkalmazhatjuk.

Set dbDAO = wspDAO.OpenDatabase(App.Path & "\DAO_I.mdb", False)

Vagyis a már definiált Workspace objektum OpenDatabase metódusát használhatjuk az adott adatbázis megnyitásához. A metódus szintaxisa a következő:

Set adatbázis =   munkaterület.OpenDatabase(adatbázisnév,                             beállítások,                             írásvédett,                             kapcsolat)
  • adatbázis : A megnyitni kívánt Database objektumot képviselő objektumváltozó.
  • munkaterület: Nem kötelező argumentum. Az a létező Workspace objektum, amely az adatbázist tartalmazni fogja.
  • adatbázisnév: Egy létező Microsoft Jet adatbázisfájl neve.
  • beállítások: Nem kötelező argumentum. Ha értéke True akkor az adatbázis kizárólagos módban kerül megnyitásra. Ha False, akkor az adatbázist megosztott módban nyitja meg.
  • írásvédett : Nem kötelező argumentum. Boolean altípusú Variant, ha értéke True, akkor az adatbázis írásvédett módban kerül megnyitásra, ha False (ez az alapértelmezés) akkor írási jogosultságunk is lesz.
  • Kapcsolat: Nem kötelező argumentum. A különféle kapcsolati adatokat (pl. jelszavakat) tartalmazó String altípusú Variant.
Ez alapján könnyen értelmezhető, hogy a programban szereplő sor az adott útvonalon lévő DAO_I.mdb adatbázist nyitja meg megosztott módban. Az adatbázis megnyitása után egy Database objektumot kapunk eredményül, melyen keresztül már a megfelelő tulajdonságok és metódusok segítségével elérhetjük és manipulálhatjuk adatbázisunk tartalmát és szerkezetét.

A Workspace objektum további fontos metódusai:

  • BeginTrans, CommitTrans, Rollback: Tranzakciók feldolgozását végzik az adott munkaterületen. A BeginTrans elindít egy tranzakciót, a CommitTrans lezárja a tranzakciót és menti a változásokat a Rollback pedig befejezi a tranzakciót és visszaállítja az adatbázisok azon állapotát, amely az aktuális tranzakció nyitása előtt voltak érvényesek (nem menti a változtatásokat).
  • Close: lezárja a Workspace objektumot. A Close metódus használatával azonos hatású az objektumváltozó Nothing értékűre állítása: Set dbsTemp = Nothing.
  • CreateDatabase: Új Database objektumot hoz létre, az adatbázist menti a lemezre, és visszaad egy megnyitott Database objektumot. A metódus csak MSJet munkaterületen használható!
    Szintaxisa:
    Set adatbázis = munkaterület.CreateDatabase (neve, sorrend, egyebek)

    Név: adatbázis neve útvonallal együtt. (pl.: "c:\munka\új.mdb")
    Sorrend: az adatbázis létrehozásakor a rendezési sorrendet megadó karaktersorozat. (Magyar nyelvű adatbázis esetén a dbLangHungarian használható.)
    Egyebek: a létrehozandó adatbázis kódolását illetve formátumát állíthatjuk be:
    dbEncrypt: Titkosított adatbázist hoz létre.

    • dbVersion10: Olyan adatbázist hoz létre, amely az 1.0-s Microsoft Jet adatbázis-motor fájlformátumát használja.
    • dbVersion11: Olyan adatbázist hoz létre, amely az 1.1-es Microsoft Jet adatbázis-motor fájlformátumát használja.
    • dbVersion20: Olyan adatbázist hoz létre, amely a 2.0-s Microsoft Jet adatbázis-motor fájlformátumát használja.
    • dbVersion30: (Alapértelmezett) Olyan adatbázist hoz létre, amely a 3.0-s Microsoft Jet adatbázis-motor fájlformátumát használja (kompatíbilis a 3.5-ös verzióval).
Ennyit a Workspace objektumról. Most nézzük meg a már emlitett Database osztályt.

A példaprogram

Set dbDAO = wspDAO.OpenDatabase(App.Path & "\DAO_I.mdb", False)

sora a megnyitott munkaterületen egy Database objektumot definiál. Mint már említettem ezen az objektumon keresztül manipulálhatjuk az adatbázis tartalmát és szerkezetét.

Tulajdonságai:

  • Connect: a nyitott adatbázisról ad információt. Egy String típusú értéket tartalmaz, amely egy adatbázistípus-leíróból és pontosvesszővel elválasztott paraméterekből áll.
  • Name: az objektum definiált nevét adja vissza.
  • RecordsAffected: visszaadja a legutoljára meghívott Execute metódus által érintett rekordok számát.
  • Transactions: visszaad egy Boolean típusú értéket, amely azt jelzi, hogy az objektum támogatja-e a tranzakció kezelést.
  • Updatable: jelzi, hogy a Database objektum módosítható -e.

Metódusok:

  • Close: lezárja a Database objektumot.
  • Execute: lefuttat egy lekérdezést, vagy végrehajt egy SQL utasítást.
  • OpenRecordset: egy új Rekordset objektumot nyit meg.
    Szintaxis:

    Set recordsetobj = objektum.OpenRecordset (forrás, típus, beállítások, zárolás)
     

  • Forrás: A Recordset forrását megadó String. A forrás lehet táblanév, lekérdezésnév vagy rekordokat visszaadó SQL utasítás.
  • Típus: Nem kötelező argumentum. A megnyitni kívánt Recordset típusát megadó konstans.
  • DbOpenTable: Tábla típusú Recordsetet nyit meg. (Csak Microsoft Jet munkaterületen használható.)
  • DbOpenDynamic: Dinamikus típusú Recordsetet nyit meg, ami hasonló az ODBC dinamikus kurzorhoz. (Csak ODBCDirect munkaterületen használható.)
  • dbOpenDynaset : Eredményhalmaz típusú Recordsetet nyit meg, ami hasonló az ODBC kulcskészlet kurzorhoz.
  • DbOpenSnapshot: Pillanatfelvétel típusú Recordsetet nyit meg, ami hasonló az ODBC statikus kurzorhoz.
  • DbOpenForwardOnly:  Csak előre görgethető típusú Recordsetet nyit meg.
  • Beállítások: Nem kötelező argumentum. Az új Recordset jellemzőit megadó konstansok kombinációja.
  • Zárolás: Nem kötelező argumentum. A Recordset zárolását megadó konstans.
  • CreateTableDef: TableDef objektum létrehozása. Ezen keresztül manipulálhatjuk az adatbázisunk mezőszerkezetét, létrehozhatunk különféle táblacsatolásokat.
  • CreateQueryDef: Létrehoz egy QueryDef objektumot. Ennek segítségével érhetjük el az adatbázisunkban tárolt lekérdezéseket, valamint készíthetünk újabbakat.

Rekordszintű műveletek

Most már láthatjuk, milyen módon történik egy adott munkaterületen egy adott adatbázis megnyitása. Most nézzük meg, hogy a megnyitott adatbázis egyes tábláinak rekordjait, vagy egy SQL lekérdezés eredményeként kapott rekordhalmaz elemeit miképpen érhetjük el, és az egyes rekordok jellemzőit, értékeit hogyan manipulálhatjuk.

A DAO-n keresztül történő rekordkezelés nagyban hasonlít a már említett ADO rekordkezelésére. Itt is létezik egy Rekordset objektum, amely lehetőséget ad a rekordok tartalmának módosítására, a rekordok közti navigálásokra, stb. Most nézzük meg a DAO Recordset objektumának felépítését. Mivel igen nagy a hasonlóság a már ismert ADO Recordset és a DAO Recordset tulajdonságai között, ezért inkább csak az eltérő elemeket részletezem.

Az első fontos különbség a Recordset objektum létrehozásánál észlelhető:

Set tmpRS = dbDAO.OpenRecordset("select * from Alapegységek")

A másik fontos különbség, hogy az adatmódosítás előtt az Edit metódust kell használnunk.

Pl.:
 
 

Private Sub ModifyRecord()   rsAlapanyagok.Edit   rsAlapanyagok(1) = txtNEV.Text   rsAlapanyagok(2) = txtEXTRA_ATTR.Text   rsAlapanyagok(3) = cmbEGYSEG.ItemData(cmbEGYSEG.ListIndex)   rsAlapanyagok(5) = mebMIN_KESZLET.Text   rsAlapanyagok(6) = txtVTSZ.Text   If cmbAFA_KAT.ListIndex = 0 Then       rsAlapanyagok(7) = 0.25   Else       rsAlapanyagok(7) = 0.12   End If   If Len(Trim(txtMEMO.Text)) = 0 Then       rsAlapanyagok(8) = vNull   Else       rsAlapanyagok(8) = txtMEMO.Text   End If   rsAlapanyagok.Update End Sub

Mivel a többi jellemző és metódus működése nagyrész megegyezik az ADO-nál tárgyaltakkal, ezért ezeket nem kívánom részletezni.

A mai alkalommal egyelőre ennyit. A továbbiakban majd megnézzük, hogyan tudjuk DAO-n keresztül módosítani adatbázisunk szerkezetét, hogyan hozhatunk létre új táblákat, és hogyan készíthetünk akár egy saját kis adatbázis szerkesztő alkalmazást.

Az előző cikkben már közölt forráskód: DAO_I.ZIP