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

Provera da li postoji vec unet broj rachuna

[es] :: Access :: Provera da li postoji vec unet broj rachuna

[ Pregleda: 2672 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

obradorriuss
Nikola Obradovic
CEO & Founder
NO SOLUTIONS
Novi Sad

Član broj: 30270
Poruke: 177
*.mediaworksit.net.

ICQ: 329831125
Sajt: www.nosolutions.rs


Profil

icon Provera da li postoji vec unet broj rachuna30.09.2007. u 17:11 - pre 201 meseci
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 CheckBox 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 CheckBox, 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
 
Odgovor na temu

Getsbi

Moderator
Član broj: 124608
Poruke: 2831



+45 Profil

icon Re: Provera da li postoji vec unet broj rachuna30.09.2007. u 20:30 - pre 201 meseci
1. Ako je broj racuna recimo numerik moglo bi ovako:
Code:

Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim Nova_sifra  As Long
    
    If IsNull([BrojRacuna]) Or [BrojRacuna] = 0 Then
         MsgBox "Morate uneti broj racuna", vbCritical, "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
        DoCmd.RunCommand acCmdUndo ' ponistava unos sloga
        Cancel = True
        MsgBox "Pod brojem  " & Nova_sifra & "  imate unete podatke", vbCritical, "Paznja"
        Me![BrojRacuna].SetFocus
     End If
          
End Sub

2. Recimo ovako:
Code:

Private Sub Check5_AfterUpdate()
     If Me![Check5] = False Then
          Me.AllowEdits = False            '  editovanje svih polja na formi
         Me![text1].Locked = True         '  zaključavanje pojedinačnog polja
     Else
         Me.AllowEdits = True
         Me![text1].Locked = False
     End If
End Sub

Postavi Check box da bude prvi na formi pre ostalih kontrola sa Tab Order. Ovo nisam isprobavao sa nevezanom kontrolom na formi. Ako ne ide okači 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]
 
Odgovor na temu

mkaras
Marko Karas
Beograd

Član broj: 66087
Poruke: 427



+19 Profil

icon Re: Provera da li postoji vec unet broj rachuna01.10.2007. u 08:15 - pre 201 meseci
Ako u tabeli indeksiraš polje BrojRacuna sa opcijom bez duplikata onda ćes se rešiti duplih unosa bez obzira šta je broj računa, numerik,datum ili text. U On Error događaju same forme presretni obaveštenje o dupliranju podataka i obavesti korisnika.
 
Odgovor na temu

obradorriuss
Nikola Obradovic
CEO & Founder
NO SOLUTIONS
Novi Sad

Član broj: 30270
Poruke: 177
*.dynamic.sbb.co.yu.

ICQ: 329831125
Sajt: www.nosolutions.rs


Profil

icon Re: Provera da li postoji vec unet broj rachuna01.10.2007. u 14:00 - pre 201 meseci
Hvala pre svega na odgovorima. Kombinacijom Getsbi-jevog koda i zamenom funkcije DLookup u f-ju DCount dobijamo:

1. Duplirane vrednosti sam reshio na ovaj nachin:
Code:

Private Sub RacunBr_BeforeUpdate(Cancel As Integer)
Dim Nova_sifra  As String
Dim stLinkCriteria As String
    Nova_sifra = Me.RacunBr.Value
    stLinkCriteria = "[RacunBr]=" & "'" & Nova_sifra & "'"

    If DCount("RacunBr", "tbl_IzdavanjeRacuna", stLinkCriteria) > 0 Then ' Praktichno ukoliko se u tabeli prebroje vishe od jednog zapisa prijavljuje gresku
        Me![RacunBr].Undo   ' Ponistava vrednost unetog polja
        'DoCmd.RunCommand acCmdUndo ' ponistava unos sloga
        Cancel = True
        MsgBox "Pod brojem  " & Nova_sifra & "  imate unete podatke!", vbCritical, "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(Cancel As Integer)
    If IsNull([RacunBr]) Or [RacunBr] = 0 Then
         MsgBox "Morate uneti broj racuna!", vbCritical, "Paznja"

                  Me.RacunBr.SetFocus
         Exit Sub
    End If

End Sub


2. Zakljucavanje polja i njihovo editovanje
Code:

Private Sub Form_Open(Cancel As Integer)

          DoCmd.GoToRecord , , acLast     ' odlazi na poslednji zapis (moje potrebe)

          Me![PoDokumentu].Locked = True         '  zakljucavanje pojedinacnog polja
          Me![Datum].Locked = True
          Me![RacunBr].Locked = True
          Me![Dobavljac].Locked = True

End Sub


Code:


Private Sub Check5_AfterUpdate()
If Me![Check5] = 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         '  zakljucavanje pojedinacnog polja
            Me![Datum].Locked = False
            Me![RacunBr].Locked = False
            Me![Dobavljac].Locked = False
            
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 CheckBox5, otkljuchavaju se sva polja i editovanje se dozvoljava i zapis moze da se sachuva pomocju dugmeta na formi SACHUVAJ (
Code:
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
). Medjutim, ako ponovo zakljucham dugme, tj. onemogucjim editovanje polja i kliknem na dugme SACHUVAJ, izbacuje neku greshku, kao i to shto vishe ne mogu da menjam vrednost dugmeta CheckBox5...

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

Neka ideja?

 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Provera da li postoji vec unet broj rachuna01.10.2007. u 14:17 - pre 201 meseci
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 CANCEL=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.

:-)
 
Odgovor na temu

obradorriuss
Nikola Obradovic
CEO & Founder
NO SOLUTIONS
Novi Sad

Član broj: 30270
Poruke: 177
*.dynamic.sbb.co.yu.

ICQ: 329831125
Sajt: www.nosolutions.rs


Profil

icon Re: Provera da li postoji vec unet broj rachuna01.10.2007. u 16:08 - pre 201 meseci
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 CheckBox-om, koji dozvoljava/ne dozvoljava editovanje zapisa, kada se klikne vishe od jednog puta na CheckBox... Znachi Po defaultu CheckBox ja na FALSE vrednosti i sva polja su LOCKED. Klikom na CheckBox, dobija vrednost TRUE, polja se menjaju na Unlocked (dozvoljeno editovanje), zavrshim sa editovanjem polja i ponovo podesim CheckBox na FALSE vrednost (polja ponovo postaju zakljuchana)...

Od tog momenta ne mogu vishe da menjam bilo shta na formi. Nece vishe ni da se CheckBox ukljuchi (postavi vrednost na TRUE), etc...
Sve je uradjeno po gore napomenutim kodovima.

A razlog tome ne znam sta je...

:-(
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Provera da li postoji vec unet broj rachuna01.10.2007. u 17:15 - pre 201 meseci
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_Current()
If Me.NewRecord Then
    'Svaki novi rekord je otkljucanm dok ga ne zakljucamo :-)
    Me.AllowEdits = False
    Me!cmdToggleAllowEdits.Caption = "Click here to LOCK the record"
Else
    'Svaki potojeci rekord je zakljucan dok ga ne otkljucamo :-)
    Me.AllowEdits = False
    Me!cmdToggleAllowEdits.Caption = "Click here to UN-LOCK the record"
End If
End SubEnd Sub


Private Sub cmdToggleAllowEdits_Click()
'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
    DoCmd.RunCommand acCmdSaveRecord
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.Caption = "Click here to LOCK the record"
Else
    Me!cmdToggleAllowEdits.Caption = "Click here to UN-LOCK the record"
End If

'Vratimo se gde smo bili
Screen.PreviousControl.SetFocus

End Sub



Prvo, napravi OnCurrent 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.

:-)
Prikačeni fajlovi
 
Odgovor na temu

obradorriuss
Nikola Obradovic
CEO & Founder
NO SOLUTIONS
Novi Sad

Član broj: 30270
Poruke: 177
*.dynamic.sbb.co.yu.

ICQ: 329831125
Sajt: www.nosolutions.rs


Profil

icon Re: Provera da li postoji vec unet broj rachuna01.10.2007. u 17:17 - pre 201 meseci
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:

Private Sub Form_Current()
Me.CheckBox.Value = False   'postavlja default vrednost CheckBoxa da bude zakljuchan na Current zapisu (ne dozvoljava editovanje polja)
Me![Datum].Locked = True
Me![RacunBr].Locked = True
Me![Dobavljac].Locked = True
Me![PoDokumentu].Locked = True
End Sub


i na kraju

Code:

Private Sub CheckBox_AfterUpdate()
If Me![CheckBox] = 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 CheckBox 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 CheckBoxom da to zaista zeli...


 
Odgovor na temu

obradorriuss
Nikola Obradovic
CEO & Founder
NO SOLUTIONS
Novi Sad

Član broj: 30270
Poruke: 177
*.dynamic.sbb.co.yu.

ICQ: 329831125
Sajt: www.nosolutions.rs


Profil

icon Re: Provera da li postoji vec unet broj rachuna01.10.2007. u 17:24 - pre 201 meseci
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_Current da podesim da se odmah promeni vrednost CheckBoxa 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 CheckBoxa na FALSE na Form_Current() omogucava da se kretanjem medju zapisima svaki put CheckBox vrati na FALSE vrednost i time 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 CheckBox...


 
Odgovor na temu

Getsbi

Moderator
Član broj: 124608
Poruke: 2831



+45 Profil

icon Re: Provera da li postoji vec unet broj rachuna01.10.2007. u 17:39 - pre 201 meseci
Ja sam donekle kriv za nastalu situaciju jer sam napisao nešto što nisam proverio. Inače sam to napomenuo ispod koda.
U ovakvim slučajevima koristio sam kolonu u tabeli gde sam svaki dokument obeležavao da li je proknjižen ili ne. Kasnije bih na drugoj formi tu informaciju proveravao i u zavisnosti od nje dozvoljavao editovanje ili ne.
 
Odgovor na temu

chachka
Srđan Mijatov
Programer
BUS Computers
Kikinda

Član broj: 53780
Poruke: 576
*.ADSL.neobee.net.

Sajt: www.baze-podataka.net


+4 Profil

icon Re: Provera da li postoji vec unet broj rachuna01.10.2007. u 19:24 - pre 201 meseci
Citat:
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!
"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming."
- Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo
 
Odgovor na temu

[es] :: Access :: Provera da li postoji vec unet broj rachuna

[ Pregleda: 2672 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

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