Elemi alkalmazások fejlesztése IV. Adatbáziskezelő alkalmazás készítése C++/Qt ben I.

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "Elemi alkalmazások fejlesztése IV. Adatbáziskezelő alkalmazás készítése C++/Qt ben I."

Átírás

1 Tartalomjegyzék Adatbáziskezelő alkalmazás készítése C++/Qt ben I...3 A MySQL adatbáziskezelő használatba vétele...3 Az alkalmazás adatbázisa...4 A Qt/Sql modul...5 Az adatbázis és az alkalmazás összekapcsolása...5 A QsqlQuery osztály...5 Rekordok listázása: DiakQuery (gyakorló feladat)...6 Új projekt létrehozása...6 A projekt elemei:...6 src.pro...6 connection.cpp...6 main.cpp...7 Fordítás/Futtatás...7 A QSqlCursor osztály...8 Rekordok listázása: DiakCursor (gyakorló feladat)...8 A projekt felépítése:...8 main.cpp...8 Fordítás/futtatás...8 Rekord módosítása: DiakUpdate (gyakorló feladat)...9 main.cpp...9 Fordítás/Futtatás...10 Rekord törlése: DiakDelete (gyakorló feladat)...10 main.cpp...10 Fordítás/Futtatás...11 Rekord beszúrása: DiakInsert (gyakorló feladat)...11 main.cpp...11 Fordítás/Futtatás...11 Rendezés: DiakOrder (gyakorló feladat)...11 main.cpp...12 Fordítás/Futtatás...12 A QDataTable osztály...12 Tábla karbantartása: DiakDataTable (gyakorló feladat)...12 A projekt felépítése:...13 main.cpp...13 Fordítás/futtatás...13 Feladat: EafAdmin projekt...14 Az alkalmazás menüpontjai...14 src.pro...15 Az EafAdmin osztály...15 eafadmin.h...15 eafadmin.cpp...17 A főprogram: main.cpp...20 Fordítás/Futtatás...21 Az adatbázis kapcsolat megvalósítása oldal

2 A főprogram kiegészítése az adatbázis kapcsolattal...21 src.pro...21 main.cpp (módosítás)...21 A diak táblát karbantartó programrész megvalósítása (Táblák/Diák menüpont)...22 A diak_id (sorszám) automatikus kiosztása...22 A DiakDataTable osztály elkészítése...23 src.pro...23 diakdattable.h...23 diakdattable.cpp...23 A slottabladiak() módosítása (eafadmin.cpp)...24 Fordítás/Futtatás...24 Ellenőrzött adatbevitel biztosítása...25 diakdattable.h (módosítás)...25 diakdattable.cpp (módosítás)...25 Szabóné Nacsa Rozália nacsa@inf.elte.hu honlap: people.inf.elte.hu/nacsa október A munkafüzet programjai letölthetők a people.inf.elte.hu/nacsa/eaf4/projects címről. 2. oldal

3 Adatbáziskezelő alkalmazás készítése C++/Qt-ben I. Ebben a munkafüzetben feltételezzük, hogy Ön ismeri az EAF projekt specifikációját. A MySQL adatbáziskezelő használatba vétele Az alkalmazás elkészítéséhez rendelkeznünk kell egy adatbáziskezelővel, és futnia kell egy, az adatbáziskezelőt kiszolgáló szervernek. Ebben a munkafüzetben a MySQL adatbáziskezelőt használjuk. A MySQL adatbáziskezelő és kapcsolódó dokumentumai letölthetők a weboldalról, vagy installálás után megtekinthetők a /usr/share/doc/mysql_xxxx alkönyvtárban. Az alábbi rövid ismertető csak ízelítőt ad a MySQL használatához, munkafüzet révén nem vállalja fel a MySQL részletekbe menő ismertetését. A MySQL adatbáziskezelőt a MySQL programcsomagok letöltése után, a szuper user módban kiadott /usr/bin/mysql_install_db paranccsal installálhatjuk Az adatbázis használatához futnia kell az MySQL szervernek. A szervert a szuper user módban kiadott safe_mysqld (SuSE 9.1 ben mysqld_safe) paranccsal indíthatjuk el. Ha a szerver nem indul el, akkor nézze meg, jó e a /var/lib/mysql könyvtár és a benne található fájlok jogosultsága. (Group: Read/Write, User: mysql, Group: mysql legyen a beállítás) shell> su Password: jelszó begépelése shell> /usr/bin/safe_mysqld & [1] shell> Starting mysqld daemon with databases from /var/lib/mysq l shell> exit exit shell> Az adatbáziskezelő szolgáltatásait csak az arra jogosult regisztrált felhasználók vehetik igénybe. Felhasználók regisztrálásához szuper user módban kell lennünk. Új felhasználó regisztrálása történhet például a GRANT utasítás segítségével az alábbiak szerint: shell> mysql --user=root mysql mysql> GRANT ALL PRIVILEGES ON *.* TO hallgato@localhost -> IDENTIFIED BY 'hallgató_jelszava' WITH GRANT OPTION; mysql> GRANT ALL PRIVILEGES ON *.* TO -> IDENTIFIED BY 'hallgató_jelszava ' WITH GRANT OPTION; A fenti regisztrációval bejegyeztünk egy szuper jogokkal rendelkező hallgato felhasználót, aki az adatbáziskezelő szolgáltatásait a 'hallgató_jelszava' jelszó megadásával veheti igénybe. (Részletesebb leírást talál a /usr/share/doc/mysql... alkönyvtárban fellelhető dokumentáció Adding New Users to MySQL fejezetében (4.3.5), melynek feldolgozását önálló munkára ajánljuk.) Regisztrált felhasználó terminálról az alábbi parancsokkal veheti igénybe az adatbáziskezelő szolgáltatásait. shell>/usr/bin/mysql -u hallgato -p shell>hallgato_jelszava mysql> Valamilyen mysql parancs, pontosvesszovel lezárva 3. oldal

4 Az alkalmazás adatbázisa Az alkalmazás a projekt specifikációban megismert eaf adatbázist kezeli. A minta adatbázist a feladatspecifikációnak megfelelően az alábbi Sql parancsokkal hoztuk létre. create database eaf; use eaf; create table felev (felev_id int(4) not null unique, szam int(4) not null, kezdet varchar(20) not null, fsz int(4), max int(4), primary key (szam,kezdet)); create table csoport (csoport_id int(4) not null primary key, nev varchar(20), max int(4), gyakvez_id int(4), felev_id int(4)); create table gyakvez (gyakvez_id int(4) not null primary key, nev varchar(30)); create table diak (diak_id int(4) not null primary key, azon varchar(20) unique, nev varchar(30)); create table tag (diak_id int(4) not null, csoport_id int(4) not null, pont1 int(4), pont2 int(4), pont3 int(4), pont4 int(4), primary key (diak_id, csoport_id)); create table zh (zh_id int(4) not null primary key, max int(4), ido varchar(20), felev_id int(4)); create table potzh (potzh_id int(4) not null primary key, max int(4), ido varchar(20), felev_id int(4)); create table jelentkezes (zh_id int(4) not null, diak_id int(4) not null, eredm int(1), primary key (zh_id,diak_id)); create table kezdet (kezdet_id int(4) not null primary key, kezdet varchar(20)); insert into kezdet (kezdet_id,kezdet) values (1,"2001/2002-1"); insert into kezdet (kezdet_id,kezdet) values (2,"2001/2002-2"); insert into kezdet (kezdet_id,kezdet) values (3,"2002/2003-1"); insert into kezdet (kezdet_id,kezdet) values (4,"2002/2003-2"); insert into kezdet (kezdet_id,kezdet) values (5,"2003/2004-1"); insert into kezdet (kezdet_id,kezdet) values (6,"2003/2004-2"); create table sequence (tablename varchar(10) not null primary key, sequence int(4)); insert into sequence (tablename,sequence) values ("felev",0); insert into sequence (tablename,sequence) values ("csoport",0); insert into sequence (tablename,sequence) values ("gyakvez",0); insert into sequence (tablename,sequence) values ("diak",0); insert into sequence (tablename,sequence) values ("zh",0); insert into sequence (tablename,sequence) values ("potzh",0); Az egyes táblákban szereplő azonosítóknak (táblanév_id) egyedieknek kell lennie. A sequence táblában tartjuk nyilván, hogy az általunk kezelt táblában éppen hol tartunk a számok kiosztásában. A kezdet tábla tartalmazza azokat a féléveket, amelyekkel egyáltalán dolgozni szeretnénk. Ezt a táblát azért vezettük be, hogy az adott félév különböző szintű féléveinek (EAF1,..., EAF4) bevitelekor ne kelljen minden alkalommal begépelni a félévet azonosító, meglehetősen hosszú karaktersorozatot. 4. oldal

5 A Qt/Sql modul A Qt installálásakor számos modul alapértelmezésben beépül a könyvtárunkba. Ezen hasznos modulok egyike az adatbáziskezelést támogató Sql modul. A Qt/Sql modulban az alábbi osztályok találhatók: QSql, QSqlDriverPlugin, QSqlFieldInfo, QSqlQuery, QSqlCursor, QSqlEditorFactory, QSqlForm, QSqlRecord, QSqlDatabase, QSqlError, QSqlIndex, QSqlRecordInfo, QSqlDriver, QSqlField, QSqlPropertyMap, QSqlResult. Az itt felsorolt osztályok közül számunkra a legfontosabbak a felhasználói felületet kezelő Sql osztályok (User Interface Layer), valamint az adatbázis elérését biztosító osztályok (SQL API Layer). A felhasználói felületet kezelő Sql osztályok: QSqlEditorFactory, QSqlForm, QSqlPropertyMap, QDataTable, QDataBrowser, QDataView Az adatbázis elérését biztosító Sql osztályok: QSqlDataBase, QSqlCursor, QSqlQuery, QSqlError, QSqlField, QSqlFieldInfo, QSqlIndex, QSqlRecord, QSqlRecordInfo A QSqlQuery osztályban közvetlen SQL parancsokat adhatunk ki, a QSqlCursor osztály maga építi fel az Sql parancsokat az egyes beállításoknak megfelelően. Az adatbázis és az alkalmazás összekapcsolása Alkalmazásunkban az adatbázis kezelése előtt kapcsolatot kell kiépíteni az alkalmazás és az adatbázis között. A kapcsolat kiépítése három lépésből áll: 1. az adatbázist kezelő meghajtó (driver) aktivizálása (adddatabase) 2. a kapcsolat adatainak beállítása (setdatabasename, setusername, setpassword, sethostname) 3. a kapcsolat megnyitása (open) A QsqlQuery osztály A QSqlQuery osztályban közvetlenül adhatunk ki tiszta Sql parancsokat. A QSqlQuery osztály rendelkezik olyan függvényekkel, amelyekkel kiadhatunk lekérdező parancsokat, bejárhatjuk a lekérdezés eredményét (next, prev, first, last, seek), lekérdezhetjük az eredmény adatait (value). Lekérdezéskor kiadhatunk adatkezelő utasításokat ( pl. SELECT, INSERT, UPDATE és DELETE), de végrehajthatunk adat definiáló utasításokat is ( pl. CREATE TABLE ). Ha az Sql utasítás végrehajtása sikeres, akkor az adott QSqlQuery példány állapota active ( az isactive() függvény visszatérési értéke TRUE), egyébként az adott QSqlQuery példány állapota inactive ( az isactive() függvény visszatérési értéke FALSE). Minden egyes Sql utasítás végrehajtása után, az adatok kiolvasása előtt rá kell pozicionálnunk egy érvényes rekordra (az isvalid() függvénynek TRUE értéket kell visszaadnia). A lekérdezésre kapott válasz rekordjai között az alábbi függvények segítségével navigálhatunk: next(), prev(), first(), last(), seek(int) Ha a lekérdezés active, és érvényes rekordra mutat, akkor az adatot a value() függvénnyel olvashatjuk ki a rekordból. Minden Sql adat QVariant típusú, ezért olvasásnál/írásnál végre kell hajtanunk a megfelelő típus konverziókat. A QSqlQuery használatához szükségünk van a qsqlquery.h header fájlra. Keresse meg az SQL modul és a QSqlQuery osztály részletes leírását a Qt súgójában! 5. oldal

6 Rekordok listázása: DiakQuery (gyakorló feladat) Gyakorló feladat: Készítsünk egy nagyon egyszerű alkalmazást, amely megjeleníti az adatbázisunk diak tábláját. A feladatot a QSqlQuery osztály segítségével oldjuk meg. Új projekt létrehozása Hozzunk létre egy üres KDevelop/Qt/C++ projektet 1. Ha az Ön által használt fejlesztőeszközben nincs ilyen lehetőség, akkor készítsen el egy tetszőleges Qt alapú projektet, és törölje a projekt automatikusan generált.h és.cpp fájljait. Ezzel létrehozunk egy olyan környezet, amelybe már beilleszthetjük a saját forrásainkat. (Az EAF3 SDI alkalmazás készítése Qt ben I. munkafüzetének végén talál egy másik technikát is egy alkalmazás projekt összeállítására.) A projekt elemei: src.pro main.cpp connection.h connection.cpp src.pro SOURCES += diakquery.cpp \ connection.cpp HEADERS += connection.h TEMPLATE = app CONFIG += release \ warn_on \ thread \ qt TARGET =../bin/diakquery //A Kdevelop3 által készített projekt leíró fájl Az src.pro projekt leíró fájlt a Kdevelop3 hozza létre és tartalmát a projekt alakítgatása során automatikusan aktualizálja. connection.h #define DB_SOURCE_DRIVER "QMYSQL3" #define DB_SOURCE_DBNAME "eaf" #define DB_SOURCE_USER "nacsa" #define DB_SOURCE_PASSWD "1234" #define DB_SOURCE_HOST "localhost" bool createconnections(); connection.cpp #include <qsqldatabase.h> #include "connection.h" 1 KDevelop2: Project/New/Qt/Qt SDI KDevelop3: Project/New/C++/QMake project/application 6. oldal

7 bool createconnections() QSqlDatabase *source = QSqlDatabase::addDatabase( DB_SOURCE_DRIVER); source >setdatabasename( DB_SOURCE_DBNAME ); source >setusername( DB_SOURCE_USER ); source >setpassword( DB_SOURCE_PASSWD ); source >sethostname( DB_SOURCE_HOST ); if (! source >open() ) qwarning( "Az adatbázist nem sikerült megnyitni: " + source >lasterror().drivertext() ); qwarning( source >lasterror().databasetext() ); return FALSE; return TRUE; A kapcsolatot a createconnections() metódussal valósítjuk meg. Először aktivizáljuk a meghajtót, azaz meghívjuk a QSqlDatabase::addDatabase() metódusát, melynek átadjuk a használni kívánt meghajtó nevét (QMYSQL3). Utána megadjuk az adatbázis nevét (setdatabasename), a felhasználó nevét (setusername) és jelszavát (setpassword), valamint a host nevet (sethostname). Befejezésül megnyitjuk az adatbázist (open()). main.cpp #include <qapplication.h> #include <qsqldatabase.h> #include <qsqlquery.h> #include "connection.h int main( int argc, char *argv[] ) QApplication app( argc, argv, FALSE ); if ( createconnections() ) QSqlQuery query( "SELECT nev, azon FROM diak;"); if ( query.isactive() ) while ( query.next() ) qdebug(query.value(0).tostring() + ": " + query.value(1).tostring() ); return 0; Az adatbázis kapcsolat kiépítése után (creteconnections()) létrehozzuk a QSqlQuery osztály egy példányát (query). Már a példányt létrehozó kunstruktorban megadjuk a végrehajtandó Sql parancsot (SELECT...). Ha a lekérdezés sikeres volt (query.isactive() == TRUE), akkor rendre rápozicionálunk az eredmény egyes rekordjaira (query.next()), és a value() függvényt használva, a szükséges konverzió után megjelenítjük a lekérdezett rekordok megfelelő adatait (query.value(0), query.value(1)) a debug ablakban. Fordítás/Futtatás Vigyen fel néhány rekordot a diák táblába és kísérletezzen egy kicsit az Sql lekérdezésekkel. Az eredmény listát az stderr ablakban találja meg. 7. oldal

8 A forrás letölthető a people.inf.elte.hu/nacsa/eaf4/projects/diakquery címről. A QSqlCursor osztály A QSqlCursor osztály magasabb szintű hozzáférést biztosít az Sql tábláinkhoz, mint a QSqlQuery osztály, ezért amikor a QSqlCursor osztályt használjuk elvileg nem kell ismernünk az Sql utasításokat. A QSqlCursor osztályban egyszerre mindig csak egy rekorddal foglalatoskodhatunk. Csak egyetlen egy rekordra adhatunk ki Insert, Delete vagy Update utasítást. Használat előtt az adatbázis kapcsolatot a QSqlQuery hez hasonlóan itt is ki kell építenünk. A QSqlCursor használatához szükségünk van a qsqlcursor.h header fájlra. Keresse meg a QSqlCursor osztály részletes leírását a Qt súgójában! Rekordok listázása: DiakCursor (gyakorló feladat) Gyakorló feladat: Készítsünk egy nagyon egyszerű alkalmazást, amely megjeleníti az adatbázisunk diak tábláját. A feladatot a QSqlCursor osztály segítségével oldjuk meg. A projekt felépítése: main.cpp main.cpp connection.h (ugyanaz, mint a DiakQuery példában) connection.cpp ( ugyanaz, mint a DiakQuery példában ) #include <qapplication.h> #include <qsqldatabase.h> #include <qsqlcursor.h> #include "connection.h" int main( int argc, char *argv[] ) QApplication app( argc, argv ); if ( createconnections() ) QSqlCursor cur( "diak"); cur.select(); //cur.select("diak.nev LIKE 'K%'"); while ( cur.next() ) qdebug( cur.value( "nev" ).tostring() + ": " + cur.value( "azon" ).tostring() ); return 0; Az adatbázis kapcsolat kiépítése után (creteconnections()) létrehozzuk a diák táblánkat reprezentáló QSqlCursor osztály egy példányát (cur). A cur.next() metódus segítségével végigmegyünk a diak tábla egyes rekordjain, megjelenítjük a diák nevét és azonosítóját. Vegyük észre, hogy itt az adatokra a mező nevével (nem pedig indexszel) hivatkozunk. 8. oldal

9 Fordítás/futtatás Vigyen fel néhány rekordot a diák táblába, és kísérletezzen egy kicsit az Sql lekérdezésekkel. A forrásprogram letölthető a people.inf.elte.hu/nacsa/eaf4/projects/diakcursor címről. Rekord módosítása: DiakUpdate (gyakorló feladat) A QSqlCursor osztályt használva ha az osztály által reprezentált tábla rendelkezik a rekordjait egyértelműen megkülönböztető elsődleges kulccsal automatikusan beszúrhatunk (insert), törölhetünk (delete), vagy módosíthatunk(update) egy egy rekordot. (Ha a táblázat rekordjait nem tudjuk kulccsal egyértelműen megkülönböztetni, akkor csak a QSqlQuery osztályt tudjuk használni.) Minden egyes QSqlCursor típusú objektumnak van egy saját segéd puffere, melyet a szerkesztő műveletek (insert, update and delete) használnak. A szerkesztés során először lekérdezzük a megfelelő pufferre mutató pointert, kitöltjük a pufferben az egyes mezőket, majd meghívjuk a szükséges metódusokat (insert(), delete(), update()). A program működését a szerkesztés különböző fázisaiban (primeinsert(); beforeupdate(); stb.) kibocsátásra kerülő szignálokhoz rendelt slotokkal befolyásolhatjuk. A primeinsert(), primeupdate(), primedelete() függvények amellett, hogy visszaadják a belső segéd pufferük címét, a segéd puffer mezőit a műveletnek megfelelő kezdőértékkel is feltöltik. A primeinsert() kinullázza a mezőket, a primeupdate() kitölti az aktuális rekord adataival, a primedelete() pedig az elsődleges kulcs mezőt tölti ki az aktuális rekord adatai alapján. Gyakorló feladat: A diak tábla egy rekordjának módosítása. Tekintsük a következő táblát! mysql> select * from diak; diak_id azon nev 1 KPETE Kiss Péter 2 NPETE Nagy Péter 3 NKATA Nagy Katalin 3 rows in set (0.04 sec) Cseréljük ki az 1 es azonosítójú Kiss Péter nevét Kovács Péterre. (A projekt ugyanaz, mint az előző példában, csak a main.cpp változik.) main.cpp int main( int argc, char *argv[] ) QApplication app( argc, argv ); if ( createconnections() ) QSqlCursor cur( "diak"); cur.select("diak_id=1"); if (cur.next()) QSqlRecord *buffer = cur.primeupdate(); buffer >setvalue( "nev", "Kovács Péter"); cur.update(); 9. oldal

10 return 0; Az adatbázis kapcsolat kiépítése után (createconnections()) létrehozzuk a diak táblánkat reprezentáló QSqlCursor osztály egy példányát (cur), majd az adatbázisbeli táblából kiválasztjuk az 1 es azonosítójú diákot (cur.select("diak_id=1")). Ezután rápozicionálunk a kiválasztott rekordra (cur.next()), lekérjük az update segéd puffer címét (QSqlRecord *buffer = cur.primeupdate()), majd a kívánt értékek beállítása után (setvalue()), a segéd puffer tartalma alapján módosítjuk az adatbázisbeli táblát (update()). (Vegyük észre, hogy a primeinser() az aktuális rekord alapján kitölti a segéd puffer (buffer) egyes mezőit, így csak a módosítandó értéket kell beállítanunk.) Fordítás/Futtatás A forrásprogram letölthető a people.inf.elte.hu/nacsa/eaf4/projects/diakupdate címről. Rekord törlése: DiakDelete (gyakorló feladat) Gyakorló feladat: A diak tábla egy rekordjának törlése. Tekintsük a következő táblát! mysql> select * from diak; diak_id azon nev 1 KPETE Kovács Péter 2 NPETE Nagy Péter 3 NKATA Nagy Katalin 3 rows in set (0.04 sec) Töröljük ki az 2 es azonosítójú rekordot. (A projekt ugyanaz, mint az előző példában, csak a main.cpp változik.) main.cpp int main( int argc, char *argv[] ) QApplication app( argc, argv ); if ( createconnections() ) QSqlCursor cur( "diak"); cur.select("diak_id=2"); if (cur.next()) cur.primedelete(); cur.del(); return 0; 10. oldal

11 Az adatbázis kapcsolat kiépítése után (createconnections()) létrehozzuk a diak táblánkat reprezentáló QSqlCursor osztály egy példányát (cur), majd az adatbázisbeli táblából kiválasztjuk az 2 es azonosítójú diákot (cur.select("diak_id=2")). Ezután rápozicionálunk a kiválasztott rekordra (cur.next()), majd a kitöltjük a segéd pufferben az elsődleges kulcs értékét (cur.primedelete()), és meghívjuk a QSqlCursor::del() metódust.(vegyük észre, hogy a törlő parancs (del) kiadása előtt a primedelete() hívással töltöttük ki a segéd puffer (buffer) elsődleges kulcsát az aktuális rekord alapján.) Fordítás/Futtatás A forrásprogram letölthető a people.inf.elte.hu/nacsa/eaf4/projects/diakdelete címről. Rekord beszúrása: DiakInsert (gyakorló feladat) Gyakorló feladat: Egy rekord beszúrása a diak táblába. Tekintsük a következő táblát! mysql> select * from diak; diak_id azon nev 1 KPETE Kovács Péter 3 NKATA Nagy Katalin 2 rows in set (0.00 sec) Szúrjunk be 2 es diak_id vel egy új diákot a táblába Kiss Katalin néven. (A projekt ugyanaz, mint az előző példában, csak a main.cpp változik.) main.cpp int main( int argc, char *argv[] ) QApplication app( argc, argv ); if ( createconnections() ) QSqlCursor cur( "diak"); QSqlRecord *buffer = cur.primeinsert(); buffer >setvalue( "diak_id", 2); buffer >setvalue( "azon", "KKATA"); buffer >setvalue( "nev", "Kiss Katalin"); cur.insert(); return 0; Az adatbázis kapcsolat kiépítése után (createconnections()) létrehozzuk a diak táblánkat reprezentáló QSqlCursor osztály egy példányát (cur), majd az adatbázisbeli táblából kiválasztjuk az 2 es azonosítójú diákot (cur.select("diak_id=2")). Ezután lekérjük a segéd puffer címét (primeinsert()), kitöltjük az egyes mezőket, majd beszúrjuk a rekordot az adat táblába. (Vegyük észre, hogy a primeinsert() kinullázza a segéd puffer (buffer) mezőit!) 11. oldal

12 Fordítás/Futtatás A forrásprogram letölthető a people.inf.elte.hu/nacsa/eaf4/projects/diakinsert címről. Rendezés: DiakOrder (gyakorló feladat) Gyakorló feladat: A diak tábla rendezett megjelenítése. Tekintsük a következő táblát! mysql> select * from diak; diak_id azon nev 1 KPETE Kovács Péter 2 NPETE Nagy Péter 3 NKATA Nagy Katalin 3 rows in set (0.17 sec) Listázzuk ki név mező szerint, és azon belül az azon mező szerint növekvő sorrendbe rendezve a diak tábla rekordjait. (A projekt ugyanaz, mint az előző példában, csak a main.cpp változik.) main.cpp Fordítás/Futtatás int main( int argc, char *argv[] ) QApplication app( argc, argv ); if ( createconnections() ) QSqlCursor cur( "diak"); QStringList orderfields = QStringList() << "nev" << "azon"; QSqlIndex order = cur.index(orderfields); cur.select(order); while (cur.next()) qdebug(cur.value("nev").tostring() + " ( " + cur.value("azon").tostring() + " )"); return 0; A forrásprogram letölthető a people.inf.elte.hu/nacsa/eaf4/projects/diakorder címről. A QDataTable osztály A QDataTable osztállyal kényelmesen karbantarthatjuk egy QSqlCursor objektummal reprezentált táblázatot. Ehhez az adatbázisbeli táblánkat (diak) hozzárendeljük egy QSqlCursor objektumhoz, majd a QSqlCursor objektumunkat hozzárendeljük egy QDataTable objektumhoz. A hozzárendelések után automatikusan kiadhatjuk a legalapvetőbb adatbáziskezelő műveleteket (insert, update, delete). A QDataTable használatához szükségünk van a qdatatable.h header fájlra. 12. oldal

13 Keresse meg a QDataTable osztály részletes leírását a Qt súgójában! Tábla karbantartása: DiakDataTable (gyakorló feladat) Gyakorló feladat: Készítsünk egy egyszerű alkalmazást, amellyel megoldhatjuk a diak tábla karbantartását (Beszúrás, Törlés, Módosítás). A feladatot a QDataTable osztály alkalmazásával oldjuk meg. A projekt felépítése: main.cpp main.cpp connection.h (ugyanaz, mint a DiakQuery példában) connection.cpp ( ugyanaz, mint a DiakQuery példában ) #include <qapplication.h> #include <qsqldatabase.h> #include <qsqlcursor.h> #include <qdatatable.h> #include "connection.h" int main( int argc, char *argv[] ) QApplication app( argc, argv ); if ( createconnections() ) QSqlCursor diakcursor( "diak"); QDataTable *diaktable = new QDataTable(&diakCursor, TRUE); app.setmainwidget(diaktable); //diakcursor.setmode( QSqlCursor::ReadOnly ); diaktable >refresh(); diaktable >show(); return app.exec(); return 0; Az adatbázis kapcsolat kiépítése után (creteconnections()) létrehozzuk a diák táblánkat reprezentáló QSqlCursor osztály egy példányát (diakcursor) úgy, hogy már létrehozásnál megadjuk annak a táblának a nevét, amelyet ezzel a diakcursor ral reprezentálunk. Ezután létrehozunk egy QDataTable típusú objektumot diaktable néven, a létrehozás pillanatában megadva, hogy ezzel a táblázattal a diakcursor által reprezentált ( diak ) táblát szeretnénk kezelni. A QdataTable konstruktorának második TRUE paramétere azt jelzi, hogy a táblázat oszlopait az adatbázisbeli tábla alapján kell elkészíteni. A diaktable vezérlőelemet nevezzük ki mainwidget nek. A refesh() függvénnyel feltöltjük a táblázatot, majd azonnal meg is jelenítjük azt. (show()). Fordítás/futtatás Az alkalmazást futtatva figyelje meg a QDataTable szolgáltatásait. Vegye észre, hogy a numerikus típusú mezők alapértelmezésben számláló mezőben szerkeszthetők. Nézze meg, mi történik, ha létező kulccsal (diak_id) szeretne bevinni rekordot. Figyelje meg, mikor kerül be az új rekord az adatbázisba. Keresse meg a Qt súgójában a setmode() függvényt, és próbálja meg változtatgatni az adatkezelés módját. Figyelje meg, mi történik? 13. oldal

14 A forrásprogram letölthető a people.inf.elte.hu/nacsa/eaf4/projects/diakdatatable címről. Ennyi bevezetés után bátran megpróbálkozhatunk a félév elején ismertetett projekt egy részének elkészítésével. Feladat: EafAdmin projekt Készítsünk adminisztrációs programot az Elemi alkalmazások fejlesztése tárgyhoz. A program elkészítéséhez használja a Qt grafikus fejlesztőeszközt, valamint a MySQL adatbáziskezelőt. Az alkalmazás menüpontjai Menü File Táblák Jelentkezés Értékelés Kimutatás View Help Almenük Exit Diák, Gyakorlatvezető, Félév, Csoport, Zárthelyi, Pótzárthelyi Csoportba, Zárthelyire, Pótzárthelyire Beadandó, Zárthelyi Diák Toolbar, Statusbar About 14. oldal

15 A projekt felépítése main.cpp eafadmin.cpp eafadmin.h src.pro //A Kdevelop3 projekt leíró fájlja src.pro Ez a projekt leíró fájl Kdevelp 3 esetén automatikusan létrejön. Az EafAdmin osztály TEMPLATE = app CONFIG += release \ warn_on \ thread \ qt TARGET =../bin/eafadmin SOURCES += eafadmin.cpp \ main.cpp \ connection.cpp HEADERS += eafadmin.h \ connection.h IMAGES += jelentkezescsoport.png \ jelentkezespotzh.png \ jelentkezeszh.png \ tablacsoport.png \ tabladiak.png A főablak létrehozásáról részletesebb ismertetőt talál az SDI alkalmazás készítése Qt ben I. munkafüzetben. eafadmin.h #ifndef EAFADMIN_H #define EAFADMIN_H // A QT fejléc fájljai #include <qapp.h> #include <qmainwindow.h> #include <qaction.h> #include <qmenubar.h> #include <qpopupmenu.h> #include <qtoolbar.h> #include <qtoolbutton.h> #include <qstatusbar.h> #include <qwhatsthis.h> #include <qstring.h> #include <qpixmap.h> #include <qmsgbox.h> 15. oldal

16 class EafAdmin : public QMainWindow Q_OBJECT public: EafAdmin(); ~EafAdmin(); void initactions(); void initmenubar(); void inittoolbar(); void initstatusbar(); bool queryexit(); public slots: /** File menu */ void slotfilequit(); /** Table menu */ void slottabladiak(); void slottablagyakvez(); void slottablafelev(); void slottablacsoport(); void slottablazh(); void slottablapotzh(); /** Jelentkezes menu */ void slotjelentkezescsoport(); void slotjelentkezeszh(); void slotjelentkezespotzh(); /** Ertekeles menu */ void slotertekelesbeadando(); void slotertekeleszh(); /** Kimutatas menu */ void slotkimutatasdiak(); /** toggle the toolbar*/ void slotviewtoolbar(bool toggle); /** toggle the statusbar*/ void slotviewstatusbar(bool toggle); /** shows an about dlg*/ void slothelpabout(); 16. oldal

17 private: QPopupMenu *filemenu; QPopupMenu *helpmenu; QPopupMenu *viewmenu; QPopupMenu *tablamenu; QPopupMenu *jelentkezesmenu; QPopupMenu *ertekelesmenu; QPopupMenu *kimutatasmenu; QToolBar *toolbar; QAction *filequit; QAction *viewtoolbar; QAction *viewstatusbar; QAction *helpaboutapp; QAction *tabladiak; QAction *tablagyakvez; QAction *tablafelev; QAction *tablacsoport; QAction *tablazh; QAction *tablapotzh; QAction *jelentkezescsoport; QAction *jelentkezeszh; QAction *jelentkezespotzh; QAction *ertekelesbeadando; QAction *ertekeleszh; QAction *kimutatasdiak; ; #endif eafadmin.cpp #include <qaccel.h> #include "eafadmin.h" EafAdmin::EafAdmin() : QMainWindow( 0, "EafAdmin", WDestructiveClose ) setcaption(tr(qstring::fromutf8("elemi Alkalmazások fejlesztése "))); initactions(); initmenubar(); inittoolbar(); initstatusbar(); 17. oldal

18 viewtoolbar >seton(true); viewstatusbar >seton(true); void EafAdmin::initActions() /** File Menu */ filequit = new QAction(tr("Exit"), tr("e&xit"), QAccel::stringToKey(tr("Ctrl+Q")), this); filequit >setstatustip(tr("quits the application")); filequit >setwhatsthis(tr("exit\n\nquits the application")); connect(filequit, SIGNAL(activated()), this, SLOT(slotFileQuit())); /** Tabla Menu */ tabladiak = new QAction(tr(QString::fromUtf8("Diák")), tr(qstring::fromutf8("&diák")), QAccel::stringToKey(tr("Ctrl+D")), this); tabladiak >seticonset( QIconSet( QPixmap::fromMimeSource( "./images/tabladiak.png" ) ) ); tabladiak >setstatustip(tr(qstring::fromutf8("diák tábla karbantartása"))); tabladiak >setwhatsthis(tr(qstring::fromutf8("diák tábla karbantartása"))); connect(tabladiak, SIGNAL(activated()), this, SLOT(slotTablaDiak()));... //A többi kód letölthető a people.inf.elte.hu/efa4/projects/eafadmin1 címről /** Help Menu */ helpaboutapp = new QAction(tr("About"), tr("&about..."), 0, this); helpaboutapp >setstatustip(tr("about the application")); helpaboutapp >setwhatsthis(tr("about\n\nabout the application")); connect(helpaboutapp, SIGNAL(activated()), this, SLOT(slotHelpAbout())); void EafAdmin::initMenuBar() // menubar entry filemenu filemenu=new QPopupMenu(); filequit >addto(filemenu); // menubar entry tablamenu tablamenu=new QPopupMenu(); tabladiak >addto(tablamenu); tablagyakvez >addto(tablamenu); tablafelev >addto(tablamenu); tablacsoport >addto(tablamenu); tablazh >addto(tablamenu); // menubar entry viewmenu viewmenu=new QPopupMenu(); viewmenu >setcheckable(true); viewtoolbar >addto(viewmenu); viewstatusbar >addto(viewmenu); 18. oldal

19 // menubar entry helpmenu helpmenu=new QPopupMenu(); helpaboutapp >addto(helpmenu); // MENUBAR CONFIGURATION menubar() >insertitem(tr(qstring::fromutf8("&file")), filemenu); menubar() >insertitem(tr(qstring::fromutf8("&táblák")), tablamenu); menubar() >insertitem(tr(qstring::fromutf8("&jelentkezés")), jelentkezesmenu); menubar() >insertitem(tr(qstring::fromutf8("&értékelés")), ertekelesmenu); menubar() >insertitem(tr(qstring::fromutf8("&kimutatás")), kimutatasmenu); menubar() >insertseparator(); menubar() >insertitem(tr(qstring::fromutf8("&view")), viewmenu); menubar() >insertitem(tr(qstring::fromutf8("&help")), helpmenu); void EafAdmin::initToolBar() // TOOLBAR toolbar = new QToolBar( "", this, DockTop ); tablacsoport >addto( toolbar ); tabladiak >addto( toolbar ); jelentkezescsoport >addto( toolbar ); jelentkezeszh >addto( toolbar ); jelentkezespotzh >addto( toolbar ); toolbar >addseparator(); QWhatsThis::whatsThisButton(toolBar); void EafAdmin::initStatusBar() statusbar() >message(tr(qstring::fromutf8("kész")), 2000); bool EafAdmin::queryExit() int exit=qmessagebox::information(this, tr("quit..."), tr(qstring::fromutf8("valóban befejezte a munkát?")), QMessageBox::Ok, QMessageBox::Cancel); return (exit==1); // SLOTOK IMPLEMENTÁCIÓJA void EafAdmin::slotFileQuit() statusbar() >message(tr(qstring::fromutf8("kilépés az alkalmazásból..."))); qapp >quit(); statusbar() >message(tr(qstring::fromutf8("kész."))); void EafAdmin::slotViewToolBar(bool toggle) 19. oldal

20 statusbar() >message(tr(qstring::fromutf8("eszközgombok ki és bekapcsolása..."))); if (toggle== false) toolbar >hide(); else toolbar >show(); statusbar() >message(tr(qstring::fromutf8("kész."))); void EafAdmin::slotViewStatusBar(bool toggle) statusbar() >message(tr(qstring::fromutf8("eszközgombok ki és bekapcsolása..."))); if (toggle == false) statusbar() >hide(); else statusbar() >show(); statusbar() >message(tr(qstring::fromutf8("kész"))); void EafAdmin::slotHelpAbout() QMessageBox::about(this,tr("About..."), tr(qstring::fromutf8("eafadmin\nversion 1.0 prepared by Szabóné Nacsa Rozália")) ); void EafAdmin::slotTablaDiak() statusbar() >message(tr(qstring::fromutf8("diák tábla betöltése..."))); setcaption(tr(qstring::fromutf8("elemi Alkalmazások fejlesztése: Diák tábla karbantartása "))); QMessageBox::information( this, QString::fromUtf8("Diák tábla karbantartása"), QString::fromUtf8("Elnézést!\nEz a menüpont még nincs megvalósítva!")); statusbar() >message(tr(qstring::fromutf8("kész"))); void EafAdmin::slotTablaGyakvez() statusbar() >message(tr(qstring::fromutf8("gyakvez tábla betöltése..."))); setcaption(tr(qstring::fromutf8("elemi Alkalmazások fejlesztése: Gyakvez tábla karbantartása "))); QMessageBox::information( this, QString::fromUtf8("Gyakvez tábla karbantartása"), QString::fromUtf8("Elnézést!\nEz a menüpont még nincs megvalósítva!")); statusbar() >message(tr(qstring::fromutf8("kész"))); A főprogram: main.cpp #include <qapplication.h> #include <qobject.h> #include "eafadmin.h" int main( int argc, char ** argv ) QApplication a( argc, argv ); EafAdmin * mw = new EafAdmin(); mw >setcaption(qobject::tr(qstring::fromutf8("elemi Alkalmazások fejlesztése "))); 20. oldal

21 Fordítás/Futtatás mw >show(); a.connect( &a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()) ); return a.exec(); Ezzel elkészítettük az alap projektet. Mielőtt folytatná, kérem ellenőrizze, minden rendben működik e. Az alap projekt forrásprogramja letölthető a people.inf.elte.hu/nacsa/eaf4/projects/eafadmin0 címről. Az adatbázis kapcsolat megvalósítása Tegyük alkalmassá projektünket az adatbázis kezelésre. Először illessze be a projektbe a connection.h és connection.cpp fájlokat. A forráskód a munkafüzet DiakQuery példájában található. A főprogram kiegészítése az adatbázis kapcsolattal Illesszük be a connection.h és connection.cpp fájlokat a projektbe. src.pro TEMPLATE = app CONFIG += release \ warn_on \ thread \ qt TARGET =../bin/eafadmin SOURCES += eafadmin.cpp \ main.cpp \ connection.cpp HEADERS += eafadmin.h \ connection.h main.cpp (módosítás) #include <qapplication.h> #include <qobject.h> #include "eafadmin.h" #include "connection.h" int main( int argc, char ** argv ) QApplication a( argc, argv ); if (!createconnections()) return 1; EafAdmin * mw = new EafAdmin(); mw >setcaption(qobject::tr(qstring::fromutf8("elemi Alkalmazások fejlesztése "))); mw >show(); a.connect( &a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()) ); return a.exec(); 21. oldal

22 Ha idáig eljutottunk, akkor már rendelkezünk egy jól előkészített, adatbáziskezelésre is alkalmas alkalmazás kerettel. Mostmár az SQL modul osztályait használva bármely modulból elérhetjük adatbázisunkat, kiadhatunk adatbáziskezelő parancsokat. A diak táblát karbantartó programrész megvalósítása (Táblák/Diák menüpont) Első lépésként elkészítjük a Táblák/Diák menüpontot. Ebben a menüpontban biztosítjuk a diak tábla karbantartását (új diákokat felvétele, adatainak módosítása, diákok törlése). A tábla karbantartásához a QSqlCursor és a QDataTable osztályok szolgáltatásait vesszük igénybe. A diak_id (sorszám) automatikus kiosztása Új diák felvételekor a diak_id azonosítót szeretnénk automatikusan hozzárendelni az újonnan felvett diákhoz. Azt, hogy az adott pillanatban milyen sorszámnál tartunk az adatbázis sequence táblájában találhatjuk meg. (Az automatikus sorszámozás helyett azért választottuk ezt a megoldást, mert ez biztosan működik minden adatbáziskezelőnél.) mysql> select * from sequence; tablename sequence felev 0 csoport 0 gyakvez 0 diak 4 zh 1 potzh rows in set (0.00 sec) Rekord beszúrásakor a beszúrást megelőző (előkészítő) műveleteket a QDataTable osztály primeinsert() szignáljához kötött szlotban adhatjuk meg. A slotprimeinsert() metódusban a sequence táblából lekérjük (és egyben megnöveljük) a diak táblához tartozó aktuális sorszámot, és betöltjük azt az insert művelet segéd 22. oldal

23 pufferének diak_id mezejébe. A diak_id mezőt a képernyőn nem jelenítjük meg, hiszen a felhasználót valójában nem érdekli ez a technikai kód. Így minden diák más más azonosító sorszámot (diak_id) kap, és a felhasználó az adatbevitel során nem ronthatja el az adatbázis konzisztenciáját. A DiakDataTable osztály elkészítése src.pro TEMPLATE = app CONFIG += release \ warn_on \ thread \ qt TARGET =../bin/eafadmin SOURCES += eafadmin.cpp \ main.cpp \ connection.cpp \ diakdatatable.cpp HEADERS += eafadmin.h \ connection.h \ diakdatatable.h IMAGES += jelentkezescsoport.png \ jelentkezespotzh.png \ jelentkezeszh.png \ tablacsoport.png \ tabladiak.png diakdattable.h #include <qdatatable.h> #include <qsqlcursor.h> class DiakDataTable : public QdataTable Q_OBJECT public: DiakDataTable(QWidget * parent =0, const char * name =0 ); public slots: void slotprimeinsert(qsqlrecord*); private: QSqlCursor *cursor; ; diakdattable.cpp #include "diakdatatable.h" DiakDataTable::DiakDataTable(QWidget * parent, const char * name) : QDataTable( parent, name ) cursor = new QSqlCursor("diak"); setsqlcursor(cursor); //addcolumn( "diak_id", "Kód" ); addcolumn( "azon", "Azonosító" ); addcolumn( "nev", "Név" ); setcolumnwidth(2,200); refresh(); 23. oldal

24 setconfirmdelete(true); setautoedit(true); // signals and slots connections connect( this, SIGNAL( primeinsert(qsqlrecord*) ), this, SLOT( slotprimeinsert(qsqlrecord*) ) ); void DiakDataTable::slotPrimeInsert(QSqlRecord * buffer) QSqlQuery query; query.exec("update sequence SET sequence = sequence + 1 WHERE tablename ='diak';"); query.exec("select sequence FROM sequence WHERE tablename ='diak';"); if (query.next()) buffer >setvalue("diak_id", query.value(0)); A slottabladiak() módosítása (eafadmin.cpp) A Táblák/diák menüpont kiválasztásakor létrehozzuk az előzőekben megadott osztály egy példányát és ezt jelöljük meg az alkalmazásunk központi párbeszéd ablakának. Ehhez aktualizálnunk kell a slottabladiak() slotot. Fordítás/Futtatás... #include "diakdatatable.h"... void EafAdmin::slotTablaDiak() statusbar() >message(tr(qstring::fromutf8("diák tábla betöltése..."))); setcaption(tr(qstring::fromutf8("elemi Alkalmazások fejlesztése: Diák tábla karbantartása "))); DiakDataTable *diakdatatable = new DiakDataTable(this, "DiakDtatTable"); diakdatatable >show(); setcentralwidget(diakdatatable); statusbar() >message(tr(qstring::fromutf8("kész"))); Fordítás és szerkesztés után indítsa el a programot, majd a menüpontok közül válassza ki a Táblák/Diák menüpontot. Kattintson jobb egérfüllel a megjelenő táblára, majd a felbukkanó helyi menüből válassza ki a kívánt fumkciót: Insert, Update, Delete. Néhány rekord bevitele után egy terminál ablakból nyissa meg az adatbázist, és nézze meg, helyesen működik e a program, valamint a sorszámok kiosztása. Vegye észre, hogy az adatbázist az alkalmazásból és a terminál ablakból is módosíthatja. 24. oldal

25 mysql> select * from diak; diak_id azon nev 1 KPETE Kiss Péter 2 NPETE Nagy Péter 3 NKATA Nagy Katalin 3 rows in set (0.00 sec) mysql> select * from sequence; tablename sequence diak 4... Ellenőrzött adatbevitel biztosítása Adatbevitelnél/módosításnál ügyelnünk kell arra is, hogy megmaradjon az adatbázis konzisztenciája. Erre a legelegánsabb megoldás, ha fel sem kínáljuk azokat a műveleteket, amelyeket úgy sem lehetne végrehajtani. Adatbázisunk diák táblájából nem törölhető az a diák, aki már tagja valamely csoportnak, illetve már van valamilyen gyakorlati jegye. Az aktuális soron végrehajtható műveleteket a QsqlRecord curretchanged() szignáljára kötött slotcurretchanged() slot metódusban szabályozzuk. diakdattable.h (módosítás) class DiakDataTable : public QDataTable... public slots: void slotprimeinsert(qsqlrecord*); void slotcurrentchanged(qsqlrecord* buffer); private: void setmode(qsqlrecord* buffer); QSqlCursor *cursor; ; diakdattable.cpp (módosítás) #include "diakdatatable.h" DiakDataTable::DiakDataTable(QWidget * parent, const char * name) : QDataTable( parent, name ) cursor = new QSqlCursor("diak"); setsqlcursor(cursor); //addcolumn( "diak_id", "Kód" ); addcolumn( "azon", "Azonosító" ); addcolumn( "nev", "Név" ); setcolumnwidth(2,200); refresh(); setconfirmdelete(true); 25. oldal

26 setautoedit(true); // signals and slots connections connect( this, SIGNAL( primeinsert(qsqlrecord*) ), this, SLOT( slotprimeinsert(qsqlrecord*) ) ); connect( this, SIGNAL( currentchanged(qsqlrecord*) ), this, SLOT( slotcurrentchanged (QSqlRecord*) ) ); void DiakDataTable::slotCurrentChanged(QSqlRecord* buffer) setmode(buffer); void DiakDataTable::setMode(QSqlRecord* buffer) if (buffer == 0) return; QSqlQuery query; int count_tag=0; query.exec( "SELECT count(*) FROM tag WHERE diak_id=" + buffer >value("diak_id").tostring() + ";" ); if (query.next()) count_tag = query.value(0).toint(); int count_jelentkezes=0; query.exec("select count(*) FROM jelentkezes WHERE diak_id=" + buffer >value("diak_id").tostring() + ";"); if (query.next()) count_jelentkezes = query.value(0).toint(); if ( count_tag == 0 and count_jelentkezes == 0 ) cursor >setmode( QSqlCursor::Insert QSqlCursor::Delete QSqlCursor::Update ); else cursor >setmode( QSqlCursor::Insert QSqlCursor::Update ); A forrásprogramok letölthetők a people.inf.elte.hu/nacsa/eaf4/projects/eafadmin1 címről. Folytatása következik oldal

Elemi alkalmazások fejlesztése IV.

Elemi alkalmazások fejlesztése IV. Elemi alkalmazások fejlesztése IV. C++/Qt adatbáziskezelő alkalmazás készítése Kdevelop környezetben I. Készítette: Szabóné Nacsa Rozália 1 MySql elindítása [nacsa@localhost nacsa]$ su Password:jelszó

Részletesebben

MySql elindítása. Elemi alkalmazások fejlesztése IV. Feladat. Az alkalmazás adatbázisa

MySql elindítása. Elemi alkalmazások fejlesztése IV. Feladat. Az alkalmazás adatbázisa Elemi alkalmazások fejlesztése IV. C++/Qt adatbáziskezel ő alkalmazás készítése Kdevelop környezetben I. MySql elindítása [nacsa@localhost nacsa]$ su Password:jelszó [root@localhost nacsa]# /usr/bin/safe_mysqld

Részletesebben

Elemi alkalmazások fejlesztése IV. Adatbáziskezel alkalmazás készítése QtDesignerben. Készítette: Szabóné Nacsa Rozália

Elemi alkalmazások fejlesztése IV. Adatbáziskezel alkalmazás készítése QtDesignerben. Készítette: Szabóné Nacsa Rozália Elemi alkalmazások fejlesztése IV. Adatbáziskezel ő alkalmazás készítése QtDesignerben Készítette: Szabóné Nacsa Rozália 1 Származtatásos modulszerkezet Q t form.ui U formbase.h Örökl ő dés form.h formbase.cpp

Részletesebben

Elemi alkalmazások fejlesztése III

Elemi alkalmazások fejlesztése III Elemi alkalmazások fejlesztése III Qt SDI alkalmazás készítése I Kdevelop környezetben Készítette: Szabóné Nacsa Rozália Steingart Ferenc 1 Feladat Készítsünk egy számlakezel ő ablakos alkalmazást! Számlafejléc

Részletesebben

Elemi alkalmazások fejlesztése III

Elemi alkalmazások fejlesztése III Elemi alkalmazások fejlesztése III C++/ Qt alapú SDI alkalmazás készítése I. Készítette: Szabóné Nacsa Rozália Steingart Ferenc 1 Feladat Készítsünk egy számlakezel ő ablakos alkalmazást! Számlafejléc

Részletesebben

Egységes és objektumközpontú adatbázis-kezelés (2. rész)

Egységes és objektumközpontú adatbázis-kezelés (2. rész) Egységes és objektumközpontú adatbázis-kezelés (2. rész) A folytatásában a bemutatjuk, hogyan kezelhetünk Qt rendszer alatt SQL sormutatót, és készíthetünk grafikus felületet programoknak a Qt Designer

Részletesebben

Eseményvezérelt alkalmazások fejlesztése I 8. előadás. Adatbázis-kezelés elemi eszközökkel. A MySQL adatbázis-kezelő

Eseményvezérelt alkalmazások fejlesztése I 8. előadás. Adatbázis-kezelés elemi eszközökkel. A MySQL adatbázis-kezelő Eötvös Loránd Tudományegyetem Informatikai Kar Eseményvezérelt alkalmazások fejlesztése I 8. előadás Adatbázis-kezelés elemi eszközökkel 2016 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Részletesebben

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni: 1 Adatbázis kezelés 2. gyakorlat A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni: Táblák létrehozása,

Részletesebben

Eseményvezérelt alkalmazások fejlesztése I 7. előadás. Adatbázis-kezelés elemi eszközökkel. Giachetta Roberto

Eseményvezérelt alkalmazások fejlesztése I 7. előadás. Adatbázis-kezelés elemi eszközökkel. Giachetta Roberto Eötvös Loránd Tudományegyetem Informatikai Kar Eseményvezérelt alkalmazások fejlesztése I 7. előadás Adatbázis-kezelés elemi eszközökkel Giachetta Roberto A jegyzet az ELTE Informatikai Karának 2014. évi

Részletesebben

Elemi alkalmazások fejlesztése III. A Qt assistant elindítása. Ajánlott ir odalom. A Qt assistant nyitó ablaka

Elemi alkalmazások fejlesztése III. A Qt assistant elindítása. Ajánlott ir odalom. A Qt assistant nyitó ablaka Elemi alkalmazások fejlesztése III Ajánlott ir odalom Egy ablakos alkalmazás készítése I. C++ / Qt felhasználásával Qt dokumentáció online: www.trolltech.com lokális változat: Kdevelop help vagy /usr/share/doc...

Részletesebben

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) közönséges felhasználók SQL*Plus Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP dolgozó), DEPT osztály) "közönséges" felhasználók Adatszótár: metaadatokat tartalmazó, csak olvasható táblák táblanév-prefixek:

Részletesebben

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2 Tartalomjegyzék Tartalomjegyzék 1 Az SQL nyelv 1 Az SQL DDL alapjai 2 Adatbázis parancsok 2 Táblaparancsok 2 A táblázat létrehozása 2 A táblázat módosítása 3 A tábla törlése 3 Indextábla létrehozása 3

Részletesebben

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban Adabáziselérés ODBC-n keresztül utasításokkal C#-ban 1. Előkészítés Access adatbázis lemásolása, ODBC DSN létrehozása Másoljuk le az alábbiakat: Mit Honnan Hova list.mdb p:\johanyák Csaba\Vizualis programozas\data\

Részletesebben

Elemi alkalmazások fejlesztése III.

Elemi alkalmazások fejlesztése III. Elemi alkalmazások fejlesztése III. MDI alkalmazás II. (Számla) Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu people.inf.elte.hu/nacsa/qt4/eaf3/ Qt 4 2007 1 Számla felépítése fejléc tábla 2 Az alkalmazás

Részletesebben

Elemi alkalmazások fejlesztése III.

Elemi alkalmazások fejlesztése III. Elemi alkalmazások fejlesztése III. Grafikus felületű alkamazások készítése Bevezetés I. Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu people.inf.elte.hu/nacsa/qt4/eaf3/ Qt 4 2009 1 www.trolltech.com

Részletesebben

Adatbázisok* tulajdonságai

Adatbázisok* tulajdonságai Gazdasági folyamatok térbeli elemzése 4. előadás 2010. 10. 05. Adatbázisok* tulajdonságai Rendezett, logikailag összefüggő és meghatározott szempont szerint tárolt adatok és/vagy információk halmaza Az

Részletesebben

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai SQL ALAPOK Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai BEVEZETÉS SQL: Structured Query Language Strukturált Lekérdező Nyelv Szabvány határozza meg, azonban számos nyelvjárása létezik

Részletesebben

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai: 8. Gyakorlat SQL SQL: Structured Query Language; a relációs adatbáziskezelők szabványos, strukturált lekérdező nyelve SQL szabványok: SQL86, SQL89, SQL92, SQL99, SQL3 Az SQL utasításokat mindig pontosvessző

Részletesebben

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK Horváth Győző Egyetemi adjunktus 1117 Budapest, Pázmány Péter sétány 1/C, 2.420 Tel: (1) 372-2500/1816 2 Ismétlés Ismétlés 3 Fájl/Adatbázis 3 4 Szerver 2 CGI

Részletesebben

Elemi alkalmazások fejlesztése III

Elemi alkalmazások fejlesztése III Elemi alkalmazások fejlesztése III Egy ablakos alkalmazás készítése I. C++ / Qt felhasználásával készítette: Szabóné Nacsa Rozália 1 Ajánlott irodalom Qt dokumentáció online: www.trolltech.com lokális

Részletesebben

Adatbázis rendszerek SQL nyomkövetés

Adatbázis rendszerek SQL nyomkövetés Adatbázis rendszerek 1. 12. SQL nyomkövetés 1/32 B ITv: MAN 2017.10.26 Nyomkövetési feladat 2/32 Gyakorló feladatok Termék-Vásárlás-Vásárló Oktató-Tantárgy-Hallgató 3/32 Gyakorló feladat: Termék-Vásárlás-Vásárló

Részletesebben

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN B IT v: 2016.03.03 MAN Csomagok A DBMS csomagok a PL/SQL alkalmazások fejlesztését segítik, bennük tároljuk a létrehozott programok kódjait. A specifikációs

Részletesebben

Elemi alkalmazások fejlesztése III. SDI alkalmazás készítése Qt-ben I.

Elemi alkalmazások fejlesztése III. SDI alkalmazás készítése Qt-ben I. SDI alkalmazás készítése Qt-ben I...3 Feladat...3 A projekt osztálydiagramja...3 A projekt modulszekezete...4 Új projekt létrehozása...5 A számla megtervezése...5 Vezérlőelemek és paraméterezésük...6 Az

Részletesebben

Elemi adatbázis kezelés

Elemi adatbázis kezelés Elemi adatbázis kezelés Adatbázisok használata Qt alatt A Qt-ben a QtSql module támogatja az SQL elérésű adatbázisok platform- és adatbázis független használatát. Az adatbázis kapcsolat kiépítése során

Részletesebben

Adatbázis-kezelés ODBC-vel

Adatbázis-kezelés ODBC-vel Adatbázis-kezelés ODBC-vel Készítette: Szabóné Nacsa Rozália 2004. november Adatbázis-kezelés API hívásokkal Alkalmazás Adatbázis 1 API 1 API 1 hívások Adatbázis 2 API 2 Alkalmazás API 2 hívások Adatbázis-kezelés

Részletesebben

Elemi alkalmazások fejlesztése III.

Elemi alkalmazások fejlesztése III. Elemi alkalmazások fejlesztése III. Bevezetés Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu people.inf.elte.hu/nacsa/qt4/eaf3/ Qt 4 2007 1 A Qt assistant nyitó ablaka www.trolltech.com 2 Alkalmazás

Részletesebben

Adatbázis Rendszerek II. 8. Gyakorló környezet

Adatbázis Rendszerek II. 8. Gyakorló környezet Adatbázis Rendszerek II. 8. Gyakorló környezet 1/24 B IT v: 2017.10.26 MAN Gyakorló környezet Géptermek 193.6.5.58:8080/apex H16_neptunkód ADMIN neptunkód 2/24 Jelszó váltás 1 2 3 4 3/24 Gyakorló környezet

Részletesebben

Adatbázis-kezelés API hívásokkal. Adatbázis-kezelés ODBC-vel. Adatbázis-kezelés SQL parancsokkal. Adatbázis-kezelés ODBC-vel.

Adatbázis-kezelés API hívásokkal. Adatbázis-kezelés ODBC-vel. Adatbázis-kezelés SQL parancsokkal. Adatbázis-kezelés ODBC-vel. Adatbázis-kezelés API hívásokkal hívások Adatbázis-kezelés -vel Készítette: Szabóné Nacsa Rozália 2004. november API 2 API 2 hívások Adatbázis-kezelés parancsokkal Adatbázis-kezelés -vel eljárások 1 parancsok

Részletesebben

Készítette: Szabóné Nacsa Rozália

Készítette: Szabóné Nacsa Rozália Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu 1 Structured Query Language (Struktúrált lekérdező nyelv) Relációs adatbázisok kezelésére kifejlesztett szabvány 2 DIAKOK dkód vnév knév 1001 Kiss János

Részletesebben

Adatbázisok webalkalmazásokban

Adatbázisok webalkalmazásokban Sapientia - EMTE, Pannon Forrás,,Egységes erdélyi felnőttképzés a Kárpát-medencei hálózatban 2010 A JDBC API A Data Access Object tervezési minta Adatforrás - DataSource JDBC architektúra A JDBC API java.sql

Részletesebben

Alkalmazások fejlesztése III. Qt 4 /C++ alapú grafikus alkalmazás Bevezetés I.

Alkalmazások fejlesztése III. Qt 4 /C++ alapú grafikus alkalmazás Bevezetés I. Tartalomjegyzék Alkalmazás készítés Qt osztályokkal...2 A qmake eszköz...2 Hello Qt (hello)...2 Objektumok közötti kommunikáció (quit)...3 Fordítás/futtatás...4 Grafikus felület létrehozása, vezérlők szinkronizálása

Részletesebben

Adatbázis-kezelés ODBC driverrel

Adatbázis-kezelés ODBC driverrel ADATBÁZIS-KEZELÉS ODBC DRIVERREL... 1 ODBC: OPEN DATABASE CONNECTIVITY (NYÍLT ADATBÁZIS KAPCSOLÁS)... 1 AZ ODBC FELÉPÍTÉSE... 2 ADATBÁZIS REGISZTRÁCIÓ... 2 PROJEKT LÉTREHOZÁSA... 3 A GENERÁLT PROJEKT FELÉPÍTÉSE...

Részletesebben

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17 Adatbázisok 8. gyakorlat SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT 2015. október 26. 2015. október 26. Adatbázisok 1 / 17 SQL nyelv Structured Query Language Struktúrált lekérdez

Részletesebben

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL ) Célok: a Java DB adatbázis-kezelő rendszer használatának ismertetése, adatbázisok használata Java alkalmazásokban - kétrétegű architektúra, egyszerű kliens-szerver architektúra használata hálózati alkalmazásokhoz.

Részletesebben

Választó lekérdezés létrehozása

Választó lekérdezés létrehozása Választó lekérdezés létrehozása A választó lekérdezés egy vagy több rekordforrásból származó adatokat jelenít meg. A választó lekérdezések a táblák, illetve az adatbázis tartalmát nem változtatják meg,

Részletesebben

Elemi alkalmazások fejlesztése I.

Elemi alkalmazások fejlesztése I. Steingart Ferenc el adása alapján készítette: Szabóné Nacsa Rozália Integrált fejleszt környezet Linux MS Win* www.kdevelop.org www.bloodshed.net Bevezetés 1 A kdevelop f ablaka Editor és böngész Projektszerkezet

Részletesebben

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Adatbázis-lekérdezés. Az SQL nyelv. Makány György Adatbázis-lekérdezés Az SQL nyelv Makány György SQL (Structured Query Language=struktúrált lekérdező nyelv): relációs adatbázisok adatainak visszakeresésére, frissítésére, kezelésére szolgáló nyelv. Születési

Részletesebben

Java és web programozás

Java és web programozás Budapesti M szaki Egyetem 2013. november 20. 10. El adás SQLite SQLite: Adatbázis kezel rendszer SQL standardokat nagyrészt követi Nagyon elterjedt, pl böngész kben is használt Nehéz olyan programnyelvet

Részletesebben

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal. Adatbázis létrehozása Adatleíró műveletek CREATE DATABASE "tan1" WITH ENCODING= LATIN2 ; vagy parancssorból a terminál alatt $ createdb tan1 E=latin2 Kapcsolódás az adatbázishoz $ psql tan1 Adattábla létrehozása

Részletesebben

Az SQL*Plus használata

Az SQL*Plus használata Az SQL*Plus használata Célkitűzés Bejelentkezés az SQL*Plus-ba SQL utasítások szerkesztése Az eredmény formázása SQL*Plus utasításokkal Szkriptfájlok használata Az SQL és az SQL*Plus kapcsolata SQL*Plus

Részletesebben

Adatbázis kezelés Delphiben. SQL lekérdezések

Adatbázis kezelés Delphiben. SQL lekérdezések Adatbázis kezelés Delphiben. SQL lekérdezések Structured Query Language adatbázisok kezelésére szolgáló lekérdező nyelv Szabályok: Utasítások tetszés szerint tördelhetők Utasítások végét pontosvessző zárja

Részletesebben

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk. OO PDO PDO VS MYSQLi VS MYSQL ================================================================================ A PHP mysql metódusai elavultak, helyette lehet hazsnálni a MYSQLi metódusokat, amelyek szinte

Részletesebben

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére SQL PÉLDATÁR készült a PTE TTK Iskolai informatika III. kurzus teljesítésére PTE TTK Czimmermann Gergely MA matematika informatika tanár szakos hallgató 2017 Tartalomjegyzék 1. Adatleíró műveletek... 3

Részletesebben

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai 8. gyakorlat Structured Query Language Struktúrált lekérdező nyelv A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai DDL (Data Definition Language) adatstruktúra definiáló

Részletesebben

Java és web programozás

Java és web programozás Budapesti Műszaki Egyetem 2015. 04. 08. 10. Előadás Ami kimearad múlthéten Ha már megvan a KeyListener vagy MouseListener osztályunk a következõ módon tudjuk hozzárendelni egy JFrame vagy JPanel-hez: Ami

Részletesebben

Adatbázis-kezelés. Harmadik előadás

Adatbázis-kezelés. Harmadik előadás Adatbázis-kezelés Harmadik előadás 39 Műveletek csoportosítása DDL adat definiálás Objektum létrehozás CREATE Objektum törlés DROP Objektum módosítás ALTER DML adat módosítás Rekord felvitel INSERT Rekord

Részletesebben

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok SQL jogosultság-kezelés Privilégiumok Grant és Revoke Grant Diagrammok 1 Jogosultság-kezelés Egy fájlrendszer általában jogosultságokat rendel az általa kezelt objektumokhoz. Tipikusan olvasható, írható,

Részletesebben

Elemi alkalmazások fejlesztése III.

Elemi alkalmazások fejlesztése III. Elemi alkalmazások fejlesztése III. Memóriajáték 1. Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu people.inf.elte.hu/nacsa/qt4/eaf3/ Qt 4 2007 1 memorygame Játék közben 2 memorygame Kártyák kiválasztása

Részletesebben

LBRA6i integrált rendszer

LBRA6i integrált rendszer LBRA6i integrált rendszer LIBRA 6i logolás és a log megtekintése Készítette: Libra Szoftver Zrt. Létrehozás dátuma: 2005.12.15. Utolsó módosítás: 2014.10.30. Referencia szám: LIBRA6i_UZEM_V_1.5 Verzió:

Részletesebben

Adatbázis-kezelés ActiveX vezérl kkel 2.rész

Adatbázis-kezelés ActiveX vezérl kkel 2.rész Adatbázis-kezelés ActiveX vezérl kkel 2.rész Készítette: Szabóné Nacsa Rozália 2004. november Feladat Figyelmeztetés, Figyelmeztetés, ha ha betelt betelt a a csoport. csoport. Csoport Csoport kiválasztása

Részletesebben

Adatbáziskezelés php-ben MySQL adatbáziskezelı rendszert használva

Adatbáziskezelés php-ben MySQL adatbáziskezelı rendszert használva Adatbáziskezelés php-ben MySQL adatbáziskezelı rendszert használva by A feladat bemutatása...1 Táblák létrehozása...1 Táblák feltöltése...2 Adatbáziskezelés php-ben...5 Csatlakozás az MySQL szerverhez

Részletesebben

Adatbázis Rendszerek II. 1. SQL programozási felületek 39/1B IT MAN

Adatbázis Rendszerek II. 1. SQL programozási felületek 39/1B IT MAN Adatbázis Rendszerek II. 1. SQL programozási felületek 39/1B IT MAN B IT v: 2016.02.10 MAN SQL felületek Hatékony: SQL parancsok kiadására Eredmények megtekintésére Nehézkes: Nagyobb volumenű, rutintevékenységek

Részletesebben

Adatbázis Rendszerek II. 2. Gyakorló környezet

Adatbázis Rendszerek II. 2. Gyakorló környezet Adatbázis Rendszerek II. 2. Gyakorló környezet 37/1 B IT v: 2017.02.11 MAN Gyakorló környezet Géptermek 37/2 Jelszó váltás 1 2 3 4 37/3 Gyakorló környezet II. apex.oracle.com/en/ 37/4 A regisztrációs folyamat

Részletesebben

3. Osztályok II. Programozás II

3. Osztályok II. Programozás II 3. Osztályok II. Programozás II Bevezető feladat Írj egy Nevsor osztályt, amely legfeljebb adott mennyiségű nevet képes eltárolni. A maximálisan tárolható nevek számát a konstruktorban adjuk meg. Az osztályt

Részletesebben

Felhasználói segédlet a Scopus adatbázis használatához

Felhasználói segédlet a Scopus adatbázis használatához Felhasználói segédlet a Scopus adatbázis használatához Az adatbázis elérése, regisztrálás, belépés Az adatbázis címe: http://www.scopus.com Az adatbázis csak regisztrált, jogosultsággal rendelkező intézmények,

Részletesebben

PHP-MySQL. Adatbázisok gyakorlat

PHP-MySQL. Adatbázisok gyakorlat PHP-MySQL Adatbázisok gyakorlat Weboldalak és adatbázisok Az eddigiek során megismertük, hogyan lehet a PHP segítségével dinamikus weblapokat készíteni. A dinamikus weboldalak az esetek többségében valamilyen

Részletesebben

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány) Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány) 23/1 B IT v: 2018.10.31 MAN DML adatokon műveletet végző utasítások DML Data Manipulation Language Rekordok (sorok) beszúrása (felvitele) Mezők

Részletesebben

Elemi alkalmazások fejlesztése IV.

Elemi alkalmazások fejlesztése IV. Structured Query Language (Struktúrált lekérdez ı nyelv) Relációs adatbázisok kezelésére kifejlesztett szabvány né Nacsa Rozália nacsa@inf.elte.hu Fejlesztı : MySQLAB weboldal: www.mysql.com MySQL installálása.

Részletesebben

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos PASzSz Kilencedik témakör: Lazarus-Firebird Készítette: Dr. Kotsis Domokos Az SQLdb fülön IBConnection Kapcsolat A Data Access fülön Az SQLdb fülön... Select 1. Az SQLQuery lezárása. (Active := false,

Részletesebben

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni: 1 Adatbázis kezelés 3. gyakorlat A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni: Tábla kapcsolatok létrehozása,

Részletesebben

Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14

Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14 Adatbázisok 9. gyakorlat SQL: SELECT 2015. október 26. 2015. október 26. Adatbázisok 1 / 14 SQL SELECT Lekérdezésre a SELECT utasítás szolgál, mely egy vagy több adattáblából egy eredménytáblát állít el

Részletesebben

munkafüzet open eseményéhez

munkafüzet open eseményéhez Makrók használata az Excelben - munkafüzet open eseményéhez VBA-eljárás létrehozása Az Auto_Open makróval kapcsolatos fenti korlátozások megkerülhetők az Open eseményhez rendelt VBA-eljárással. Példa Auto_open

Részletesebben

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1 SZE INFORMATIKAI KÉPZÉS 1 ADATBÁZIS-KEZELÉS MS ACCESS 2010 A feladat megoldása során a Microsoft Office Access 2010 használata a javasolt. Ebben a feladatban a következőket fogjuk gyakorolni: Adatok importálása

Részletesebben

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu Számonkérés 2 Papíros (90 perces) zh az utolsó gyakorlaton. Segédanyag nem használható Tematika 1. félév 3 Óra Dátum Gyakorlat 1. 2010.09.28.

Részletesebben

Téradatbázisok használata QGIS-ből A DB kezelő modul 2.2 verzió

Téradatbázisok használata QGIS-ből A DB kezelő modul 2.2 verzió Téradatbázisok használata QGIS-ből A DB kezelő modul 2.2 verzió A QGIS programból számos téradatbázis adatait elérhetjük, ezek közül két nyílt forráskódúval foglalkozunk, a PostGIS és a SpatiaLite adatbázis

Részletesebben

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába A lista eleme 0 adat rész mutató rész Listaelem létrehozása p: Node 0 0 3 0 Az elemet nekünk kell bef zni a listába Deklarálás struct Node { int int value; Node* next; next; adattagok Létrehozás Node*

Részletesebben

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv)

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv) Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv) Az SQL a relációs adatbázis-kezelő rendszerek ma legelterjedtebb szabványosított adatbáziskezelő nyelve. Az IBM dolgozta ki 1983-ban,

Részletesebben

Excel ODBC-ADO API. Tevékenységpontok: - DBMS telepítés. - ODBC driver telepítése. - DSN létrehozatala. -Excel-ben ADO bevonása

Excel ODBC-ADO API. Tevékenységpontok: - DBMS telepítés. - ODBC driver telepítése. - DSN létrehozatala. -Excel-ben ADO bevonása DBMS spektrum Excel ODBC-ADO API Tevékenységpontok: - DBMS telepítés - ODBC driver telepítése - DSN létrehozatala -Excel-ben ADO bevonása - ADOConnection objektum létrehozatala - Open: kapcsolat felvétel

Részletesebben

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS 2015-2016 Adatbázis alapú alkalmazások készítése PHP-ben Adatbázis alapú alkalmazás 2 A leggyakrabban használt dinamikus alkalmazások

Részletesebben

Vizuális programozás gyakorlat

Vizuális programozás gyakorlat Vizuális programozás gyakorlat A gyakorlat célja az entitás modell készítésének és az MS SQLEXPRESS használatának gyakorlása. A gyakorlat során egy könyvtári szoftver adatmodelljét tervezzük meg, valamint

Részletesebben

Táblakezelés: Open SQL Internal table. Tarcsi Ádám: Az SAP programozása 1.

Táblakezelés: Open SQL Internal table. Tarcsi Ádám: Az SAP programozása 1. Táblakezelés: Open SQL Internal table Tarcsi Ádám: Az SAP programozása 1. OPEN SQL Tarcsi Ádám, ELTE SAP Excellence Center: SAP programozás oktatóanyag 2 Open SQL Az Open SQL kulcsszavai: SELECT INSERT

Részletesebben

Java programozási nyelv 11. rész Adatbázis-programozás

Java programozási nyelv 11. rész Adatbázis-programozás Java programozási nyelv 11. rész Adatbázis-programozás Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

Alkalmazások fejlesztése III. Qt 4 /C++ alapú MDI alkalmazás: Számlakészítő program 3/3

Alkalmazások fejlesztése III. Qt 4 /C++ alapú MDI alkalmazás: Számlakészítő program 3/3 Tartalomjegyzék Feladat...2 Az alkalmazás osztálydiagramja...2 Űrlap elkészítése...3 Grafikus felület kialakítása...3 A felületen elhelyezett elemek...3 invoiceform.h...3 invoiceform.cpp...5 Főablak elkészítése...11

Részletesebben

B I T M A N B I v: T 2015.03.01 M A N

B I T M A N B I v: T 2015.03.01 M A N Adatbázis Rendszerek MSc 2. Gy: MySQL Táblák, adatok B I v: T 2015.03.01 M A N 1/41 Témakörök SQL alapok DDL utasítások DML utasítások DQL utasítások DCL utasítások 2/41 Az SQL jellemzése Az SQL a relációs

Részletesebben

Megtanuljuk, hogyan lehet egy web-alkalmazással adatbázishoz csatlakozni Pontosan megnézzük a PHP lehetőségeit o MySQL-hez o Oracle-höz

Megtanuljuk, hogyan lehet egy web-alkalmazással adatbázishoz csatlakozni Pontosan megnézzük a PHP lehetőségeit o MySQL-hez o Oracle-höz PHP Adatbázis Tartalomjegyzék PHP ADATBÁZIS...1 TARTALOMJEGYZÉK...1 EDDIG VOLT...1 MAI ANYAG...1 TEHÁT RÉSZLETESEBBEN...1 Kapcsolódás web-alkalmazásokból adatbázisokhoz...1 Biztonsági kérdések...2 PHP...2

Részletesebben

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT ADATBÁZISOK 9-10. gyakorlat: SQL 2. rész SELECT SELECT utasítás általános alakja SELECT [DISTINCT] oszloplista FROM táblanévlista [WHERE feltétel] [GROUP BY oszloplista [HAVING feltétel] ] [ORDER BY oszloplista];

Részletesebben

Hozzunk létre két rekordot a táblában, majd véglegesítsünk (commit):

Hozzunk létre két rekordot a táblában, majd véglegesítsünk (commit): Oracle adatbázis elérése A gyakorlat célja az, hogy a hallgató tapasztalatot szerezzen egy szerver oldali adatbázis kezelő rendszer elérésében, gyakorolja a vizuális eszközök és a kapcsolat nélküli (Disconnected

Részletesebben

Adattípusok. Max. 2GByte

Adattípusok. Max. 2GByte Adattípusok Típus Méret Megjegyzés Konstans BIT 1 bit TRUE/FALSE SMALLINT 2 byte -123 INTEGER 4 byte -123 COUNTER 4 byte Automatikus 123 REAL 4 byte -12.34E-2 FLOAT 8 byte -12.34E-2 CURRENCY / MONEY 8

Részletesebben

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani. Vizuális programozás 1. A gyakorlat célja A gyakorlat célja a Könyvtár alkalmazás folytatása az előző gyakorlaton elkészített grafikus felület felhasználásával. Elsőként lemásoljuk az előző gyakorlat eredményeként

Részletesebben

Adattípusok. Max. 2GByte

Adattípusok. Max. 2GByte Adattípusok Típus Méret Megjegyzés Konstans BIT 1 bit TRUE/FALSE TINIINT 1 byte 12 SMALLINT 2 byte -123 INTEGER 4 byte -123 COUNTER 4 byte Automatikus 123 REAL 4 byte -12.34E-2 FLOAT 8 byte -12.34E-2 CURRENCY

Részletesebben

Bevezetés: az SQL-be

Bevezetés: az SQL-be Bevezetés: az SQL-be Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009 2.3. Relációsémák definiálása SQL-ben, adattípusok, kulcsok megadása 02B_BevSQLsemak

Részletesebben

Alkalmazások fejlesztése III. Qt 4 /C++ alapú MDI alkalmazás: Számlakészítő program 2/3

Alkalmazások fejlesztése III. Qt 4 /C++ alapú MDI alkalmazás: Számlakészítő program 2/3 Tartalomjegyzék Feladat...2 Az alkalmazás osztálydiagramja...2 Modell-nézet (model-view) tervezési minta (bevezetés)...3 Számlatételek kezelése, karbantartása ( táblázat kezelés )...4 A táblázatkezelő

Részletesebben

Elemi alkalmazások fejlesztése III

Elemi alkalmazások fejlesztése III Elemi alkalmazások fejlesztése III Egyablakos alkalmazás készítése I. Qt/X11 felhasználásával Kdevelop környezetben készítette: Steingart Ferenc Szabóné Nacsa Rozália Ajánlott irodalom Qt dokumentáció

Részletesebben

QLabel *label = new Qlabel("Hello Qt!",0);

QLabel *label = new Qlabel(Hello Qt!,0); #include #include int main(int argc,char **argv) QApplication app(argc,argv); QLabel *label = new Qlabel("Hello Qt!",0); app.setmainwidget(label); label->show(); return app.exec();

Részletesebben

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelő GUI alkalmazás készítése 3. Összetett tábla karbantartása

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelő GUI alkalmazás készítése 3. Összetett tábla karbantartása Elemi alkalmazások fejlesztése IV. Adatbázis-kezelő GUI alkalmazás készítése 3. Összetett tábla karbantartása Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu people.inf.elte.hu/nacsa/eaf4/ Qt 4 2007

Részletesebben

Felhasználói segédlet a Scopus adatbázis használatához

Felhasználói segédlet a Scopus adatbázis használatához Felhasználói segédlet a Scopus adatbázis használatához Az adatbázis elérése, regisztrálás, belépés Az adatbázis címe: http://www.scopus.com Az adatbázis csak regisztrált, jogosultsággal rendelkező intézmények,

Részletesebben

Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány)

Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány) Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány) 41/1 B IT v: 2017.10.30 MAN DDL Adatstruktúra definiáló utasítások DDL Data Definition Language Adatszerkezetek (elsősorban táblák) létrehozása,

Részletesebben

ADATBÁZISKEZELÉS ADATBÁZIS

ADATBÁZISKEZELÉS ADATBÁZIS ADATBÁZISKEZELÉS 1 ADATBÁZIS Az adatbázis adott (meghatározott) témakörre vagy célra vonatkozó adatok gyűjteménye. - Pl. A megrendelések nyomon követése kereskedelemben. Könyvek nyilvántartása egy könyvtárban.

Részletesebben

Felhasználói segédlet a Web of Knowledge / Web of Science adatbázis használatához

Felhasználói segédlet a Web of Knowledge / Web of Science adatbázis használatához Felhasználói segédlet a Web of Knowledge / Web of Science adatbázis használatához Az adatbázis elérése, regisztrálás, belépés Az adatbázis az arra jogosult intézmények és felhsználói kör számára a http://eisz.om.hu

Részletesebben

ORACLE. SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

ORACLE. SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) közönséges felhasználók Oracle SQL*Plus SQL ORACLE Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók Adatszótár: metaadatokat tartalmazó, csak olvasható

Részletesebben

Adatbázisok II. rész

Adatbázisok II. rész Adatbázisok II. rész Érettségi feladatok Új adatbázist készítünk A táblákat a külső adatok menüfül szövegfájl pontjánál importáljuk (nem pedig megnyitjuk!) Fontos: az első sor tartalmazza az oszlopneveket

Részletesebben

Eseményvezérelt alkalmazások fejlesztése I 8. előadás. Adatbázis-kezelés modell/nézet architektúrában

Eseményvezérelt alkalmazások fejlesztése I 8. előadás. Adatbázis-kezelés modell/nézet architektúrában Eötvös Loránd Tudományegyetem Informatikai Kar Eseményvezérelt alkalmazások fejlesztése I 8. előadás Adatbázis-kezelés modell/nézet architektúrában 2013.04.17. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Részletesebben

Tervezőeszközök, fejlesztőeszközök használata Qt alapú alkalmazásoknál. Saját vezérlő használata tervezőben (worldclocks)

Tervezőeszközök, fejlesztőeszközök használata Qt alapú alkalmazásoknál. Saját vezérlő használata tervezőben (worldclocks) Tartalomjegyzék Tervezőeszközök, fejlesztőeszközök használata Qt alapú alkalmazásoknál...1 Saját vezérlő használata tervezőben (worldclocks)...1 DigitalClock osztály (módosítás)...2 MyForm osztály...3

Részletesebben

Access adatbázis elérése OLE DB-n keresztül

Access adatbázis elérése OLE DB-n keresztül Access adatbázis elérése OLE DB-n keresztül Készítsünk egy grafikus felülető alkalmazást, ami lehetıvé teszi egy Access adatbázisban tárolt hallgatói adatok (EHA, Név, e-mail cím) lekérdezését (összes

Részletesebben

Budapest, 2007. március. ELTE Informatikai Kar

Budapest, 2007. március. ELTE Informatikai Kar Tartalomjegyzék Alkalmazás készítés Qt osztályokkal...2 A qmake eszköz...2 Hello Qt (hello)...2 A projekt elkészítésének lépései...3 Objektumok közötti kommunikáció (quit)...3 A projekt elkészítésének

Részletesebben

Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet

Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet 26/1 B IT v: 2018.02.21 MAN Gyakorló környezet apex.oracle.com/en/ 26/2 A regisztrációs folyamat 26/3 26/4 26/5 26/6 26/7 26/8 26/9 26/10 26/11 Feladatok

Részletesebben

Egyetemi könyvtári nyilvántartó rendszer

Egyetemi könyvtári nyilvántartó rendszer RENDSZERTERV Egyetemi könyvtári nyilvántartó rendszer A rendszer célja A projekt célja egy egyetemi könyvtár nyilvántartó rendszerének megtervezése. A legfőbb követelmény, amit a rendszerrel szemben támasztok,

Részletesebben

Thermo1 Graph. Felhasználói segédlet

Thermo1 Graph. Felhasználói segédlet Thermo1 Graph Felhasználói segédlet A Thermo Graph program a GIPEN Thermo eszközök Windows operációs rendszeren működő grafikus monitorozó programja. A program a telepítést követően azonnal használható.

Részletesebben

Adatbázis használata PHP-ből

Adatbázis használata PHP-ből Adatbázis használata PHP-ből Adatbázis használata PHP-ből...1 Nyílt forráskódú adatbázisok...1 A mysql függvények...2 A mysqli függvények...4 Bináris adatok adatbázisban való tárolása...8 Adatbázis csatoló

Részletesebben

3. Ezután a jobb oldali képernyő részen megjelenik az adatbázistábla, melynek először a rövid nevét adjuk meg, pl.: demo_tabla

3. Ezután a jobb oldali képernyő részen megjelenik az adatbázistábla, melynek először a rövid nevét adjuk meg, pl.: demo_tabla 1. Az adatbázistábla létrehozása a, Ha még nem hoztunk létre egy adatbázistáblát sem, akkor a jobb egérrel a DDIC-objekt. könyvtárra kattintva, majd a Létrehozás és az Adatbázistábla menüpontokat választva

Részletesebben