Tartalomjegyzék

< wxWidgets

wxWidgets adatbázis-kezelés

Fejállományok

#include <wx/dbtable.h>

Tábla létezésének ellenőrzése

Előkészítés

Ez a példaprogramrész, feltételez egy „HelyiMySQL” néven regisztrált adatbázist az ODBC bejegyzések között. Ellenőrzéshez futtassa a következő programot:

odbcad32.exe

Ugyanezt elérheti a következő útvonalon is:

Vezérlőpult -> Felügyeleti eszközök -> ODBC adatforrások

Megjegyzés: Ha telepítette az MySQL ODBC Drivert, akkor csak fel kell vennie egy új ODBC bejegyzést.

Adatbázis-kapcsolat

    wxDbConnectInf  *DbConnectInf    = NULL;    // DB connection information
    wxDb            *db              = NULL;    // Database connection
 
    DbConnectInf = new wxDbConnectInf(NULL,
                                      wxT("HelyiMySQL"),
                                      wxT("root"),
                                      wxT(""));
 
   // Hiba ellenőrzése:
    if (!DbConnectInf || !DbConnectInf->GetHenv())
        wxMessageBox(wxT("Az ODBC kapcsolat nem elerheto"));
 
 
    // Adatbázis-kapcsolat létrehozása
    db = wxDbGetConnection(DbConnectInf);
 
    if (!db)
        wxMessageBox(wxT("Nem tudok kapcsolodni az adatbazishoz"));
 
 
    //Tábla létezésének ellenőrzése
    if(db->TableExists(wxT("szemelya")))
       wxMessageBox(wxT("Van ilyen tabla"));
    else
        wxMessageBox(wxT("Nincs ilyen tabla"));

Lekérdezés

Ez a példaprogram-rész, feltételez egy „HelyiMySQL” néven regisztrált adatbázist az ODBC bejegyzések között.

Példaprogram

wxDbConnectInf  *DbConnectInf    = NULL;
wxDb            *db              = NULL;
 
DbConnectInf = new wxDbConnectInf(NULL,
                                  wxT("HelyiMySQL"),
                                  wxT("root"),
                                  wxT(""));
 
if (!DbConnectInf || !DbConnectInf->GetHenv())
    wxMessageBox(wxT("Az ODBC kapcsolat nem elerheto"));
 
 
db = wxDbGetConnection(DbConnectInf);
 
if (!db)
    wxMessageBox(wxT("Nem tudok kapcsolodni az adatbazishoz"));
 
 
wxString sql = wxT("SELECT * FROM szemely");
 
if (!db->ExecSql(sql.c_str()))
    wxMessageBox(wxT("Gond a lekeres soran"));
 
 
 
wxChar er[255];  //Ebben tároljuk majd a választ
 
while(db->GetNext())
{
    SDWORD meret;
    db->GetData(3, SQL_C_WXCHAR, &er, 255, &meret);  
 
    wxMessageBox(er); //Nézzük milyen eredményt kaptunk
}

Elemzés

A példa program első része a kapcsolat és az adatbázis objektum (db) létrehozása, amelyet már fentebb tárgyaltunk.

A lekérdezés összeállítása, amelyet az sql nevű változóban helyezünk el:

wxString sql = wxT("SELECT * FROM szemely");

Itt történik maga a lekérdezés:

db->ExecSql(sql.c_str())

A lekérdezés eredménye a db objektumban van, amelyet a GetData() metódussal nyerhetün ki:

db->GetData(3, SQL_C_WXCHAR, &er, 255, &meret);  
  1. Első paraméter
    • Ha a lekérdezés eredménye több oszlop, akkor itt adjuk meg hányadik oszlopot szeretném megkapni.
    • Más esetekben ennek értek 1
    • Az oszlopok számozása itt 1 től kezdődik.
  2. Második paraméter
    • SQL_C_WXCHAR
    • Itt kell megadni, milyen típusú változóban lesz a következő paraméter, amiben az eredményt fogadom.
    • További értékeket lásd az alábbi táblázatban.
  3. Harmadik paraméter
    • Az a változó, amelyben szeretnénk az eredményt viszontlátni.
    • Az er változó az előző paraméter miatt: wxChar er[255]
  4. Negyedik paraméter
    • A maximálisan fogadható bájtok száma
  5. Ötödik paraméter
    • Itt kapjuk meg mekkora adat jött át.
SQL_C_CHAR - string - elavult! használd helyette ezt: SQL_C_WXCHAR
SQL_C_WXCHAR
SQL_C_LONG
SQL_C_ULONG
SQL_C_SHORT
SQL_C_USHORT
SQL_C_FLOAT
SQL_C_DOUBLE
SQL_C_NUMERIC
SQL_C_TIMESTAMP
SQL_C_BOOLEAN - definiálva a következő helyen: db.h
SQL_C_ENUM - definiálva a következő helyen: db.h

Minden GetData() metódust meg kell előzzön egy GetNext(), amely a következő rekordot veszi az eredményből:

db->GetNext()

Persze ha eleve több rekord van az eredményhalmazban, akkor tehetjük mindjárt while ciklusba:

while(db->GetNext())
{
   //ide jön a GetData()
}

Megjegyzés

Az eddig példákban a wxDbTable osztályt nem használtuk, de sok táblakezelési feladata megoldható vele.

Irodalom

Linkek