Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Gde staviti Error Handler da bih "ulovio" sledeću grešku??

[es] :: Access :: Gde staviti Error Handler da bih "ulovio" sledeću grešku??

[ Pregleda: 480 | Odgovora: 2 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mika
NBG-ML

Član broj: 55
Poruke: 633
*.privsav.co.yu.



Profil

icon Gde staviti Error Handler da bih "ulovio" sledeću grešku??18.04.2005. u 14:20

Zdravo ljudi.

Moj problem je sledeći: Na formi za unos postoji nekoliko txt polja koji su mahom required, s obzirom da su polja za koja su ta polja bound-ovana, takođe required.

Ovo je napravljeno zbog kontrolisanog unosa podataka, integriteta baze itd. Međutim, da li je moguće izbegnuti dosadnu poruku (ili je bar izmeniti), kada korisnik unese podatke u neke od tih polja (dakle, ne unese podatke u sva polja koja su required tj. nema dovoljno podataka da se snimi ceo record), a korisnik pokuša da zatvori formu za unos; tada Access izbacuje poruku:

Code:
 The field txtPolje cannot contain a null value because the Required property for this field is set to true. 
Enter a value in this field.


...što je sasvim regularna poruka, međutim s obzirom da mi se ovo vrlo često dešava i iritira korisnike u (lagodnom ) radu, ja bih pokušao da ovu poruku izbacim, tj. da umesto nje odradim undo event i izađem iz forme. E sad, štos je u tome što ja nisam nikako uspeo da nađem koji od eventa mogu da presretnem da bih predupredio gornju poruku. Posle te poruke javlja se još jedna:

Code:
 You can't save record at this time.

MS Access may have encouraged an error while trying to save a record.
If you close this object now, the data changes may be lost.
Do you want to close the database object anyway?


...sa Yes i No dugmićima. Naravno i ova poruka je "normalna", tj. kaže lepo da korisnik ne bi trebao da zatvara formu, pre nego što je uneo kompletan rekord. Naravno, i ja bih ovu poruku da izostavim već da mi se odmah zatvori forma. Probao sam da na onClose i onUnload evente stavim hendlere, međutim poruka mi se javlja pre tih hendlera tako da su oni neupotrebljivi. Verovatno bi, u slučaju druge poruke pomogao neki doCmd.setWarnings False, ali ne znam ni njega gde da stavim??


Pozdrav, svaka pomoć je dobrodošla!
Bolje 100 godina biti milioner nego nedelju dana siromašak
(c) Alan ford
18.04.2005. u 14:20 

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 1705
*.eqao.com.



Profil

icon Re: Gde staviti Error Handler da bih "ulovio" sledeću grešku??18.04.2005. u 20:28
Odlicno pitanje :-) pravo majstorsko.

Standardan nacin - error handler u nekoj od event procedure nece pomoci. Zasto? Pa nijedna od gresaka koje se javljaju nije run time error. Postoje dva nacina generalno. Jedan je priblizan, drugi je tacan.

Priblizan nacin: Situacija moze da se ublazi tako sto prvo uocis koje su najcesce greske, u tvom slucaju 'ostavio je prazna polja koja su required'. Onda na formin BeforeUpdate event stavis kod koji proverava da li su u odredjenim kontrolama NULL vrednosti, na primer

sub MyForm_BeforeUpdate(cancel as integer)

IF isnull(me!kontrola_1) or me!kontrola_1=vbnullstring then
Cancel=TRUE
MsgBox "Polje Kontrola_1 je prazno! Molim unesite korektnu vrednost"
END IF

IF isnull(me!kontrola_2) or me!kontrola_2=vbnullstring then
Cancel=TRUE
MsgBox "Polje Kontrola_2 je prazno! Molim unesite korektnu vrednost"
END IF

'I ovakonsatavis, cela serija IF, jedan iz drugoga. Izbegavaj IF ELSEIF


end sub

Ako je makar i jedna kontrola NULL ili prazan string, interna procedurin parametar Cancel postaje TRUE i procedura ce na kraju - da CANCEL updates = rekord nece biti snimljen. Na isti nacin vsis validaciju ostalih kontrola i ostalih pravila. pogotovu onih pravila koje ne mozes da resis na nivou dizajna tabela. Mnogi ljudi prave gresku, ne stave u tabeli required=TRUE nego se oslone na validaciju u kodu i uvale se u nevolje. Tvoj kod mozda salje dosadne poruke korisnicima, ali su ti podaci cisti, sto jeste najvaznije. zahvaljujuci pametnom dizajnu, aplikacija posle nekoliko dana u produkciji pokaze gde treba raditi poboljsanja, a podaci ostaju neosteceni. Mnogo bolje nego otkriti posle tri meseca da su uneli mnogo NULL vrednosti gde ne bi trebalo da ih bude.


Tacan nacin:
Koristi form Error event. Imas lepo u helpu objasnjeno kako radi. Formin Error event lovi greske koje nisu Run-time. U helpu je primer sa unosom duplikata u PK. Ako znas numericki kod greske, mozes da kazes otprilike ovako:

Ako se javi greska 21305 prikazi poruku MsgBox "poruka na srpskom"
ili
Ako se javi greska 21305 ignorisi gresku i ne prikazuj nikakvu poruku
ili
Ako se javi greska 21305 prikazi sistemsku poruku

Moras da znas kod greske koju lovis unapred, sto nije tesko - popisi greske koje su dobili korisnici i jednostavno na forminom eventu Error prevedi poruke na srpski. U bazi znanja imas negde kod koji generise Access tabelu sa svim mogucim greskama, pa odradi to i pretrazuj malo po tekstu, dok nennadjes greske koje te interesuju.


Ne tvrdim da bilo koji od ova dva nacina ima absolutnu prednost u svim slucajevima. Uglavnom priblizan nacin resava problem, jer je to deo neke generalne validacije. Ja sam u praksi koristio tacan nacin da lovim duplikate samo jednom. Trebalo mi je da na tabeli od 300,000 rekorda utvrdim tacnu poziciju duplikata. Posto je to bilo 1997 godine, kompjuteri su bili spori i kod tipa
"proveri pri svakom unosu da li je uneta vrednost duplikat"
je jednostavno bio prespor. Zato nisam ni proveravao, jer 99% posto vremena uneti podaci su bili OK, nisu bili duplikati. Ako bi se desio duplikat, onda bi ga moj Form Error event ulovio, i ja bih onda aktivirao kod koji pretrazuje tabelu i nalazi poziciju 'originala'. I brzina unosa (skeniranje bar kodova) je skocila sa 20 u minutu na 70 u minutu, ili drugacje, umesto dve nedelje posao je zavrsen za manje od nedelju dana.

:-)


:-)
18.04.2005. u 20:28 

mika
NBG-ML

Član broj: 55
Poruke: 633
*.privsav.co.yu.



Profil

icon Re: Gde staviti Error Handler da bih "ulovio" sledeću grešku??19.04.2005. u 07:50
Ex, nisam ni sumnjao da će Zidar da odgovori na moje pitanje :)

Da li mi veruješ da sam jurio na posao da bih pročitao tvoj odgovor? Ne veruješ? E pa, kada budeš dolazio u Bg, javi se - vodim te na večeru! Toliko puta si mi pomogao da je to najmanje što mogu da uradim!

Ja stvarno imam mnogo knjiga za Access, što papirnih izdanja, i više u elektronskom formatu, ali - što reče neko - više mi znači jedan tvoj odgovor nego kada bih pročitao sve te knjige (u kontekstu da verovatno ni tad ne bih našao rešenje).

Naravno, ovo implementiram odmah, a tebi se neizmerno zahvaljujem! I zapamti - ono za dolazak u Bg ostaje!
Bolje 100 godina biti milioner nego nedelju dana siromašak
(c) Alan ford
19.04.2005. u 07:50 

[es] :: Access :: Gde staviti Error Handler da bih "ulovio" sledeću grešku??

[ Pregleda: 480 | Odgovora: 2 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.