Interaktivna pretraga u formi u AccessuNivo:
NIVO 3 - Prilozi na ovom nivou su namenjeni naprednim korisnicima, onima koji se
već dobro snalaze u programima i onima koji već imaju iskustva u naprednim tehnikama. Ovom nivou pripadaju preporuke i trikovi koje
bi trebalo da savlada svako ko teži dugotrajnom i efikasnom radu u Office programima.
U Accessu ne postoje valjani alati za pretraživanje, pa je dobro
da se napravi takav alat, tako da radi tačno po ideji projektanta baze.
Ovaj problem nije od juče, a i suviše se često javlja - kako da korisniku baze
obezbedite da pretražuje brzo, a istovremeno po svim poljima u jednoj velikoj
tabeli bez obzira na broj slogova i broj polja u slogu. Naki DataBase alati nude
ovu mogućnost i bez programiranja, dok se u Accessu nudi uglavnom samo
filtriranje.
Filtriranja su vam uvek na raspolaganju, ali je zadavanje parametara filtriranja
isuviše trapavo. Evo kompletnog i univerzalnog rešenja za primenu
interaktivnog pretraživanja u Access formi oblika Datasheet.
Kreirajte formu oblika Datasheet, a neka njen Record Source bude neka veća
tabela ili upit sa što većim rezultujućim setom.
Unesite sledeći kôd u modul kôda ove forme:
Option Compare Database
Option Explicit
Public FT As String, MyTimer As Integer
Private Sub Form_Load()
Me.OrderBy = "" 'poništava prethodno sortiranje
MyTimer = 2000 'postavlja tajmer na 2 sekunda
End Sub
Private Sub Form_Timer()
' Ovaj tajmer obezbeđuje
' poništavanje traženja na 2 sekunde
' od završenog prethodnog pretraživanja
Me.TimerInterval = 0
FT = ""
SB "Poništeno traženje"
End Sub
Svojstvo forme Key Preview postavite na Yes.
Ostala svojstva podesite na sledeći način:
Allow Edits: False
Allow Filters: True
Allow Updating: No
AllowAdditions: False
AllowDeletions: False
FilterOn: False
Record Locks: No Locks
RecordsetType: All Records
Kreirajte Class Modul, pa u njega upišite sledeći kôd:
Option Compare Database
Option Explicit
Public Function LookMyText(MyForm As Form, _
myField As String, LookFor As
String, _
FromTop As Integer) As Boolean
Dim bookmark As String
Dim rs As Object
Dim FoundMatch As Integer
Dim FindCriteria As String
If MyForm.OrderBy <> "[" & myField & "]"
Then
SB "Sortiranje u toku ..."
MyForm.OrderBy = "[" & myField & "]"
MyForm.OrderByOn = True
End If
' PA®NJA:
' ako koristite Access 2000, sledeći red zamenite sa
' Set rs = MyForm.RecordsetClone
' priloženo rešenje radi u Accessu 97!
Set rs = MyForm.RecordsetClone
FindCriteria = "[" & myField & "]" & _
" LIKE
""" & LookFor & "*" &
""""
If FromTop Or Len(LookFor) < 2 Then
MyForm.RecordsetClone.FindFirst FindCriteria
Else
MyForm.RecordsetClone.FindNext FindCriteria
End If
SB "TRA®ITE " & MyForm.ActiveControl.ControlName & _
"
na: " & UCase(LookFor)
MyForm.bookmark = MyForm.RecordsetClone.bookmark
If Not (MyForm.RecordsetClone.NoMatch) Then
LookMyText = True
Else
SB "NE postoji više " & _
MyForm.ActiveControl.ControlName &
_
" na: " & UCase(LookFor)
LookMyText = False
End If
End Function
Public Function SB(X As String)
'Funkcija obezbeđuje ispis teksta u Status Bar-u
Dim Y As Variant
If Len(X) > 0 Then
Y = SysCmd(acSysCmdSetStatus, X)
Else
Y = SysCmd(acSysCmdClearStatus)
End If
End Function
Obratite pažnju u
kodu: ako koristite Access 2000,
trebalo bi da u listingu promenite
RecordsetClone u Recordset.Clone (DAO u ADO).
Sačuvajte kreirane objekte i isprobajte.
Pretraživanje se obavlja prema polju (koloni) u kojoj se nalazite i čim
otkucate neki tekst (ili broj). Treba napomenuti da će forma najpre biti
sortirana prema polju po kome se pretražuje, a tek potom će biti nađen (ili
ne) slog u kojem polje zadovoljava dati uslov. Podrazumeva se pretraživanje
prema početnim znacima u polju, a korišćenjem džokerskih znakova *
i/ili ? može se obezbediti i pronalaženje bilo kojeg dela podatka
(unutrašnji ili završni deo teksta). Pri korišćenju džokerskih znakova sortiranje neće
obezbediti lakše pretraživanje (teško ga je osmisliti).
Radenko S. Mikanović, septembar 2000. |
|