Készítsünk el egy olyan egy dokumentumos (SDI) alkalmazást, amely alkalmas a mysql adatbáziskezelővel létrehozott BANK adatbázisunk UGYFEL táblájának.

Slides:



Advertisements
Hasonló előadás
4. alkalom – Hálózat Kezelés
Advertisements

Osztály leszármaztatás
Tananyag: konzultáció
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
Adatbázis rendszerek I
Anyagadatbank c. tárgy gyakorlat
Adatbázisok SQL. TARTALOM Szijártó M.2 Témakörök  Az SQL tulajdonságai  A műveletek fajtái  Objektum-műveletek  Lekérdezések Tulajdonságok és műveletek.
PL/SQL folytatás Kurzorok Alprogramok Tárolt eljárások ADATBÁZIS ALAPÚ RENDSZEREK.
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
1 Informatikai Szakképzési Portál Adatbázis kezelés DCL – Adatvezérlő nyelv.
Adatbázisokat és Adattáblákat kezelő FoxPro parancsok és utasítások Páll Boglárka
Delphi programozás alapjai
5. GYAKORLAT SQL CREATE TABLE, aktualizálás. S QL Structured Query Language A relációs adatbáziskezelés szabványos nyelve Nem algoritmikus, de beépíthető.
– Adattáblák & adatok kezelése – Tarcsi Ádám január Adatbázis gyakorlat.
megismerése, mintaadatbázis létrehozása
SQL – DQL (Data Query Language ) adat lekérdezések
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Készítsünk el egy olyan egy dokumentumos (SDI) alkalmazást, amely alkalmas a mysql adatbáziskezelővel létrehozott BANK adatbázisunk UGYFEL táblájának.
Kapcsolat az adatabázishoz - Előkészületek // Implementation public: void ReleaseDataBase(); void ConnectDataBase(CString s); virtual ~CBankDoc(); protected:
10. előadás (2004. április 20.) A C előfordító (folytatás) Néhány hasznos compiler opció Egy tanulságos könyvtári függvény Változó hosszúságú argumentum.
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 9. Gyakorlat Alap file műveletek.
Programozás II. 3. Gyakorlat C++ alapok.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Adatbázis rendszerek II.
Készítette: Sárközi Anikó
Ellenőrző kérdések a)Auto-indexing enabled b)Auto-indexing disabled c)Nem eldönthető 1.
Delphi programozás alapjai Nagyváradi Anett PTE PMMK MIT.
6. előadás: PHP-MySQL Barabás Péter
Delphi programozás 8. ELŐADÁS ADO ActiveX Data Objects.
- adatbázisséma definiálása (DDL) Data Definition Languages, - adatok aktualizálása (DML),Data Maniputaion Language - lekérdezési lehetőségek (DML) Data.
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
Adatbázis-kezelés SQL-lel. SQL SQL = Structured Query Language – Strukturált Lekérdezőnyelv Relációs adatbázis-kezelők lekérdezési nyelve. Alapjait az.
Adatbázis-kezelés SQL-lel
Felhasználók és jogosultságok
SQL DDL DATA DEFINITION LANGUAGE. Táblák létrehozása CREATE TABLE táblanév ( oszlopnév1 típus(méret) /DEFAULT érték/ /NOT NULL/, oszlopnév2 típus(méret)
Készítette: Tóth Ervin
Nézzük, mit tudunk…. Mire gondoltam? Megjeleníti az adott adatbázishoz kapcsolódó összes objektumot : adatbázis ablak.
Fejlesztés PHP-NUKE portál rendszerre Horváth Zoltán Második Magyarországi PHP Konferencia március 27. Copyright PHP Konferencia,
Objektum orientált programozás a gyakorlatban
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Készítette: Lipp Marcell
SQL-Structured Query Language. Parancs(utasítás) csoportok CREATE - táblák létrehozása ALTER – táblák módosítása DROP – táblák törlése DDL –Data Definition.
Java programozási nyelv Adatbekérés konzolról
Egyenesvonalú (lineáris) adatszerkezetek
1 Sramó András Adatbázis-technológia V. előadás Adatbázis-technológia 5. előadás Az SQL.
– SQL 3: SELECT - 1. – Tarcsi Ádám, január 31. Adatbázis gyakorlat.
Adatbázis-kezelés Tarcsi Ádám január. 15. MySQL és PHP.
– SELECT - 2. – Tarcsi Ádám március Adatbázis gyakorlat.
Tarcsi Ádám, Adatbázis gyakorlat – Adattáblák – Tarcsi Ádám, január.
Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai
Ma az un. Relációs adatmodelleket használjuk.
5. gyakorlat Fleiner Rita.
Webprogramozó tanfolyam
SQL. SQL jellemzői Nem algoritmikus (nem tartalmaz algoritmikus szerkezeteket: ciklus, eljárás, elágazás) Nem rekurzív (önmagát nem hívhatja) Halmazorientált.
1 Verseny 2000 gyakorlat SQL 2000 Server Portál adatbázis létrehozása.
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Programozás III JPA.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Adatbázisok SQL.
Kovács Gergely Péter Bevezetés
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Logisztikai projekt - gyakorlat Adatbázis-elmélet
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
B M Java Programozás 9. Gy: Java alapok IT A N Adatkezelő 5.rész
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Python alapok Vincellér Zoltán.
Konverziós operátorok
Függvénysablonok használata
Előadás másolata:

Készítsünk el egy olyan egy dokumentumos (SDI) alkalmazást, amely alkalmas a mysql adatbáziskezelővel létrehozott BANK adatbázisunk UGYFEL táblájának megjelentetésére. 1. Feladat: Lista

UGYFEL tábla refszamnevcimstatus 5555Kovács Anna3434 Alma u. 8.magán 1111Kis Péter1234 Cseresznye u. 7.üzleti 3333Nagy Sára6666 Meggy u. 1.magán 2222Nagy Pál4321 Körte u. 13.magán 6666Kiss Katalin1212 Barack u. 7.üzleti 4444Nagy Katalin7878 Szilva u. 123.üzleti refszam: INT(4) PRIMARY KEY NOT NULL nev:VARCHAR(20) NOT NULL cim: VARCHAR(30) NOT NULL status: CHAR(8) NOT NULL

create database bank; use bank; create table ugyfel (refszam int(4) primary key not null, nev varchar(20) not null, cim varchar(30) not null, status char(8) not null); describe ugyfel; UGYFEL tábla Az UGYFEL táblát létrehozó MySQL parancsok: Az UGYFEL tábla felépítése Field Type Null Key Default Extra refszam int(4) PRI 0 nev varchar(20) cim varchar(30) status varchar(8)

Előkészületek A zöld szemafor jelzi, ha fut a MySQL szerver.

Projekt létrehozása

Projekt létrehozása –

Projekt létrehozása – 2 1 2

Projekt létrehozása – 3 1 2

Projekt létrehozása –

Projekt létrehozása –

Projekt létrehozása – CListView

Projekt információ 1 2 3

class Ugyfel { public: int Refszam() const; CString Nev() const; CString Cim() const; CString Status() const; void SetRefszam( int i); void SetNev(CString s); void SetCim(CString s); void SetStatus(CString s); Ugyfel(); virtual ~Ugyfel(); protected: int refszam; CString nev; CString cim; CString status; }; Az UGYFEL osztály Ugyfel.h refszamnevcimstatus 5555Kovács Anna3434 Alma u. 8.magán 1111Kis Péter1234 Cseresznye u. 7.üzleti 3333Nagy Sára6666 Meggy u. 1.magán 2222Nagy Pál4321 Körte u. 13.magán 6666Kiss Katalin1212 Barack u. 7.üzleti 4444Nagy Katalin7878 Szilva u. 123.üzleti Korábbi ismereteinkre támaszkodva hozzuk létre az Ugyfel osztályt.

Ugyfel: Saját osztály létrehozása Insert/New Class 1 2

Ugyfel: Adattagok megadása 

Ugyfel: Metódusok megadása 

Projekt felkészítése a MySQL adatabáziskezelő használatára - 1  A Library Files resource mappa létrehozása.

Projekt felkészítése a MySQL adatabáziskezelő használatára - 2  A mysql++ beillesztése a Library Files mappába.

Projekt felkészítése a MySQL adatabáziskezelő használatára A mysql és a mysql++ include fájlok elérésének biztosítása C:\mysql\include.c:\mysql\mysql\include

LibMySQL kiválasztása LibMySQL.dll nyomkövetéshez LibMySQL.dll csak futtatáshoz Legyen futtatható a LIBMYSQL.dll könyvtár!

LibMySQL átmásolása A megfelelő a LIBMYSQL.dll fájlt programunk futtatásához át kell másolnunk: vagy: az alkalmazásunk alkönyvtárába. vagy a windows/system alkönyvtárba.

A mysql++ header-fájl beillesztése a dokumentum osztályba #endif // _MSC_VER > 1000 #include class CBankDoc : public CDocument... BankDoc.h 

Kommunikáció az adatbázissal 1.Kapcsolat kiépítése 2.SQL parancs összeállítása 3.Lekérdezés végrehajtása 4.Eredmény elemek lekérése és megjelenítése 5.Kapcsolat bontása

Kapcsolat az adatbázishoz - Előkészületek  // Implementation public: void ReleaseDataBase(); void ConnectDataBase(CString s); virtual ~CBankDoc(); protected: Connection* con; BankDoc.h

Kapcsolat az adatabázishoz - Előkészületek // Implementation public: void ReleaseDataBase(); void ConnectDataBase(CString s); virtual ~CBankDoc(); protected: Connection* con; BankDoc.h void CBankDoc::ConnectDataBase(CString s) { con = new Connection(s); } void CBankDoc::ReleaseDataBase() { if (con>0) delete con; } BankDoc.cpp  

Lekérdezés a „rákapcsolódás” után 1.Létrehozunk Query tipusú query objektumot. Query query = con->query(); 2.A query objektumban „összeálítjuk” az SQL parancsot. query << "select * from ugyfel order by refszam"; 3.Végrehajtatjuk a lekérdezést és az eredményt tároljuk. Result res = query.store(); 4.A Result osztály iterátorával kiolvasgatjuk az eredményt. CListCtrl list; Row row; Result::iterator iter; int j=0; for (iter = res.begin(); iter != res.end(); iter++) { row = *iter; list.InsertItem(j,row[0]); list.SetItemText(j,1,row[1]);... j++; }

A dokumentum osztály adatbázis-kezelést támogató adattagjai protected: Result res;// az eredmény Connection* con;// a kapcsolat Result::iterator iResult;// az eredményt bejáró iterátor iResult

A dokumentum osztály adatbázis-kezelést támogató metódusai ConnectDataBase(CString s) „Összekapcsolja” programunkat az adatbázissal. ReleaseDataBase() „Bontja” az adatbázis kapcsolatot. ExecuteQuery(CString q) Végrehajtja a lekérdezést és tárolja az eredményt. Count() Visszaadja az eredmény rekordok számát. GetCurrentItem(Ugyfel &uf) Visszaadja az aktuális ügyfél adatait. MoveFirst() „Rááll” az eredmény első rekordjára. MoveNext() „Rááll” az aktuális ügyfélt követő rekordra.

Dokumentum osztály: ExecuteQuery(CString q) bool CBankDoc::ExecuteQuery(CString q) { try { Query query = con->query(); query << q; res = query.store(); } catch (BadQuery er){ cerr << "Error: " << er.error << endl; return false; } iResult=res.begin(); return true; } Végrehajtja a q stringben megadott lekérdezést és tárolja az eredményt. public :... bool ExecuteQuery(CString q);... BankDoc.h BankDoc.cpp Worksapce/ClassView/Jobb egérfül/ Add Member Functions  1 2

Dokumentum osztály: Count() int CBankDoc::Count() { return res.end() - res.begin(); } Visszaadja az eredményül kapott rekordok számát. public :... int Count();... BankDoc.h BankDoc.cpp Worksapce/ClassView/Jobb egérfül/ Add Member Functions  1 2

Dokumentum osztály: GetCurrentItem(Ugyfel &uf) void CBankDoc::GetCurrentItem(Ugyfel &uf) { Row row; row=*iResult; uf.SetRefszam((int) row[0]); uf.SetNev((CString)row[1]); uf.SetCim((CString)row[2]); uf.SetStatus((CString)row[3]); } Visszaadja az aktuális ügyfél adatait. public:... void GetCurrentItem(Ugyfel &uf);... BankDoc.h BankDoc.cpp Worksapce/ClassView/Jobb egérfül/ Add Member Functions  1 2

Dokumentum osztály: MoveFirst() bool CBankDoc::MoveFirst() { iResult = res.begin(); if ( iResult == res.end() ) return ( false ); else return ( true ); } „Rááll” az eredmény első rekordjára. A visszatérési érték true,ha van ilyen, false egyébként. public:... bool MoveFirst();... BankDoc.h BankDoc.cpp Worksapce/ClassView/Jobb egérfül/ Add Member Functions  1 2

Dokumentum osztály: MoveNext() bool CBankDoc::MoveNext() { if (iResult == res.end()) return ( false ); iResult++; if (iResult == res.end()) return ( false ); return true; } „Rááll” az aktuális ügyfélt követő rekordra. A visszatérési értéktrue, ha van ilyen, false egyébként. public:... bool MoveNext();... BankDoc.h BankDoc.cpp Worksapce/ClassView/Jobb egérfül/ Add Member Functions  1 2

Nézet osztály - CBankView CBankViewCBankDoc void CBankView::OnInitialUpdate() {... CBankDoc* pDoc = GetDocument(); pDoc->ConnectDataBase("Bank");... } A nézetosztályból a dokumentumosztály metódusait a GetDocument()-en keresztül érhetjük el.

Lista típus WS_VISIBLE: Az ablak azonnal legyen látható WS_CHILD: Az ablak legyen gyerekablak LVS_REPORT: A lista legyen táblázat LVS_SINGLESEL: Egyszerre csak egy listaelemet lehet kiválasztani

Lista típus – MSDN használata

Lista típus beálltása: PreCreateWindow BOOL CBankView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs cs.style=WS_VISIBLE|WS_CHILD|LVS_REPORT|LVS_SINGLESEL; return CListView::PreCreateWindow(cs); }  typedef struct tag CREATESTRUCT { LPVOIDlpCreateParams; HANDLEhInstance; HMENUhMenu; HWNDhwndParent; Intcy; Intcx; Inty; Intx; LONGstyle; LPCSTRlpszName; LPCSTRlpszClass; DWORDdwExStyle;} CREATESTRUCT;

A lista kitöltését támogató metódusok void CBankView::FillHeader() Felépíti a listánkat. void CBankView::FillData() Kitölti a listánkat az adatbázis adataival. FillHeader FillData

GetListCtrl () CListCtrl* pList = &GetListCtrl(); pList->InsertColumn(1,"Refszám",LVCFMT_LEFT,100);... A CBankView osztályhoz tartozó listát (melynek típusa CListCtrl) a GetListCtrl() metóduson keresztül érhetjük el. GetListCtrl()->InsertColumn(1,"Refszám",LVCFMT_LEFT,100);... vagy:

Nézet osztály: FillHeader() void CBankView::FillHeader() { CListCtrl* pList = &GetListCtrl(); pList->SetExtendedStyle ( LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP); pList->InsertColumn(1,"Refszám",LVCFMT_LEFT,100); pList->InsertColumn(2,"Név",LVCFMT_LEFT,100); pList->InsertColumn(3,"Cim",LVCFMT_LEFT,100); pList->InsertColumn(4,"Státusz",LVCFMT_LEFT,100); } public:... void FillHeader();... BankView.h BankView.cpp Worksapce/ClassView/Jobb egérfül/ Add Member Functions  1 2

MSDN használata

Nézet osztály: FillData() void CBankView::FillData() { } public:... void FillData();... BankView.h BankView.cpp Worksapce/ClassView/Jobb egérfül/ Add Member Functions  1 2

Nézet osztály: FillData() void CBankView::FillData() { Ugyfel uf; CListCtrl* pList= &GetListCtrl(); CBankDoc* pDoc = GetDocument(); pDoc->ExecuteQuery("select * from ugyfel;"); pDoc->MoveFirst(); for (int i=0; i Count(); i++){ pDoc->GetCurrentItem(uf); CString str; str.Format("%d",uf.Refszam()); pList->InsertItem(i,str); pList->SetItemText(i,1,uf.Nev()); pList->SetItemText(i,2,uf.Cim()); pList->SetItemText(i,3,uf.Status()); pDoc->MoveNext(); } BankView.cpp  2

Rákapcsolódás az adatbázisra Nézet osztály: OnInitialUpdate() void CBankView::OnInitialUpdate() { CListView::OnInitialUpdate(); // TODO: You may populate your ListView with items by directly accessing // its list control through a call to GetListCtrl(). CBankDoc* pDoc = GetDocument(); pDoc->ConnectDataBase("Bank"); FillHeader(); FillData(); } BankView.cpp  1

Lekapcsolódás az adatbázisról Nézet osztály: OnInitialUpdate() void CBankView::OnFinalRelease() { // TODO: Add your specialized code here and/or call the base class GetDocument()->ReleaseDataBase(); CListView::OnFinalRelease(); } BankView.cpp  1

MySQL