Citat:
1. Kako da napravim da mi dugme izaberi knjigu bude nedostupno ukoliko se datum izdavanja (iz tabele "IznajmljeneKnjige" ne poklapa sa trenutnim datumom? Ovo se nalazi na formi frmIznajmljivanjeKnjige.
Na formin OnCurrent stavis nesto kao:
IF me!datumIzdavanja = date() then
me!DugmeIZaberiKnjigu.enabled = FALSE
ELSE
me!DugmeIZaberiKnjigu.enabled = TRUE
END IF
Ovo moze i u ejdnom redu da se napise, ali je ovako ajsnije sta se desava, a Accesu je ionako svejedno
Citat:
2. Šta treba da stavim na događaj OnCurrent da bi omogućio enable/disable dugmeta "Unesi oštećenja"?
Ovo se nalazi na formi frmIznajmljivanjeKnjige.
Ti sam znas koji je uslov za pojavljivanje dugmeta. Ostalo je kao u prethodniom pitanju
Citat:
3. Mogu li preko DAO recordset da proverim da li je za određeni primerak uneta pozicija knjige. Na primer da unesem kod za dugme "unesi poziciju" na formi frmKnjiga, da stavim if naredbu koja ispituje da li u tabeli "skladisniprostor" postoji slog koji u poljima "sifraizdanja" i "rednibrojprimerka" ima vrednosti kao primerak koji smo uneli na formi frmKnjiga. Ukoliko u tabeli "skladisniprostor" postoji takav slog onda bi obezbedio poruku da knjiga već ima unetu poziciju, u suprotnom bi otvorio formu frmSkladisniProstor.
Naravno da moze ali ne mora i ne treba to da se radi. Slucaju biblioteke, verovatno se ne bi osetila razlika, ali generalno razlika postoji, i to znacajna. O cemu se radi? Ti zelis da postignes ovo:
1. korisnik unese podatak
2. na BeforeUpdate za formu otvoris rekordset za "SELECT <nesto> FROM <tvoja tabela> WHERE <primary key> = <ono sto si uneso>"
3. Ako dobijes za recordset rs.count = 0 onda znaci da to sto si uneo u formu ne psotoji u tabeli
4. ako dobije sda rs.RecordCount <>0 onda znaci da podatak vec postoji u tabeli i onda treb da uradis Cancel = TRUE
Cancel je parametar za sub Form_BeforeUpdate i kad ga postavis na TRUE Access nece dozvoliti da se podatak posalje u tabelu.
5. ne zaboravi da zatvoris rekordset na kraju
Zasto ovo nije dovoljno dobro? Otvaranje rekorseta je skupa operacija, pogotovo na mrezi. AKo je verovatnoca da ce korisnik ukucati duplikat mala, onda nepotrebno proveravas svaki put i maltretiras i Access i mrezu. Sat te briga za Access i mrezu, mozes da kazes. jeste, ali to usporava rad. Uz to, mnogo ljudi zaborave da zatvore rekordset tako da konekcija ostaje otvorena i akd izadjes iz procedure. Pa za sledeci unos opet nova konekcija. U jednom momentu se Access zagusi. Za biblioteku ovo verovatno nije bitno, unos nije masovan i ti si pedantan decko tako da neces ostaviti otvoren rekordset. Medjutim, zamisli 10 kasa u samousluzi koje unos vrse skeniranjem. Tu se lako postizu brzine od 2-3 unosa po sekundi po masini, tako da se moze desiti d au jednom moment imas i 30 unosa u sekundi. E, sad Acces treba da otvori 30 konekciaj u sekundi i da ih zatvori. Tu se aplikacija zaglavi.
Sta da se radi? Da se ne proverava uopte dupliakt. Ako si lepo projektovao bazu, a jesi, onda imas PK na tabeli. PK znaci da tabela nece primiti duplikat, ma kako ga gurao kroz aplikaciju. Korisnik ce dobiti poruku na engleskom ili vec koji je jezik na inzstalaciji bio 'pokusavas d auneses duplikat u tabelu, to ne moze....' Ako poruka na tvom jeziku, posao je gotov, nsita ne moras da radis. na obuci im samo kazes 'ako pokusate da unesete duplikat, dobicete ovakvu poruku....' Ako dobijas poruku na jeziku koji korisnik en razume, ili ti se ne dopada poruka, onda poruku promenis. Kako? Za formu iams Form_Error event, U helpu za verzije Accessa do 2003 imas perfektan primer, koji upravo taj slucaj obradjuje - izmena poruke o duplikatu. Zasto Form_Error ebvent, a ne On Erro u recimo Form_BeforeUpdate. Zato sto pokusaj unosa duplikata u tabelu kroz formu nije run-time error, pa ga errro kod na formi nece ni huvatiti. To je vsie kao neka sistemsak greska, na visem nivou od forme, an nivou baze podataka. E neko je bio pametan dovoljno u timi a Access da nam omoguci hvatanje tih gresaka.
Iam i kombinovana situacija. nekad ti treba da znas gde je 'prva kopija' kad ti s pojavi duplikat na unosu. Sta onda radis? Na form_Error eventu uhvatis ovu gresku. Ako si uhvatio gresku, onda u tom istom form_error odradis pretrazivanje, kako smo gore opisali. ili pretrazivanje radis u nekoj funkciji koju pozoves iz Form_error, pa ti funkcija vrati vise popdataka, ne samo 'ovo je duplikat' nego 'ovaj podatak unesen je dana tog i tog u toliko i toliko sati na masini ...'
Komplikovano? Naravno d ajeste. Nisam uzalud upotrebio rec 'finese programiranaj u Accessu' Imas o ovome u Bazi znanja. Potrazi na forumu teme koje se bave Access greskama, nesto ce se pojaviti vec.