Barvna shema: Temna
Trenutno dejavna stran: start » sl » Dokumentacija » Orodja za Microsoft Access » WKL Forms Object Library » Aplikacija in povezave » WklTimerList » Iskanje po seznamu med tipkanjem

Iskanje po seznamu med tipkanjem

Zgradite obrazec, katerega seznam strank se filtrira 400 ms po zadnjem pritisku tipke, števec odprtih sej pa se osveži vsakih 30 sekund. Oboje teče na enem kontrolniku WklTimerList; zanka DoEvents in časovnik obrazca nista potrebna.

Predpogoji

  • Microsoft 365 Access ali okolje Access Runtime, v 32- ali 64-bitni različici, s knjižnico WKL Forms Object Library 1.60 ali novejšo različico, nameščeno in registrirano za trenutnega uporabnika sistema Windows (Namestitev izdanega paketa).
  • Tabela tblStranke s poljema ID (Število, primarni ključ) in Name (Kratko besedilo) ter nekaj zapisov; tabela tblSeje s poljema ID (Število, primarni ključ) in Odprta (Da/Ne).

Koraki

1. Vstavite kontrolnike

V pogledu načrta ustvarite obrazec frmIskanje z naslednjimi kontrolniki:

  • polje z besedilom txtIskanje,
  • polje s seznamom lstStranke (vrsta vira vrstic Tabela/poizvedba, dva stolpca, širina prvega stolpca 0),
  • polje z besedilom txtOdprte,
  • seznam časovnikov: Načrt obrazca › Kontrolniki › Kontrolniki ActiveX, WKL Timer List, z imenom Timer1. V pogledu načrta prikazuje svoje ime, v pogledu obrazca pa je neviden.

2. Določite obe nalogi

Naloge se shranijo z obrazcem. Enkrat jih določite s kodo v pogledu načrta: proceduro prilepite v standardni modul in jo zaženite iz okna Immediate (SetupSearchTasks). Oblikovalnik kontrolnika (list z lastnostmi, zavihek Drugo, vrstica Po meri, [...], stran Naloge) vsebuje iste nastavitve v tabeli.

Public Sub SetupSearchTasks()
    Dim t As Object
    On Error GoTo ErrorHandler
 
    DoCmd.OpenForm "frmIskanje", acDesign
    Set t = Forms("frmIskanje").Controls("Timer1").Object
    t.Tasks.Clear
    t.Tasks.Add "search"
    t.Tasks("search").Delay = 400        ' 400 ms after the last Restart
    t.Tasks.Add "count"
    t.Tasks("count").Interval = 30000    ' every 30 seconds
    DoCmd.Close acForm, "frmIskanje", acSaveYes
 
FinalHandler:
    Set t = Nothing
    Exit Sub
 
ErrorHandler:
    MsgBox Err.Description, vbExclamation
    Resume FinalHandler
End Sub

3. Napišite dogodkovne procedure

Odprite modul obrazca frmIskanje in dodajte:

Option Compare Database
Option Explicit
 
Private Sub Form_Load()
    On Error GoTo ErrorHandler
 
    ShowCustomers ""
    Me!Timer1.Object.Tasks("count").Start
    Me!Timer1.Object.Tasks("count").Trigger   ' count once at once, then every 30 seconds
 
FinalHandler:
    Exit Sub
 
ErrorHandler:
    MsgBox Err.Description, vbExclamation
    Resume FinalHandler
End Sub
 
Private Sub txtIskanje_Change()
    On Error GoTo ErrorHandler
 
    ' Every key press starts the 400 ms again; only the last one leads to a search.
    Me!Timer1.Object.Tasks("search").Tag = Me!txtIskanje.Text
    Me!Timer1.Object.Tasks("search").Restart
 
FinalHandler:
    Exit Sub
 
ErrorHandler:
    MsgBox Err.Description, vbExclamation
    Resume FinalHandler
End Sub
 
Private Sub Timer1_TaskDue(ByVal Key As String, ByVal RunId As Long, ByVal Tag As Variant, Cancel As Integer)
    On Error GoTo ErrorHandler
 
    Select Case Key
        Case "search": ShowCustomers Nz(Tag, "")
        Case "count": Me!txtOdprte = DCount("*", "tblSeje", "Odprta = True")
    End Select
 
FinalHandler:
    Exit Sub
 
ErrorHandler:
    ' A repeating event: note the error instead of showing a dialog every 30 seconds.
    Me!txtOdprte = "?"
    Resume FinalHandler
End Sub
 
Private Sub ShowCustomers(ByVal text As String)
    Me!lstStranke.RowSource = "SELECT ID, Name FROM tblStranke WHERE Name LIKE '" & Replace(text, "'", "''") & "*' ORDER BY Name"
End Sub

4. Preizkusite

Odprite frmIskanje v pogledu obrazca in v txtIskanje hitro vnesite ime: seznam se med tipkanjem ne spreminja in se filtrira enkrat, 400 ms po vašem zadnjem pritisku tipke. V tblSeje nastavite odprto sejo na Da in počakajte: txtOdprte v 30 sekundah prikaže novo število.

Pričakovani rezultat

Seznam se filtrira enkrat ob vsakem premoru v tipkanju, števec pa se osveži vsakih 30 sekund, tudi kadar je odprto okno s sporočilom obrazca (naslednja izvedba počaka, da se procedura konča; ne izgubi se). Ko se obrazec zapre, se obe nalogi končata; noben dogodek ne pride več.

Naslednji koraki

sl/wiki/msaccess/comctl/application-and-connections/timer-list/tutorial.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille