|
Microsoft Office Access |
|
|
Automatsko popunjavanje poljaNivo:
Tokom unošenja podataka u bazu podataka, često se vrednosti nekih polja ponavljaju. Operator se može poslužiti funkcijama kopiranja i umetanja podataka sa Clipboarda tako što će prvo uneti podatak, iskopirati njegov sadržaj i umetnuti ga na narednom zapisu. Ova tehnika će pomoći samo kod jednog polja, jer kada operater iskopira drugi podatak na Clipboard, prethodni biva zanemaren. Moguća alternativa je da se koristi poboljšani Office Clipboard, koji može da pamti više podataka. U aplikacijama se ova mogućnost uobičajeno ukida, tako da tehnika pomaže samo kod jednog podatka. Napomena: Ovaj prilog je pretrpeo izmene i dopune u maju 2008. godine. Pri dizajniranju tabele ili formulara možete se poslužiti osobinom DefaultValue i unapred zadati vrednost koja će se pojaviti u polju novog zapisa. U zavisnosti od vrste polja, možete zadati konkretan podatak ili formulu. Na primer, za polje definisano kao datum možete zadati funkciju Date(): kada korisnik pređe na novi zapis, u ovom polju će biti umetnuta vrednost tekućeg datuma. Takođe, često se dešava da se podaci ne unose tog datuma kada se događaj odigrao. U situaciji kada se npr. poslednjeg radnog dana u nedelji unose podaci za celu prethodnu nedelju, upotreba osobine DefaultValue podešene na automatsko popunjavanje tekućim datumom polja će pomoći na, grubo rečeno, petini unosa podataka; to onda nije dobar posao. Bilo kakav da je podatak koji se ponavlja, nije teško da korisniku olakšate unos. Pretpostavimo da se na slogu koji se popunjava korisničkim formularom nalazi nekoliko polja u kojima korisnik često unosi iste podatke, i to za veći broj slogova. Sadržaj podataka se ne može unapred predvideti kako biste se poslužili osobinom DefaultValue. Tu osobinu ćemo iskoristiti na "inteligentniji" način: kada korisnik popuni prvi zapis, osobini DefaultValue polja ćemo pridružiti vrednost polja koje je upravo popunjeno. Na događaj BeforeUpdate polja postavite sledeću komandu: Me.fldNazivPolja.DefaultValue = _ Chr(34) & Me.fldNazivPolja.Value & Chr(34) Napomena: Ovaj red programskog koda je podeljen u dva zbog preloma na stranici; slobodno ga unesite kao jedan red. Naravno, tada će donja crta biti suvišna. Pre nego što vrednost polja bude zapisana u bazu podataka, osobini DefaultValue ćemo pridružiti vrednost polja. Kada korisnik pređe na novi zapis, sadržaj te osobine će biti pridružen polju. To će ubuduće važiti za svaki novi zapis, sve dok korisnik ne unese drugu vrednost polja, koja u tom času postaje nova podrazumevana vrednost polja. Ako je reč o datumu, u određenim slučajevima će biti potrebno da vrednost fldNazivPolja.Value ogradite znacima tarabe (#), tako da desni deo iskaza glasi: = "#" & Me.fldNazivPolja.Value & "#" Kod regionalnih postavki u kojem se datum prikazuje u obliku dd.mm.yyyy (separator datuma je tačka), primećen je problem iako je naizgled sve u redu. Uzmimo primer da ste otkucali datum 13.12.2008 u polje datuma i upotrebili gornju naredbu. Access će postaviti podrazumevanu vrednost #13.12.2008# u osobinu DefaultValue, ali ćete videti grešku #Name kada pređete na novi zapis. Međutim, ako ručno upišete #13.12.2008# u osobinu DefaultValue, to će raditi. Problem je na strani VBA programa koji ne poznaje format datuma drugačiji od američkog, gde je separator dana, meseca i godine znak "/". Univerzalno rešenje je da upotrebite sledeću sintaksu: Datum.DefaultValue = "#" & Day(Datum) & "/" & _ Month(Datum) & "/" & Year(Datum) & "#" Prethodna tehnika zahteva od programera da za svako zasebno polje svakog formulara zada komandu za dodeljivanje vrednosti osobini DefaultValue. Postoji li mogućnost da se uz pomoć određene funkcije i lako prenesu vrednosti prethodnog sloga na novi unos? Uz upotrebu sledeće funkcije možete preneti vrednosti određenih polja na novi zapis, i to bez potrebe da korisnik unese neku vrednost prvi put.
' Funkcija automatskog
' popunjavanja polja novog zapisa
'
Function AutoFillNewRecord(F As Form)
Dim RS As Recordset
Dim C As Control
Dim FillFields As String
Dim FillAllFields As Integer
On Error Resume Next
If Not F.NewRecord Then Exit Function
Set RS = F.RecordsetClone
RS.MoveLast
If Err <> 0 Then Exit Function
FillFields = ";" & F! _
[AutoFillNewRecordFields] & ";"
FillAllFields = Err <> 0
F.Painting = False
For Each C In F
If FillAllFields Or InStr(FillFields, _
";" & (C.Name) & ";") > 0 Then
C = RS(C.ControlSource)
End If
Next
F.Painting = True
End Function
Prenesite funkciju u postojeći ili novi modul, a zatim otvorite formular na koji želite da je primenite. Pređite na karticu događaja i događaju OnCurrent pridružite sledeću komandu: =AutoFillNewRecord([Forms]![frmNazivForme]) Pre nego što samouvereno postavite ovu funkciju na sve formulare svoje aplikacije, ipak najpre malo razmislite. Postavite se u ulogu operatera unosa i razmislite o sledećem: kada je podrazumevana vrednost od pomoći, a kad nije? Ponekad je bolje da neka polja budu inicijalno prazna, a da pritom ne dozvolite da ona takva i ostanu; logička kontrola je ponekad dugoročno mnogo korisnija za obezbeđenje tačnosti podataka nego što je to prosta pomoć pri unosu. Zato, prilikom korišćenja ove tehnike bi bilo najbolje da se skoncentrišete na pojedinačna polja, i to na osnovu praktičnih uzoraka koje ćete prepoznati ako budete neko vreme sedeli pored operatera unosa.
|
|
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. |