Serißl - 10. dφl
Databßze - 2. Φßst
14. Databßze
14.2 DatabßzovΘ ovlßdacφ prvky
DBList a DBCombo
DBGrid
CheckBox
14. Databßze
14.2 DatabßzovΘ ovlßdacφ prvky
V tΘto Φßsti vßm ukß₧eme, jak pracovat s prvky, kterΘ jsou navr₧eny p°φmo pro prßci
s databßzemi pomocφ prvku Data. Mezi nejvφce pou₧φvanΘ pat°φ DBList, DBCombo a DBGrid.
Prvnφ dva prvky najdete standardn∞ v menu Project -> Components, polo₧ka Microsoft
Data Bound List Controls, DBGrid si musφte nakopφrovat a zaregistrovat z instalaΦnφho
CD Visual Basicu. Najdete jej v adresß°i COMMON\TOOLS\VB\CONTROLS. Musφte jej zkopφrovat
do adresß°e WINDOWS\SYSTEM, zaregistrovat pomocφ RegSvr32.exe a jeÜt∞ spustit soubor
DBGRID.REG (z CD), kter² p°idß do registru pot°ebnΘ informace.
DBList a DBCombo
Tyto prvky jsou v podstat∞ obdodbou sv²ch nedatabßzov²ch prot∞jÜk∙ ListBoxu a ComboBoxu.
Rozdφlem mezi nimi je prßv∞ ÜirÜφ podpora databßzφ. DBList a DBCombo umo₧≥ujφ
zobrazit ve svΘm seznamu polo₧ky z celΘho sloupce tabulky. Tento sloupec se
nastavuje vlastnostmi RowSource (Data prvek) a ListField (sloupec tabulky).
Pro p°φklad si vytvo°te nov² projekt, na formulß° vlo₧te prvek Data a DBList, prvku
Data nastavte DatabaseName na databßzi, kterou najdete v p°φkladu na konci tΘto kapitoly a
RecordSource na tabulku Zamestnanci. Prvku DBList nastavte RowSource
na Data1 (nßzev Data prvku) a ListField na sloupec prijmeni. Po spuÜt∞nφ
projektu se DBList naplnφ daty ze sloupce prijmeni.
╚asto je vÜak pot°eba (zrovna u v²Üe uvedenΘho p°φkladu je to vhodnΘ) zobrazit vedle
sebe vφce sloupc∙, nap°. p°ijmenφ i jmΘno. To lze realizovat pou₧itφm SQL dotazu. Jako ukßzku
pozm∞nφme v²Üe uveden² p°φklad. Do vlastnosti RecordSource napiÜt∞ tento SQL dotaz:
SELECT prijmeni & " " & jmeno AS pj FROM zamestnanci
Tento dotaz spojφ pole prijmeni a jmeno v jedno, ktere se bude jmenovat pj. Toto pole
potom zadßte do vlastnosti ListField prvku DBList. Po spuÜt∞nφ projektu
se v DBListu zobrazφ nejen prijmeni ale i jmeno odd∞lenΘ mezerou.
Na dalÜφm p°φkladu si vysv∞tlφme, k Φemu lze pou₧φt vlasnosti DataSource ,
DataField a BoundColumn . Do databßze p°idßme jeÜt∞ jednu
tabulku, kterß bude slou₧it k evidenci plat∙ zam∞stnanc∙. Obsahuje pole id_zam (primßrnφ
klφΦ v tabulce zamestnanci), mesic, rok a plat. V p°φkladu p∙jde o to, vlo₧it zam∞stanci
plat za urΦit² m∞sφc a rok.
Vytvo°te si nov² projekt, na formulß° umφst∞te jeden prvek DBCombo (dbcZamestananec), dva ComboBoxy
(cboMesic a cboRok), TextBox (txtPlat), dva CommandButtony (cmdPridat a cmdSmazat)
a dva prvky Data (datZamestnanci a datPlaty). Nastavte
jejich vlastnosti takto:
datZamestnanci |
DatabaseName |
data.mdb |
datZamestanci |
RecordSource |
SELECT id, prijmeni & " " & jmeno AS pj FROM zamestnanci ORDER BY prijmeni, jmeno |
datZamestnanci |
Visible |
False |
datPlaty |
DatabaseName |
data.mdb |
datPlaty |
RecordSource |
platy |
dbcZamestnanec |
RowSource |
datZamestnanci |
dbcZamestnanec |
ListField |
pj |
dbcZamestnanec |
BoundColumn |
id |
dbcZamestnanec |
DataSource |
datPlaty |
dbcZamestnanec |
DataField |
id_zam |
cboMesic |
DataSource |
datPlaty |
cboMesic |
DataField |
mesic |
cboRok |
DataSource |
datPlaty |
cboRok |
DataField |
rok |
txtPlat |
DataSource |
datPlaty |
txtPlat |
DataField |
plat |
cmdPridat |
Caption |
P°idat |
cmdSmazat |
Caption |
Smazat |
Do formulß°e vlo₧te tento k≤d:
Private Sub Form_Load()
Dim i As Long
For i = 2000 To 2100
cboRok.AddItem i
Next i
For i = 1 To 12
cboMesic.AddItem i
Next i
End Sub
Private Sub cmdPridat_Click()
datPlaty.Recordset.AddNew
End Sub
Private Sub cmdSmazat_Click()
datPlaty.Recordset.Delete
datPlaty.Refresh
End Sub
V udßlosti Form_Load musφme naplnit seznamy pro rok a m∞sφc. V udßlostφch
Click tlaΦφtek je k≤d pro p°idßnφ a smazßnφ zßznamu, to u₧ znßte z minulΘ Φßsti.
Program funguje nßsledovn∞:
Prvek cboZamestnanci mß nastaveno, ₧e se v seznamu zobrazφ p°φjmenφ a jmΘno zam∞stnance z prvku
datZamestnanci (tabulka zamestnanci). P°i p°idßnφ vÜak chceme ulo₧it Φφslo (id) zam∞stnance
do tabulky platy (datPlaty). Proto je nastaveno DataSource na datPlaty a
DataField na id_zam. Aby prvek v∞d∞l, co mß ale ze svΘho seznamu uklßdat, kterΘ pole,
°ekneme mu to nastavenφ vlastnosti BoundColumn na sprßvn² sloupec, tj. id.
U dalÜφch prvk∙ u₧ je to jasnΘ. Nastaveno je v₧dy datPlaty a p°φsluÜn² sloupec. Cel² p°φklad
si m∙₧ete i zkopφrovat (POZOR!!! Aby p°φklad fungoval,
musφte v n∞m znovu nastavit vlastnosti DatabaseName obou Data prvk∙. Pokud je toti₧ databßze
nastavena pomocφ okna Properties, ulo₧φ se i s cestou, kterou budete mφt urΦit∞ jinou).
Zp∞t na obsah
DBGrid
Prvek DBGrid slou₧φ k zobrazenφ celΘho Recordsetu z prvku Data. Z toho vypl²vß, ₧e narozdφl
od ostatnφch prvk∙ se nastavuje pouze vlastnost DataSource . DataField
prvek ani nemß. Jako p°φklad jsme zvolili zobrazenφ tabulky plat∙ (z databßze zam∞stananc∙) a to tak,
₧e v °ßdcφch je v₧dy jeden rok, ve sloupφch jednotlivΘ m∞sφce. V bu≥kßch potom v₧dy plat
za m∞sφc a rok. V p°φkladu je pro jednoduchost vybrßn zam∞stnanec s Φφslem 26, samoz°ejm∞
₧e v reßlnΘ aplikaci je t°eba reagovat na zam∞stnance vybranΘho nap°. v DBListu.
Vytvo°te nov² projekt a umφst∞te na n∞j Data prvek a DBGrid. Vlastnost DataSource
prvku DBGrid nastavte na data prvek. Zbytek nastavenφ si tentokrßt provedeme v k≤du:
Private Sub Form_Load()
datPlaty.DatabaseName = App.Path & "\data.mdb"
datPlaty.RecordSource = _
"TRANSFORM Sum(platy.plat) " & _
"SELECT platy.rok, " & _
"Sum(platy.plat) As Plat_celkem " & _
"From platy " & _
"WHERE id_zam=26 " & _
"GROUP BY platy.rok " & _
"PIVOT platy.mesic"
End Sub
╚asto se takΘ stßvß, ₧e Recordset Data prvku musφ obsahovat vφce sloupc∙, ne₧ chcete zobrazit.
T°eba proto, ₧e pot°ebujete mφt jedineΦn² identifikßtor zßznamu, ale nechcete jej zobrazovat
(u₧ivateli takovΘ Φφslo nic ne°φkß). Proto m∙₧ete pot°ebnΘ sloupce skr²t. Chcete-li skr²t nap°φklad
prvnφ sloupec DBGridu ve v²Üe uvedenΘm p°φkladu, musφte do udßlosti Form_Load
p°idat tento k≤d:
datPlaty.Refresh
dbgPlaty.Columns(0).Visible = False
Zp∞t na obsah
CheckBox
CheckBox sice nenφ prvek navr₧en² specißln∞ pro databßze, ale uvßdφme jej zde pro jeho
specifickΘ pou₧itφ. Je toti₧ ideßlnφm prvkem pro editaci sloupc∙ typu Boolean.
Mßme nap°. tabulku se zam∞stnanci. Ty je t°eba evidovat i v p°φpad∞, kdy₧ u₧ nejsou
zam∞stnanφ. Proto je vhodnΘ p°idat do tΘto tabulky sloupec nap°. platnost, kter² bude
typu boolean a bude evidovat, zda je zam∞stnanec v pracovnφm pom∞ru. Nastavenφ
vlastnostφ je stejnΘ jako nap°. u TextBoxu, tedy pouze DataSource a
DataField .
Zp∞t na obsah
|