ı
Elemi alkalmazások fejlesztése IV.
Adatbázis-kezelés ActiveX vezérl kkel - 1
ADATBÁZIS-KEZELÉS ACTIVEX VEZÉRL K ALKALMAZÁSÁVAL I. ....................................................... 1 İ
ACTIVEX................................................................................................................................................................. 1 ACTIVEX CONTROL ................................................................................................................................................. 1 SAJÁT ACTIVEX VEZÉRL LÉTREHOZÁSA ................................................................................................................. 1 İ
circctrl.cpp....................................................................................................................................................................... 2
Háttérszín tulajdonság hozzárendelése a vezérl höz ............................................................................................ 2 Saját ActiveX vezérl regisztrálása...................................................................................................................... 3 Az ActiveX vezérl k használata............................................................................................................................ 4 Teszt projekt létrehozása ..................................................................................................................................... 4 ı
ı
ı
A Circ ActiveX Control vezérl elem beillesztése a Control eszköztárba............................................................................. 4 ı
ADATBÁZIS-KEZEL ALKALMAZÁS KÉSZÍTÉSE ACTIVEX VEZÉRL K HASZNÁLATÁVAL ............................................... 5 Projekt létrehozása ............................................................................................................................................. 5 ActiveX vezérl k beillesztése a projektbe ............................................................................................................. 5 A DBGrid Control és a Data Control vezérl k m ködése ..................................................................................... 6 Data Control attribútumok (Microsoft ADO Data Control Version 6.0 (OLEDB))................................................ 6 DBGrid attribútumok (True OLE DBGrid 8 Control)........................................................................................... 6 ActiveX vezérl k elhelyezése az alkalmazás ablakon ............................................................................................ 6 İ
İ
ı
ı
ő
ı
IDC_DATA_CONTROL beállítása................................................................................................................................... 7 IDC_GRID_CONTROL beállítása.................................................................................................................................... 7
Dinamikus táblacsere megvalósítása ................................................................................................................... 8 Összetett SQL parancsok végrehajtása ................................................................................................................ 9 SZABÓNÉ NACSA ROZÁLIA
Email:
[email protected] Honlap: people.inf.elte.hu/nacsa 2004. november
Adatbázis-kezelés ActiveX vezérl k alkalmazásával I. Ebben a munkafüzetben megismerkedünk „el regyártott” grafikus komponensek (ActiveX Control) használatával. ı
ActiveX Az ActiveX a Microsoft által kifejlesztett technológia család, amellyel megoldható a különböz alkalmazások közötti információ csere. Ez a technológia két, korábban alkalmazott technológiát ötvöz: OLE (Object Linking and Embedding); COM (Component Object Model). Az ActiveX technológia szabványa pontosan meghatározza, hogyan kell készíteni, és hogyan kell alkalmazni az ActiveX komponenseket. ı
ActiveX Control Az ActiveX Control az ActiveX technológia család egy speciális fajtája. Az ActiveX vezérl k a Windows grafikus alkalmazásainál megismert GUI vezérl khöz hasonlóan viselked komponensek. ı
ı
ı
Saját ActiveX vezérl létrehozása ı
Miel tt alkalmazni kezdenénk bármely adatbázis-kezeléshez készített, összetett ActiveX komponenst, nézzük meg, hogyan hozhatunk mi magunk létre egy egyszer , saját ActiveX vezérl t. ı
ő
ELTE Informatikai Kar
ı
1. oldal
Elemi alkalmazások fejlesztése IV.
Adatbázis-kezelés ActiveX vezérl kkel - 1 ı
Feladat: Készítsünk kört rajzoló grafikus vezérl t, melynek be lehet állítani a háttérszínét. ı
ActiveX projekt létrehozása File/New/Projects MFC ActiveC ControlWizard Projekt neve: Circ Platform: Win32 OK Finish OK A varázsló automatikusan létrehozza a vezérl höz szükséges osztályokat és fájlokat. ı
Osztály
Feladat
CCircApp
A main DLL forrás implementálása. Általában nem kell módosítani.
CCircCtrl
A vezérlıelem funkcióinak implementálása. Ide írjuk be a vezérlı specifikus kódot.
CCircPropPage
Sablon a tulajdonságlapok számára. Itt adjuk meg a vezérlı specifikus tulajdonságlapokat.
A CCircCtrl osztály OnDraw() függvénye alapértelmezésben egy kört rajzol, így akár azonnal lefordíthatjuk és használhatjuk a vezérl t. circctrl.cpp ı
void CCircCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid) { pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH))); pdc->Ellipse(rcBounds); }
Készítsünk eszközgombot a vezérl höz. A RecourceView Bitmap könyvtárában kattintsunk duplán az IDB_CIRC bejegyzésre, majd rajzoljunk egy tele kört az eszközgombra. Ezután fordítsuk le a programot. A projekt lefordítása után keressük meg a project debug/release könyvtárában a circ.ocx kiterjesztés fájlt. Ez a mi ActiveX Control komponensünk. ı
ő
H H H H
á á
á á
t t
t t
t t
t t
é é
é é
r r
r r
s s
s s
z z
z z
í í
í í
n n n n
t t
t t
u u u u
l l
l l
a a
a a
j j
j j
d d d d
o o o o
n n n n
s s
s s
á á
á á
g g
g g
h h h h
o o o o
z z
z z
z z
z z
á á
á á
r r
r r
e e
e e
n n n n
d d d d
e e
e e
l l
l l
é é
é é
s s
s s
e e
e e
a a
a a
v v v v
e e
e e
zz zz
é é
é é
r r
r r
l l
l l
ő ő ő ő
h h h h
ö ö ö ö
z z
z z
Legyen a háttérszín a vezérl egyik beállítható tulajdonsága (property). A háttérszín beépített tulajdonság (stock property), ezért nagyon könnyen hozzá tudjuk adni a vezérl höz. ı
ı
ELTE Informatikai Kar
2. oldal
Elemi alkalmazások fejlesztése IV.
Adatbázis-kezelés ActiveX vezérl kkel - 1 ı
View/ClassWizard/Automation fül Osztály neve: CCtrlCirc Add Property External name: BackColor Implementation: Stock OK/Close
Illesszük be a színkezel tulajdonságlapot a vezérl tulajdonságlapjai közé. CCircCtrl.cpp ı
ı
///////////////////////////////////////////////////////////////////////////// // Property pages // TODO: Add more property pages as needed. Remember to increase the count! BEGIN_PROPPAGEIDS(CCircCtrl, 2) PROPPAGEID(CCircPropPage::guid) PROPPAGEID(CLSID_CColorPropPage) END_PROPPAGEIDS(CCircCtrl)
Módosítsuk a rajzoló függvény viselkedését, majd fordítsuk le a programot. void CCircCtrl::OnDraw( CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid) { CBrush* pOldBrush; CBrush bkBrush(TranslateColor(GetBackColor())); CPen* pOldPen; // Paint the background using the BackColor property pdc->FillRect(rcBounds, &bkBrush); // Draw the ellipse using the BackColor property and a black pen pOldBrush = pdc->SelectObject(&bkBrush); pOldPen = (CPen*)pdc->SelectStockObject(BLACK_PEN); pdc->Ellipse(rcBounds); pdc->SelectObject(pOldPen); pdc->SelectObject(pOldBrush); } S
S
S
S
a a
a a
j j
j j
á á
á á
t t
t t
A
A
c
c
A
A
c
c
t t
t t
i
i
i
i
v v v v
e e
e e
X
X
X
X
v v v v
e e
e e
z z
z z
é é
é é
r r
r r
l l
l l
ő ő ő ő
r r
r r
e e
e e
g g g g
i
i
i
i
s s
s s
z z
z z
t t
t t
r r
r r
á á
á á
l l
l l
á á
á á
s s
s s
a a
a a
Ahhoz, hogy az alkalmazások készítésekor használhassuk ezt a vezérl elemet, regisztrálnunk kell. Vegyük fel a Circ ActiveX vezérl t (circ.ocx) a Microsoft regisztrált komponensei közé. Ehhez meg kell nyitnunk a Circ ActiveX projektünket, majd ki kell adni a Tools/Register Control parancsot. A felbukkanó üzenet jelzi, hogy a regisztráló megtalálta a circ.ocx komponenst, és azt fel is vette a regiszrált komponesek közé. ı
ı
Ett l a ponttól kezdve ezt a vezérl t ugyanúgy használhatjuk, mint bármely más „Windows-os” GUI vezérl t. ı
ı
ı
A Tools/ ActiveX Control Test Container segítségével azonnal tesztelhetjük is a vezérl nket. A Test Container kiválasztása után az Edit/Insert New Control paranccsal töltse be a tesztelni kívánt vezérl t, a Control/Invoke Methods paranccsal tesztelheti a vezérl metódusait. ı
ı
ı
Tesztelés után zárja be a projektet.
ELTE Informatikai Kar
3. oldal
Elemi alkalmazások fejlesztése IV. A
A
A
A
z z
z z
A
A
c
c
A
A
c
c
t t
t t
i
i
i
i
v v v v
e e
e e
X
X
X
X
v v v v
e e
e e
z z
z z
é é
é é
r r
r r
l l
l l
ő ő ő ő
k
k
k
k
h h h h
a a
a a
s s
s s
z z
z z
n n n n
á á
á á
l l
l l
a a
a a
t t
t t
a a
Adatbázis-kezelés ActiveX vezérl kkel - 1 ı
a a
Feladat: Készítsünk egy egyszer projektet, amelyben megtanuljuk, hogyan kell használni az ActiveX típusú komponenseket. ő
T
T
T
T
e e
e e
s s
s s
z z
z z
t t
t t
p
p
p
p
r r
r r
o o o o
j j
j j
e e
e e
k
k
k
k
t t
t t
l l
l l
é é
é é
t t
t t
r r
r r
e e
e e
h h h h
o o o o
z z
z z
á á
á á
s s
s s
a a
a a
Project/New/MFC AppWizard(Exe) Project neve: CircTest Single Document Printing - kikapcsolva Base Class: CFormView Finish/OK
A Circ ActiveX Control vezérl elem beillesztése a Control eszköztárba ı
Project/Add to Project/Component and Controls Registered ActiveX Controls könyvtár kiválasztása Circ Control kiválasztása Insert/Ok/Ok/Close
Vegyük észre, hogy a Control vezérl eszköztárán megjelent a Circ Control gombja. Helyezzünk el néhány Circ típusú vezérl t (kört) az rlapon, majd a „Tulajdonság” lap segítségével állítsunk be különböz háttérszíneket az egyes vezérl kön. ı
ı
ő
ı
ı
A Circ ActiveX projekt és a CircTest tesztel projekt letölthet a people.inf.elte.hu/nacsa/eaf4/project/Circ és a people.inf.elte.hu/nacsa/eaf4/project/CircTest címekr l. ı
ı
ı
ELTE Informatikai Kar
4. oldal
Elemi alkalmazások fejlesztése IV.
Adatbázis-kezelés ActiveX vezérl kkel - 1 ı
Adatbázis-kezel alkalmazás készítése ActiveX vezérl k használatával ı
ı
Feladat: Készítsünk egy olyan grafikus felület alkalmazást, amellyel rugalmasan kezelni tudjuk az Eaf projekt tábláit. A feladat megoldásához használjunk ActiveX vezérl ket. ő
ı
Az ActiveX vezérl k használatának az a célja, hogy a mások által és/vagy egy másik alkalmazással elkészített, jól letesztelt vezérl ket használjunk a programunk gyors elkészítése érdekében. A Microsoft Visual 6.0 fejleszt környezet rendelkezik saját adatbázis-kezelést támogató komponenssel. Ilyen komponens például a DBGridControl vezérl (C:\Widows\System32\DBGRID32.OCX), vagy a Microsoft Remote Data Control (C:\Windows\System32\MSRDC20.OCX) adatbázis-kezelést támogató vezérl . E két vezérl alkalmazása során azonban azt tapasztaltam, hogy üres táblázatok esetén nem jól m ködik az új rekord felvétele, ezért helyette a True DBGrid Pro 8.0 ActiveX vezérl t fogjuk használni. Ezt a vezérl t 30 napos kipróbálásra lehet letölteni. Letöltéshez regisztrálni kell a ı
ı
ı
ı
ı
ı
ő
ı
ı
http://www.logon-int.com/Product_Evaluate.asp címen, majd a levélben visszajelzett tdbgrid8_****.exe fájl végrehajtása után a vezérl bekerül a regisztrált ActiveX vezérl k közé, és az el z ekben bemutatott módon felhasználható. ı
ı
ı
ı
Megjegyzés: Természetesen, ha Önnek nem sikerül beszerezni az itt ismertetett ActiveX vezérl t, használja nyugodtan a Microsoft vezérl it, vagy bátran keressen más AciveX vezérl t a feladat megoldásához. Az adatbázis-kezelést támogató ActtiveX vezérl k használata és beállítása nagyon hasonlít egymáshoz. ı
ı
ı
ı
Projekt létrehozása Project/New/MFC AppWizard(Exe) Project name: ActiveTables Single Document Printing - kikapcsolva Base Class: CFormView Finish/OK
Forditás/Futtatás A projekt lefordítása után azonnal rendelkezésünkre állnak a legalapvet bb adatbázis navigáló funkciók. ı
ActiveX vezérlők beillesztése a projektbe Project/Add to Project/Component and Controls ELTE Informatikai Kar
5. oldal
Elemi alkalmazások fejlesztése IV.
Adatbázis-kezelés ActiveX vezérl kkel - 1 ı
Registered ActiveX Controls könyvtár kiválasztása True OLE DBGrid 8 Control kiválasztása - Insert/Ok/Ok Microsoft ADO Data Control Version 6.0 (OLEDB) kiválasztása - Insert/Ok/Ok Close ☺ Keresse meg a Control eszköztárban az új vezérl elemek gombjait. ı
A DBGrid Control és a Data Control vezérlők működése A Data Control kezeli, a DBGrid Control táblázatos formában megjeleníti az adatokat. A DBGrid az adatbázis felépítésére vonatkozó információt a Data Control vezérl t l kapja meg, és a kapott információk alapján automatikusan megjeleníti az adatbázis tábla oszlopait. ı
ı
Az alábbiakban felsoroljuk a két vezérl legfontosabb attribútumait és azok jelentését. ı
Data Control attribútumok (Microsoft ADO Data Control Version 6.0 (OLEDB)) General fül ID: A vezérl azonosítója Caption:: A vezérl felirata Visible: Látható, vagy nem látható a vezérl Control fül Source of Connection: Adatforrás beállítása Use ODBC Data source name: ODBC adatforrás neve Record Source fül Command type: Adatkijelölés módja: tábla; SQLszöveg ı
ı
ı
attribútumok DBGrid at tribútumok (True OLE DBGrid 8 Control) General fül ID: Caption: Visible: Tab stop: All fül Data Source
AllowAddNew AllowUpdate AllowDelete CursorLocation
A vezérl azonosítója A tábla cím felirata Látható vagy nem látható a tábla A Tab leütésekor itt meg kell-e állni ı
Ezen a helyen hozzárendelhetünk a táblázathoz egy „adatszolgáltatót”. Ekkor az adatszolgáltatóval együttmüködve jelennek meg az adatok a táblázatban. Új rekord felvételének tiltása/engedélyezése Rekord módosítás tiltása/engedélyezése Rekord törlés tiltása/engedélyezése Ezzel a beállítással arról dönthetünk, hogy a lekérdezett táblázat adatait a szerver oldalon (ott, ahol az adatbázis-kezel van), vagy a kliens oldalon (ott, ahol az alkalmazás fut), szeretnénk tárolni. Ezzel a beállítással arról dönthetünk, hogyan viselkedjen a adatbázisunk az adatok megváltoztatásakor, ha egyszerre több felhasználó is használja az adatbázist.(„Kinek a módosítása érvényes?”) ı
CursorType
ActiveX vezérlők elhelyezése az alkalmazás ablakon Helyezzünk el egy Microsoft ADO Data Control Version 6.0 (OLEDB) vezérl t és egy True OLE DBGrid 8 Control vezérl t az alkalmazás ablakra. A Data Control (adatvezérl ) az adatokért, a DBGrid Control az adatok táblázatos formában történ megjelenítésért felel. Ha a két vezérl t összekapcsoljuk, akkor a DBGrid az adatbázis felépítésére vonatkozó információt megkapja a Data Control vezérl t l, és a kapott információk alapján automatikusan megjeleníti z adatbázis tábla mez it. A vezérl k összekapcsolása után akár a megjelenített táblában, akár az adatokban történik változás, mindkét vezérl azonnal érzékeli azt. ı
ı
ı
ı
ı
ı
ı
ı
ı
ı
ELTE Informatikai Kar
6. oldal
Elemi alkalmazások fejlesztése IV.
Adatbázis-kezelés ActiveX vezérl kkel - 1 ı
IDC_DATA_CONTROL beállítása (Kattintsunk jobb egérfüllel a vezérl re és válasszuk ki a Properties menüpontot.) General fül ID: IDC_DATA_CONTROL Caption:: Adat vezérl Visible: true Control fül Source of Connection Use ODBC Data source name: Elemi alkalmazások fejlesztése Record Source fül Command type 2 – adCmdText Command Text(SQL): select * from csoport (A program indításakor a csoport tábla jelenik majd meg.) IDC_GRID_CONTROL beállítása (Kattintsunk jobb egérfüllel a vezérl re és válasszuk ki a Properties menüpontot.) General fül ID: IDC_GRID_CONTROL Caption: Adat tábla Visible: true Tab stop: true All fül Data Source IDC_DATA_CSOPORT AllowAddNew true AllowUpdate true AllowDelete true Split fül Split(00) ExtendedRightColumn: ı
ı
ı
Igazra állítva az utolsó (jobb oldali) oszlop kitölti a táblaméret jobb szélét.
Forditás/Futtatás A projekt lefordítása után azonnal dolgozhatunk a csoport táblázattal. Beszúrhatunk új rekordokat, ill. törölhetjük, módosíthatjuk azokat. Vegye észre, hogy a két vezérl a navigálás során összehangoltan m ködik. ı
ő
ELTE Informatikai Kar
7. oldal
Elemi alkalmazások fejlesztése IV.
Adatbázis-kezelés ActiveX vezérl kkel - 1 ı
táblacseree megvalósítása Dinamikus táblacser Feladat: Egészítsük ki a programot úgy, hogy gombokkal lehessen kiválasztani, melyik táblával szeretnénk dolgozni.
Az utolsó oszlop mögötti üres sáv eltüntetésére állítsuk be az ExtendedRightColumn opciót igazra. DBGrid Control módosítása: Split fül Split(00) ExtendedRightColumn: true Rendeljünk változót a Data Control (m_DataControl) és a DBGrid (m_GridControl) vezérl höz, azért, hogy a beállításokat programból is megadhassuk. ı
(ResourceView/Dialog/IDC_ACTIVETABLES_FORM/Ctrl+Dupla kattintás a Data Control-ra/Változó neve: m_DataControl)
A projekt különböz táblázatainak megjelenítéséhez helyezzünk gombokat az rlapra. ı
ő
IDC_DIAK (Caption: Diákok); IDC_CSOPORT (Caption: Csoportok); IDC_FELEV (Caption:Félévek); IDC_GYAKVEZ (Caption: Gyakorlatvezet k) ı
Az osztályvarázsló segítségével rendeljünk eseménykezel ket a gombokhoz, majd adjuk meg az eseménykezel k m ködését. ı
ı
ő
Activetablesview.cpp ///////////////////////////////////////////////////////////////////////////// // CActiveTablesView message handlers void CActiveTablesView::OnCsoport() { m_DataControl.SetRecordSource("select * from csoport"); m_DataControl.Refresh(); } void CActiveTablesView::OnDiak() { m_DataControl.SetRecordSource("select * from diak"); m_DataControl.Refresh(); } void CActiveTablesView::OnFelev() { m_DataControl.SetRecordSource("select * from felev"); m_DataControl.Refresh(); } void CActiveTablesView::OnGyakvez() { m_DataControl.SetRecordSource("select * from gyakvez"); m_DataControl.Refresh(); }
ELTE Informatikai Kar
8. oldal
Elemi alkalmazások fejlesztése IV.
Adatbázis-kezelés ActiveX vezérl kkel - 1 ı
Rejtsük el az adatvezérl t az alkalmazás ablakon. ı
Data Control beállításai (Property) General fül ID: IDC_DATA_CONTROL Caption: Adat tábla Visible: false
Összetett SQL parancsok végrehajtása Feladat: Összetett lekérdezések kezelésére helyezzünk el egy szövegdobozt az alkalmazás ablakon. Az „SQL parancs végrehajtása” gombra kattintva állítsuk át az adatforrást a szövegdobozban megadott SQL parancs szerint. Helyezzünk el egy gombot (IDC_SQL_EXECUTE- Caption: Sql parancs végrehajtása) és egy szövegdobozt (IDC_SQL_TEXT) az alkalmazás ablakon. Rendeljünk érték típusú változót (CString m_SqlText) a szövegdobozhoz. Az osztályvarázsló segítségével illesszük be a projektbe az IDC_SQL_EXECUTE gomb eseménykezel jét, majd adjuk meg az eseménykezel m ködését. ı
ı
ő
activetableviews.cpp void CActiveTablesView::OnSqlExecute() { UpdateData(); m_DataControl.SetRecordSource(m_SqlText); m_DataControl.Refresh(); }
Teszteljük az új funkciót! Íme egy lehetséges összetett Sql parancs: select tag.diak_id, concat(diak.nev,'[',diak.azon,']') diak_azon,tag.csoport_id,pont1,pont2,pont3,pont4 from tag,diak where tag.diak_id=diak.diak_id and csoport_id = 3
Forditás/Futtatás Vegyük észre, hogy a DBGrid vezérl módosítása nélkül, csupán az adatszolgáltató vezérl módosításával a DBGrid átkonfigurálta önmagát, és mindenkor az SQL parancs szerinti táblázatot jeleníti meg. Ha a lekérdezés eredménye egy „igazi” táblázat, lehetséges új rekord felvitele, módosítása és törlése. Összetett lekérdezések esetében nem lehet új sort beszúrn, ill. sorokat törölni még akkor sem, ha az AllowAddNew ill. az AllowDelete igazra lett állítva. ı
ELTE Informatikai Kar
ı
9. oldal
Elemi alkalmazások fejlesztése IV.
Adatbázis-kezelés ActiveX vezérl kkel - 1 ı
Megjegyzés: Az alkalmazás gyorsan elkészíthet , de nem minden esetben kényelmes. Sokkal egyszer bb lenne az adatok kezelése, ha pl. a gyakvez_id helyett a gyakorlatvezet nevét, félév_id helyett a félévet azonosító szöveget látnánk. Ilyen megoldásra az „Adatbázis-kezelés ActiveX vezérl kkel II.” munkafüzetben mutatunk példát. ı
ő
ı
ı
A munkafüzetben bemutatott példaprogram letölthet a people.inf.elte.hu/nacsa/eaf/eaf4/projects/activetables címr l. ı
ı
ELTE Informatikai Kar
10. oldal