[[oktatas:programozás:wxwidgets|< wxWidgets]] ====== wxWidgets adatbázis-kezelés ====== ===== Fejállományok ===== #include ===== 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_wxdbtable.html * http://docs.wxwidgets.org/stable/wx_odbcoverview.html (ODBC áttekintése) * http://code.google.com/p/wx-poligon/source/browse/trunk/cardsframe.cpp?spec=svn7&r=7 (Példaprogram) * http://debea.net (Az ODBC adatbázis-kezelésre egy újabb lehetőség; A wx2.8 nem tartalmazza alapból!) * http://forge.mysql.com/wiki/Connector_C%2B%2B