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
 

Saveti za efikasan rad, drugi deo - VBA

Nivo:  NIVO 2 - klinite za objašnjenje


Život čine male stvari, a efikasan rad počiva na sitnicama.

Sadržaj

Problem programera-početnika u Accessu je sintaksa naredbi koja se koristi u Visual Basicu. Generalna preporuka je da, ako ne želite da prevrćete ogromne knjige samo da biste našli kako se sabiraju časovi, zapisujete ili ukucavate u jedan tekst fajl po jedan primer za svaku primenu. Bez obzira na to da li vam primer koristi u datom trenutku, ovo prikupljanje primera će vam višestruko uštedeti vreme kad nešto zapne samo zbog sintakse. Recimo, ono što me stalno muči i nikako da zapamtim (naravno dok nisam počeo da zapisujem primere na posebno mesto) je kako postaviti filter za otvaranje izveštaja.

Kao po pravilu, redom probam sledeće kombinacije:

DoCmd.OpenReport "GamFix", _
    acViewPreview, , ([Date] > forms![19992000]![OD])

DoCmd.OpenReport "GamFix", _
    acViewPreview, , '[Date] > forms![19992000]![OD]'

DoCmd.OpenReport "GamFix", _
    acViewPreview, , '([Date] > forms![19992000]![OD]'

od kojih, naravno, ni jedan ne radi. Prava kombinacija glasi:

DoCmd.OpenReport "GamFix", _
    acViewPreview, , "[Date] > forms![19992000]![OD]"

Dakle, filter za otvaranje izveštaja treba ograditi navodnicima, dok znakovi uzvika znače da se referencira polje sa maske-forme (pogledajte objašnjenje u prvoj grupi saveta o efikasnom radu u Accessu ).

Neki od sledećih saveta sadrže primere koje možete iskoristiti za svoju "knjigu beležaka primera" za rad sa Visual Basicom.

(nazad na sadržaj)

Sabiranje časova

Sabiranje časova zna da bude muka u Accessu, jer ako postavite dva polja Data/Time u tabeli i njih poželite da saberete tako da rezultat uvek bude u časovima, sigurno nećete dobiti to što želite - ne bar dok ukupan zbir ne prelazi 24 časa. Za razliku od Excela, Accessovo polje Data/Time je ograničeno na realno vreme kod koga sekunde i minute mogu ići samo do 60, časovi samo do 24 itd. Ako želite da saberete, recimo, 23:00 časa i 02:00 časa rezultat neće biti očekivanih 25:00 časova, već će u polju pisati 01:00. Access jednostavno ne sabira časove kako vi želite, pa se mora pribeći stalnoj konverziji - časove pretvarajte u decimalni zapis. Uz ovaj savet prilažem jedan od primera za vašu beležnicu. Časovi se sabiraju na sledeći način:

Me!UkVreme = Me!Vreme1 + #02:00:00#

Ovaj primer na Vreme1 dodaje dva časa i smešta ga u polje UkVreme.

(nazad na sadržaj)

Undo ili Cancel?

Iako rade slične stvari razlike postoje: Cancel zabranjuje snimanje sloga (record), a Undo uklanja unete podatke (vraća pređašnje stanje).

(nazad na sadržaj)

Pretvaranje praznog polja u vrednost 0

Kada u polju tabele ne stoji ništa, to ne znači da je vrednost tog polja nula, te se kao takvo ne može sabrati sa nekim brojem. Prilažem funkciju koja će prazna polja određene tabele popuniti nulama:

Sub FillDown(ByVal strTable As String, _
 strSequenceField As String,
 strFillThisField As String)
' Pretvara Null polja u polja sa vrednošću 0

Dim rst As recordset, varHold As Variant
Set rst = _
   CurrentDb.OpenRecordset("SELECT * FROM " & _
   strTable & " ORDER BY " strSequenceField & _
   ";", dbOpenDynaset) 

Do Until rst.EOF
  If IsNull(rst(strFillThisField)) Then
      rst.Edit
      rst(strFillThisField) = varHold
      rst.Update
   Else
      varHold = rst(strFillThisField)
   End If
   rst.MoveNext
Loop

rst.Close
Set rst = Nothing

End Sub

Funkciju pozovite sa:

FillDown "table1", "Auto#", "Field1"

(nazad na sadržaj)

Forma sa List-boksom automatski selektuje prvu vrednost

Po otvaranju forme sa list-boksom, Access očekuje da kliknete na neko polje u okviru liste kako bi prikazao ostale podatke koji se filtriraju upravo na osnovu vrednosti iz liste. Zgodna stvar je da se po otvaranju forme automatski selektuje prvo polje. U događaju GotFocus list-boksa ubacite sledeći kod:

Me!lstBox.ListIndex = 0

(nazad na sadržaj)

Kumulativan zbir (Running Sum) u izveštaju Accessa

Running Sum je polje u izveštaju koje daje kumulativan zbir, kao što to pokazuje sledeći primer:

stavka količina ukupno
(running sum)
stavka 1 12 12
stavka 2 23 35
stavka 3 89 124
stavka 4 52 176

Prilažem kod koji ćete čuvati u modulima kao funkciju:

Private Function GetRunningSum(pvarItemNo As Variant)
' Funkcija Running Sum

Dim varResult as Variant, rst As Recordset
Dim CurSum As Currency

If Isnull(pvarItemNo) then
   varResult = Null
Else
   set rst = Me.RecordsetClone()
   with rst
      .MoveFirst
      Do until .Eof or !ItemNo > pvarItemNo
         curSum = curSum + ![Sum]
         .MoveNext
      Loop
      varResult = curSum
   end with
End If

GetRunningSum = varResult

End function

 U polju u kome vam treba ovakva suma, za Control Source upišite

"=GetRunningSum([ItemNo])"

pod pretpostavkom da je ItemNo broj i da je jedinstveno polje u čitavoj tabeli.

(nazad na sadržaj)

Izdvajanje slogova se delom teksta u upitu

Sem što upit izdvaja podatke iz tabele ili više njih, ponekad je potrebno i dodatno izdvojiti slogove u kojima se pojavljuje deo reči (Any Part Of Field).

Uzmimo za primer da imate bazu iz koje treba izdvojiti samo one slogove u kojima se pojavljuje reč "Preduzeće". U dizajn modu upita, u polju Criteria upišite *Preduzeće* i biće izdvojeni samo oni slogovi kod kojih bilo gde u tom polju postoji reč "Preduzeće".

(nazad na sadržaj)

Autofill polja kod unosa

Funkcija Autofill radi tako da kad započnete unos i pritisnete prvo slovo ili cifru polje se dopunjava sa prvom, već unetom vrednošću. Ovo se, takođe, može rešiti bez programiranja. Polje za koje želite da ima funkciju Autofill promenite u ComboBox, RowSource mu postavite na polje iz tabele odakle potiče i postavite mu visinu na 1.

(nazad na sadržaj)

"Pokvarena" baza

Ako ste jedan od onih srećnika kojima je "pukla" baza i gotovo više ništa se ne može uraditi sa njom (nakon što ste već pokušali Repair i Compact), ostaje vam da pokušate čuveni nedokumentovani trik: pokrenite Access iz komandne linije sa parametrom /decompile. Npr:

c:\<putanja_do_Accessa>\Access.exe baza.mdb /decompile

(nazad na sadržaj)

 

  (C) 2000-2009 Praktikum na Webu

Branislav Mihaljev, april-jun 2000.


 
 

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.