Visual Basic - Sentencia monstruosa RESUELTO

Life is soft - evento anual de software empresarial
 
Vista:

Sentencia monstruosa RESUELTO

Publicado por Lorien (15 intervenciones) el 28/04/2015 10:47:22
TEMA CERRADO
¿Tan monstruosa es esta sentencia que visualBasic no la traga ni aun sin valores nulos?

¿Que estoy haciendo mal?

=====

If Not [filtrohistoria].Value Is Null Then

=====

Para mas informacion, dire que el error que me da es el 424, y lo da aun sin valores nulos implicados.
Error en tiempo de ejecucion.
Si quito el bucle if y no meto valores nulos no hay ningun problema, pero si los meto me da el error 94 que ya conocereis, error de valores nulos (Null), por lo tanto ese bucle if deberia ser el control de errores, no el error en si

Esto ya es personal, ¿estoy haciendo algo mal?, ¿esta ese bucle tan simple mal programado y no me he dado ni cuenta?

Señores, señoras, tema resuelto. El problema era el Is, el cual habia que sustituir por un =. En uno de mis momentos de desquiciada cambie el = por un Is pensando que solucionaria el asunto y ya se quedo asi para siempre. Os dejo el codigo solucionado son todas las posibilidades cerradas:
Valor ya existente en la BBDD
Valor nuevo
Valor Null

CODIGO:
=====
Private Sub comprobarhistoria_Click()

Dim sql As String
Dim rs As recordset

If Not [filtrohistoria].Value = Null Then
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
Else
MsgBox "Introduzca un numero de historia", vbOKOnly, "Comprobacion erronea"
End If

End Sub
=====
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

Sentencia monstruosa NO RESUELTO

Publicado por LorienElLoco (15 intervenciones) el 28/04/2015 11:06:34
Odio la programacon en VB.

No esta resuelto, ahora simplemente sale por el else todo el rato, solo sirve si el valor es Null, y no creo que lo haga por ser nulo sino porque de alguna manera ese bucle infernal sale por el else...

Me recluyo a mi cueva a ver si logro solucionar esta mierda abismal
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

Sentencia monstruosa NO RESUELTO

Publicado por Pedro Luis (56 intervenciones) el 28/04/2015 13:28:35
Y si cambias Null por ""
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

Sentencia monstruosa NO RESUELTO

Publicado por Lorien (15 intervenciones) el 28/04/2015 13:46:28
Hola

El problema es que entonces, al enviar un valor nulo a sentencia sql para comprobar, el error SALTA y leelo bien, yo tampoco lo entiendo, SALTA antes incluso de comprobar a traves del bucle IF. Te voy a meter el código y ya veras, la cosa jodida es que VisualBasic 6.3 con acces 2003 no tiene depurador paso a paso metiendo manualmente valores en las variables (desde mi punto de vista un problema de robustez impresionante pero que puedes esperar del 2003)

La cosa es que si pongo:

If [filtrohistoria].Value = Null Then

Me sale directamente por el else pase lo que pase.

=====

Si pongo:

If [filtrohistoria].Value = "" Then

siendo " las comillas de MAYUS+2 (por si no queda claro)

Me da el error en esta linea: (error de uso de valores nulos cuando no deberia, 94)

f [filtrohistoria].Value = Null Then
' Si es nulo, volver a introducir valor
MsgBox "Introduzca un numero de historia", vbOKOnly, "Comprobacion erronea"
Else
' Si no es nulo, comprobar si esta dado de alta en PACIENTE
sql = "select historia from PACIENTE where historia = " & CStr([filtrohistoria].Value) & "" ' <===

=====

Si pongo:

If [filtrohistoria].Value Is Null Then

Observese el uso de Is Null en vez de = Null

Me da error de falta el objeto, o se esperaba objeto (creo recordar que era error 424)
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 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

Sentencia monstruosa NO RESUELTO

Publicado por Andres Leonardo (1798 intervenciones) el 28/04/2015 16:02:34
Cuando recuperes pon

[filtrohistoria].Value = [filtrohistoria].Value & "" ' CONCATENAS doble comilla vacia

Luego validas ' es decir el valor era nulo pero ahora es "" caso contrario no entrara
If [filtrohistoria].Value = "" Then
TUS INSTRUCCIONES

mE AVISAS COMO TE FUE.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Sentencia monstruosa NO RESUELTO

Publicado por Lorien (15 intervenciones) el 29/04/2015 13:26:17
Al final lo he apañado de la siguiente manera:

If Not IsNull([filtrohistoria].Value) Then

De esta manera comprueba si el valor es nulo de forma correcta (la sutil diferencia es que comprueba antes de leer la variable directamente para comprobar, momento en el cual daba el error directamente)

Asi que ahi voy, corrigiendo mas errores y dandole caña al visual basic 6.3 co9n el acces 2003; es lo que tiene no poder elegir la aplicacion en la cual vas a montar tu BBDD

Gracias por tu interes Andres y por tu ayuda
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