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