Access - problemas con una funcion en access 2003

 
Vista:
sin imagen de perfil

problemas con una funcion en access 2003

Publicado por jose maria (89 intervenciones) el 22/07/2013 13:25:28
hola, en mi intento de poder conseguir algo que funcione con el cif, intento llamar a una función que copie en la wiki, ni se llamarla ni se utilizarla.....

os comento lo que quiero, mediante un cuadro de texto con la mascara >L0000000A introduzco el dato del cif, lo que quiero es que cuando introduzca el cif, la función compruebe si es correcto o no, si no lo es, que me advierta de ello (supongo que con el dígito de control)

pues este es el código, repito, la función es copiada de la wiki.....

Option Compare Database
Private Sub CIF_BeforeUpdate(Cancel As Integer)
End Sub
'Valida que un cif introducido sea correcto
'según la Orden EHA/451/2008
Public Function Valida_CIF(ByVal valor As String) As Boolean
Dim A As Integer
Dim B As Integer
Dim C As Integer
Dim cif As String
Dim CIFDIGITO As String
Dim i As Integer
A = 0
B = 0
Valida_CIF = False
If Len(valor) <> 9 Then 'el CIF debe tener 9 cifras
Exit Function
End If
cif = Mid(valor, 2, 7) 'se obtienen los dígitos centrales
CIFDIGITO = Right(valor, 1) 'dígito de control
For i = 1 To 6 Step 2
A = A + Mid(cif, i + 1, 1) 'Suma de posiciones pares
C = 2 * Mid(cif, i, 1) 'Doble de posiciones impares
B = B + (C Mod 10) + Int(C / 10) 'Suma de dígitos de doble de pares
Next i
'para obtener el cálculo de la cifra de la séptima posición que no se trata
'en el bucle
B = B + ((2 * Mid(cif, 7, 1)) Mod 10) + Int((2 * Mid(cif, 7, 1)) / 10)
'se obtiene la unidad de la cifra total
C = (10 - ((A + B) Mod 10)) Mod 10
Dim Dígito As String
Dim letras As Variant
letras = Array("J", "A", "B", "C", "D", "E", "F", "G", "H", "I")
Select Case (Left(valor, 1))
'los cif que comienzan por estas letras deben terminar en una letra
'concreta de la lista anterior
Case "QUE", "P", "R", "QUE", "ES", "W": Dígito = letras(C)
'los cif que comienzan por estas letras deben terminar en un dígito
Case "A", "B", "E", "H", "J", "U", "V": Dígito = C
Case "POR", "Y", "Z":
' Error: es un NIE
'para el resto de cif, la terminación puede ser un número o una letra
Case Else
If IsNumeric(CIFDIGITO) Then
Dígito = C
Else
Dígito = letras(C)
End If
End Select
Valida_CIF = (CIFDIGITO = Dígito)
End Function



gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Enrique Ramírez
Val: 37
Ha aumentado su posición en 2 puestos en Access (en relación al último mes)
Gráfica de Access

problemas con una funcion en access 2003

Publicado por Enrique Ramírez (629 intervenciones) el 22/07/2013 20:45:40
Tu código lo metí en un formulario y si funciona, has lo siguiente:

1) crea un formulario nuevo
2) crea dos cajas de texto la primera se llamara txt_CIF y la segunda txt_Letra´

3) en txt_CIF da clic derecho
3.1) selecciona la opción propiedades
3.2) clic en la pestaña eventos
3.3) clic en antes de actualizar
3.4) clic en el botoncito de los tres puntos [...]
3.5) cuando se abra el editor pega lo siguiente:

Private Sub txt_CIF_BeforeUpdate(Cancel As Integer)
Me.txt_Letra = Valida_CIF(Me.txt_CIF)
End Sub

4) pega la funcion que subiste a tu pregunta abajo del End Sub
5) guarda tu formulario y ejecutalo
6) si el CIF es correcto en la caja de texto txt_Letra te aparece la leyenda verdadero
7) si el CIF es erroneo en la caja de texto txt_Letra te aparce la leyenda falso
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

problemas con una funcion en access 2003

Publicado por jose maria (89 intervenciones) el 23/07/2013 08:43:13
vale, me funciona, aunque veo dos cosas que no entiendo mucho, de donde saca la leyenda de verdadero o falso? se podrian cambiar por correcto o incorrecto?
si fuera incorrecto ¿podria decirme que tipo de fallo seria(supongo que el fallo iria relacionado con el digito control que sea letra y no la introdujeramos correctamente)?
y tambien, me salen como dos formularios.... en los botones de navegacion devo desplazarme al segundo para ver si es verdadero o falso........
muchisimas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Enrique Ramírez
Val: 37
Ha aumentado su posición en 2 puestos en Access (en relación al último mes)
Gráfica de Access

problemas con una funcion en access 2003

Publicado por Enrique Ramírez (629 intervenciones) el 23/07/2013 17:50:11
1
2
3
4
5
6
7
8
Private Sub txt_CIF_BeforeUpdate(Cancel As Integer)
     Me.txt_Letra = Valida_CIF(Me.txt_CIF)
     If Me.txt_Letra = "VERDADERO" Then
        Me.txt_Letra = "CORRECTO"
     Else
        Me.txt_Letra = "INCORRECTO"
     End If
 End Sub


En cuanto a que tipo de fallo, dale un debug a la función y determina en que casos marca el error, te soy sincero es primer vez que veo algo relacionado a CIF vi tu pregunta y tu código y solo lo probé en un formulario de hecho como no se nada de CIF los ejemplos de las claves que he usado las obtuve de internet y desconozco como esta conformada la clave.

Te dejo el link de mi sitio quizá te sea de ayuda en lo futuro pero te aclaro no hay ningún ejemplo de CIF, saludos.

https://sites.google.com/site/jerrmex/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar