Elemi alkalmazások fejlesztése Bank I.

Hasonló dokumentumok
1. Feladat: Lista mysql BANK UGYFEL

Adatbázis-kezelés ODBC driverrel

ADATBÁZISKEZELÉS KÖZVETLEN ELÉRÉSSEL II...2

SDI ALKALMAZÁS I. Workspace / ResourceView / Toolbar / IDR_MAINFRAME. Workspace / ResourceView / Menu / IDR_MAINFRAME

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

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelés ActiveX vezérlıkkel - 1

1. feladat. Szabóné Nacsa Rozália

Elemi alkalmazások fejlesztése IV.

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

Adatbázis-kezelés ODBC-vel

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

Adatbázisok webalkalmazásokban

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

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

3. Osztályok II. Programozás II

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

Elemi alkalmazások fejlesztése IV.

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

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

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

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Szabóné Nacsa Rozália. Feladat. Készítsünk el egy üres FormView alapú alkalmazást és építsünk köré egy súgó környezetet.

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

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

Adatbázisok* tulajdonságai

Hogyan használja az OROS online pótalkatrész jegyzéket?

Pénzügyi algoritmusok

RPC Remote Procedure Call Távoli eljárás hívás

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

Széchenyi István Egyetem

MDAC - Microsoft Data Access Components

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

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

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

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

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

Hardver modellezés SystemC-vel és SDL grafikus könyvtárral Visual Stúdió alatt

Stateless Session Bean

Szoftvertechnolo gia gyakorlat

Java Programozás 11. Ea: MVC modell

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelés ActiveX vezérl ı kkel - 2

Kézikönyv ABAS-TOOLS használata

Java és web programozás

Laborgyakorlat: A Windows XP haladó telepítése

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Programozási technológia

Eseményvezérelt alkalmazások

OOP: Java 4.Gy: Java osztályok

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Elemi alkalmazások fejlesztése I.

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

Programozás II. ATM példa Dr. Iványi Péter

Programozás C++ -ban

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

Osztály és objektum fogalma

Web-technológia PHP-vel

1. Alapok. Programozás II

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

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

Entity Framework alapú adatbáziselérés

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7

Szakmai továbbképzési nap akadémiai oktatóknak december 14. HISZK, Hódmezővásárhely / Webex

Adatbázis rendszerek II. Adatbázis elérése C# kliens programból ADO.NET API-n keresztül

SZERVER OLDALI JAVASCRIPT. 3. hét Javascript nyelvi elemek

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

Informatika terméktervezőknek

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

JavaServer Pages (JSP) (folytatás)

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

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

Entity Framework + LINQ oktatási segédlet

Adatbázis használata PHP-ből

LBRA6i integrált rendszer

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

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

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

Programozás C++ -ban 2007/4

Tervminták II. (Híd, Bejáró, Gyártófüggvény) Halmaz és bejárása Osztály-sablonok

Adatbányászat és Perszonalizáció architektúra

Programozás II gyakorlat. 6. Polimorfizmus

Bevezetés: az SQL-be

C#---Access adatbáziskezelési gyakorlat

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

Vizuális programozás gyakorlat

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

ZH mintapélda. Feladat. Felület

A Java nyelv. Dialógus ablakok. Elek Tibor

Számítógépes grafika

5. Gyakorlat. struct diak {

Generikus Típusok, Kollekciók

Swing GUI készítése NetBeans IDE segítségével

Globális operátor overloading

Cekla. Készítette Doxygen Tue Sep :13:44

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

A könyv tartalomjegyzéke

Programozás II gyakorlat. 4. Öröklődés

Adatbázis. AMP! (Apache + MySql + PHP) XAMPP, LAMP, MAMP, WAMP et cetera

Átírás:

ADATBÁZISKEZELÉS KÖZVETLEN ELÉRÉSSEL I... 2 1. FELADAT: LISTA... 2 ELŐKÉSZÜLETEK: A MYSQL ADATBÁZISKEZELŐ HASZNÁLATA... 2 PROJEKT LÉTREHOZÁSA... 3 AZ ÜGYFÉL OSZTÁLY (UGYFEL)... 4 A PROJEKT FELKÉSZÍTÉSE A MYSQL ADATBÁZISKEZELŐ HASZNÁLATÁRA... 5 Illesszük be a mysql++ könyvtárat a projektbe... 5 Legyen futtatható a LIBMYSQL.dll könyvtár!... 5 A DOKUMETUM OSZTÁLY (CBANKDOC)... 5 Előkészületek a kapcsolat kiépítéséhez... 5 Adatok lekérdezése a kapcsolódás után általános ismertető... 6 A dokumentum osztály adatbáziskezelést támogató adattagjai... 7 Result res;...7 Connection* con;...7 Result::iterator iresult...7 A dokumentum osztály adatbáziskezelést támogató metódusai... 7 void CBankDoc::ConnectDataBase(const char *db, const char *host, const char *user, const char *password)...7 void CBankDoc::ReleaseDataBase()...7 bool CBankDoc::ExecuteQuery(CString q)...7 int CBankDoc::Count()...7 bool CBankDoc::MoveFirst()...7 bool CBankDoc::MoveNext()...7 A NÉZET OSZTÁLY (CBANKVIEW)... 9 Lista típus beállítása... 9 A lista kitöltését támogató metódusok... 10 void CBankView::FillHeader()...10 void CBankView::FillData()...11 Rákapcsolódás az adatbázisra... 11 void CBankView::OnInitialUpdate()...11 Lekapcsolódás az adatbázisról... 12 void CBankView::OnFinalRelease()...12 1. oldal

Adatbáziskezelés közvetlen eléréssel I. 1. Feladat: Lista 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. Az ügyféltábla felépitése: mysql>use bank; mysql>describe ugyfel; Field Type Null Key Default Extra refszam int(4) PRI 0 nev cim status varchar(20) varchar(30) varchar(8) Előkészületek: a mysql adatbáziskezelő használata Ha Ön olyan gépnél dolgozik, amelyre még nem installálták fel a mysql-t, akkor hajtsa végre az 1-5 lépéseket, egyébként a 4-5. lépéseket. 1. A mysql.com oldalról töltse le a az aktuális mysql-x.xx.xx-win.zip (mysql-4.0.21-win.zip) és a mysql++-1.7.1-1-win32-vc++.zip fájlokat. (A mysql++-hoz feltétlenül ezt a fájlt töltse le!) 2. A mysql-x.xx.xx-win.zip kicsomagolása után inditsa el a setup.exe programot. Legyen a célkönyvtár neve mysql. 3. Csomagolja ki a mysql++-1.7.1-1-win32-vc++.zip fájlt. Legyen a célkönyvtár neve szintén mysql. 4. Server elindítása - Indítsa el a mysql\bin\winmysqladmin.exe programot. 5. Parancsablakból indítsa el a mysql\bin\mysql.exe programot. Ezután parancsokat adhat ki a mysql adatbázis kezelőnek, amely segítségünkre lehet programunk futása közben adataink megtekintéséhez. Megjegyzés: Installálás után a mysql\docs alkönyvtárban hasznos tudnivalókat találhat az SQL nyelvre és a mysql adatbáziskezelőre vonatkozóan. 2. oldal

Projekt létrehozása A projekt egyik érdekessége, hogy nézet osztály bázisosztályaként a CListView osztályt fogjuk kiválasztani. Így azonnal egy jól kezelhető, listás alkalmazást kapunk. File/New/ Projects MFC AppWizard.exe Project name: Bank Platforms: Win32 Step1: Single Document Document/View architecture support? Next Next Step 2: What database support would you like to import? none Next Step 3: What compound document support would you like to include? none What othr support would you like to include? Automation ActiveX controls Next Step 4: What features would you like to include? Docking toolbars Initial status bar Printing and print preview 3D controls How do you want your toolbars to look? normal How many files would you like on your recent file list? 4 Advanced: File extension: bnk Next Step 5: MFC Standards style Yes please comments As a shared DLL library Next Step 6: CBankView Class name: CBankView Base class: CListView Header file bankview.h Implementation file: bankview.cpp CBankDoc Class name: CBankDoc Base class: CDocument Header file bankdoc.h Implementation file: bankdoc.cpp Finish? Saját jegyzeteim? Nekünk kell a legördülő listából kiválasztani!!! 6 Forditás/Futtatás 3. oldal

Az ügyfél osztály (UGYFEL) Az ügyfél adatok kényelmes kezeléséhez hozzuk létre az Ugyfel osztályt! Ugyfel.h class Ugyfel public: void SetStatus(CString s); void SetCim(CString s); void SetNev(CString s); void SetRefszam(int i); CString Status() const; CString Cim() const; CString Nev() const; int Refszam() const; Ugyfel(); virtual ~Ugyfel(); protected: CString status; CString cim; CString nev; int refszam; ; Az osztályvarázsló és/vagy gépelés segítségével önállóan deklarálja a fenti adattagokat és metódusokat.? Saját jegyzeteim 4. oldal

A projekt felkészítése a MySql adatbáziskezelő használatára Illesszük be a mysql++ könyvtárat a projektbe Workspace/File view/bank files/(jobb egérfül)/new Folder Name of the new folder: Library Files File extensions: Workspace/File view/library Files/(jobb egérfül)/add files to folder (elérési út: c:\mysql\lib\) mysql++ Project(menü)/Settings / C/C++ fül/ Category: Preprocessor Additional include directories: c:/mysql/include,c:/mysql/mysql/include Legyen futtatható tható a LIBMYSQL.dll könyvtár! Az alkalmazás debug és res könyvtárakba, vagy a windows/system könyvtárba másolja át a c:\mysql\mysql\lib-ben található LIBMYSQL.dll fájlt. (Dátum: 2001.02.01, hossz: 217 088). A dokumetum osztály (CBankDoc) Az adatbázissal a dokumentumosztály tartja a kapcsolatot. Minthogy a MySQL szolgáltatásait a dokumentum osztályban használjuk, ezért a mysqll++ header fájlt be kell illesztenünk BankDoc.h header fájlba. (Természetesen, ha hivatkozni szeretnénk az Ugyfel osztályra is, akkor azt is be kell illeszteni.) BankDoc.h // BankDoc.h : interface of the CBankDoc class #endif // _MSC_VER > 1000 #include <mysql++> #include "Ugyfel.h" Előkészületek a kapcsolat kiépítéséhez Egy Connection tipusú objektumon keresztül tartjuk a kapcsolatot az adatbázissal. A CBankDoc osztályban a Connection tipusú con adattag segítségével építjük ki a kapcsolatot az adatbázisunkkal. A ConnectDataBase( ) metódusban definiálunk egy kapcsolatot (dinamikus helyfoglalással) és a ReleaseDataBase() metódusban szüntetjük meg azt. Workspace/ClassView/CBankDoc/(jobb egérfül)/add member variable Variable type: Connection* Variable name: con Access: Protected Workspace/ClassView/CBankDoc/(jobb egérfül)/add member function Function type: void Function declaration: ConnectDataBase(const char* db, const char* host="", const char* user="", const char* password="") Access: Public Workspace/ClassView/CBankDoc/(jobb egérfül)/add member function Function type: void Function declaration: ReleaseDataBase() Access: Public 5. oldal

BankDoc.h class CBankDoc : public CDocument // Implementation public: void ReleaseDataBase(); void ConnectDataBase(const char* db, const char* host="", const char* user="", const char* password=""); virtual ~CBankDoc(); protected: Connection* con; ; BankDoc.cpp // BankDoc.cpp : implementation of the CBankDoc class// CBankDoc commands void CBankDoc::ConnectDataBase(const char *db, const char *host, const char *user, const char *password) con = new Connection(db,host,user,password); void CBankDoc::ReleaseDataBase() if (con>0) delete con; CBankDoc::~CBankDoc() con=null; Adatok lekérdezése a kapcsolódás után általános lános ismertető Megjegyzés: Itt csak az általános elveket mutatjuk be, a tényleges megvalósítást később részletesebben is megadjuk. 1. Létrehozunk Query tipusú query objektumot Query query = con->query(); 2. A query objektumba átirányítjuk az SQL parancsot. (mintha egy ostreambe írnánk) query << "select * from ugyfel order by refszam"; 3. A query.store() metódussal végrehajtatjuk a parancsot és a visszaadott eredményt egy Result típusú res objektumban tároljuk Result res = query.store(); 4. A Result osztály iterátorával res-ből rendre kiolvashatjuk a lekérdezés eredményét. CListCtrl list; Row row; Result::iterator i; int j=0; for (i = res.begin(); i!= res.end(); i++) row = *i; list.insertitem(j,row[0]); list.setitemtext(j,1,row[1]); list.setitemtext(j,2,row[2]); list.setitemtext(j,3,row[3]); j++; 6. oldal

A dokumentum osztály adatbáziskezelést támogató adattagjai Result res; // az eredmény Connection* con; // a kapcsolat Result::iterator iresult; // az eredményt bejáró iterátor A dokumentum osztály adatbáziskezelést támogató metódusai void CBankDoc::ConnectDataBase(const char *db, const char *host, const char *user, const char *password) Összekapcsolja programunkat a paraméterben megadott nevű adatbázissal void CBankDoc::ReleaseDataBase() Felszabadítja a dokumentumosztályhoz definiált adatbázist. bool CBankDoc::ExecuteQuery(CString q) Végrehajtja a q stringben megadott lekérdezést és tárolja az eredményt. Ha a lekérdezés kivételt dobott, akkor false egyébként true a visszatérési érték. int CBankDoc::Count() Visszaadja az eredményül kapott rekordok számát. void CBankDoc::GetCurrentItem(Ugyfel &uf) Visszaadja az aktuális ügyfél adatait. bool CBankDoc::MoveFirst() Rááll az eredmény első rekordjára. A visszatérési érték true, ha van ilyen, false egyébként. bool CBankDoc::MoveNext() Rááll az aktuális ügyfélt követő rekordra. A visszatérési érték true, ha van ilyen, false egyébként. Az osztályvarázsló és/vagy gépelés segítségével deklarálja önállóan a fenti adattagokat és metódusokat. CBankDoc.h class CBankDoc : public CDocument // Implementation public: bool MoveNext(); bool MoveFirst(); void GetCurrentItem(Ugyfel &uf); int Count(); bool ExecuteQuery(CString st); void ReleaseDataBase(); void ConnectDataBase(CString s); virtual ~CBankDoc(); protected: // Generated message map functions protected: Result res; Connection* con; Result::iterator iresult; //AFX_MSG(CBankDoc) // NOTE - the ClassWizard will add and remove member functions here. // DO NOT EDIT what you see in these blocks of generated code! //AFX_MSG DECLARE_MESSAGE_MAP() ; 7. oldal

CBankDoc.cpp // BankDoc.cpp : implementation of the CBankDoc class// CBankDoc commands void CBankDoc::ConnectDataBase(CString s) con = new Connection(s); void CBankDoc::ReleaseDataBase() if (!con) delete con; 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; int CBankDoc::Count() return res.end() - res.begin(); 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]); bool CBankDoc::MoveFirst() iresult = res.begin(); if ( iresult == res.end() ) return(false); else return(true); bool CBankDoc::MoveNext() bool CBankDoc::MoveNext() if (iresult == res.end()) return (false); iresult++; if (iresult == res.end()) return (false); return true; 8. oldal

A nézet osztály (CBankView) Lista típus beállítása CBankView.cpp 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); 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 Gyakorlás: Használja bátran az MSDN könyvtárat. A könyvtárban további stílusokat találhat. 9. oldal

A lista kitöltését támogató metódusok Készitsünk egy saját FillHeader() metódust, amely kitölti a listánk fejlécét! Workspace/ClassView/BankView/(jobb egérfül)/add member function Function type: void Function declaration: FillHeader() Access: Public BankView.h class CBankView : public CListView // Implementation public: void FillHeader(); virtual ~CBankView(); Megjegyzés: Gépelje be a tennivalókat az alábbiak szerint! BankView.cpp 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); LVS_EX_FULLROWSELECT: Kiválasztásnál a teljes sort kijelöli LVS_EX_HEADERDRAGDROP: Az oszlop címkéket megragadva átrendezhetjük az oszlopok sorrendjét. LVS_EX_GRIDLINES: Legyen vonalkázott a táblázatunk. Projektünk létrehozásakor a CBankView bázisosztályának a CListView osztályt választottuk. Az osztályhoz tartozó listát (melynek tipusa CListCtrl) a GetListCtrl() metóduson keresztül érhetjük el. A GetListCtrl() egy CListCtrl tipusú objektumot ad vissza, melyre már kiadhatjuk az eddig megismert üzeneteket. (InsertItem, SetItemText, stb) A CListCtrl osztály InsertItem(), SetItemText() metódusait az előző félév anyagaiban találhatja meg. Gyakorlás: Keressen további metódusokat az MSDN könyvtárban.? Saját jegyzeteim 10. oldal

Készitsünk egy saját FillData() metódust, amely kitölti a listánkat az adatbázis adataival! Workspace/ClassView/BankView/(jobb egérfül)/add member function Function type: void Function declaration: FillData() Access: Public Megjegyzés: BankView.h class CBankView : public CListView // Implementation public: void FillData(); void FillHeader(); virtual ~CBankView(); BankView.cpp void CBankView::FillData() Ugyfel uf; CListCtrl* plist= &GetListCtrl(); CBankDoc* pdoc = GetDocument(); pdoc->executequery("select * from ugyfel;"); pdoc->movefirst(); for (int i=0; i<pdoc->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(); A GetDocument() egy, a dokumentumunkra mutató pointert ad vissza, így a dokumentu osztályban definiált metódusainkat ezen pointeren keresztül hívhatjuk meg. Rákapcs Rákapcsolódás az adatbázisra Módosítsuk a nézet osztály OnInitialUpdate() metódusát az alábbiak szerint BankView.cpp void CBankView::OnInitialUpdate() CListView::OnInitialUpdate(); // TODO: You may populate your ListView with items by directly accessing // its list control through a call to GetListCtrl(). pdoc->connectdatabase("bank","localhost","nacsa","1234"); FillHeader(); FillData(); Megjegyzés: A GetDocument() egy, a dokumentumunkra mutató pointert ad vissza, így a dokumentu osztályban definiált metódusainkat ezen pointeren keresztül hívhatjuk meg. 11. oldal

Lekapcsolódás az adatbázisról BankView.cpp void CBankView::OnFinalRelease() // TODO: Add your specialized code here and/or call the base class GetDocument()->ReleaseDataBase(); CListView::OnFinalRelease(); 6 Forditás/Futtatás? Saját jegyzeteim 12. oldal