Microsoft Office Access
uređuje Branislav Mihaljev, MVP

 Office Praktikum | Mapa sajta 

 
Bookmark and Share
Matična strana sajta
Novo na sajtu
Mapa sajta
Beleške
Knjiga posetilaca
Kontakt

Prethodna stranica
Pretraga sajta
Pretraga MSKB

Blog Praktikuma
RSS feed 
 
Office Praktikum

Još o Accessu
 


Skoro svakodnevno slušamo
  Radio Paradise:
  eklektični muzički online radio bez reklama!
 

   

Sponzori sajta

  Connectivity by SBB
 
Connectivity by SBB

 

Informacije

NOVOSTI
Novi prilog o Wordu
Tri nova autorska članka
Četiri priloga o Accessu
Opis i uputstvo za alatku YuCirLat '08 (Word)

SADRŽAJ ZA PREUZIMANJE
YuCirLat '08 unapređena alatka za konverziju kodnih rasporeda u Wordu

SKREĆEMO PAŽNJU
Beleške: B(l)oga li ti tvoga!- prilog koji će nekog možda čak i da naljuti
Kako pretraživati MSKB
* a pronaći ćete i još mnogo novih sadržaja...

USKORO SERIJA ČLANAKA O OFFICEU 2010

POZIVAMO VAS
* i prenesite svoja iskustva. Najbolji prilozi će biti objavljeni.



  (C) 2000-2009 Praktikum na Webu
 

Aspekti pretrage

Nivo:  NIVO 3 - klinite za objašnjenje


Pretraživanje je uobičajena i sasvim laka operacija u bazama podataka, zar ne? Nažalost, možda i nije: da bi pretraživanje bilo optimalno i efikasno, morate poznavati pojedinosti u kojima govorimo ovog puta.

Postoji nekoliko načina za pronalaženje i izmenu vrednosti tabele. Da biste pronašli prvi, poslednji, prethodni ili sledeći zapis koji odgovara zadatom kriterijumu, koristite metode FindFirst, FindLast, FindPrevious i FindNext, respektivno. Jednu od ovih metoda možete upotrebiti uz uslov da ste prethodno definisali konekciju ka bazi i skup zapisa (Recordset). Ukoliko se po zadatom kriterijumu ne može pronaći zapis, program će prikazati poruku sa greškom. Grešku možete presretnete ispitivanjem vrednosti osobine NoMatch: ukoliko ona ima pozitivnu vrednost, zapis ne postoji. Lociranje zapisa nije dovoljno, te se uz Find metode koriste i Move metode - MoveFirst, MoveLast, MovePrevious i MoveLast - kako biste se premestili na zapis u kome se nalazi tražena vrednost.

Upotreba Find metoda nije naročito efikasna ukoliko se skupu zapisa pristupa DAO bilbiotekom i Jet mašinom, posebno ako je skup zapisa ogroman. Skupu zapisa se može pristupiti direktno i bez Jet mašine (posredstvom sloja ODBCDirect), ali u tom slučaju metode Find ili Seek nisu dostupne, jer se pretraga kroz mrežno okruženje obavlja veoma sporo. Preporuka je da su u ovom slučaju koristi SQL struktura sa izrazima ORDER, BY i WHERE. Ukoliko za kriterijum navodite datum, on mora biti strogo u američkom obliku (mesec-dan-godina), a za pretvaranje drugih oblika datuma u američki koristite komandu Format:

'Pretraga sa preformatiranjem
'datuma u U.S. format
rst.FindFirst "Datum = #" _
  & Format(MojDatum, 'm-d-yy' ) & "#"

Broj sa decimalama takođe morate preformatirati tako da se decimalni deo odvaja tačkom, a ne zarezom. Sve ovo morate učiniti bez obzira na regionalna podešavanja vašeg računara i bez obzira na verziju Jet mašine koju imate instaliranu. Ukoliko se u traženom polju nalaze posebni znakovi kao što je npr. #, ogradite znak uglastim zagradama: "sadržaj[#]" pronalazi polje koje ima vrednost "sadržaj#".

Metodu Seek koristite radije nego Find, jer radi mnogo brže:

' Brže traži vrednost "123"
'
Function BrzoNadji()
 Dim db As DAO.Database
 Dim rst As DAO.Recordset

 Set db = CurrentDb()
 Set rst = db.OpenRecordset( _
   "VelikaTabela", DB_OPEN_TABLE)
 rst.Index = "PrimarniKljuc"
 rst.Seek "=", 123
 Debug.Print rst("IDKupac")
 tbl.Close
End Function

' Sporije traži vrednost "123"
'
Function SporoNadji()
 Dim Kriterijum As String
 Dim db As Database
 Dim rst As Recordset

 Set db = CurrentDb()
 Set rst = db.OpenRecordset( _
  "VelikaTabela", DB_OPEN_DYNASET)
 Kriterijum = "[IDKupac] =" & 123
 rst.FindNext Kriterijum
 Debug.Print rst("IDKupac")
End Function

Osim skupa zapisa morate definisati i polje indeksa po kome se pretraga obavlja, a možete navesti do 13 indeksa. Seek pronalazi jedinstven indeks, odnosno prvi ako se vrednost polja ponavlja, pa odmah premešta aktivnu poziciju na pronađeni zapis. Za kriterijum =, > ili >=, pretraga se obavlja unapred i obratno: za kriterijume < ili <=, pretrega se obavlja unatrag. Kao i kod metode Find, možete ispitivati vrednost osobine NoMatch i presresti grešku ukoliko se traženi zapis ne pronađe. Metodu Seek možete upotrebiti i na višeindeksnom polju, odvajajući parametre zapetom:

rst.Seek "=", 123, 321

Drugi parametar nije neophodan, a ako dodeljujete samo jednu vrednost parametra umesto znaka jednakosti, tada upotrebite >=.

Funkciju DLookup možete upotrebiti u VBA ili u makro programu za pronalaženje zapisa u okviru domena ili skupa zapisa. Njoj morate pridružiti najmanje dva parametra: izraz i domen, dok parametar kriterijuma nije obavezan. Rezultat rada funkcije je vrednost jednog polja skupa zapisa, čak i kada postoji više istih vrednosti. Ukoliko se zapis ne može pronaći, funkcija vraća vrednost Null. Zgodan primer upotrebe je sledeći:

'Zaglavlje izveštaja ispisuje naziv firme
=DLookUp("[naziv]";"tblFfirma")

Postavite u zaglavlju svih izveštaja jedne baze nevezano polje i prenesite u njega ovaj sadržaj. Bez obzira na izvor podataka, na svakom izveštaju će se ispisivati sadržaj polja tabele tblFirma koji sadrži osnovne podatke o firmi, kao što su naziv, adresa, telefon ili PIB broj.

Čitalac Dragan Macura se javio sa sledećim problemom. Koristio je metodu Seek u Accessu 2000 i posle dobrog testiranja baze razdvojio je na BackEnd i FrontEnd delove uz pomoć ugrađenog čarobnjaka. Nakon toga, svaka pretraga metodom Seek je rezultirala greškom. Konstanta dbOpenTable ne funkcioniše na vezanim ili pridruženim tabelama, a program prijavljuje grešku Run-time error '3219': Invalid Operation. U Accessu se konekcija ka tabeli može uspostavljati samo kada se ona tretira kao objekat Recordset. U slučaju kao kod našeg čitaoca, program je prijavljivao drugu grešku: Object variable or with block variable not set, što je ukazivalo na neispravno definisanu konekciju, kako je i sam čitalac primetio:

'Pravilno konektovanje vezane tabele
'
Public Function testLink()
Dim db As DAO.Database
Dim rst As DAO.Recordset

 ' Konekcija ka bazi
Set db = _
  DBEngine.Workspaces(0).OpenDatabase("Northwind.mdb")
' Skup zapisa
Set rst = _
  myDb.OpenRecordset("Customers", dbOpenDynaset)
End Function

 

  (C) 2000-2009 Praktikum na Webu

PC 103


 
 

Vrh stranice  Prethodna stranica  Naslovna strana  Mapa sajta  Pretraga

AFORIZAM ZA DANAS OVIH DANA SLUŠAMO...

Copyright © Praktikum na Webu, 2000-2009; Valinor Design; sva prava pridržana.