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