Visual Basic - Error 94 en tiempo de ejecución. Uso no válido de null.

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 9
Ha disminuido 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Error 94 en tiempo de ejecución. Uso no válido de null.

Publicado por José (4 intervenciones) el 28/02/2019 02:41:58
Buen día amig@s.

Estoy diseñando un sistema en VB 6.0 conectado a MySQL 5.7.13 con el conector ODBC MySQL 5.3.
Sin problemas al conectar. Pero cuando hago una consulta específica, hago la conexión, ejecuto la consulta, me indica que el recordset trae datos, la propiedad EOF del recordset es FALSE, pero justo al momento de introducir el resultado del campo en una variable me salta el error: Error 94 en tiempo de ejecución. Uso no válido de null. como si la consulta no devolviera datos y, por supuesto, en la BD hay datos que cumplen con el filtro.

Por favor alguien me puede dar alguna pista de lo que sucede, se los agradecería mucho.

Anexo parte del código + imagen del error:

Clase: clsAlgo.cls

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Public id     as Integer
Public nombre as String
 
' En otra parte del código previo al llamado de la función BUSCAR, invoco a la función CONECTAR 
' que establece la conexión a la BD (ODBC - MySQL)
 
Public Function BUSCAR() As Boolean
  Dim enc As Boolean
  Dim sql As String
  Dim tb As New ADODB.Recordset
 
  sql = "select * from tabla where id=" & id
 
  tb.Open sql, Con
 
  If Not tb.EOF Then
    nombre = tb!nombre  (--> aquí salta el error)
    enc = True
  End If
  tb.Close
  Set tb = Nothing
 
  BUSCAR = enc
End Function
 
'----------------------------------------------------
' Clase: clsConex.cls (Usada para COnexión a MySQL)
'----------------------------------------------------
Public Con As New ADODB.Connection
 
Public Sub CONECTAR()
  Dim strConn As String
 
  strConn = "DSN= conexmysql; " _
          & "Server=localhost; " _
          & "Database=basedatos; " _
          & "UID=root; " _
          & "PWD=123456;"
 
  Con.Open strConn
End Sub

imagen1
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 gilman
Val: 462
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Error 94 en tiempo de ejecución. Uso no válido de null.

Publicado por gilman (268 intervenciones) el 28/02/2019 08:25:12
El erro es claro, tb!nombre es nulo y nombre es una variable de tipo String, las variables de tipo String no admiten valores nulos.
La solución mas sencilla es sustituir la sentencia:
1
nombre = tb!nombre
por
1
nombre = tb!nombre & ""
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
Imágen de perfil de Andres Leonardo
Val: 3.851
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Error 94 en tiempo de ejecución. Uso no válido de null.

Publicado por Andres Leonardo (1603 intervenciones) el 28/02/2019 16:26:11
Excelente Gilman .... es una de las mejores maneras de evitar el uso invalido del null.... en codigo de vb

Si usas sql podrias en la sentencia hacer la validacion


isnull(campo ,"") en los campos

Saludos..
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
Imágen de perfil de gilman
Val: 462
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Error 94 en tiempo de ejecución. Uso no válido de null.

Publicado por gilman (268 intervenciones) el 28/02/2019 16:44:18
No se en el caso de MySQL, en Acces y SQL, si no recuerdo mal, sirve la opción que das, pero en Oracle el equivalente (NVL(campo,''), no sirve, ya que en Oracle la cadena vacía y NULL son lo mismo.
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
sin imagen de perfil
Val: 9
Ha disminuido 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Error 94 en tiempo de ejecución. Uso no válido de null.

Publicado por José (4 intervenciones) el 28/02/2019 22:32:51
Gracias Andres Leonardo por contestar.

Con su propuesta me ayuda a que no me muestre el error y la ejecución del programa continúe sin detenerse por el surgimiento del error, pero la variable nombre sale de la función sin valor ó vacía y realmente la consulta me trae un valor diferente de Null.

Yo hago lo siguiente:

1) Hago un breakpoint en la instrucción If Not tb.EOF Then,
2) al detenerse allí, reviso a través de la venta Inmediato y evalúo el valor que trae tb!nombre (? tb!nombre) y allí me muestra el valor que trae de la consulta: Vehículo
3) pero al momento de asignarla a la variable en la instrucción nombre = tb!nombre surge el error. Evalúo nuevamente en la ventana Inmediato a tb!nombre y ahora me muestra Null.

Es lo que no entiendo por qué pasa esto justo al momento de la asignación: cambia el valor que trae de la consulta "Vehículo" y muestra Null.
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.851
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Error 94 en tiempo de ejecución. Uso no válido de null.

Publicado por Andres Leonardo (1603 intervenciones) el 28/02/2019 22:48:33
Podrias por favor indicar un poco de tu codigo ...

por que si ya lo asignaste te sale NULL deberias decir vehiculo.

considero que si pones parte de codigo podriamos entenderlo mejor ...
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
sin imagen de perfil
Val: 9
Ha disminuido 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Error 94 en tiempo de ejecución. Uso no válido de null.

Publicado por José (4 intervenciones) el 28/02/2019 22:32:04
Gracias gilman por contestar.

Con su propuesta me ayuda a que no me muestre el error y la ejecución del programa continúe sin detenerse por el surgimiento del error, pero la variable nombre sale de la función sin valor ó vacía y realmente la consulta me trae un valor diferente de Null.

Yo hago lo siguiente:

1) Hago un breakpoint en la instrucción If Not tb.EOF Then,
2) al detenerse allí, reviso a través de la venta Inmediato y evalúo el valor que trae tb!nombre (? tb!nombre) y allí me muestra el valor que trae de la consulta: Vehículo
3) pero al momento de asignarla a la variable en la instrucción nombre = tb!nombre surge el error. Evalúo nuevamente en la ventana Inmediato a tb!nombre y ahora me muestra Null.

Es lo que no entiendo por qué pasa esto justo al momento de la asignación: cambia el valor que trae de la consulta "Vehículo" y muestra Null.

Espero ser claro en mi explicación. 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
sin imagen de perfil
Val: 9
Ha disminuido 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Error 94 en tiempo de ejecución. Uso no válido de null.

Publicado por José (4 intervenciones) el 20/03/2019 00:05:03
Buen día a tod@s.

Me disculpo por no haber contestado antes.

Logré encontrar la solución al problema: consiste en colocar la función Trim() al campo de la tabla para que no coloque Null en el resultado que trae de la consulta.

Así:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Public id     as Integer
Public nombre as String
 
' En otra parte del código previo al llamado de la función BUSCAR, invoco a la función CONECTAR 
' que establece la conexión a la BD (ODBC - MySQL)
 
Public Function BUSCAR() As Boolean
  Dim enc As Boolean
  Dim sql As String
  Dim tb As New ADODB.Recordset
 
  sql = "select * from tabla where id=" & id
 
  tb.Open sql, Con
 
  If Not tb.EOF Then
    nombre = Trim(tb!nombre)  --> aquí ocurrìa el error, se corrige con agregar la function Trim() al campo
    enc = True
  End If
  tb.Close
  Set tb = Nothing
 
  BUSCAR = enc
End Function
 
'----------------------------------------------------
' Clase: clsConex.cls (Usada para Conexión a MySQL)
'----------------------------------------------------
Public Con As New ADODB.Connection
 
Public Sub CONECTAR()
  Dim strConn As String
 
  strConn = "DSN= conexmysql; " _
          & "Server=localhost; " _
          & "Database=basedatos; " _
          & "UID=root; " _
          & "PWD=123456;"
 
  Con.Open strConn
End Sub

¡¡¡ MUCHAS GRACIAS A TODOS LOS QUE APORTARON SU AYUDA. SALUD A TODOS !!!
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