elemialkalmazások fejlesztése iv. adatbáziskezelő ... bemutato.pdffile/new connection.cpp...

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

Upload: others

Post on 04-Mar-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

1

Elemi alkalmazások fejlesztése IV.Elemi alkalmazások fejlesztése IV.Elemi alkalmazások fejlesztése IV.Elemi alkalmazások fejlesztése IV.Elemi alkalmazások fejlesztése IV.Elemi alkalmazások fejlesztése IV.Elemi alkalmazások fejlesztése IV.Elemi alkalmazások fejlesztése IV.Elemi alkalmazások fejlesztése IV.Elemi alkalmazások fejlesztése IV.

Adatbáziskezel őAdatbáziskezel őAdatbáziskezel őAdatbáziskezel őAdatbáziskezel őAdatbáziskezel őAdatbáziskezel őAdatbáziskezel őAdatbáziskezel őAdatbáziskezel őalkalmazás készítése alkalmazás készítése alkalmazás készítése alkalmazás készítése alkalmazás készítése alkalmazás készítése alkalmazás készítése alkalmazás készítése alkalmazás készítése alkalmazás készítése

QtDesignerbenQtDesignerben

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

Page 2: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

2

““““““““““Származtatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezet

Qt

U form.h

formbase.cpp main.cpp

form.ui

Írás, olvasásOlvasásGenerálás#includesEszköz (tool)Generált forráskódFelhasználó forráskódja

formbase.h

form.cpp

Örö

kldé

A formbase.h és a formbase.cpp minden módosításnál újra generálódik. Az alkalmazásspecifikus funkciókat a származtatott osztályban adjuk meg.

Page 3: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

3

““““““““““Származtatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezet

Qt

U form.h

formbase.cpp main.cpp

form.ui

Írás, olvasásOlvasásGenerálás#includesEszköz (tool)Generált forráskódFelhasználó forráskódja

formbase.h

form.cpp

Örö

kldé

Kiküszöbölhetnénk az örökl dést, ha úgy őtudnánk beleírni a formbase.h és

formbase.cpp fájlokba, hogy a generálás a kiegészítést nem rontaná el.

“saját”

“saját”

Page 4: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

4

““““““““““ui.h”-s modulszerkezetui.h”-s modulszerkezetui.h”-s modulszerkezetui.h”-s modulszerkezetui.h”-s modulszerkezetui.h”-s modulszerkezetui.h”-s modulszerkezetui.h”-s modulszerkezetui.h”-s modulszerkezetui.h”-s modulszerkezet

Qt designer

U

form.cpp main.cpp

form.ui

Írás, olvasásOlvasásGenerálás#includesEszköz (tool)Generált forráskódFelhasználó forráskódja

form.h

form.ui

form.ui.h

Az alkalmazásspecifius funkciókat a form.ui.h implementációs fájlban

adjuk meg.

Page 5: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

5

A QtDesigner ablakai A QtDesigner ablakai A QtDesigner ablakai A QtDesigner ablakai A QtDesigner ablakai A QtDesigner ablakai A QtDesigner ablakai A QtDesigner ablakai A QtDesigner ablakai A QtDesigner ablakai

Toolbox

ProjectOverview

ObjectExplorer Properties Editor/Signal Handlers

Page 6: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

6

FeladatFeladatFeladatFeladatFeladatFeladatFeladatFeladatFeladatFeladat

Új csoportok felvétele, bejegyzett csoportok módosítása, törlése.

Page 7: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

7

Feladat – a megvalósítás lépéseiFeladat – a megvalósítás lépéseiFeladat – a megvalósítás lépéseiFeladat – a megvalósítás lépéseiFeladat – a megvalósítás lépéseiFeladat – a megvalósítás lépéseiFeladat – a megvalósítás lépéseiFeladat – a megvalósítás lépéseiFeladat – a megvalósítás lépéseiFeladat – a megvalósítás lépései

Új csoportok felvétele, bejegyzett csoportok módosítása, törlése.

1

2

3 F ablak + félév tábla létrehozásaő Csoport tábla elkészítése Gombok hozzáadása, dialógus elkészítése

Page 8: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

8

FelevDataTable(QDataTable)

primeInsert()beforeUpdate()

currentChanged()beforeInsert()

CsoportDataTable(QDataTable)

primeInsert()cursorChanged()

EditPushButton(QPushButton)

clicked()

QuitPushButton(QPushButton)

clicked()

CsoportRegistrationForm(QDialog)

EditCsoportForm(QDialog)

A CsoportRegistrationForm osztálydiagramja

Page 9: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

9

Új projekt létrehozása:Új projekt létrehozása:Új projekt létrehozása:Új projekt létrehozása:Új projekt létrehozása:Új projekt létrehozása:Új projekt létrehozása:Új projekt létrehozása:Új projekt létrehozása:Új projekt létrehozása: File/New/C++ Project File/New/C++ Project

Page 10: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

10

Project Overview: Project Overview: Project Overview: Project Overview: Project Overview: Project Overview: Project Overview: Project Overview: Project Overview: Project Overview: csopreg.procsopreg.pro

Page 11: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

11

Project/Database connections ...Project/Database connections ...Project/Database connections ...Project/Database connections ...Project/Database connections ...Project/Database connections ...Project/Database connections ...Project/Database connections ...Project/Database connections ...Project/Database connections ...

1

2

3

4

5

Page 12: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

12

Projekt és adatbázis leíró tárolásaProjekt és adatbázis leíró tárolásaProjekt és adatbázis leíró tárolásaProjekt és adatbázis leíró tárolásaProjekt és adatbázis leíró tárolásaProjekt és adatbázis leíró tárolásaProjekt és adatbázis leíró tárolásaProjekt és adatbázis leíró tárolásaProjekt és adatbázis leíró tárolásaProjekt és adatbázis leíró tárolása

Adatbázist leíró XML fájl

A projektet leíró text fájl

Page 13: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

13

connectionconnection modul létrehozása modul létrehozása modul létrehozása modul létrehozása modul létrehozása modul létrehozása modul létrehozása modul létrehozása modul létrehozása modul létrehozása

File/New connection.cpp

File/New connection.h

Az alkalmazás adatbáziskapcsolatát nekünk kell kiépíteni.

Page 14: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

14

#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();

#include <qsqldatabase.h> #include "connection.h" 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; }

connection.cpp

connection.h

Page 15: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

15

CsoportRegistrationForm: CsoportRegistrationForm: CsoportRegistrationForm: CsoportRegistrationForm: CsoportRegistrationForm: CsoportRegistrationForm: CsoportRegistrationForm: CsoportRegistrationForm: CsoportRegistrationForm: CsoportRegistrationForm: létrehozás létrehozás

File/New/Dialog

Page 16: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

16

F program létrehozása: őF program létrehozása: őF program létrehozása: őF program létrehozása: őF program létrehozása: őF program létrehozása: őF program létrehozása: őF program létrehozása: őF program létrehozása: őF program létrehozása: ő main.cppmain.cpp

File/New

A QtDesigener automatikusan felajánlja a f ablakot.ő

Page 17: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

17

main.cpp: generált változatmain.cpp: generált változatmain.cpp: generált változatmain.cpp: generált változatmain.cpp: generált változatmain.cpp: generált változatmain.cpp: generált változatmain.cpp: generált változatmain.cpp: generált változatmain.cpp: generált változat

A main.cpp nem tartalmazza az alkalmazás adatbáziskapcsolatát.

Page 18: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

18

main.cpp: módosított változatmain.cpp: módosított változatmain.cpp: módosított változatmain.cpp: módosított változatmain.cpp: módosított változatmain.cpp: módosított változatmain.cpp: módosított változatmain.cpp: módosított változatmain.cpp: módosított változatmain.cpp: módosított változat

#include <qapplication.h>#include "csoportregistrationform.h"#include "connection.h"int main( int argc, char ** argv ){ QApplication app( argc, argv );

if (!createConnections())return 1;

CsoportRegistrationForm csopRegForm; csopRegForm.show(); app.connect( &app, SIGNAL( lastWindowClosed() ), &app, SLOT( quit() ) ); return app.exec();}

Az alkalmazás adatbáziskapcsolatát nekünk kell megvalósítani.

Page 19: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

19

ProjectOveview felépítéseProjectOveview felépítéseProjectOveview felépítéseProjectOveview felépítéseProjectOveview felépítéseProjectOveview felépítéseProjectOveview felépítéseProjectOveview felépítéseProjectOveview felépítéseProjectOveview felépítése

A QtDesigner Project/Overview

ablaka

Page 20: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

20

A Config-ban szerepelnie kell

thread opciónak.

A Qt 3-ban külön be kell állítani!

Page 21: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

21

A A A A A A A A A A felevfelev tábla ráhelyezése az rlapraű tábla ráhelyezése az rlapraű tábla ráhelyezése az rlapraű tábla ráhelyezése az rlapraű tábla ráhelyezése az rlapraű tábla ráhelyezése az rlapraű tábla ráhelyezése az rlapraű tábla ráhelyezése az rlapraű tábla ráhelyezése az rlapraű tábla ráhelyezése az rlapraű

1

2

3

Válassza ki a CsoportRegistration

Form rlapot!ű

Válassza ki a DataTable eszközt!

Kattintson az rlapra!ű

Page 22: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

22

Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Choose the Database and TableChoose the Database and Table

Adjuk meg, hogy az adatbázis felev táblájával szeretnénk

dolgozni.

Page 23: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

23

Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Displayed FieldsDisplayed Fields

Page 24: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

24

Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Table PropertiesTable Properties

Page 25: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

25

Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: SQLSQL

Page 26: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

26

Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: FinishFinish

Page 27: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

27

Lay Out in a Grid

Ctrl+T

Tesztelés a QtDesigner

adatbáziskezel jével.ő

FelevDataTable

Page 28: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

28

CsoportRegistrationForm: Els változat futtatásaőCsoportRegistrationForm: Els változat futtatásaőCsoportRegistrationForm: Els változat futtatásaőCsoportRegistrationForm: Els változat futtatásaőCsoportRegistrationForm: Els változat futtatásaőCsoportRegistrationForm: Els változat futtatásaőCsoportRegistrationForm: Els változat futtatásaőCsoportRegistrationForm: Els változat futtatásaőCsoportRegistrationForm: Els változat futtatásaőCsoportRegistrationForm: Els változat futtatásaő

Új csoport felvitelekor a háttérben meghúzódó felev_id nem kap

értéket.

Nincs adatellen rzés.ő

mysql> select * from felev;

+----------+------+-------------+------+------+

| felev_id | szam | kezdet | fsz | max |

+----------+------+-------------+------+------+

| 37 | 4 | 2002/2003-2 | 4 | 8 |

| 38 | 3 | 2002/2003-2 | 4 | 1 |

| 39 | 2 | 2000/2001-1 | 4 | 0 |

| 40 | 4 | 2003/2004-1 | 4 | 4 |

| 61 | 1 | 2003/2004-1 | 4 | 1 |

| 0 | 10 | xxxxxxx | 10 | 10 |

+----------+------+-------------+------+------+

6 rows in set (0.00 sec)

Ha még egy rekordot be szeretnénk szúrni, akkor hibaüzenetet

kapunk.

Page 29: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

29

FelevDataTable(QDataTable)

primeInsert()beforeUpdate()beforeInsert()

currentChanged()

CsoportRegistrationForm(QDialog)

slotPrimeInsertFelev()slotBeforeUpdateFelev()slotCurrentChangedFelev()

Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok

slotPrimeInsertFelev(): sorszám kiosztásaslotBeforeUpdate()Felev: adatellen rzésőslotCurrentChangedFelev(): helyi menü állapota

Page 30: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

30

slotPrimeInsertFelev()slotPrimeInsertFelev()slotPrimeInsertFelev()slotPrimeInsertFelev()slotPrimeInsertFelev()slotPrimeInsertFelev()slotPrimeInsertFelev()slotPrimeInsertFelev()slotPrimeInsertFelev()slotPrimeInsertFelev()

A felev táblában a slotPrimeInsertFelev()

slotban kezeljuk a sorszám kiosztását.

1

2

Page 31: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

31

Edit/Slots.../Edit/Slots.../Edit/Slots.../Edit/Slots.../Edit/Slots.../Edit/Slots.../Edit/Slots.../Edit/Slots.../Edit/Slots.../Edit/Slots.../slotPrimeInsertFelev()slotPrimeInsertFelev()

1

2

3

slotPrimeInsertFelev(QSqlRecord* buffer)

Page 32: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

32

csoportregistrationform.ui.h: slotPrimeInsertFelev()csoportregistrationform.ui.h: slotPrimeInsertFelev()csoportregistrationform.ui.h: slotPrimeInsertFelev()csoportregistrationform.ui.h: slotPrimeInsertFelev()csoportregistrationform.ui.h: slotPrimeInsertFelev()csoportregistrationform.ui.h: slotPrimeInsertFelev()csoportregistrationform.ui.h: slotPrimeInsertFelev()csoportregistrationform.ui.h: slotPrimeInsertFelev()csoportregistrationform.ui.h: slotPrimeInsertFelev()csoportregistrationform.ui.h: slotPrimeInsertFelev()

Forrásprogram szerkesztő

csoportregistrationform.ui.h

A kódot nekünk kell begépelni.

Page 33: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

33

slotPrimeInsertFelev(): kódslotPrimeInsertFelev(): kódslotPrimeInsertFelev(): kódslotPrimeInsertFelev(): kódslotPrimeInsertFelev(): kódslotPrimeInsertFelev(): kódslotPrimeInsertFelev(): kódslotPrimeInsertFelev(): kódslotPrimeInsertFelev(): kódslotPrimeInsertFelev(): kód

void CsoportRegistrationForm::slotPrimeInsertFelev( QSqlRecord *buffer ){ // felev_id kitöltése a következ sorszámmalő QSqlQuery query; query.exec("UPDATE sequence Set sequence = sequence + 1 WHERE tablename = 'felev';"); query.exec("SELECT sequence from sequence where tablename = 'felev';"); if (query.next() ) {

buffer->setValue("felev_id", query.value(0)); }

//Kezdetiértékek beállítása buffer->setValue("szam",1); buffer->setValue("fsz",4); buffer->setValue("kezdet","2003/2004-1"); buffer->setValue("max",20);}

Page 34: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

34

Signal / slot kapcsolat kiépítéseSignal / slot kapcsolat kiépítéseSignal / slot kapcsolat kiépítéseSignal / slot kapcsolat kiépítéseSignal / slot kapcsolat kiépítéseSignal / slot kapcsolat kiépítéseSignal / slot kapcsolat kiépítéseSignal / slot kapcsolat kiépítéseSignal / slot kapcsolat kiépítéseSignal / slot kapcsolat kiépítése

1

2

Page 35: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

35

Sender: FelevDataTable

Signal: primeInsert(QSqlrecord*)

Page 36: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

36

Receiver: CsoportRegistrationForm

Slot: slotPprimeInsertFelev(QSqlrecord*)

Sender: FelevDataTableSignal: primeInsert(QSqlRecord*)Receiver: CsoportRegistrationFormSlot: slotPrimeInsertFelev(QSqlRecord* buffer)

Page 37: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

37

A csopreg.pro fájlA csopreg.pro fájlA csopreg.pro fájlA csopreg.pro fájlA csopreg.pro fájlA csopreg.pro fájlA csopreg.pro fájlA csopreg.pro fájlA csopreg.pro fájlA csopreg.pro fájl

SOURCES += connection.cpp \ main.cpp

HEADERS += connection.hunix { UI_DIR = .ui MOC_DIR = .moc OBJECTS_DIR = .obj}FORMS = csoportregistrationform.uiTEMPLATE =appCONFIG += qt warn_on release threadDBFILE = csopreg.dbLANGUAGE = C++

A projektet leíró fájl tartalma

Page 38: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

38

Fordítás/SzerkesztésFordítás/SzerkesztésFordítás/SzerkesztésFordítás/SzerkesztésFordítás/SzerkesztésFordítás/SzerkesztésFordítás/SzerkesztésFordítás/SzerkesztésFordítás/SzerkesztésFordítás/Szerkesztés

qmake -o Makefile csopreg.promake

Page 39: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

39

Futtatás: Futtatás: Futtatás: Futtatás: Futtatás: Futtatás: Futtatás: Futtatás: Futtatás: Futtatás: ./csopreg./csopreg

mysql> select * from felev;

+----------+------+-------------+------+------+

| felev_id | szam | kezdet | fsz | max |

+----------+------+-------------+------+------+

| 37 | 4 | 2002/2003-2 | 4 | 8 |

| 38 | 3 | 2002/2003-2 | 4 | 1 |

| 39 | 2 | 2000/2001-1 | 4 | 0 |

| 40 | 4 | 2003/2004-1 | 4 | 4 |

| 61 | 1 | 2003/2004-1 | 4 | 1 |

| 67 | 1 | 2003/2004-2 | 4 | 20 |

+----------+------+-------------+------+------+

6 rows in set (0.00 sec)

A felev_id sorszámot

kapott.

Beszúrásnál felajánlja a kezdetiértékeket.

Page 40: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

40

Adatellen rzés: őAdatellen rzés: őAdatellen rzés: őAdatellen rzés: őAdatellen rzés: őAdatellen rzés: őAdatellen rzés: őAdatellen rzés: őAdatellen rzés: őAdatellen rzés: ő slotBeforeUpdateFelev()slotBeforeUpdateFelev()

Miel tt az adatokat visszaírjuk őaz adatbázisba, ellen rizzünk.ő

(slotBeforeUpdateFelev())

1

2

3

Page 41: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

41

csoportregistrationform.ui.h:csoportregistrationform.ui.h:csoportregistrationform.ui.h:csoportregistrationform.ui.h:csoportregistrationform.ui.h:csoportregistrationform.ui.h:csoportregistrationform.ui.h:csoportregistrationform.ui.h:csoportregistrationform.ui.h:csoportregistrationform.ui.h: slotBeforeUpdateFelev() slotBeforeUpdateFelev()

Page 42: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

42

void CsoportRegistrationForm::slotBeforeUpdateFelev( QSqlRecord * buffer ) {// A max mez értéke nem mehet a létez csoportszám alá ő őQSqlQuery query; int foglalt=0; query.exec( "SELECT count(*) FROM csoport WHERE felev_id=" + buffer->value("felev_id").toString() + ";" ); if (query.next()) foglalt = query.value(0).toInt(); if(buffer->value("max").toInt() < foglalt) { buffer->setValue("max",foglalt);

QString q = "A maximális csoportszám\n nem lehet kisebb\n a már bejegyzett csoportok számánál! \n Eddig " + QString::number(foglalt) + " db csoport lett bejegyezve."; QMessageBox::information( this, "Félév Regisztráció", q ); } . . .}

slotBeforeUpdateFelev(): kód - 1slotBeforeUpdateFelev(): kód - 1slotBeforeUpdateFelev(): kód - 1slotBeforeUpdateFelev(): kód - 1slotBeforeUpdateFelev(): kód - 1slotBeforeUpdateFelev(): kód - 1slotBeforeUpdateFelev(): kód - 1slotBeforeUpdateFelev(): kód - 1slotBeforeUpdateFelev(): kód - 1slotBeforeUpdateFelev(): kód - 1

Page 43: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

43

void CsoportRegistrationForm::slotBeforeUpdateFelev( QSqlRecord * buffer ){ . . . //A szám mez értéke 1-4 közé es szám ő ő if(buffer->value("szam").toInt() < 1 || buffer->value("szam").toInt() > 4) {

QMessageBox::information( this, "Félév Regisztráció", "A szám oszlopban csak 1,2,3,4 szerepelhet!"); buffer->setValue("szam",4); }

//A feladatok száma maximum 4 if(buffer->value("fsz").toInt() > 4) {

QMessageBox::information( this, "Félév Regisztráció", "A feladatok száma maximum 4 lehet !"); buffer->setValue("fsz",4); }}

slotBeforeUpdateFelev(): kód - 2slotBeforeUpdateFelev(): kód - 2slotBeforeUpdateFelev(): kód - 2slotBeforeUpdateFelev(): kód - 2slotBeforeUpdateFelev(): kód - 2slotBeforeUpdateFelev(): kód - 2slotBeforeUpdateFelev(): kód - 2slotBeforeUpdateFelev(): kód - 2slotBeforeUpdateFelev(): kód - 2slotBeforeUpdateFelev(): kód - 2

Page 44: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

44

Signal / Slot kiépítéseSignal / Slot kiépítéseSignal / Slot kiépítéseSignal / Slot kiépítéseSignal / Slot kiépítéseSignal / Slot kiépítéseSignal / Slot kiépítéseSignal / Slot kiépítéseSignal / Slot kiépítéseSignal / Slot kiépítése

Sender: FelevDataTableSignal: beforeUpdate(QSqlRecord*)Receiver: CsoportRegistrationFormSlot: slotBeforeUpdateFelev(QSqlRecord* buffer)

Sender: FelevDataTableSignal: beforeInsert(QSqlRecord*)Receiver: CsoportRegistrationFormSlot: slotBeforeUpdateFelev(QSqlRecord* buffer)

Page 45: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

45

Fordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/Futtatás

qmake./csopreg

Page 46: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

46

Környezetfügg helyi menüőKörnyezetfügg helyi menüőKörnyezetfügg helyi menüőKörnyezetfügg helyi menüőKörnyezetfügg helyi menüőKörnyezetfügg helyi menüőKörnyezetfügg helyi menüőKörnyezetfügg helyi menüőKörnyezetfügg helyi menüőKörnyezetfügg helyi menüő

A helyi menüben csak azokat a menüpontokat

engedélyezzük, amelyeknek értelme van.

Page 47: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

47

slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): létrehozáslétrehozás

slotCurrentChangedFelev(QSqlRecord *buffer)

Edit/Slots...

A slotCurrentChangedFelev() slotban állítjuk be a helyi menü aktuális

állapotát.

Page 48: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

48

slotCurrentChangedFelev()slotCurrentChangedFelev()slotCurrentChangedFelev()slotCurrentChangedFelev()slotCurrentChangedFelev()slotCurrentChangedFelev()slotCurrentChangedFelev()slotCurrentChangedFelev()slotCurrentChangedFelev()slotCurrentChangedFelev()Function: slotCurrentChangedFelev(QSqlRecord *buffer)Return type: voidSpecifier: virtualAccess: publicType: slot

public slots:virtual void slotCurrentChangedFelev(QSqlrecord*)

csoportregistrationform.h

void slotCurrentChangedFelev(QSqlrecord* buffer){}

csoportregistrationform.ui.h

csoportregistrationform.ui

<slots> . . . <slot>slotCurrentChangedFelev( QsQlRecord * buffer )</slot></slots>

QtDesignerQtDesigner

moc

Page 49: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

49

slotCurrentChangedFelev() - slotCurrentChangedFelev() - slotCurrentChangedFelev() - slotCurrentChangedFelev() - slotCurrentChangedFelev() - slotCurrentChangedFelev() - slotCurrentChangedFelev() - slotCurrentChangedFelev() - slotCurrentChangedFelev() - slotCurrentChangedFelev() - Object ExplorerObject Explorer

Kód beírása

Page 50: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

50

slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): kódkódvoid CsoportRegistrationForm::slotCurrentChangedFelev( QSqlRecord *buffer ){ if (!buffer) return; int count=0; QSqlQuery query("SELECT count(*) FROM felev;") ; if (query.next()) count = query.value(0).toInt(); if (count==0){ FelevDataTable->sqlCursor()->setMode( QSqlCursor::Insert); return; }

int foglalt=0; query.exec( "SELECT count(*) FROM csoport WHERE felev_id=" + buffer->value("felev_id").toString() + ";" ); if (query.next()) foglalt = query.value(0).toInt(); if ( foglalt == 0 ) { FelevDataTable->sqlCursor()-> setMode( QSqlCursor::Insert | QSqlCursor::Delete | QSqlCursor::Update ); }else { FelevDataTable->sqlCursor()->setMode( QSqlCursor::Insert | QSqlCursor::Update ); }}

Ha a felev tabla üres, akkor csak insert.

Van már bejegyzett csoport az adott

félévre?

Page 51: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

51

slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): signal/slot kapcsolatsignal/slot kapcsolat

Sender: FelevDataTableSignal: currentChanged(QSqlRecord*)Receiver: CsoportRegistrationFormSlot: slotcurrentChangedFelev(QSqlRecord* buffer)

Page 52: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

52

Fordítás/FuttattásFordítás/FuttattásFordítás/FuttattásFordítás/FuttattásFordítás/FuttattásFordítás/FuttattásFordítás/FuttattásFordítás/FuttattásFordítás/FuttattásFordítás/Futtattás

Ebben a félévben már van bejegyzett csoport.

Page 53: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

53

2. lépés2. lépés2. lépés2. lépés2. lépés2. lépés2. lépés2. lépés2. lépés2. lépés

Page 54: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

54

A csoport tábla elhelyezéseA csoport tábla elhelyezéseA csoport tábla elhelyezéseA csoport tábla elhelyezéseA csoport tábla elhelyezéseA csoport tábla elhelyezéseA csoport tábla elhelyezéseA csoport tábla elhelyezéseA csoport tábla elhelyezéseA csoport tábla elhelyezése

F ablak + félév tábla létrehozásaő Csoport tábla Gombok hozzáadása, dialógus elkészítése

FelevDataTable

CsoportDataTable

A feladat második lépéseként helyezzük el a csoport táblát az

rlapon, majd “kapcsoljuk űössze” a két táblát.

Page 55: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

55

FelevDataTable(QDataTable)

primeInsert()beforeUpdate()beforeInsert()

currentChanged()

CsoportDataTable(QDataTable)

primeInsert()

CsoportRegistrationForm(QDialog)

slotPrimeInsertFelev()slotBeforeUpdateFelev()

slotCurrentChangedFelev()newCurrentFelev()

slotPrimeInsertCsoport()

init()

Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok

newCurrentFelv(): csoport tábla fissítéseslotPrimeInsertCsoport(): csoport_id beállítása

Page 56: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

56

A CsoportDataTable átméretezéseA CsoportDataTable átméretezéseA CsoportDataTable átméretezéseA CsoportDataTable átméretezéseA CsoportDataTable átméretezéseA CsoportDataTable átméretezéseA CsoportDataTable átméretezéseA CsoportDataTable átméretezéseA CsoportDataTable átméretezéseA CsoportDataTable átméretezése

Töröljük a korábbi elrendezést (Break Layout), és méretezzük át

a félév táblát!

Page 57: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

57

A FelevDataTable elhelyezéseA FelevDataTable elhelyezéseA FelevDataTable elhelyezéseA FelevDataTable elhelyezéseA FelevDataTable elhelyezéseA FelevDataTable elhelyezéseA FelevDataTable elhelyezéseA FelevDataTable elhelyezéseA FelevDataTable elhelyezéseA FelevDataTable elhelyezése

Válaszoljon a Data Table Wizard kérdéseire.

A Data Table eszköz kiválasztása után kattintson

az rlapra, majdű

Page 58: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

58

Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Choose Database and TableChoose Database and Table

A projekt adatbáziskapcsolata már létezik (csopreg.pro), ezért itt már csak a jelszót

kérdezi.

Page 59: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

59

Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Displayed FieldsDisplayed Fields

Page 60: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

60

Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Table PropertiesTable Properties

Page 61: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

61

Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: SQLSQL

Page 62: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

62

Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: FinishFinish

Page 63: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

63

Táblák elrendezéseTáblák elrendezéseTáblák elrendezéseTáblák elrendezéseTáblák elrendezéseTáblák elrendezéseTáblák elrendezéseTáblák elrendezéseTáblák elrendezéseTáblák elrendezése

Jelöljök ki mindkét táblát!

A második tábla neve: CsoportDataTable

Page 64: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

64

newCurrentFelev(): slot + connectionsnewCurrentFelev(): slot + connectionsnewCurrentFelev(): slot + connectionsnewCurrentFelev(): slot + connectionsnewCurrentFelev(): slot + connectionsnewCurrentFelev(): slot + connectionsnewCurrentFelev(): slot + connectionsnewCurrentFelev(): slot + connectionsnewCurrentFelev(): slot + connectionsnewCurrentFelev(): slot + connections

Ha új sort – új rekordot – választunk a felev táblában, akkor a csoport táblát frissíteni kell.

Edit/Connections/New

Edet/Slots.../New Function

Function: newCurrentFelev(QSqlRecord *buffer)Return type: voidSpecifier: virtualAccess: publicType: slot

Sender: FelevDataTableSignal: currentChanged(QSqlRecord*)Receiver: CsoportRegistrationFormSlot: newCurrentFelev(QSqlRecord* buffer)

Page 65: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

65

newCurrentFelev(): newCurrentFelev(): newCurrentFelev(): newCurrentFelev(): newCurrentFelev(): newCurrentFelev(): newCurrentFelev(): newCurrentFelev(): newCurrentFelev(): newCurrentFelev(): kódkód

void CsoportRegistrationForm::newCurrentFelev( QSqlRecord * buffer ){ CsoportDataTable->setFilter("felev_id=" +buffer->value("felev_id").toString()) ; CsoportDataTable->refresh();}

Page 66: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

66

slotPrimeInsertCsoport(): slot + connectionsslotPrimeInsertCsoport(): slot + connectionsslotPrimeInsertCsoport(): slot + connectionsslotPrimeInsertCsoport(): slot + connectionsslotPrimeInsertCsoport(): slot + connectionsslotPrimeInsertCsoport(): slot + connectionsslotPrimeInsertCsoport(): slot + connectionsslotPrimeInsertCsoport(): slot + connectionsslotPrimeInsertCsoport(): slot + connectionsslotPrimeInsertCsoport(): slot + connections

Ha új sort – új rekordot – szúrunk be a csoport táblában, akkor a csoport_id és a felev_id értékeket

nekünk kell kitölteni a segéd pufferben. Ezt valósítjuk meg ebben a slotban.

Sender: CsoportDataTableSignal: primeInsert(QSqlRecord*)Receiver: CsoportRegistrationFormSlot: slotPrimeInsertCsoport(QSqlRecord* buffer)

Edit/Connections/New

Edet/Slots.../New Function

Function: slotPrimeInsertCsoport(QSqlRecord *buffer)Return type: voidSpecifier: virtualAccess: publicType: slot

Page 67: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

67

slotPrimeInserCsoport(): kódslotPrimeInserCsoport(): kódslotPrimeInserCsoport(): kódslotPrimeInserCsoport(): kódslotPrimeInserCsoport(): kódslotPrimeInserCsoport(): kódslotPrimeInserCsoport(): kódslotPrimeInserCsoport(): kódslotPrimeInserCsoport(): kódslotPrimeInserCsoport(): kód

void CsoportRegistrationForm::slotPrimeInsetCsoport( QSqlRecord * buffer ){//csoport_id lekérdezéseQSqlQuery query; query.exec("UPDATE sequence Set sequence = sequence + 1 where tablename = 'csoport';"); query.exec("SELECT sequence from sequence where tablename = 'csoport';"); if (query.next() ) {

buffer->setValue("csoport_id", query.value(0)); }

//felev_id kitöltése buffer->setValue("felev_id", FelevDataTable->currentRecord()->value("felev_id"));

//Kezdetiértékek beállítása buffer->setValue("max",30); }

Page 68: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

68

Fordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/Futtatás

Indulásnál a sz r még nem ű őm ködik.ű

A konstruktorban kellene sz rni.űAz “ui.h”-s technikában az init()

függvényben adjuk meg a “konstruktor”-beli teend ket.ő

?

Itt még nem m ködik a űsz rés.ű

Ez lenne a jó tábla.

Page 69: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

69

CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - init():init():init():init():init():init():init():init():init():init(): létrehozás létrehozás

Page 70: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

70

CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - init():init():init():init():init():init():init():init():init():init(): kód kód

void CsoportRegistrationForm::init(){if (FelevDataTable && CsoportDataTable && FelevDataTable->numRows() >0) { FelevDataTable->selectRow(0);

slotCurrentChangedFelev(FelevDataTable->currentRecord());CsoportDataTable->setFilter("felev_id="

+ FelevDataTable->currentRecord()->value("felev_id").toString());CsoportDataTable->refresh();if (CsoportDataTable->numRows()>0) CsoportDataTable->selectRow(0);

}}

Page 71: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

71

3. rész3. rész3. rész3. rész3. rész3. rész3. rész3. rész3. rész3. rész

Page 72: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

72

A csoportokat egy önálló dialógusablakban

szeretnénk szerkeszteni.

F ablak + félév tábla létrehozásaő Csoport tábla Gombok hozzáadása, dialógus elkészítése

Page 73: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

73

A CsoportRegistrationForm rlap módosításaűA CsoportRegistrationForm rlap módosításaűA CsoportRegistrationForm rlap módosításaűA CsoportRegistrationForm rlap módosításaűA CsoportRegistrationForm rlap módosításaűA CsoportRegistrationForm rlap módosításaűA CsoportRegistrationForm rlap módosításaűA CsoportRegistrationForm rlap módosításaűA CsoportRegistrationForm rlap módosításaűA CsoportRegistrationForm rlap módosításaű

CsoportDataTable

FelevDataTable

EditPushButtonQuitPushButton

editClicked() slot

Page 74: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

74

FelevDataTable(QDataTable)

primeInsert()beforeUpdate()beforeInsert()

currentChanged()

CsoportDataTable(QDataTable)

primeInsert()cursorChanged()

EditPushButton(QPushButton)

clicked()

QuitPushButton(QPushButton)

clicked()

CsoportRegistrationForm(QDialog)

slotPrimeInsertFelev()slotBeforeUpdateFelev()

slotCurrentChangedFelev()newCurrentFelev()

slotPrimeInsertCsoport()slotCursorChangedCsoport()

editClicked()

accept()

init()

EditCsoportForm(QDialog)

setFelevId()

felevId()

int _felev_id;

Signálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotok

editClicked()dialog->setSqlCursor()dialog->setFilter()dialog->setSort()dialog->setFelevId()

newCurrentFelev(): ésslotCursorChangedCsoport():Szerkesztés gomb frissítése

Page 75: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

75

A “A “A “A “A “A “A “A “A “A “KKilépésilépés” gomb eseménykezelése: signál/slot kapcsolat” gomb eseménykezelése: signál/slot kapcsolat” gomb eseménykezelése: signál/slot kapcsolat” gomb eseménykezelése: signál/slot kapcsolat” gomb eseménykezelése: signál/slot kapcsolat” gomb eseménykezelése: signál/slot kapcsolat” gomb eseménykezelése: signál/slot kapcsolat” gomb eseménykezelése: signál/slot kapcsolat” gomb eseménykezelése: signál/slot kapcsolat” gomb eseménykezelése: signál/slot kapcsolat

Sender: QuitPushButtonSignal: clicked()Receiver: CsoportRegistrationFormSlot: accept()

Page 76: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

76

EditCsoportForm dialógusablakEditCsoportForm dialógusablakEditCsoportForm dialógusablakEditCsoportForm dialógusablakEditCsoportForm dialógusablakEditCsoportForm dialógusablakEditCsoportForm dialógusablakEditCsoportForm dialógusablakEditCsoportForm dialógusablakEditCsoportForm dialógusablak

Page 77: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

77

EditCsoportForm dialógus: EditCsoportForm dialógus: EditCsoportForm dialógus: EditCsoportForm dialógus: EditCsoportForm dialógus: EditCsoportForm dialógus: EditCsoportForm dialógus: EditCsoportForm dialógus: EditCsoportForm dialógus: EditCsoportForm dialógus: létrehozásalétrehozása

File/New/dialog

Caption: Csoport tábla szerkesztése

name: EditCsoportForm

Save As: editcsoportform.ui

Page 78: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

78

Page 79: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

79

Page 80: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

80

Page 81: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

81

Page 82: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

82

Page 83: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

83

Page 84: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

84

Page 85: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

85

CsoportDataBrowserAz adatreprezentáló

cursort mi adjuk meg!!

1

2

Page 86: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

86

Az EditCsoportForm felépítéseAz EditCsoportForm felépítéseAz EditCsoportForm felépítéseAz EditCsoportForm felépítéseAz EditCsoportForm felépítéseAz EditCsoportForm felépítéseAz EditCsoportForm felépítéseAz EditCsoportForm felépítéseAz EditCsoportForm felépítéseAz EditCsoportForm felépítése

LabelKezdet

LabelSzint

ComboBoxGyakvez

EditCsoportForm

CsoportDataBrowser

QLineEditNev

QSpinBoxMax

QSpinBoxGyakvez_id

PushButtonLast

Page 87: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

87

Új adattag beillesztéseÚj adattag beillesztéseÚj adattag beillesztéseÚj adattag beillesztéseÚj adattag beillesztéseÚj adattag beillesztéseÚj adattag beillesztéseÚj adattag beillesztéseÚj adattag beillesztéseÚj adattag beillesztése

int _felev_id;

Az EditCsoportForm-ot

kell kiválasztani!1

2

3

Page 88: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

88

A felev_id adattagot kezel függvények: őA felev_id adattagot kezel függvények: őA felev_id adattagot kezel függvények: őA felev_id adattagot kezel függvények: őA felev_id adattagot kezel függvények: őA felev_id adattagot kezel függvények: őA felev_id adattagot kezel függvények: őA felev_id adattagot kezel függvények: őA felev_id adattagot kezel függvények: őA felev_id adattagot kezel függvények: ő létrehozáslétrehozás

Function: felevId()Return type: intSpecifier: non virtualAccess: publicType: function

Function: setFfelevId(int felev_id )Return type: voidSpecifier: non virtualAccess: publicType: function

Page 89: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

89

A _felev_id adattagot kezel függvények: őA _felev_id adattagot kezel függvények: őA _felev_id adattagot kezel függvények: őA _felev_id adattagot kezel függvények: őA _felev_id adattagot kezel függvények: őA _felev_id adattagot kezel függvények: őA _felev_id adattagot kezel függvények: őA _felev_id adattagot kezel függvények: őA _felev_id adattagot kezel függvények: őA _felev_id adattagot kezel függvények: ő kódkód

int EditCsoportForm::felevId(){ return _felev_id;}

void EditCsoportForm::setFelevId( int felev_id ){ _felev_id=felev_id; QSqlQuery query("SELECT kezdet,szam FROM felev WHERE felev_id=" +

QString::number(_felev_id) + ";"); if (query.next()) {

LabelKezdet->setText(query.value(0).toString());LabelSzint->setText("EAF" + query.value(1).toString());

}}

Page 90: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

90

A “A “A “A “A “A “A “A “A “A “SSzerkesztészerkesztés” gomb slotja - ” gomb slotja - ” gomb slotja - ” gomb slotja - ” gomb slotja - ” gomb slotja - ” gomb slotja - ” gomb slotja - ” gomb slotja - ” gomb slotja - editClicked() slot editClicked() slot

Edit/Slots

Edit/Connections

Function:editClicked() Return type: voidSpecifier: virtualAccess: publicType: slot

sender: EditPushButtonsignal: clicked()receiver: CsoportRegistrationFormslot: editClicked()

Page 91: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

91

EditClicked() slot: kódEditClicked() slot: kódEditClicked() slot: kódEditClicked() slot: kódEditClicked() slot: kódEditClicked() slot: kódEditClicked() slot: kódEditClicked() slot: kódEditClicked() slot: kódEditClicked() slot: kód

void CsoportRegistrationForm::editClicked(){ EditCsoportForm *dialog = new EditCsoportForm( this, "Edit Csoport Form", TRUE ); QSqlCursor cursor( "csoport" ); dialog->CsoportDataBrowser->setSqlCursor( &cursor ); dialog->CsoportDataBrowser->setFilter( CsoportDataTable->filter() ); dialog->CsoportDataBrowser->setSort(QSqlIndex::fromStringList( CsoportDataTable->sort(), &cursor ) ); dialog->CsoportDataBrowser->refresh(); int i = CsoportDataTable->currentRow(); if ( i == -1 ) i = 0; // Always use the first row CsoportDataTable->selectRow(i); dialog->setFelevId(CsoportDataTable->currentRecord()->value("felev_id").toInt()); dialog->CsoportDataBrowser->seek( i ); dialog->exec(); delete dialog; CsoportDataTable->refresh(); if (CsoportDataTable->numRows()==0) EditPushButton->setEnabled(FALSE); else EditPushButton->setEnabled(TRUE);}

Az implementációban hivatkozunk az EditCsoportForm és a CsoportDataBrowser osztályokra, ezért ezek header fájljait be kell

illeszteni a projektbe.

Page 92: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

92

Header fájlok beillesztéseHeader fájlok beillesztéseHeader fájlok beillesztéseHeader fájlok beillesztéseHeader fájlok beillesztéseHeader fájlok beillesztéseHeader fájlok beillesztéseHeader fájlok beillesztéseHeader fájlok beillesztéseHeader fájlok beillesztése

Kattintson az egér jobb fülére, majd válassza ki a

New menüpontot.

A ProjectOverview ablakban válassza ki a

CsoportRegistrationForm-ot!

1

2

Page 93: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

93

Fordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/Futtatás

Page 94: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

94

A A A A A A A A A A SSzerkesztészerkesztés gomb engedélyezése/tíltása gomb engedélyezése/tíltása gomb engedélyezése/tíltása gomb engedélyezése/tíltása gomb engedélyezése/tíltása gomb engedélyezése/tíltása gomb engedélyezése/tíltása gomb engedélyezése/tíltása gomb engedélyezése/tíltása gomb engedélyezése/tíltása

Edit/Slots

Edit/Connections

Function: slotCursorChangedCsoport() Return type: voidSpecifier: virtualAccess: publicType: slot

sender: CsoportDataTablesignal: cursorChanged(QSql::Op)receiver: CsoportRegistrationFormslot: slotCursorChangedCsoport()

Page 95: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

95

A newCurrentFelev() slot módosításaA newCurrentFelev() slot módosításaA newCurrentFelev() slot módosításaA newCurrentFelev() slot módosításaA newCurrentFelev() slot módosításaA newCurrentFelev() slot módosításaA newCurrentFelev() slot módosításaA newCurrentFelev() slot módosításaA newCurrentFelev() slot módosításaA newCurrentFelev() slot módosítása

void CsoportRegistrationForm::newCurrentFelev( QSqlRecord * buffer ){ CsoportDataTable->setFilter("felev_id=" +buffer->value("felev_id").toString()) ; CsoportDataTable->refresh();

if (CsoportDataTable->numRows()>0) CsoportDataTable->selectRow(0); if (CsoportDataTable->numRows()==0) EditPushButton->setEnabled(FALSE); else EditPushButton->setEnabled(TRUE);

}

Page 96: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

96

Az init() módosításaAz init() módosításaAz init() módosításaAz init() módosításaAz init() módosításaAz init() módosításaAz init() módosításaAz init() módosításaAz init() módosításaAz init() módosítása

void CsoportRegistrationForm::init(){ if (FelevDataTable && CsoportDataTable && FelevDataTable->numRows() >0) { FelevDataTable->selectRow(0);

slotCurrentChangedFelev(FelevDataTable->currentRecord());CsoportDataTable->setFilter("felev_id="

+ FelevDataTable->currentRecord()->value("felev_id").toString());CsoportDataTable->refresh();if (CsoportDataTable->numRows()>0) CsoportDataTable->selectRow(0);if (CsoportDataTable->numRows()==0) EditPushButton->setEnabled(FALSE);else EditPushButton->setEnabled(TRUE);

}}

Page 97: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

97

Az EditCsoportForm osztályAz EditCsoportForm osztályAz EditCsoportForm osztályAz EditCsoportForm osztályAz EditCsoportForm osztályAz EditCsoportForm osztályAz EditCsoportForm osztályAz EditCsoportForm osztályAz EditCsoportForm osztályAz EditCsoportForm osztály további függvényei és slotjai további függvényei és slotjai további függvényei és slotjai további függvényei és slotjai további függvényei és slotjai további függvényei és slotjai további függvényei és slotjai további függvényei és slotjai további függvényei és slotjai további függvényei és slotjai

Önálló feldolgozásra

Page 98: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

98

EditCsoportForm(QDialog)

slotFelevId()slotPrimeInsert()

slotPrimeUpdate()slotGyakvezChanged()

init()

felevId()

int _felev_id;

CsoportDataBrowser(QDataBrowser)

primeInsert()primeUpdate()

init()

LabelKezdet(QLabel)

LabelSzint(QLabel)

ComboBoxGyakvez(QComboBox)

QLineEditNev(QLineEdit)

QSpinBoxMax(QSpinBox)

QSpinBoxGyakvez_id(QSpinBox)

activated()

PushButtonFirst(QPushButtonl)

PushButtonClose(QPushButton)

setFelevId()LabelSzint->setText()LabelKezdet->setText()

Signálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotok

Page 99: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

99

EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: init()init()

void EditCsoportForm::init(){ QSqlQuery query ("SELECT nev FROM gyakvez ORDER BY nev;"); while (query.next())

ComboBoxGyakvez->insertItem(query.value(0).toString());}

A gyakorlatvezet nevét őtartalmazó ComboBox

kitöltése

Page 100: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

100

EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: slotPrimeInsert()slotPrimeInsert()

void EditCsoportForm::slotPrimeInsert( QSqlRecord * buffer ){ QSqlQuery query; query.exec("UPDATE sequence Set sequence = sequence + 1 where tablename = 'csoport';"); query.exec("SELECT sequence from sequence where tablename = 'csoport';"); if (query.next() ) {

buffer->setValue("csoport_id", query.value(0)); } buffer->setValue("felev_id", QString::number(_felev_id));}

Edit/Connections

sender: CsoportDataBrowsersignal: primeInsert(QSqlRecord*)receiver: EditCsoportFormslot: slotPrimeInsert(QSqlRecord*)

Edit/Slots/New Function/implementáció begépelése

Page 101: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

101

EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: slotPrimeUpdate() - 1slotPrimeUpdate() - 1

void EditCsoportForm::slotPrimeUpdate( QSqlRecord * buffer ){ if (!buffer) return; //Ki a gyakorlatvezetö QString q="SELECT nev FROM gyakvez WHERE gyakvez_id='" + buffer->value("gyakvez_id").toString() + "';"; QSqlQuery query (q); QString gyakvez = ""; if (query.next())

gyakvez=query.value(0).toString(); //Állítsuk be a gyakvez ComboBox értékét for (int i=0; i < ComboBoxGyakvez->count(); i++) {

if (ComboBoxGyakvez->text(i)==gyakvez) { ComboBoxGyakvez->setCurrentItem(i); break;}

} . . .}

Edit/Slots/New Function/implementáció begépelése

Page 102: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

102

EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: slotPrimeUpdate() - 2slotPrimeUpdate() - 2

void EditCsoportForm::slotPrimeUpdate( QSqlRecord * buffer ){ . . . //Állítsuk be a max Spin box minimális értékét int foglalt=0; query.exec( "SELECT count(*) FROM tag WHERE csoport_id=" + buffer->value("csoport_id").toString() + ";" ); if (query.next()) foglalt = query.value(0).toInt(); QSpinBoxMax->setMinValue(foglalt);}

Edit/Connections

sender: CsoportDataBrowsersignal: primeUpdate(QSqlRecord*)receiver: EditCsoportFormslot: slotPrimeUpdate(QSqlRecord*)

Edit/Slots/New Function/implementáció begépelése

Page 103: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

103

EditCsoportForm: EditCsoportForm: EditCsoportForm: EditCsoportForm: EditCsoportForm: EditCsoportForm: EditCsoportForm: EditCsoportForm: EditCsoportForm: EditCsoportForm: Header fájlok beillesztéseHeader fájlok beillesztése

1

2

A slotPrimeUpdate() slot deklarációs és definíciós részében is hivatkozunk a QSqlRecord osztályra.

3

class QSqlRecord;. . .public slots:void slotPrimeUpdate(QSqlRecord* buffer). . .

#include <qsqlrecord.h>. .void slotPrimeUpdate(QSqlRecord* buffer) {

}

editcsoportform.h

editcsoportform.cpp

Page 104: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

104

EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: slotGyakvezChanged()slotGyakvezChanged()

void EditCsoportForm::slotGyakvezChanged( const QString & g ){ //Mi a gyakorlatvezetö id-je? QString q="SELECT gyakvez_id FROM gyakvez WHERE nev='" + g + "';"; QSqlQuery query (q); if (query.next())

QSpinBoxGyakvez_id->setValue(query.value(0).toInt()); CsoportDataBrowser->update();}

Edit/Connections

sender: ComboBoxGyakvezsignal: activated(const QString &)receiver: EditCsoportFormslot: slotGyakvezChanged(const QString &)

Edit/Slots/New Function/implementáció begépelése

Ha új gyakorlatvezet t őválasztottunk, akkor a névhez

tartozó gyakvez_id-t kell megjeleníteni a vezérl n.ő

Page 105: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

105

VégeVégeVégeVégeVégeVégeVégeVégeVégeVége

Page 106: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

106

FelevDataTable(QDataTable)

primeInsert()beforeUpdate()

currentChanged()beforeInsert()

CsoportDataTable(QDataTable)

primeInsert()cursorChanged()

EditPushButton(QPushButton)

clicked()

QuitPushButton(QPushButton)

clicked()

CsoportRegistrationForm(QDialog)

slotPrimeInsertFelev()slotBeforeUpdateFelev()

slotCurrentChangedFelev()newCurrentFelev()

slotPrimeInsertCsoport()slotCursorChangedCsoport()

editClicked()

accept()

init()

EditCsoportForm(QDialog)

slotFelevId()slotPrimeInsert()

slotPrimeUpdate()slotGyakvezChanged()

init()

felevId()

int _felev_id;

A projekt osztálydiagramja -1

Page 107: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

107

EditCsoportForm(QDialog)

slotFelevId()slotPrimeInsert()

slotPrimeUpdate()slotGyakvezChanged()

init()

felevId()

int _felev_id;

CsoportDataBrowser(QDataBrowser)

primeInsert()primeUpdate()

init()

LabelKezdet(QLabel)

LabelSzint(QLabel)

ComboBoxGyakvez(QComboBox)

QLineEditNev(QLineEdit)

QSpinBoxMax(QSpinBox)

QSpinBoxGyakvez_id(QSpinBox)

PushButtonFirst(QPushButtonl)

PushButtonClose(QPushButton)

CsoportRegistrationForm(QDialog)

A projekt osztálydiagramja -2

Page 108: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

108

FelevDataTable(QDataTable)

primeInsert()beforeUpdate()beforeInsert()

currentChanged()

CsoportDataTable(QDataTable)

primeInsert()cursorChanged()

EditPushButton(QPushButton)

clicked()

QuitPushButton(QPushButton)

clicked()

CsoportRegistrationForm(QDialog)

slotPrimeInsertFelev()slotBeforeUpdateFelev()

slotCurrentChangedFelev()newCurrentFelev()

slotPrimeInsertCsoport()slotCursorChangedCsoport()

editClicked()

accept()

init()

EditCsoportForm(QDialog)

setFelevId()slotPrimeInsert()

slotPrimeUpdate()slotGyakvezChanged()

init()

felevId()

int _felev_id;

Signálok és slotok - 1Signálok és slotok - 1Signálok és slotok - 1Signálok és slotok - 1Signálok és slotok - 1Signálok és slotok - 1Signálok és slotok - 1Signálok és slotok - 1Signálok és slotok - 1Signálok és slotok - 1

editClicked()dialog->setSqlCursor()dialog->setFilter()dialog->setSort()dialog->setFelevId()

Page 109: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14

109

EditCsoportForm(QDialog)

setFelevId()slotPrimeInsert()

slotPrimeUpdate()slotGyakvezChanged()

init()

felevId()

int _felev_id;

CsoportDataBrowser(QDataBrowser)

primeInsert()primeUpdate()

init()

LabelKezdet(QLabel)

LabelSzint(QLabel)

ComboBoxGyakvez(QComboBox)

QLineEditNev(QLineEdit)

QSpinBoxMax(QSpinBox)

QSpinBoxGyakvez_id(QSpinBox)

activated()

PushButtonFirst(QPushButtonl)

PushButtonClose(QPushButton)

setFelevId()LabelSzint->setText()LabelKezdet->setText()

Signálok és slotok - 2Signálok és slotok - 2Signálok és slotok - 2Signálok és slotok - 2Signálok és slotok - 2Signálok és slotok - 2Signálok és slotok - 2Signálok és slotok - 2Signálok és slotok - 2Signálok és slotok - 2