Visual Basic - VB fallo IF con Null error 94

Life is soft - evento anual de software empresarial
 
Vista:

VB fallo IF con Null error 94

Publicado por Lorien (15 intervenciones) el 27/04/2015 13:13:22
Hola buenas, estoy desarrollando una BBDD como parte de mis practicas del grado superior de redes; me he topado con una cosa muy graciosa y a la vez exhasperante.

DESCRIBO MI PROBLEMA:

1---> Salta un error de valores Nulos (error 94) en una consulta SQL si no se introducen datos en el campo del formulario

2---> Meto un bucle if para corregir el problema (hasta aqui todo muy bonito, no deberia fallar)

3---> El error sigue saltando aun estando el bucle if antes del mismo en la ejecucion del programa

AQUI EL CODIGO FUENTE
=====================

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Private Sub comprobarhistoria_Click()
 
Dim sql As String
Dim rs As recordset
 
If [filtrohistoria].Value = Null Then
    [filtrohistoria].Value = 0
    MsgBox "Introduzca un numero de historia", vbOKOnly, "Comprobacion erronea"
Else
    sql = "select historia from PACIENTE where historia = " & CStr([filtrohistoria].Value) & ""
    Set rs = CurrentDb.OpenRecordset(sql)
 
    If str_resultado(rs) = "ERROR" Then
        MsgBox "Paciente nuevo, introduzca datos personales", vbOKOnly, "Paciente nuevo"
    Else
        sql = "select fecha_nacimiento from PACIENTE where historia = " & [filtrohistoria].Value
        Set rs = CurrentDb.OpenRecordset(sql)
        [nuevofechan].Value = str_resultado(rs)
        sql = "select descripcion from SEXO where cod_sexo = (select cod_sexo from PACIENTE where historia = " & [filtrohistoria].Value & ")"
        Set rs = CurrentDb.OpenRecordset(sql)
        [nuevosexo].Value = str_resultado(rs)
    End If
End If
 
End Sub


Si alguien se pregunta porque estoy convirtiendo a string el valor en mitad de la consulta SQl, le dire que es para evitar un bucle de errores en el cual me pedian las comillas (error 3075) y otro que me decia que las comillas sobraban porque es un valor numerico (3464)

INFO. ADICIONAL PARA CURIOSOS:
=============================
1
2
3
4
5
6
7
8
9
Function str_resultado(rs As recordset) As String
 
If rs.RecordCount <> 0 Then
  str_resultado = CStr(rs.Fields(0))
Else
  str_resultado = "ERROR"
End If
 
End Function
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 Andres Leonardo
Val: 3.117
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

VB fallo IF con Null error 94

Publicado por Andres Leonardo (1798 intervenciones) el 27/04/2015 17:41:58
COncatenale al recorset un valor vacio asi te evitas los nULL

Saludos
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 Wilfredo Patricio Castillo
Val: 8
Ha aumentado su posición en 9 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

VB fallo IF con Null error 94

Publicado por Wilfredo Patricio Castillo (260 intervenciones) el 27/04/2015 17:49:31
Que tal manera de hacer lenta tu aplicación.

Proqué no te traes el recordset lleno de una sola vez, con Historia,FechaNacimiento,Sexo y solo capturas los datos desde el recordset en una sola vez, en lugar de ir cada rato a la tabla y traer uno por uno?.

Saludos cordiales
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

VB fallo IF con Null error 94

Publicado por Lorien (15 intervenciones) el 28/04/2015 08:21:18
Hola !

Se nota que no tengo ni idea de visualBasic verdad? jeje, me costo unas horitas aprender lo basico y hacer todo este codigo.

En cuanto a lo del Null, no pensaba que iba a dar tantos problemas; ya da problemas en las BBDD pero en la programacion al parecer tambien.

He cambiado el = por un Is, se me queda el código asi:

If [filtrohistoria].Value Is Null Then

Y me da un error llamado 424 en tiempo de ejecución (se requiere un objeto). Por lo menos ahora entra al bucle jejeje.

Un SALUDO !
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

VB fallo IF con Null error 94

Publicado por Lorien (15 intervenciones) el 28/04/2015 10:27:34
Vale, no se como reiniciar el recordset; he buscado por la web y he encontrado esto: ¿podria ser?

REINICIAR RECORDSET
=====

Set Rec = New ADODB.Recordset

=====

El problema es que no puedo evitar el valor nulo, porque aunque el recordset deje de ser nulo, [filtrohistoria].Value puede llegar a serlo.
O dicho de otra manera, si no me entra al bucle if para evitar el error de valor nulo (dispara el error antes de entrar en el bucle para comprobar si es nulo y solucionarlo), no podre asegurar que no me salte el error aunque el recordset este inicializado (disparara el error antes de inicializarlo).

Ya siento explicarme tan mal, pero esque con estos temas como cada uno lo entiende a su modo...


Gracias de antemano
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 Wilfredo Patricio Castillo
Val: 8
Ha aumentado su posición en 9 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

VB fallo IF con Null error 94

Publicado por Wilfredo Patricio Castillo (260 intervenciones) el 28/04/2015 17:03:01
Si eso, de que no tienes mucha idea, me di cuenta hace rato, pero los nulos no deben dar problema si es que lo sabes tratar, yo dejé vb6, ya hace como 15 años, pero aún recuerdo que para tratar un nulo de base de datos en el recordset se hace así:

1
2
3
4
5
6
If Not IsNull(RstAlgo.Fields("NombredeCampo")) Then     ---'Esto verifica que si no es nulo hará algo
            hacer algo acá
else
       El registro es nulo
 
endif

Espero te sirva.

Saludos cordiales
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