Imprimir página | Cerrar ventana

Dudas con el tipo de datos y el Error nº 6 - Desbo

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=86872
Fecha de impresión: 26/Marzo/2026 a las 20:57


Tema: Dudas con el tipo de datos y el Error nº 6 - Desbo
Publicado por: Sorrivas
Asunto: Dudas con el tipo de datos y el Error nº 6 - Desbo
Fecha de publicación: 26/Febrero/2024 a las 10:48
Versión: Microsoft Office Access 2003 (11.8166.8172) SP3 / Microsoft Visual Basic 6.3

Tengo un problema con la asignación del tipo de datos a una variable.

1. Declaro la variable lnSS3 como Long

Dim lnSS3 As Long

2. Cuando le intento asignar el siguiente valor a dicha variable, automáticamente el editor de Microsof Visual Basic le añade un almohadilla

Dim lnSS3 As Long
lnSS3 = 2712345678#

3. Si declaro la variable doSS3 com Double

Dim doSS3 As Double

4. Y a continuación intento asignar el siguiente valor a dicha variable, automáticamente el editor de Microsof Visual Basic le añade un almohadilla

Dim doSS3 As Double
doSS3 = 2712345678#

5. Si intento usar dicha variable como el operador Mod, me da el código de error 6: Desbordamiento.

Dim MiResultado
MiResultado = doSS3 Mod 97

¿Alguien me puede ayudar a decirme qué es lo que estoy haciendo mal?

Gracias




Respuestas:
Publicado por: Mihura
Fecha de publicación: 26/Febrero/2024 a las 11:09
El valor que intentas introducir no lo acepta el tipo Long.

De la ayuda:


-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: xavi
Fecha de publicación: 26/Febrero/2024 a las 14:17
Hola,

A lo mejor, en lugar de utilizar un Long, podrías probar con un LongLong a ver que pasa (si tienes 64 bits)

Sospecho que estas calculando/validando el n´º de la Seguridad Social.

Para ese cálculo yo tenia guardada una función de hace un porrón de años (no es mia) que partía el número para, justamente, evitar el overflow:

Function ValidaSS(strNumeroSS As String) As Boolean
    Dim lngParte1       As Long
    Dim lngParte2       As Long
    Dim intResultado    As Integer
    Dim intDC           As Integer
    
    'Partimos el número para evitar el overflow
    lngParte1 = CLng(Left(strNumeroSS, 5))
    lngParte2 = CLng(Mid(strNumeroSS, 6, 5))
    
    'Dígitos de control
    intDC = CInt(Right(strNumeroSS, 2))
    
    'Cálculo del dígito de control
    intResultado = lngParte1 Mod 97
    lngParte2 = intResultado & lngParte2
    intResultado = lngParte2 Mod 97
    
    'Si el cálculo es igual al dígito de control, el número  entrado es correcto
    ValidaSS = (intDC = intResultado)
End Function


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: Sorrivas
Fecha de publicación: 26/Febrero/2024 a las 18:40
Efectivamente estoy intentando calcular el dígito de control del número de la Seguridad Social.

Gracias por compartir la función que lo hace. 

La voy a adaptar y así resolver el problema en el que estaba atascado.

Gracias.



Imprimir página | Cerrar ventana