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

Kontrola maticnog broja

[es] :: Access :: Kontrola maticnog broja

[ Pregleda: 6356 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

sule99
student

Član broj: 227708
Poruke: 93
*.adsl.net.t-com.hr.



+1 Profil

icon Kontrola maticnog broja10.03.2011. u 11:29 - pre 159 meseci
Pozdrav!

Na formi se upisuju nekakvi podaci, između ostalog i matični broj. Želio bih ugraditi kontrolu za matični broj da li je ispravan ili nije. Zanima me kako bi to bilo najbolje napraviti. Na BeforeUpdate text boxa za matični broj ili na neki drugi event? Kod za provjeru prima cijeli matični broj i onda provjerava da li je zadnja znamenka ispravna.

Znači glavni mi je problem da li koristiti BeforeUpdate ili neki drugi event za ovaj problem?

Želio bi da kad korisnik upiše matični broj i prebaci fokus s tog text boxa da mu se pojavi u text labeli crvenim slovima da je matični broj neispravan.
 
Odgovor na temu

SLOJ.1973

Član broj: 130198
Poruke: 871
178.222.46.*



+41 Profil

icon Re: Kontrola maticnog broja10.03.2011. u 12:01 - pre 159 meseci
Mislim da ti je najbolje na beforupdate da postaviš nešto ovako
Code:
Private Sub Text4_BeforeUpdate(Cancel As Integer)

If Me.Text4 <>'  TVOJ KOD ZA PROVERU MAT.BROJA  Or IsNull(Me.Text4) ' AKO OSTAVI PRAZNO POLJE Then
MsgBox "greska", vbCritical
Cancel = 1
Me.Label5.Caption = "NEISPRAVNO"
Me.Label5.ForeColor = vbRed

Else
Me.Label5.Caption = "ISPRAVNO"
Me.Label5.ForeColor = vbBlack
End If
End Sub

Pozdrav.
Jednog dana...
 
Odgovor na temu

sule99
student

Član broj: 227708
Poruke: 93
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Kontrola maticnog broja10.03.2011. u 14:13 - pre 159 meseci
Uspio sam napraviti. Thx
 
Odgovor na temu

Zidar
Canada

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



+79 Profil

icon Re: Kontrola maticnog broja10.03.2011. u 14:23 - pre 159 meseci
Citat:
Znači glavni mi je problem da li koristiti BeforeUpdate ili neki drugi event za ovaj problem?


Maticni broj je najbolje proveriti u validation rule za polje, u dizajnu tabele. Ako radis sa eventima, uradi kontrolu na dva eventa: AfterUpdate za text box i BeforeUpdate za formu. AfterUpdate za text box proverava ono sto je korisnik uneo, posle unosa. Medjutim, ponekad taj event se ne desi, pa BeforeUpdate za formu sluzi kao poslednja odbrana. Medjutim, sve to nije dovoljno, jedina prava stvar je kontrola na nivou tabele, Validation Rule za polje, na nivou sizajna tabele.

Drugo vazno pitanje je STA proveravas kod maticnog broja. Kontrolana cifra nije dovoljna, jer uvek mozes da uneses tudji ispravan broj. Ako dodas poredjenje datuma rodjenja iz maticnog broja i iz polja DAtumRodjenja, onda bar ne moze da se poturi tudji broj. Osim u slucaju blizanaca, ili dva coveka rodjena u istoj bolnici, istog dana.


 
Odgovor na temu

elektros
Bač

Član broj: 84580
Poruke: 428
*.mbb.telenor.rs.



+4 Profil

icon Re: Kontrola maticnog broja02.04.2011. u 09:35 - pre 159 meseci
Da ne počinjem drugu temu...Mene samo interesuje kako da u "Validatio Rule" stavim pravilo da jmbg mora imati 13 brojeva (inače da javi grešku)? Probao sam "neke" funkcije tipa long ali ga nešto ne prepoznaje...
Nije važno učestvovati, važno je pobediti !!!
 
Odgovor na temu

banem
Kikinda

Član broj: 16619
Poruke: 583
*.dynamic.sbb.rs.



+15 Profil

icon Re: Kontrola maticnog broja02.04.2011. u 09:55 - pre 159 meseci
Šaljem ti kod za proveru JMBG. Kako se u to polje ponekad upisuje PIB, ako je reč o firmi, možeš da kombinuješ sa funkcijom za proveru PIB-a:

Code:
Function Proveri_JMBG(JMBG As String) As String
    '
    ' funkcija vraca tekst sa opisom ispravnosti JMBG
    '
    ' upotreba na radnom listu: =Proveri_JMBG(adr)
    
    ' init promenljive
    Dim duzina As Integer, zbir As Integer
    Dim cifra(1 To 13) As Integer, i As Integer
    Dim dan As Integer, mesec As Integer, Godina As String
    
    ' init konstante; izmeniti po volji
    Const ERR_dan = "GREŠKA: podatak o datumu neispravan!"
    Const ERR_mesec = "GREŠKA: podatak o mesecu neispravan!"
    Const ERR_godina = "GREŠKA: podatak o godini neispravan!"
    Const ERR_duzina = "GREŠKA: dužina različita od 13!"
    Const ERR_kont = "GREŠKA: neispravan kontrolni broj ili datum!"
    Const OK_JMBG = "-1"
    
    ' preuzimanje ulaznih vrednosti
    duzina = Len(JMBG)
    dan = Int(Left(JMBG, 2))
    mesec = Int(Mid$(JMBG, 3, 2))
    Godina = Mid$(JMBG, 5, 3)
    
    ' provera dužine JMBG
    If (duzina <> 13) Then
       Proveri_JMBG = ERR_duzina
       Exit Function
    End If
    
    ' provera datuma
    If dan < 1 Then
       Proveri_JMBG = ERR_dan
       Exit Function
    End If
    
    ' provera meseca i dana u mesecu
    Select Case mesec
       Case 1, 3, 5, 7, 8, 10, 12
          If dan > 31 Then
             Proveri_JMBG = ERR_dan
             Exit Function
          End If
       Case 4, 6, 9, 11
          If dan > 30 Then
             Proveri_JMBG = ERR_dan
             Exit Function
          End If
       Case 2
          If ((Godina Mod 4 = 0) And dan > 29) Or _
             ((Godina Mod 4 <> 0) And dan > 28) Then
               Proveri_JMBG = ERR_dan
               Exit Function
          End If
       Case Else
          Proveri_JMBG = ERR_mesec
          Exit Function
    End Select
    
    ' provera godine: ispravne su od 1899 do teku?e godine
    If (Godina > Right(Str(Year(Now)), 3)) And (Godina < "899") Then
       Proveri_JMBG = ERR_godina
       Exit Function
    End If
    
    ' provera kontrolnog broja
    For i = 1 To 13
       cifra(i) = Int(Mid$(JMBG, i, 1))
    Next i
    
    zbir = cifra(13) + cifra(1) * 7 + cifra(2) * 6 + cifra(3) * 5 + cifra(4) * 4
    zbir = zbir + cifra(5) * 3 + cifra(6) * 2 + cifra(7) * 7 + cifra(8) * 6
    zbir = zbir + cifra(9) * 5 + cifra(10) * 4 + cifra(11) * 3 + cifra(12) * 2
    
    If (zbir Mod 11) <> 0 Then
       Proveri_JMBG = ERR_kont
    Else
       Proveri_JMBG = OK_JMBG
    End If

End Function


Public Function ProveriPIB(PIB As String)
    Dim c0 As Integer
    Dim c1 As Integer
    Dim c2 As Integer
    Dim c3 As Integer
    Dim c4 As Integer
    Dim c5 As Integer
    Dim c6 As Integer
    Dim c7 As Integer
    Dim c8 As Integer
    Dim zadnji As String
    zadnji = Right(PIB, 1)
    PIB = Left(PIB, 8)
    If Len(PIB) <> 8 Then
       ProveriPIB = 1
    Else
        c8 = (CInt(Mid(PIB, 1, 1)) + 10) Mod 10
        If c8 = 0 Then
            c8 = 10
        End If
        c8 = (c8 * 2) Mod 11
        c7 = (CInt(Mid(PIB, 2, 1)) + c8) Mod 10
        If c7 = 0 Then
            c7 = 10
        End If
        c7 = (c7 * 2) Mod 11
        c6 = (CInt(Mid(PIB, 3, 1)) + c7) Mod 10
        If c6 = 0 Then
            c6 = 10
        End If
        c6 = (c6 * 2) Mod 11
        c5 = (CInt(Mid(PIB, 4, 1)) + c6) Mod 10
        If c5 = 0 Then
            c5 = 10
        End If
        c5 = (c5 * 2) Mod 11
        c4 = (CInt(Mid(PIB, 5, 1)) + c5) Mod 10
        If c4 = 0 Then
            c4 = 10
        End If
        c4 = (c4 * 2) Mod 11
        c3 = (CInt(Mid(PIB, 6, 1)) + c4) Mod 10
        If c3 = 0 Then
            c3 = 10
        End If
        c3 = (c3 * 2) Mod 11
        c2 = (CInt(Mid(PIB, 7, 1)) + c3) Mod 10
        If c2 = 0 Then
            c2 = 10
        End If
        c2 = (c2 * 2) Mod 11
        c1 = (CInt(Mid(PIB, 8, 1)) + c2) Mod 10
        If c1 = 0 Then
            c1 = 10
        End If
        c1 = (c1 * 2) Mod 11
        c0 = (11 - c1) Mod 10
        If c0 <> zadnji Then
            ProveriPIB = 1
        Else
            ProveriPIB = 0
        End If
           'return(pib || to_char(c0));
    End If
End Function

Pozdrav,
Branislav
 
Odgovor na temu

elektros
Bač

Član broj: 84580
Poruke: 428
*.mbb.telenor.rs.



+4 Profil

icon Re: Kontrola maticnog broja02.04.2011. u 09:58 - pre 159 meseci
Hvala,ali da li to može da se uradi jednostavnije, bez koda? Znači, unosim jmbg, i ako unesem 13 cifara, sve je ok. Ali, ako unesem broj cifara različit od 13 da mi javi grešku (unosim nove podatke, bez ikakve potrebe da se proverava da li jmbg postoji već u nekoj koloni ili da je vezan za neki podatak).
Nije važno učestvovati, važno je pobediti !!!
 
Odgovor na temu

banem
Kikinda

Član broj: 16619
Poruke: 583
*.dynamic.sbb.rs.



+15 Profil

icon Re: Kontrola maticnog broja02.04.2011. u 10:01 - pre 159 meseci
A šta je problem da preneseš funkciju i na AfterUpdate je pozoveš?

U drugom slučaju neko može da upiše 13 nečega, slova, brojeva, bilo šta, pa provera samo na dužinu stringa i nema nekog smisla.
Pozdrav,
Branislav
 
Odgovor na temu

banem
Kikinda

Član broj: 16619
Poruke: 583
*.dynamic.sbb.rs.



+15 Profil

icon Re: Kontrola maticnog broja02.04.2011. u 10:02 - pre 159 meseci
If Len(txtString) <> 13 Then...
Pozdrav,
Branislav
 
Odgovor na temu

banem
Kikinda

Član broj: 16619
Poruke: 583
*.dynamic.sbb.rs.



+15 Profil

icon Re: Kontrola maticnog broja02.04.2011. u 10:14 - pre 159 meseci
Ili u tabeli na Input Mask staviš: 0000000000000 tako da korisnik mora da upiše svih 13 i tačno 13 (to je bez programiranja).
Pozdrav,
Branislav
 
Odgovor na temu

elektros
Bač

Član broj: 84580
Poruke: 428
*.mbb.telenor.rs.



+4 Profil

icon Re: Kontrola maticnog broja02.04.2011. u 10:28 - pre 159 meseci
Proradilo je sa "Len([jmbg])=13" i što sam morao staviti da mi polje jmbg bude textualno. Hvala
Nije važno učestvovati, važno je pobediti !!!
 
Odgovor na temu

banem
Kikinda

Član broj: 16619
Poruke: 583
*.dynamic.sbb.rs.



+15 Profil

icon Re: Kontrola maticnog broja02.04.2011. u 10:45 - pre 159 meseci
Lakše je ako je polje Text jer JMBG može da počne sa nulom, a kako vodeća nula kod celih brojeva nema smisla, onda mora gimnastika... cirkus.
Pozdrav,
Branislav
 
Odgovor na temu

jaco_sa
BIH Sarajevo

Član broj: 282248
Poruke: 4
80.71.146.*

Sajt: www.ubuntu.ba


+1 Profil

icon Re: Kontrola maticnog broja02.04.2011. u 12:08 - pre 159 meseci
jel pravis to u accessu ili VB?
jez ovo ono
 
Odgovor na temu

[es] :: Access :: Kontrola maticnog broja

[ Pregleda: 6356 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

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