Visual Basic - Error por campo vacío

Life is soft - evento anual de software empresarial
 
Vista:

Error por campo vacío

Publicado por Jorge Sanchez (12 intervenciones) el 14/12/2006 03:46:59
Ahora me surge un nuevo error, pasa que cuando trato de asignar un valor resultante del RecordSet a un texto, me manda el siguiente error si el valor es nulo:
"La operación de múltiples pasos de OLE DB generó errores. Compruebe los valores de estado de OLE DB si es posible. No se realizará ningún trabajo. Error número -2147217887".
He intentado evitar el error con la función ISERROR pero no funcionó:
If Not IsError(conexion.rst.Fields("Estado")) Then
frmEmpresas.txtEstado = conexion.rst.Fields("Estado")
Else
frmEmpresas.txtEstado = ""
End If
¿Alguien podrí ayudarme?, gracias de antemano.

Saludos
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

RE:Error por campo vacío

Publicado por Pita (38 intervenciones) el 14/12/2006 06:00:54
no cacho el error

sugencias

alomejor esta mal definido como null en la BD

alomejor el recorset ta en EOF o vacio

mejor podrias mandar el codigo donde se te cae

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

RE:Error por campo vacío

Publicado por Alex (40 intervenciones) el 14/12/2006 09:23:30
Prueba cambiando IsError por IsNull.
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

RE:Error por campo vacío

Publicado por Pere (150 intervenciones) el 14/12/2006 11:26:00
Prueba, como dice Alex, con IsNull
El valor de Isnull es, por defecto, True por eso hay que poner Not IsNull

Lo que estás haciendo es decir si no hay error en la conexión y, como no lo hay, pues te devuelve el valor correspondiente por lo que si el campo está vacío te devuelve ese tipo de error.

Prueba esto:

If Not IsNull(conexion.rst.Fields("Estado")) Then
frmEmpresas.txtEstado = conexion.rst.Fields("Estado")
Else
frmEmpresas.txtEstado = ""
End If

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

RE:Error por campo vacío

Publicado por Jorge Sanchez (12 intervenciones) el 14/12/2006 12:20:53
Hola a todos

Antes que nada quiero agradecerles por sus respuestas. He intentado ya con IsNull y agregando la propiedad IsValue:
With conexion
If Not IsNull(.rst.Fields("Estado").Value) Then
frmEmpresas.txtEstado = .rst.Fields("Estado").Value
Else
frmEmpresas.txtEstado = ""
End If
End With

Pero parece que el error se produce antes de que se valida IsNull. En última instancia, ¿me podrían explicar un poco acerca de la definición NUL de la base de datos de MySQL?, esto no se me hace una buena opción, por que VB debería ser capaz de captar este error y permitir programáticamente manejarlo, pero en última instancia no tendría otra opción.

Como dato adicional, en la ventana de inspecciones "debugueando" la aplicación enuentro esto en conexion.rst.fields.Field5 (que es el campo donde da el error al ser el primer campo que encuentra vacío):

"La operación de múltiples pasos..." (lo qu describí como mensaje de error en un inicio).

Espero me puedan ayudar, muchas gracias.

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

RE:Error por campo vacío

Publicado por Pere (150 intervenciones) el 14/12/2006 13:01:57
No sé como se hace con MySql. Yo, en el Select de una BD SQL, hago una consulta de la manera siguiente para que no me devuelva los campos nulos:

"SELECT * FROM MiTabla WHERE nombre IS NOT NULL "

De esta manera no me tengo que preocupar por los valores devueltos.
Siento, de veras, no poderte ayudar más.

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

RE:Error por campo vacío

Publicado por Jorge Sanchez (12 intervenciones) el 14/12/2006 15:25:47
No te preocupes, muchas gracias, me diste la pista para buscar la solución por SQL, la sentencia debe ser:
SQL = "SELECT ISNULL(Estado, ''),..."
y esta es la que debo ejecutar para el RecodSet, así cambia el valor nulo por ''.

Lo voy a probar y les informo como resultó, ahora no puedo por que no estoy en mi cuarto.

Muchas gracias a todos, 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

RE:Error por campo vacío

Publicado por miguel (13 intervenciones) el 15/12/2006 12:41:58
Podrías usar IIf para comprobar si el valor devuelto es Null, si lo es, asignas un blanco para que no gatille el error:

frmEmpresas.txtEstado.Text = IIf(IsNull(conexion.rst.Fields("Estado")), " ", (conexion.rst.Fields("Estado")))

Espero te sirva
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

RE:Error por campo vacío

Publicado por Jorge Sanchez (12 intervenciones) el 15/12/2006 17:14:36
Hola a todos, antes que nada muchas gracias por su apoyo. Les comento como se resolvió el tema, espero que a alguien le siirva alguna vez. Lo que hice fué colocar en la sentencia SQL la validación, así:

sql = "SELECT CIA, COALESCE(ESTADO,´´) FROM EMPRESA"

donde CIA y ESTADO son campos de la tabla EMPRESA. COALESCE es una sentencia de MySQL que devuelve el primer valor no nulo, así si ESTADO es nulo, devolverá '', y si no devolverá el valor de ESTADO. En SQL tengo entendido que se utiliza ISNULL(ESTADO,''), pero en MySQL no me funcionó, ya que ISNULL solo devuelve 1 ó 0 dependiendo si es nulo.

Pero se debe tener cuidado al recuperar en VB el valor, comunmente con MySQL se recupera así:

con.rst.Fields("ESTADO").Value

Pero al usar COALESCE manda un error por que no identifica el objeto, se debe de colocar la sentencia completa así:

con.rst.Fields("COALESCE(ESTADO,´´)").Value

Les agradezco mucho su ayuda, soy nuevo en esto de VB y MySQL, pero estoy encontrando que es muy interesante.

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