validare cod de inregistrare (CUI)
Last Updated: Jun 23 2010 12:13, Started by
zane
, May 15 2010 18:26
·
0
#1
Posted 15 May 2010 - 18:26
salut pentru toti!
am o problema de genul: care este solutia cea mai rapida pt verificarea daca un cod, de genul CUI (cod unic de inregistrare) mai este in tabel. As vrea sa fac acest lucru la procedura LostFocus a txtbox-ului unde se introduce acest cod. Eu m-am gandit ca la pierderea focusului sa interoghez campul daca mai exista un cod asemanator Aveti o alta idee? Va multumesc |
#2
Posted 08 June 2010 - 17:55
zane, on 15th May 2010, 19:26, said: salut pentru toti! am o problema de genul: care este solutia cea mai rapida pt verificarea daca un cod, de genul CUI (cod unic de inregistrare) mai este in tabel. As vrea sa fac acest lucru la procedura LostFocus a txtbox-ului unde se introduce acest cod. Eu m-am gandit ca la pierderea focusului sa interoghez campul daca mai exista un cod asemanator Aveti o alta idee? Va multumesc ciao! ai aicidescris algoritmul de verificare al unui cod CUI aici functia de verificare: Public Function IsValidCIF(CiF As String) As Boolean IsValidCIF = False Dim i As Integer On Error GoTo Eroare '**************************************** 'Pas preliminar: Se testeaza daca codul respecta formatul unui cod CIF. 'Adica lungimea maxima sa fie de 10 cifre si sa contina doar caractere numerice. If IsNull(CiF) = True Or IsEmpty(CiF) Or CiF = "" Then IsValidCIF = False Exit Function End If CiF = Replace(CiF, " ", "") '**************************************** If Len(CiF) < 2 Then IsValidCIF = False Exit Function End If '**************************************** '- elimin caracterele de inceput RO sau altceva For i = 0 To Len(CiF) - 1 If IsNumeric(Mid(CiF, i + 1, 1)) Then CiF = Mid(CiF, i + 1) GoTo sari End If Next i sari: '**************************************** '- verific fie maxim 10 caractere If Len(CiF) > 10 Then IsValidCIF = False Exit Function End If '**************************************** 'Pas 1: Se foloseste cheia de testare "753217532". Se inverseaza ordinea cifrelor codului 'CIF precum si a cheii de testare. ' Array gata inversat Dim CheieTestare(8) As Integer CheieTestare(0) = 2 CheieTestare(1) = 3 CheieTestare(2) = 5 CheieTestare(3) = 7 CheieTestare(4) = 1 CheieTestare(5) = 2 CheieTestare(6) = 3 CheieTestare(7) = 5 CheieTestare(8) = 7 '**************************************** ' Array pentru CIF ' tot inversate Dim CIFArray(10) For i = 0 To Len(CiF) - 1 CIFArray(i) = Mid(CiF, Len(CiF) - (i), 1) 'MsgBox i & " -" & CIFArray(i) Next i 'Pas 2: Se ignora prima cifra din codul CIF inversat (aceasta este cifra de control) 'si se inmulteste fiecare cifra cu cifra corespunzatoare din cheia de testare inversata. Dim Total As Integer Total = 0 For i = 1 To Len(CiF) - 1 Total = Total + (CIFArray(i) * CheieTestare(i - 1)) 'MsgBox CIFArray(i) & " * " & CheieTestare(i - 1) Next i 'Pas 3: Se aduna toate produsele obtinute. Suma rezultata se inmulteste cu 10 si 'produsul este impartit la 11. Cifra obtinuta, in urma operatiei MODULO 11 reprezita 'cifra de verificare. Daca in urma impartirii s-a obtinut restul 10 atunci 'cifra de verificare va fi 0. Total = (Total * 10) Dim Rezultat As Integer Rezultat = Total Mod 11 If Rezultat = 10 Then Rezultat = 0 End If If Rezultat = CIFArray(0) Then IsValidCIF = True Else IsValidCIF = False End If Erase CIFArray Erase CheieTestare Exit Function Eroare: IsValidCIF = False End Function chemi functia cu: ValCiF = IsValidCIF(Worksheets(codul CIF) returneaza true sau false |
#3
Posted 22 June 2010 - 19:51
gabirds, on 8th June 2010, 18:55, said: ciao! ai aicidescris algoritmul de verificare al unui cod CUI aici functia de verificare: Public Function IsValidCIF(CiF As String) As Boolean IsValidCIF = False Dim i As Integer On Error GoTo Eroare '**************************************** 'Pas preliminar: Se testeaza daca codul respecta formatul unui cod CIF. 'Adica lungimea maxima sa fie de 10 cifre si sa contina doar caractere numerice. If IsNull(CiF) = True Or IsEmpty(CiF) Or CiF = "" Then IsValidCIF = False Exit Function End If CiF = Replace(CiF, " ", "") '**************************************** If Len(CiF) < 2 Then IsValidCIF = False Exit Function End If '**************************************** '- elimin caracterele de inceput RO sau altceva For i = 0 To Len(CiF) - 1 If IsNumeric(Mid(CiF, i + 1, 1)) Then CiF = Mid(CiF, i + 1) GoTo sari End If Next i sari: '**************************************** '- verific fie maxim 10 caractere If Len(CiF) > 10 Then IsValidCIF = False Exit Function End If '**************************************** 'Pas 1: Se foloseste cheia de testare "753217532". Se inverseaza ordinea cifrelor codului 'CIF precum si a cheii de testare. ' Array gata inversat Dim CheieTestare(8) As Integer CheieTestare(0) = 2 CheieTestare(1) = 3 CheieTestare(2) = 5 CheieTestare(3) = 7 CheieTestare(4) = 1 CheieTestare(5) = 2 CheieTestare(6) = 3 CheieTestare(7) = 5 CheieTestare(8) = 7 '**************************************** ' Array pentru CIF ' tot inversate Dim CIFArray(10) For i = 0 To Len(CiF) - 1 CIFArray(i) = Mid(CiF, Len(CiF) - (i), 1) 'MsgBox i & " -" & CIFArray(i) Next i 'Pas 2: Se ignora prima cifra din codul CIF inversat (aceasta este cifra de control) 'si se inmulteste fiecare cifra cu cifra corespunzatoare din cheia de testare inversata. Dim Total As Integer Total = 0 For i = 1 To Len(CiF) - 1 Total = Total + (CIFArray(i) * CheieTestare(i - 1)) 'MsgBox CIFArray(i) & " * " & CheieTestare(i - 1) Next i 'Pas 3: Se aduna toate produsele obtinute. Suma rezultata se inmulteste cu 10 si 'produsul este impartit la 11. Cifra obtinuta, in urma operatiei MODULO 11 reprezita 'cifra de verificare. Daca in urma impartirii s-a obtinut restul 10 atunci 'cifra de verificare va fi 0. Total = (Total * 10) Dim Rezultat As Integer Rezultat = Total Mod 11 If Rezultat = 10 Then Rezultat = 0 End If If Rezultat = CIFArray(0) Then IsValidCIF = True Else IsValidCIF = False End If Erase CIFArray Erase CheieTestare Exit Function Eroare: IsValidCIF = False End Function chemi functia cu: ValCiF = IsValidCIF(Worksheets(codul CIF) returneaza true sau false Multumesc!!! Este mai mult decat ma asteptam... |
#4
Posted 23 June 2010 - 09:38
...si totusi am o problema cu verificarea daca codul mai este introdus (practic firma respectiva este deja in baza de date).
Daca interoghez tabela pe lostfocus-ul (...am incercat si cu Validate) txtbox-ului, atunci cand introduc datele pt o firma noua este OK, dar daca "intru" pt modificarea datelor si, intamplator, utilizatorul pune cursorul in txtbox-ul unde este codul de inregistrare, orice tentativa de a parasi txtbox-ul imi verifica codul si FIRESTE este deja in baza de date si imi da mesajul de atentionare pus de mine (codul este in baza de date, bla, bla...). Intrebare: Care este de fapt evenimentul in care se pune cod pt verificarea existentei unei dubluri si daca este corect ca acest lucru sa-l realizez prin interogarea campului cod_unic_inregistrare si daca este dublat sa-mi afiseze un mesaj de atentionare.? Multumesc anticipat! |
#5
Posted 23 June 2010 - 10:05
zane, on 23rd June 2010, 10:38, said: ...si totusi am o problema cu verificarea daca codul mai este introdus (practic firma respectiva este deja in baza de date). Poate ar fi bine sa ai pe forma (intr-o prima faza) doar camp de CUI + un buton de Verificare. Daca exista, faci locate pe respectivul CUI si aduci pe forma si celelalte campuri asociate firmei - in vederea actualizarii; daca nu exista, afisezi campurile goale in vederea inserarii. Pe de alta parte, poti pune restrictia de unicitate pe campul CUI, la nivel de BD, sa nu-ti mai bati tu capul cu verificarea duplicatelor. |
#6
Posted 23 June 2010 - 11:02
Alta_, on 23rd June 2010, 11:05, said: Poate ar fi bine sa ai pe forma (intr-o prima faza) doar camp de CUI + un buton de Verificare. Daca exista, faci locate pe respectivul CUI si aduci pe forma si celelalte campuri asociate firmei - in vederea actualizarii; daca nu exista, afisezi campurile goale in vederea inserarii. Pe de alta parte, poti pune restrictia de unicitate pe campul CUI, la nivel de BD, sa nu-ti mai bati tu capul cu verificarea duplicatelor. multumesc. ok, fac campul unic din Access, in cazul meu, dar cum gestionez eroarea, pt ca banuiesc ca imi va da o eroare in cazul in care este duplicat. |
#7
Posted 23 June 2010 - 12:13
Quote Try the insert, then catch the error. Nu ma pricep la Visual Basic, dar banuiesc ca exista o Exceptie/Error number pentru "duplicate keys found". Ceva gen: On Error Goto Err_Handler 'Do your stuff.. Exit Sub Err_Handler: If Err.Number = "the error number for duplicated key" then MsgBox "that key is already in the database" Err.Clear End if Edited by Alta_, 23 June 2010 - 12:13. |
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users