Tartalomjegyzék
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);
- 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.
- 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.
- 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]
- Negyedik paraméter
- A maximálisan fogadható bájtok száma
- Ö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
- http://docs.wxwidgets.org/stable/wx_wxdb.html (A fenti db objektumon alkalmazható metódusok)
- http://docs.wxwidgets.org/stable/wx_odbcoverview.html (ODBC áttekintése)
- http://debea.net (Az ODBC adatbázis-kezelésre egy újabb lehetőség; A wx2.8 nem tartalmazza alapból!)