Microsoft Office Access
uređuje Branislav Mihaljev, MVP

Bookmark and Share
Matična strana sajta
  Novo na sajtu
  Mapa sajta
  Beleške
  Kontakt
  Pretraga MSKB

 Blog Praktikuma
  RSS feed
  P@W @Tw

  Izvezi stranicu u PDF
 
Office Praktikum

Još o Accessu
 


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

 
       

Sponzori sajta

SBB CS 1.6 game server: 82.117.200.1
 
Connectivity by SBB

 
Suština pasijansa
Suština pasijansa
 


 

Informacije

NOVOSTI

I još dva nova priloga o Excelu
Novi prilozi o Wordu
Novi i prilozi u temi "razno o Officeu"
Novi članci o novostima u Officeu 2010!

SADRŽAJI ZA PREUZIMANJE

Lokalizacija Total Commandera 7.51Obe jezičke školjke za popularni program na srpskom sad funkcionišu u bilo kojoj varijanti Windowsa!
RNDalica.ExcelDodatak za Excel 2007/2010 za generisanje slučajnih podataka!
YuConv.ExcelDodatak za Excel 2007/2010 za konverziju pisama!
YuConvNetDodatak za Word 2007/2010 za konverziju pisama i kodnih rasporeda!

SKREĆEMO PAŽNJU

Kako pretraživati MSKB
a pronaći ćete i još mnogo novih sadržaja...

KONTAKT

Da li znate za pravila koja važe pri kontaktu sa nama? Molimo vas da se obavestite o tome!
 
POZIVAMO VAS

i prenesite svoja iskustva. Najbolji prilozi će biti objavljeni.

  (C) 2000-2010 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-2011 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-2011; Valinor Design; sva prava pridržana.