Problema con System.IndexOutOfRangeException

Que tal amigo buen día! Sopy nuevo en el mundo de la programación y tengo un pequeño problema con unas etiquetas que estoy realziando en VB 2010 debido a que la información obtenida proviene de una base de datos de SQL, mi problema es que cuando intento buscar una factura que no existe me aparece el error System. IndexOutOfRangeException, que tengo que hacer para solocionar dicho error, y que cuando busque una factura inexistente me aparezca un msgbox con dicha leyenda y no me cierre el programa!?... Agradezco de antemano la ayuda que me proporciones.. Adjunto mi código por si acaso. Saludos
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim filas() As DataRow
filas = Me.EtiquetasDataSet.etiquetas.DataSet.Tables(0).Select("DocNum = " & txtFactura.Text)
txtnumCliente.Text = filas(0).ItemArray(2).ToString()
txtCliente.Text = filas(0).ItemArray(3).ToString()
txtDireccion.Text = filas(0).ItemArray(4).ToString()
txtPedido.Text = filas(0).ItemArray(5).ToString()
txtRFC.Text = filas(0).ItemArray(6).ToString()
?
?
End Sub
?
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: This line of code loads data into the 'EtiquetasDataSet.etiquetas' table. You can move, or remove it, as needed.
Me.EtiquetasTableAdapter.Fill(Me.EtiquetasDataSet.etiquetas)
Dim fecha As Date
Dim ins As String
fecha = Date.Now
ins = "Fecha de Envío : " & (fecha) & "/" & Month(fecha) & "/" & Year(fecha)
Label2.Text = ins
End Sub
Private Function IsDBNull() As Boolean
Throw New NotImplementedException
End Function
End Class

1 respuesta

Respuesta
1
El problema radica que está haciendo la consulta como que si existiera dicho documento. Si el documento no existe, entonces el índice viene con valor NULL generando un problema de índices inválidos.
filas = Me.EtiquetasDataSet.etiquetas.DataSet.Tables(0).Select("DocNum = " & txtFactura.Text)
Después de esta instrucción hay que validar si viene datos, no uso desde hace ratos VB, pero me imagino que si no vienen datos la variable filas tendrá valor NULL entonces algo adecuado sería
if isnul(filas) then
  msgbox("No existe el número de factura")
else
  :
end if
Éxitos,
Julius
-Guatemala-
PD. Hay que consultar la documentación, para determinar exactamente que valor devuelve la instrucción
.DataSet.Tables(0).Select("DocNum = " & txtFactura.Text)
Para lograr capturar en ese momento cuando no exista la factura.
De antemano agradezco infinitamente la atención que me proporcionas... en ese aspecto ya quedo.. pero me podrías apoyar en 2 cosas más... necesito un botón el cual guarde esos datos en una base de datos SQL cosa que eh intentado y no me da =( y otra cosa que me causa mucho problema es que no puedo imprimir este formulario... Muchas gracias amigo!
Imprimir el formulario. Directamente desde VB no se puede. El formulario es una ventana que se muestra en Windows, hasta ahí nomas, si queremos que los datos se impriman es necesario hacer un reporte. La versión 6.0 tenía una herramienta donde se podían hacer reportes limitados con Crystal Report. No sé si .NET tiene algo similar.
Para grabar, al menos en VB6, cuando se trabajan con controles, se debía de utilizar una instrucción Insert Row, en esta página
http://social.msdn.microsoft.com/Forums/es-ES/dotnetes/thread/6cc26fba-9755-4bb6-9c27-4ae43bfc555b
Tienen un ejemplo para Access, la operatoria es igual en SQL, solo hay que cambiar el oledbconecction con los datos necesarios para hacer la conexión al servidor de SQL
Éxitos,
Julius
- Guatemala -
Que tal amigo! Agradezco muchísimo l aatencion rápida y oportuna que me brindaste y te pido una gran disculpa por el retraso de este mismo.
Espero que tengas buen día y reitero mi agradecimiento.
Saludos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas