Zidar Canada
Moderator Član broj: 15387 Poruke: 3085 *.100.46-69.q9.net.
|
Resenje sa Form_Error je bolje nego ono drugo predlozeno, sa Polje_OnExit. Evo zasto:
Tabela koja se stiti od duplog unosa vec ima Primary Key ili UNique index koji ne dozvoljava dupli unos (bez ikakvog programiranja, ovo je na nivou tabele). Resenje sa Polje_OnExit trazi da se pri SVAKOM unosu trazi uneta vrednost u tabeli, "If IsNull(DLookup("[prva]", "Table1", "[prva]= '" & prva &"'")) = False...". Dupli unosi u praksi su retka stvar, ili bar ne tako cesta. Dlookup je SPORA operacija. Na 20 rekorda se sporost ne primeti, ali na 200,000 se primeti i te kako. Znaci, usporili smo unos da bi jednom u 50 puta uhvatili duplikat, koji ionako ne bi prosao, samo da bi dali prevedenu poruku.
Resenje sa Form_Error radi ovako:
Nema pretrazivanja u nekim BeforeUpdate ili OnExit eventima. Rekord se podnosi programu za upis. Ako nema drugih gresaka, Access pokusava da upise rekord u tabelu. Ako tabela prihvati rekord (a prihvatice ga ako nije duplikat), sve je OK, ne pokazuje se poruka i nista se ne desava. Ako tabela ne prihvati unos zbog moguceg duplikata, desava se "Case 3022 MsgBox "Ovaj red podataka je vec unesen...". Znaci, nema nikakvog pretrazivanja, a poruka se pojavljue kad treba. Slican problem se javlja kad se naruse FOREIGN KEY - unosis artikl koji ne postoji u sifraniku. To se resava na slican nacin, dodavanjem nove linije u "Select Case DataErr.." blok. Ne znam tacno koji je broj greske u pitanju, ima u Bazi Znanja negde kod koji lista sve greske, pa potrazis i nadjes i primenis.
I usput, Kontroal_OnExit nije mesto z ana nekoliko mesta i tesko se odrzava.
Ako smo profesionalci, budimo pravi profesionalci i koristimo profesionalne metode :-)
|