Pou₧itφ Data Environment Designeru ve VB 6.0

P°idßvßnφ zßznam∙

Obsah tabulky si nynφ ji₧ umφme vypsat. P°idßnφ zßznam∙ takΘ nenφ p°φliÜ slo₧itΘ. Nejprve je nutnΘ zalo₧it nov² formulß°, kter² bude slou₧it pro p°idßvßnφ zßznam∙. Tak₧e zalo₧te nov² formulß° a pojmenujte jej frmAdd. Na n∞j natßhn∞te ComboBox pro tituly a pojmenujte jej GetTitul. P°idejte t°i textboxy s nßzvy GetJmeno, GetPrijmeni a GetCislo. Samoz°ejm∞ nezapome≥te na tlaΦφtka Ok (OkButton) a Storno (CancButton). Formulß° by mohl vypadat p°ibli₧n∞ takto:

 

 

P°i tvorb∞ polφ doporuΦuji vyu₧φt vlastnosti MaxLength textboxu, do kterΘ si nastavte maximßlnφ mo₧n² poΦet znak∙, zadßvan²ch v poli. Tento poΦet by m∞l korespondovat s velikostφ pole nadefinovanΘho v tabulce, uÜet°φte si pozd∞jÜφ problΘmy s kontrolou dΘlky dat.

 

Na udßlost Form_Load formulß°e zapiÜte k≤d pro inicializaci polφ:

 

Private Sub Form_Load()

      GetTitul.AddItem " "
      GetTitul.AddItem "Ing."
      GetTitul.AddItem "MUDr."
      GetTitul.AddItem "RNDr."
      GetTitul.AddItem "Bc."
      GetTitul.AddItem "Mgr."

      GetTitul.ListIndex=0
      GetJmeno.Text = ""
      GetPrijmeni.Text = ""
      GetCislo.Text = ""

End Sub

Do hlavnφho formulß°e si p°iho∩te toolbar, pomocφ kterΘho budete volat jednotlivΘ formulß°e a ovlßdat dalÜφ akce. Asi takhle:

 

 

Na tlaΦφtko s p°idßnφm zßznamu dejte otev°enφ formulß°e pro p°idßnφ zßznamu:

 

frmAdd.Show vbModal

 

Parametr vbModal °φkß, ₧e okno bude naho°e a dokud ho nezav°ete, s jin²m oknem v aplikaci nep∙jde pracovat. Otestujte si projekt, zda se okno pro p°idßnφ otevφrß a naΦφtß se combo. 

 

Nynφ k zßkladnφmu ovlßdßnφ formulß°e. Je sluÜnost, ₧e po entru skoΦφ kurzor na dalÜφ pole, tak₧e na udßlost KeyPress prvk∙ napiÜte:

 

If KeyAscii = 13 Then
      SendKeys "{TAB}"
      KeyAscii = 0
End If

P°φkaz Keyascii=0 je tam proto, aby to nepφpalo. ProblΘm m∙₧e trochu nastat p°i zadßvßnφ Φφsla. Je t°eba zabrßnit, aby tup² u₧ivatel nezadal znaky, kterΘ nemß. Jsou dv∞ mo₧nosti - bu∩ pou₧ijete API funkci pro nastavenφ vlastnostφ Textboxu, nebo si na udßlosti Keypress pole GetCislo odfiltrujete klßvesy sami. Proto₧e je toto pouze uΦebnφ p°φklad, zde je velice jednoduch² filtr:

7

Private Sub GetCislo_KeyPress(KeyAscii As Integer)

   Select Case KeyAscii
      Case 48 To 57
      Case 13
         SendKeys "{TAB}"
         KeyAscii = 0
      Case Else
         KeyAscii = 0
   End Select

End Sub

KeyAscii vrßtφ hodnotu stisknutΘho znaku. Znaky 48 a₧ 57 jsou 0-9. Po entru (13) skoΦφme dßl a pro stisk jinΘ klßvesy ji zruÜφm (case else).

 

Je takΘ t°eba oÜet°i nep°φjemnΘ stavy p°i uklßdßnφ. Nem∞lo by se uklßdat prßzdnΘ p°φjmenφ a Φφslo. ╚φslo by navφc nem∞lo b²t duplicitnφ. VÜe se provede p°i udßlosti Click na tlaΦφtku Ok (OkButton). Pokud je test v po°ßdku, lze zßznam ulo₧it a ukonΦit zadßvacφ formulß°:

 

Private Sub OkButton_Click()

   Dim IndX As ListItem

   If Trim(GetPrijmeni.Text) = "" Then
      MsgBox "P°φjmenφ musφ b²t zadßno !!!", vbInformation + vbOKOnly,
      "Upozorn∞nφ"
      GetPrijmeni.SetFocus
      Exit Sub
   End If

   If Trim(GetCislo.Text) = "" Then
      MsgBox "╚φslo musφ b²t zadßno !!!", vbInformation + vbOKOnly,
      "Upozorn∞nφ"
     GetCislo.SetFocus
     Exit Sub
   End If

   De.rssSeznam.MoveFirst
   De.rssSeznam.Find "Cislo = '" + GetCislo.Text + "'"
   If Not De.rssSeznam.EOF Then
      MsgBox "Toto Φφslo ji₧ bylo ulo₧eno !!!", vbExclamation + vbOKOnly, 
     "Upozorn∞nφ"
     GetCislo.SelStart = 0
     GetCislo.SelLength = 20
     GetCislo.SetFocus
     Exit Sub
   End If

   With De.rssSeznam
      .AddNew
      !Titul = GetTitul.Text
      !Prijmeni = GetPrijmeni
      !Jmeno = GetJmeno.Text
      !Cislo = GetCislo.Text
      .Update
      .Close
      .Open
   End With

   Set IndX = frmMain.Seznam.ListItems.Add(, , GetPrijmeni.Text)
   IndX.SubItems(1) = GetJmeno.Text
   IndX.SubItems(2) = GetCislo.Text
   frmMain.Seznam.SelectedItem = IndX
   frmMain.Seznam.Sorted = True
   frmMain.Seznam.SelectedItem.EnsureVisible
   Unload Me

End Sub

Ke zjiÜt∞nφ duplicity. Pokud hledßte n∞jakou polo₧ku a nenφ nalezena, je ukazatel nastaven na EOF. Tak₧e p°i hledßnφ staΦφ pak otestovat tento parametr a vφte, jak jste dopadli. Zav°enφ (Close) a otev°enφ (Open) recordsetu slou₧φ pro aktualizaci (Pokud pφÜete sφ¥ovou aplikaci, je to obzvlßÜt∞ nutnΘ. O chyb∞ v metod∞ Requery u₧ jsem se zmi≥oval). Poslednφ °ßdky zajiÜ¥ujφ p°idßnφ novΘ polo₧ky do seznamu na hlavnφm formulß°i, jejφ zaΦlen∞nφ do t°φdφcφho po°adφ (Sorted=True) a nastavenφ, ₧e mß na nφ stßt kurzor a mß se celß zobrazit (EnsureVisible).

 DalÜφ Zp∞t

Autor: The Bozena