Ver Mensaje Individual
  #11 (permalink)  
Antiguo 03/05/2013, 18:04
javidotnet
 
Fecha de Ingreso: mayo-2013
Ubicación: Chaco, Argentina
Mensajes: 45
Antigüedad: 11 años, 6 meses
Puntos: 3
Respuesta: Problema Excepción BDNull

Cita:
Iniciado por NazCarLpa Ver Mensaje
Hola Javi, el > ya lo había provado y nada incluso >= y tampoco.

Al poner el msbox me saltan dos, el primero da "1" y el segundo nada se queda en blanco.

Saludos.
Hola Naz

¡¡ Ya solucionamos el problema !!

según lo que me dices, el error está aquí (lo marco en rojo y negrita):

Código:
'Mostramos el siguiente ID que corresponde al usuario que estamos reguistrando
BD.Rellena("SELECT MAX(Id) FROM moviles", "IDF")

If BD.Dt.Tables("IDF").Rows.Count <> 0 Then
TbID.Text = (CStr(CInt(BD.Dt.Tables("IDF").Rows(0).Item(0)) + 1))
Else
TbID.Text = "1"
End If
Fila = -1
'Fin muestra del ID
Lo que me parece extraño es que no lo hayas podido solucionar con el código que te pasé en mi primer respuesta:

Cita:
Otra línea que tal vez esté generando el error puede ser

Código:
TbID.Text = (CStr(CInt(BD.Dt.Tables("IDF").Rows(0).Item(0)) + 1))
Para evitar este error se debe verificar antes de asignar el valor al textbox:

Código:
If Not BD.Dt.Tables("IDF").Rows(0).isnull(0) Then
	TbID.Text = BD.Dt.Tables("IDF").Rows(0).item(0).tostring
End If
Por favor, prueba de nuevo con el código que te voy a pasar a continuación y luego me cuentas:

Código:
'Mostramos el siguiente ID que corresponde al usuario que estamos reguistrando
BD.Rellena("SELECT MAX(Id) FROM moviles", "IDF")

If TypeOf BD.Dt.Tables("IDF").Rows(0).Item(0) Is DBNull then
    TbID.Text = "1"
Else
    TbID.Text = (CStr(CInt(BD.Dt.Tables("IDF").Rows(0).Item(0)) + 1))
End If
Fila = -1
'Fin muestra del ID
El If que estaba antes lo saqué del código porque siempre hay una fila en la tabla "IDF" que es resultado de "SELECT MAX(Id) FROM moviles"

Por lo tanto lo que se debe comprobar es si la función MAX() devuelve un valor nulo (DBNull) o un número, y por eso ese nuevo If:
Código:
If TypeOf BD.Dt.Tables("IDF").Rows(0).Item(0) Is DBNull then
Con esto debería desaparecer el error "La conversión del tipo 'DBNull' al tipo Integer no es válida."

Asimismo, existe otra solución, más elegante aún, que consiste en lo que dijo Thumper:

Cita:
Tu select ponlo así:

SELECT ISNULL(MAX(Id),0) FROM moviles

Saludos
aunque hay que corregirla para que no de error, y la corrección que propongo es la siguiente:

Código:
SELECT IIF(ISNULL(MAX(ID)),0,MAX(ID)) FROM moviles
entonces la solución quedaría así:

Código:
'Mostramos el siguiente ID que corresponde al usuario que estamos reguistrando
BD.Rellena("SELECT IIF(ISNULL(MAX(ID)),0,MAX(ID)) FROM moviles", "IDF")

TbID.Text = CStr(CInt(BD.Dt.Tables("IDF").Rows(0).Item(0)) + 1)

Fila = -1
'Fin muestra del ID
Como puedes ver nos ahorramos el if

Resumiendo, hay dos opciones de solución:
1ra. opción:
Código:
'Mostramos el siguiente ID que corresponde al usuario que estamos reguistrando
BD.Rellena("SELECT MAX(Id) FROM moviles", "IDF")

If TypeOf BD.Dt.Tables("IDF").Rows(0).Item(0) Is DBNull then
    TbID.Text = "1"
Else
    TbID.Text = (CStr(CInt(BD.Dt.Tables("IDF").Rows(0).Item(0)) + 1))
End If
Fila = -1
'Fin muestra del ID
2da. opción:
Código:
'Mostramos el siguiente ID que corresponde al usuario que estamos reguistrando
BD.Rellena("SELECT IIF(ISNULL(MAX(ID)),0,MAX(ID)) FROM moviles", "IDF")

TbID.Text = CStr(CInt(BD.Dt.Tables("IDF").Rows(0).Item(0)) + 1)

Fila = -1
'Fin muestra del ID
Espero que puedas solucionar todo y me cuentes cuál opción te convence más.

De todas formas, avísame cualquier cosa que no puedas solucionar, trataremos de encontrarle solución.

Saludos cordiales.

Última edición por javidotnet; 03/05/2013 a las 18:09