Error :IndexOutofRangeException was unhandled : There is no row at position 0.

Recientemente estoy programando en .net pero, lo que hago es jalar datos a un datatable y de ahi jalar fila a fila:
Private Function f_Retrieve(ByVal v_NroGuia As String) As Integer
Dim index As Integer
Dim ObjClassBuscarPreguias_LN As New Cls_BuscarPreGuias_LN
Windows.Forms.Cursor.Show()
Windows.Forms.Cursor.Current = Cursors.WaitCursor
Dim dtResultado As New DataTable
dtResultado = ObjClassBuscarPreguias_LN.BuscarNroGuia_LN(v_NroGuia)
LblCiudad.Text = dtResultado.Rows(0).Item("ORIGEN")
TxtCiudadDestino.Text = dtResultado.Rows(0).Item("DESTINO")
End Function
Pero sale un error, me dice
IndexOutofRangeException was unhandled :
There is no row at position 0.
No se por que ese error.

1 respuesta

Respuesta
1

Quise correr tu programa para ver el error pero no tengo la clase BuscarPreguias_LN. Lo que yo me imagino que te esta pasando es que esta función no encuentra ninguna fila con el numero de guía buscado y por lo tanto la tabla dtResultado no contiene ningún registro. Checalo o mandame ObjClassBuscarPreguias_LN. Para probar. Bye

Hola,

Lo que pasa es que yo estoy programando en 4 capas, la clase BuscarPreguias_LN se conecta a la capa lógica, aquí va el código:

Imports INTEGRACION_AD
Imports System.Data.OracleClient
Public Class Cls_BuscarPreGuias_LN
Dim Ob_ClsPreguias_AD As New Cls_BuscarPreGuias_AD
Public Function BuscarNroGuia_LN(ByVal v_Preguias As String) As DataTable
Return Ob_ClsPreguias_AD.BuscarPreguias_AD(v_Preguias)
End Function
End Class

y como te darás cuenta hay clase que se conecta a la capa Datos :

BuscarPreguias_AD

Public Function BuscarPreguias_AD(ByVal vi_PreGuias As String) As DataTable
Try
Dim dt As DataTable = New DataTable()
Dim da As OracleDataAdapter = New OracleDataAdapter()
iOracle_Cmd.Connection = Conexión()
iOracle_Cmd.CommandType = CommandType.StoredProcedure 'indicamos que es un procedure
iOracle_Cmd.Parameters.Clear()
iOracle_Cmd.CommandText = "SP_BUSCAR_PRE_GUIAS"
iOracle_Cmd.Parameters.Add("p_NumeroGuia", OracleType.VarChar).Value = vi_PreGuias
Dim prm1 As New OracleParameter("CUR_BUSCAR_GUIAS", OracleType.Cursor)
prm1.Direction = ParameterDirection.Output
iOracle_Cmd.Parameters.Add(prm1)
da.SelectCommand = iOracle_Cmd
da.Fill(dt)
iOracle_Cmd.Connection.Close()
Return dt
Catch ex As Exception
Throw New Exception(ex.Message)
Finally
iOracle_Cmd.Connection.Close()
End Try
End Function

query oracke

create or replace procedure SP_BUSCAR_PRE_GUIAS_II(v_nro_guia in varchar2,
CUR_PRE_GUIAS OUT TYPES.CURSOR_TYPE
)AS
begin
OPEN CUR_PRE_GUIAS FOR
SELECT
tpg.nro_guia_ini, tpg.nro_guia_final,
R1.nombre_unidad AS Origen,
r2.nombre_unidad as Destino,
DECODE(tpg.idtipo_entrega_carga, 1, 'AGENCIA', 2, 'DOMICILIO') AS TIPO_ENTREGA,
tcc.centro_costo as Centro_Costo,
f_t_persona_razon_social(tpg.idpersona) AS CLIENTE,
tpg.fecha_registro
FROM t_pre_guias tpg,
T_UNIDAD_AGENCIA R1,
T_UNIDAD_AGENCIA R2,
t_centro_costo tcc
WHERE
TPG.idagencias_ori = R1.idunidad_agencia
and TPG.idagencias_desti = R2.idunidad_agencia
and tpg.idcentro_costo = tcc.idcentro_costo
and tpg.nro_guia_ini <> 10 and tpg.nro_guia_final <> 15
and tpg.nro_guia_ini = (case when v_nro_guia
between tpg.nro_guia_ini and tpg.nro_guia_final then tpg.nro_guia_ini end)
and tpg.nro_guia_final = case when v_nro_guia
between tpg.nro_guia_ini and tpg.nro_guia_final
then tpg.nro_guia_final end
and r2.nombre_unidad is not null
and tcc.centro_costo is not null
and tpg.nro_guia_final > tpg.nro_guia_ini;
end SP_BUSCAR_PRE_GUIAS_II;

Y lo pasa es que, mediante un query en oracle estoy consultando, y jalando datas, pero me sale ese error y lo que hago es poner todo en datatable y y de ahí jalo columna por columna en cajas de textos o label, pero sale ese error que toy que le doy y doy vueltas.

Te agradecería si me apoyas, graciass.

Creo que no lo puedo probar pues no tengo oracle y ademas no se usarlo, la sugerencia que te hago es que cheques de alguna manera si la búsqueda produce alguna fila, si no la produce entonces ese es el error.

Hola Surtidora,

Bueno ya logre solucionar mi problema haciendo esto :

If (dtResultado.Rows.Count > 0) Then
TxtCiudadDestino.Text = IIf(IsDBNull(dtResultado.Rows(0)("DESTINO")), "", dtResultado.Rows(0)("DESTINO"))
CboTipoEntrega.Text = IIf(IsDBNull(dtResultado.Rows(0)("TIPO_ENTREGA")), "", dtResultado.Rows(0)("TIPO_ENTREGA"))
LblCiudad.Text = IIf(IsDBNull(dtResultado.Rows(0)("ORIGEN")), "", dtResultado.Rows(0)("ORIGEN"))
Else
f_limpiar()
End If

Gracias.

Que bueno que ya solucionaste el problema, según veo lo que checas es si el numero de registros es mayor que cero, gracias por hacérmelo saber. Bye

De nada espero que podamos seguir apoyándonos,

suerte

Hola Surtidora, tengo el siguiente código

If frm.bDireccionModificada Or dtDireccion Is Nothing Then
Me.CboDireccion.DataSource = Nothing
Me.CboDireccion.Items.Clear()
dtDireccion = New DataTable
dtDireccion.Columns.Add(New DataColumn("iddireccion_consignado", GetType(Integer)))
dtDireccion.Columns.Add(New DataColumn("dirección", GetType(String)))
dtDireccion.Columns.Add(New DataColumn("id_via", GetType(Integer)))
dtDireccion.Columns.Add(New DataColumn("vía", GetType(String)))
dtDireccion.Columns.Add(New DataColumn("numero", GetType(String)))
dtDireccion.Columns.Add(New DataColumn("manzana", GetType(String)))
dtDireccion.Columns.Add(New DataColumn("lote", GetType(String)))
dtDireccion.Columns.Add(New DataColumn("id_nivel", GetType(Integer)))
dtDireccion.Columns.Add(New DataColumn("nivel", GetType(String)))
dtDireccion.Columns.Add(New DataColumn("id_zona", GetType(Integer)))
dtDireccion.Columns.Add(New DataColumn("zona", GetType(String)))
dtDireccion.Columns.Add(New DataColumn("id_clasificacion", GetType(Integer)))
dtDireccion.Columns.Add(New DataColumn("clasificación", GetType(String)))
dtDireccion.Columns.Add(New DataColumn("iddepartamento", GetType(Integer)))
dtDireccion.Columns.Add(New DataColumn("idprovincia", GetType(Integer)))
dtDireccion.Columns.Add(New DataColumn("iddistrito", GetType(Integer)))
dr = dtDireccion.NewRow
dr("iddireccion_consignado") = 0
dr("dirección") = " (SELECCIONE)"
dr("id_via") = 0
dr("vía") = ""
dr("numero") = ""
dr("manzana") = ""
dr("lote") = ""
dr("id_nivel") = 0
dr("nivel") = ""
dr("id_zona") = 0
dr("zona") = ""
dr("id_clasificacion") = 0
dr("clasificación") = ""
dr("iddepartamento") = 0
dr("idprovincia") = 0
dr("iddistrito") = 0
dtDireccion.Rows.Add(dr)
If frm.bDireccionModificada Then
'------datos dirección estructurada---------
iDepartamentoCli = frm.CboDepartamento.SelectedValue
iProvinciaCli = frm.CboProvincia.SelectedValue
iDistritoCli = frm.CboDistrito.SelectedValue
IDviaCli = frm.CboVia.SelectedValue
ViaCli = frm.TxtVia.Text
NroCli = frm.TxtNumero2.Text
ManzanaCli = frm.TxtManzana.Text
loteCli = frm.TxtLote.Text
id_NivelCli = frm.CboNivel.SelectedValue
NivelCli = frm.TxtNivel.Text
id_ZonaCli = frm.CboZona.SelectedValue
ZonaCli = frm.TxtZona.Text
id_ClasificacionCli = frm.CboClasificacion.SelectedValue
ClasificacionCli = frm.TxtClasificacion.Text
FormatoCli = 1
'Dirección
'Dim sDireccion As String = frm.CboVia.Text & " " & frm.TxtVia.Text.Trim & " "
Dim sDireccion As String = IIf(frm.CboVia.SelectedValue = 0, "", frm.CboVia.Text) & " " & IIf(frm.CboVia.SelectedValue = 0, "", frm.TxtVia.Text.Trim) & " " 'Cambio 03102011
'sDireccion = Trim(sDireccion)
If frm.CboVia.SelectedValue > 0 And frm.TxtNumero2.Text.Trim.Length > 0 Then
sDireccion &= frm.TxtNumero2.Text.Trim & " "
End If
If frm.TxtManzana.Text.Trim.Length > 0 Then
sDireccion &= "MZ " & frm.TxtManzana.Text.Trim & " LT " & frm.TxtLote.Text.Trim & " "
End If
If frm.CboNivel.SelectedValue > 0 Then
sDireccion &= frm.CboNivel.Text & " " & frm.TxtNivel.Text.Trim & " "
End If
If frm.CboZona.SelectedValue > 0 Then
sDireccion &= frm.CboZona.Text & " " & frm.TxtZona.Text.Trim & " "
End If
If frm.CboClasificacion.SelectedValue > 0 Then
sDireccion &= frm.CboClasificacion.Text & " " & frm.TxtClasificacion.Text.Trim & " "
End If
If frm.CboDistrito.SelectedValue > 0 Then
sDireccion &= frm.CboDistrito.Text
End If
dr = dtDireccion.NewRow
dr("iddireccion_consignado") = -1
dr("dirección") = sDireccion.Trim
dr("id_via") = frm.CboVia.SelectedValue
dr("vía") = frm.TxtVia.Text.Trim
dr("numero") = frm.TxtNumero2.Text.Trim
dr("manzana") = frm.TxtManzana.Text.Trim
dr("lote") = frm.TxtLote.Text.Trim
dr("id_nivel") = frm.CboNivel.SelectedValue
dr("nivel") = frm.TxtNivel.Text.Trim
dr("id_zona") = frm.CboZona.SelectedValue
dr("zona") = frm.TxtZona.Text.Trim
dr("id_clasificacion") = frm.CboClasificacion.SelectedValue
dr("clasificación") = frm.TxtClasificacion.Text.Trim
dr("iddepartamento") = frm.CboDepartamento.SelectedValue
dr("idprovincia") = frm.CboProvincia.SelectedValue
dr("iddistrito") = frm.CboDistrito.SelectedValue
dtDireccion.Rows.Add(dr)
End If
Me.CboDireccion.DataSource = dtDireccion
CboDireccion.DisplayMember = "dirección"
CboDireccion.ValueMember = "iddireccion_consignado"
If frm.bDireccionModificada Then
Me.CboDireccion.SelectedIndex = 1
Else
Me.CboDireccion.SelectedIndex = 0
End If
End If

Como te darás cuenta lo que hace ese código es que que cuando encuentra el combobox vacío ejecuta ese if, todos esos datos singresados a través de otra pantalla, todo lo hace bien, pero nono inserta en la tabla, ahora yo ya cree esa función y ya lo inserta perfectamente, y la función le puse este nombre : F_InsertarDireccion()

pero lo que pasa es que lo inserta en la tabla pero actualiza el combobox, tengo que cerrar la venta y volver a abrilo para poder ver recién el dato que ingrese a travz de otra ventana, la pregunta es, como hago para actualizar mi combobox, apenas ingrese datos a través de otra ventana, gracias.

¿Por qué no me enviaste el código de la función F_InsertarDireccion()?. Pienso que ahí habría que insertar un refresh.

Un favor cierra la pregunta anterior porque todo expertos me manda un mensaje diciendo que tengo una pregunta muy atrasada.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas