Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

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.

Hasonló előadás


Az előadások a következő témára: "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."— Előadás másolata:

1

2 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

3 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

4 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) 1 2 3 4

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

6 Projekt létrehozása 1 2 3 4 5 6

7 Projekt létrehozása –1 1 2 3

8 Projekt létrehozása – 2 1 2

9 Projekt létrehozása – 3 1 2

10 Projekt létrehozása – 4 1 2 3 4

11 Projekt létrehozása – 5 1 2 3

12 Projekt létrehozása – 6 1 2 CListView

13 Projekt információ 1 2 3

14 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.

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

16 Ugyfel: Adattagok megadása  1 2 3 4 5 6 7

17 Ugyfel: Metódusok megadása  1 2 3 4 5 6 7

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

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

20 Projekt felkészítése a MySQL adatabáziskezelő használatára - 3 1 5 6 7 A mysql és a mysql++ include fájlok elérésének biztosítása. 4 3 2 C:\mysql\include.c:\mysql\mysql\include

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

22 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.

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

24 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

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

26 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  

27 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++; }

28 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

29 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.

30 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

31 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

32 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

33 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

34 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

35 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.

36 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

37 Lista típus – MSDN használata

38 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;

39 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

40 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:

41 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

42 MSDN használata

43 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

44 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

45 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

46 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

47 MySQL

48


Letölteni ppt "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."

Hasonló előadás


Google Hirdetések