You are on page 1of 9

Access

Provera da li postoji vec unet broj rachuna


[ http://www.elitesecurity.org/t287035 ]

Is Your Biz Efficient?


Why You Need BPS, Not ERP To Win. Free EGuide- Download It Today.
[ obradorriuss @ 30.09.2007. 17:11 ] @
Zanima me kako je po Vama najlakse napraviti na Event On_Exit polja recimo "Broj rachuna"
na dokumentu, da ukoliko se unese broj rachuna isti kao shto vecj postoji (vec je unet u
bazu), a znamo da to ne bi smelo, da program javlja greshku i da ne dozvoljava da se zapis
sachuva, bez prikaza greshaka na engleskom jeziku, vecj pomocju MsgBox-a?
Mozda je po vama bolje postaviti i na neki drugi Event polja?

I zanima me kako da kod pregleda rachuna, postavim neki C heckBox koji cje po defaultu biti
na False vrednosti, i on da omogucjava da sva polja u formi budu zakljuchana, sve dok se
njegova vrednost ne postavi na True?
Konkretno, ako korisnik zeli da pregleda koji je rachun izdao, unsese broj rachuna, program
mu otvori formu sa isfiltriranim zapisom, i da mu onemogucji da nista promeni na vecj
izdatom rachunu dok ne otkachi check box i izbaci mu program jedno upozorenje da od
momenta kada je ukljuchio C heckBox, zapis moze da se edituje. I ponovo kada se zapis
zakljucha (vrednost check box-a se postavi na False) da se sva polja ponovo zakljuchaju...
Hvala
Pozdrav

[ Getsbi @ 30.09.2007. 20:30 ] @


1. Ako je broj racuna recimo numerik moglo bi ovako:

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Code:
Private Sub Form_BeforeUpdate(C ancel As Integer)
Dim Nova_sifra As Long
If IsNull([BrojRacuna]) Or [BrojRacuna] = 0 Then
MsgBox "Morate uneti broj racuna", vbC ritical, "Paznja"
Me![BrojRacuna].SetFocus
Exit Sub
End If
Nova_sifra = Me![BrojRacuna]
If IsNull(DLookup("[BrojRacuna]", "Tabela", "[BrojRacuna]=" & Nova_sifra)) = False Then
Me![BrojRacuna].Undo ' Ponistava vrednost unetog polja
DoC md.RunC ommand acC mdUndo ' ponistava unos sloga
C ancel = True
MsgBox "Pod brojem " & Nova_sifra & " imate unete podatke", vbC ritical, "Paznja"
Me![BrojRacuna].SetFocus
End If
End Sub
2. Recimo ovako:
Code:
Private Sub C heck5_AfterUpdate()
If Me![C heck5] = False Then
Me.AllowEdits = False
Me![text1].Locked = True
Else
Me.AllowEdits = True
Me![text1].Locked = False
End If
End Sub

' editovanje svih polja na formi


' zakljuavanje pojedinanog polja

Postavi C heck box da bude prvi na formi pre ostalih kontrola sa Tab Order. Ovo nisam isprobavao sa nevezanom kontrolom na formi. Ako ne ide okai
primer. Mislim da bi kontrolisanje dostupnosti polja na formi trebalo da bude van nje same. Najbolje je dodati polje u tabeli koje e da se ispituje.

[Ovu poruku je menjao Getsbi dana 01.10.2007. u 06:45 GMT+1]

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

[ mkaras @ 01.10.2007. 08:15 ] @


Ako u tabeli indeksira polje BrojRacuna sa opcijom bez duplikata onda es se reiti duplih unosa bez obzira ta je broj rauna, numerik,datum ili text. U
On Error dogaaju same forme presretni obavetenje o dupliranju podataka i obavesti korisnika.

[ obradorriuss @ 01.10.2007. 14:00 ] @


Hvala pre svega na odgovorima. Kombinacijom Getsbi-jevog koda i zamenom funkcije DLookup u f-ju DC ount dobijamo:
1. Duplirane vrednosti sam reshio na ovaj nachin:
Code:
Private Sub RacunBr_BeforeUpdate(C ancel As Integer)
Dim Nova_sifra As String
Dim stLinkC riteria As String
Nova_sifra = Me.RacunBr.Value
stLinkC riteria = "[RacunBr]=" & "'" & Nova_sifra & "'"
If DC ount("RacunBr", "tbl_IzdavanjeRacuna", stLinkC riteria) > 0 Then ' Praktichno ukoliko se u tabeli prebroje vishe od jednog zapisa prijavljuje gresku
Me![RacunBr].Undo ' Ponistava vrednost unetog polja
'DoC md.RunC ommand acC mdUndo ' ponistava unos sloga
C ancel = True
MsgBox "Pod brojem " & Nova_sifra & " imate unete podatke!", vbC ritical, "Paznja"
End If
End Sub

Ovo sam morao da postavim na OnExit jer na Event Before Update nece da radi.
Code:
Private Sub IzdavanjeBr_Exit(C ancel As Integer)
If IsNull([RacunBr]) Or [RacunBr] = 0 Then
MsgBox "Morate uneti broj racuna!", vbC ritical, "Paznja"
Me.RacunBr.SetFocus
Exit Sub
End If
End Sub

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

2. Zakljucavanje polja i njihovo editovanje


Code:
Private Sub Form_Open(C ancel As Integer)
DoC md.GoToRecord , , acLast

' odlazi na poslednji zapis (moje potrebe)

Me![PoDokumentu].Locked = True
Me![Datum].Locked = True
Me![RacunBr].Locked = True
Me![Dobavljac].Locked = True

' zakljucavanje pojedinacnog polja

End Sub

Code:

Private Sub C heck5_AfterUpdate()


If Me![C heck5] = False Then
Me.AllowEdits = False
' editovanje svih polja na formi
Me![PoDokumentu].Locked = True
' zakljucavanje pojedinacnog polja
Me![Datum].Locked = True
Me![RacunBr].Locked = True
Me![Dobavljac].Locked = True
Else
Me.AllowEdits = True
Me![PoDokumentu].Locked = False
Me![Datum].Locked = False
Me![RacunBr].Locked = False
Me![Dobavljac].Locked = False

' zakljucavanje pojedinacnog polja

End If
End Sub

Dakle, kada se uchita forma sa isfiltriranim zapisom(ima), sve je zakljuchano i ne moze nista da se menja. Klikom na C heckBox5, otkljuchavaju se sva
polja i editovanje se dozvoljava i zapis moze da se sachuva pomocju dugmeta na formi SAC HUVAJ (
Code:
DoC md.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
). Medjutim, ako ponovo zakljucham dugme, tj. onemogucjim editovanje polja i kliknem na dugme SAC HUVAJ, izbacuje neku greshku, kao i to shto vishe
ne mogu da menjam vrednost dugmeta C heckBox5...

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Mozda mora da se presrecje negde greshka, ali ne vidim razlog svemu tome??
Neka ideja?

[ Zidar @ 01.10.2007. 14:17 ] @


The best code is no code at all - ZIdareva teorema o programiranju :-)
Verujem da imas unique index na BrojRacuna pa je u stvari nemoguce uneses duplikat. Sta te muci jeste poruka koja se javi na engleskom o unetom
duplikatu.
Jedan ancin da se to razresi jeste programiranjem, otprilike onako kako ti je Getsbi savetovao. U principu je BeforeUpdate za formu mesto gde se to radi,
pa odradis C ANC EL=TRUE plus poruka na srpskom i nist se nece sacuvati, a sve ce biti jos uvek na ekranu. Medjutim, tu ima problem. Taj kod ce se
odraditi za absolutno svaki pokusaj unosa ili promene. Kad ti baza poraste, moze biti sporo, a imas i kod da pises.
Predlazem da odes na form events, prondjes Form_Error event i odes u HELP. Tamo ima izvanredan primer kako se love greske tipa 'duplikat','ne
postojeci rekord u parent tabeli' i slicno. Prme r pokazuje upravo za slucaj duplikata kako spreciti pojavljivanje Accessove poruke i umesto nje ubaciti
tvoju poruku. A to je upravo ono sto ti treba. Probaj, pa ako ne ide, pomoci cemo.
Istina je da i ovde ima da se pise kod, ali bar pokriovas vise slucajeva i kod absolutno ne zavisi od imena tabela i polja. Tabele se i ne spominju kad se
kodira FORM_OnErrorr. Dakle, jednom napisan kod (ili iskopiran iz helpa:-) radice u absolutno svim slucajevima , na svim formama. Ako imas Access
2007, mozes ovaj kod da stavis u template formu i bice uvek tamo, za sva vremena i sve forme, bez obzira na koje se tabele one vezuju.
:-)

[ obradorriuss @ 01.10.2007. 16:08 ] @


Zidar hvala na odgovoru.
Ja sam to dupliranje resio po gore napomenutom sistemu, ali cu da ga ispravim na nachin koji si mi preporuchio.
No ono shto mene muchi jeste opisan problem sa C heckBox-om, koji dozvoljava/ne dozvoljava editovanje zapisa, kada se klikne vishe od jednog puta na
C heckBox... Znachi Po defaultu C heckBox ja na FALSE vrednosti i sva polja su LOC KED. Klikom na C heckBox, dobija vrednost TRUE, polja se menjaju na
Unlocked (dozvoljeno editovanje), zavrshim sa editovanjem polja i ponovo podesim C heckBox na FALSE vrednost (polja ponovo postaju zakljuchana)...
Od tog momenta ne mogu vishe da menjam bilo shta na formi. Nece vishe ni da se C heckBox ukljuchi (postavi vrednost na TRUE), etc...
Sve je uradjeno po gore napomenutim kodovima.
A razlog tome ne znam sta je...
:-(

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

[ Zidar @ 01.10.2007. 17:15 ] @


Resenje sa chk box nije dobro u osnovi. Kad jednom kliknes check box i zakljucas formu, onda ne mozes da kliknes chk box ponovo da bi formu
otkljucao. I kad predjes na naredni rekord, on je zakljucan jer si zakljucao prethodni. Umesto chk box treba upotrebiti dugme. Ovako:

Code:

Private Sub Form_C urrent()


If Me.NewRecord Then
'Svaki novi rekord je otkljucanm dok ga ne zakljucamo :-)
Me.AllowEdits = False
Me!cmdToggleAllowEdits.C aption = "C lick here to LOC K the record"
Else
'Svaki potojeci rekord je zakljucan dok ga ne otkljucamo :-)
Me.AllowEdits = False
Me!cmdToggleAllowEdits.C aption = "C lick here to UN-LOC K the record"
End If
End SubEnd Sub

Private Sub cmdToggleAllowEdits_C lick()


'Ako smo usred editovanja, onda cela stvar moze da bude
'zbunjujuca - zakljcamo rekord pre nego sto smo ga sacuvali
'Zato, da ne bude zamene, sacuvajmo rekord pre
'nego pokusamo da zakljucamo/otkljucamo
'Me.dirty = TRUE ako jos nismo sacuvali promene
If Me.Dirty Then
DoC md.RunC ommand acC mdSaveRecord
End If
'Zakljucan/Otkljucan ce biti suprotno od onog sta je trenutno
Me.AllowEdits = Not Me.AllowEdits
'Proverimo status zakljucan/otkljucan
'i saglasno tome promenimo natpis na dugmetu
If Me.AllowEdits = True Then
Me!cmdToggleAllowEdits.C aption = "C lick here to LOC K the record"
Else
Me!cmdToggleAllowEdits.C aption = "C lick here to UN-LOC K the record"

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

End If
'Vratimo se gde smo bili
Screen.PreviousC ontrol.SetFocus
End Sub

Prvo, napravi OnC urrent kao sto je u primeru. Na ovaj nacin, svak postojeci rekord je zakljucan, a novi rejkordi su otkljucani.
Onda na dugme stavis kod kao sto je prikazano. Dugme samo menja status Allowedits u suprotnu vrednost.
Onda procitamo koja je to vrednost AllowEdits i saglasno tome podesimo natpis na dugmetu.
U slucaju da je rekord jos u editovanju i pritisnemo dugme Lock/Unlock, promena stanja ce vaziti tek kad sacuvamo rekord. Zato cuvanje obezbedimo
kroz ono If me.dirty....
Primeti da je ceo kod geneicki - ne pominje se niti ime forme, niti ime bilo koje kontrole na formi. Znaci, ovo bi trebalo da radi na svakoj formi.
Nadam se da nisam zaboravio da okacim primer.
:-)

[ obradorriuss @ 01.10.2007. 17:17 ] @


Evo, prosto mi je nekako promaklo gde sam gresio...
Iz gornjeg koda sam izbacio
Code:
Me.AllowEdits = False
i
Code:
Me.AllowEdits = True
i sada radi posao sve...
Zakljuchao sam pojedinachna polja koja su mi potrebna.
Code:

open in

Private Sub Form_C urrent()


Me.C heckBox.Value = False 'postavlja default vrednost C heckBoxa da bude zakljuchan na C urrent zapisu (ne dozvoljava editovanje polja)
Me![Datum].Locked = True
Me![RacunBr].Locked = True
Me![Dobavljac].Locked = True
browser PRO version Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Me![Dobavljac].Locked = True
Me![PoDokumentu].Locked = True
End Sub

i na kraju
Code:
Private Sub C heckBox_AfterUpdate()
If Me![C heckBox] = False Then
Me![Datum].Locked = True
Me![RacunBr].Locked = True
Me![Dobavljac].Locked = True
Me![PoDokumentu].Locked = True
Else
Me![Datum].Locked = False
Me![RacunBr].Locked = False
Me![Dobavljac].Locked = False
Me![PoDokumentu].Locked = False
End If
End Sub

Ovo sada radi posao... Kada je C heckBox otkachen dozvoljava editovanje napomenutih polja, a kada je iskljuchen NE dozvoljava, tj. zakljuchava ih.
Ovo sam pravio chisto preventive radi...Klijent nije zatrazio tu mogucnost, ali da sluchajno ne bi izmenio neki zapis dok ne potvrdi C heckBoxom da to
zaista zeli...

[ obradorriuss @ 01.10.2007. 17:24 ] @


dok sam pisao post vidim da si i ti napisao jos jedan
Isto odlichno reshenje to sto si postavio, sigurno ce koristiti...
Evo upravo sam testirao i ovo moje gore shto sam uradio i uspeo sam on Form_C urrent da podesim da se odmah promeni vrednost C heckBoxa u FALSE
pa se ne dozvoljava editovanje polja u tom zapisu... Ova forma meni sluzi samo za pregled rachuna i na njoj nije predvidjeno od strane klijenta da unosi
novi rachun sa te forme, vecj ima posebnu formu za to...
Podesavanjem C heckBoxa na FALSE na Form_C urrent() omogucava da se kretanjem medju zapisima svaki put C heckBox vrati na FALSE vrednost i time

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

ne ostaje ukljuchen na sledecim zapisima...


Ali i ovo tvoje resenje daje dobre rezultate...
A vec sam objasnio u prethodnom postu zasto nisam mogao vishe puta da kliknem na C heckBox...

[ Getsbi @ 01.10.2007. 17:39 ] @


Ja sam donekle kriv za nastalu situaciju jer sam napisao neto to nisam proverio. Inae sam to napomenuo ispod koda.
U ovakvim sluajevima koristio sam kolonu u tabeli gde sam svaki dokument obeleavao da li je proknjien ili ne. Kasnije bih na drugoj formi tu
informaciju proveravao i u zavisnosti od nje dozvoljavao editovanje ili ne.

[ chachka @ 01.10.2007. 19:24 ] @


C itat:
Zidar: The best code is no code at all - ZIdareva teorema o programiranju
To nije teorema... to je aksiom i to prvi aksiom programiranja! Svaka ast!

Microsoft Office Pro 2007


Save Tons on Microsoft Office 2007 Professional Software and Upgrades.
Access

Provera da li postoji vec unet broj rachuna


[ http://www.elitesecurity.org/t287035 ]
C opyright (C ) 2001-2014 by www.elitesecurity.org. All rights reserved.

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

You might also like