[ Srxon @ 19.03.2013. 18:22 ] @
Imam jedan problem, ali u sličnim temama ga nisam mogao rešiti.
Kako da me msgbox upozori po napuštanju trećeg polja da zapis sa istim podacima već postoji.
Imam polje ID i on se ne ponavlja, ali po unosu podatka u treće polje da mi javi da u sva tri polja postoje isti zapisi.
Evo postaviću primer pa će biti jasnije.
[ Dexxxl @ 19.03.2013. 18:54 ] @
Otvori tabelu u dizajn modu
klikni na dugme indexes(nalazi se omah desno do kljuca na meni baru
u prvoj koloni (Index Name) upisi neki naziv (bilo koji)
u drugoj (Field name) izaberi prva
U redu ispod nje dodaj druga
U redu ispod nje dodaj treca
postavi unique na yes
[ Srxon @ 19.03.2013. 19:07 ] @
Super, to je ono što mi treba.
Negde sam video još da umesto ovog windows-ovog msbox stavim svoje "upozorenje", moram da potražim.
Hvala Dexxxl.
[ Zidar @ 19.03.2013. 21:24 ] @
Imas ovde http://www.elitesecurity.org/t447412-0#3072885
Otkucaj u Pretraga (Ovog forume) ovo "Form Error Event" bez navodnika i dobices mnogo starih tema gde smo o tome govorili. A ime negde i u temi "Baza Znanja"

:-)
[ srdjan ub @ 19.03.2013. 21:28 ] @
npr. na on exit polja postavis sledeci kod:

Private Sub prva_Exit(Cancel As Integer)
Dim prva As String

prva = Me![prva]

If IsNull(DLookup("[prva]", "Table1", "[prva]= '" & prva &"'")) = False Then
Me![prva].Undo ' Ponistava vrednost unetog polja
DoCmd.RunCommand acCmdUndo ' ponistava unos sloga
Cancel = True
MsgBox "Pod nazivom polja " & prva & " imate unete podatke", vbCritical, "Paznja"
'DoCmd.FindRecord Nova_sifra 'nadje i prikaze slog sa sifrom koja je pokusana da se duplo unese
' varijanta kada su dostupni svi slogovi ,a ne samo novi
End If
End Sub


' Napomena: Vazi samo za podatke tipa text
[ Srxon @ 19.03.2013. 21:49 ] @
Hvala svima na pomoći
[ izonic @ 20.03.2013. 19:30 ] @
Code:
Private Sub Form_Error(DataErr As Integer, Response As Integer)
Select Case DataErr

Case 3022
MsgBox "Ovaj red podataka je vec unesen"

Case Else

MsgBox "Greska Br: " & DataErr & vbCr _
   & Err.Description

End Select
Response = 0
End Sub
[ Zidar @ 21.03.2013. 13:37 ] @
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 :-)