none
Index was out of range. Must be non-negative and less than the size of the collection parameter name:index

    Pregunta

  •     Public Sub Ncorr(ByVal datarow As Integer)

            Dim Conecta As Util.conecta = New Util.conecta
            Dim con As OleDb.OleDbConnection = New OleDb.OleDbConnection
            con.ConnectionString = Conecta.carga
            con.Open()
            Try
                'selecciona el maximo n_corr
                Dim sqlSelect As String = "SELECT MAX(N_CORR) AS MAXIMO" &
                     " FROM TB_FRM_1926_DET_B" &
                     " WHERE N_RUT=" & rutContri &
                     " AND N_ANO_TRI =" & frmAltas.cmbAnio.SelectedItem &
                     " AND C_TIP_FRM ='" & frmAltas.tipo & "'"
                Dim adapter2 As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(sqlSelect, con)
                Dim commandBuilder2 As OleDb.OleDbCommandBuilder = New OleDb.OleDbCommandBuilder(adapter2)
                Dim tablaCell2 As DataTable = New DataTable
                adapter2.Fill(tablaCell2)
                max = IIf(IsDBNull(tablaCell2.Rows(0).Item("MAXIMO")), 0, tablaCell2.Rows(0).Item("MAXIMO"))
                'For Each item2 As DataRow In tablaCell2.Rows
                '    max = IIf(IsDBNull((item2("MAXIMO"))), 0, item2("MAXIMO"))
                'Next

                With frmAltas.dgvNcorr
                    .Columns.Add("0", "numero")
                    For i As Integer = 0 To datarow - 1
                        .Rows(i).Cells(0).Value = i
                    Next
                End With

            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub

    hola tengo esta funcion, pero al llegar a la parte del For ma aparece el mensaje   "Index was out of range. Must be non-negative and less than the size of the collection parameter name:index"

    jueves, 29 de diciembre de 2016 21:11

Respuestas

  • kumpiita,

    ¿Qué pinta la variable 'commandBuilder2' en el código adjunto?. Evita tener variables globales (por ejemplo max), podrías implementar un procedimiento Function si quieres retornar dicho valor. Por otro lado, separa responsabilidades, creo que agregar filas a la grilla de datos no corresponde al procedimiento. 

    Public Sub Ncorr(ByVal datarow As Integer)
    
    	Try
    		Using cn As New OleDbConnection("Cadena de conexión")
    			Dim ConsultaSQL As String = "SELECT MAX(N_CORR) AS MAXIMO
    				From TB_FRM_1926_DET_B
    				Where N_RUT = ? AND N_ANO_TRI = ? AND AND C_TIP_FRM = ?"
    
    			Dim cmd As New OleDbCommand(ConsultaSQL, cn)
    
    			cmd.Parameters.AddWithValue("param1", rutContri)
    			cmd.Parameters.AddWithValue("param2", Me.cmbAnio.Text)
    			cmd.Parameters.AddWithValue("param3", Me.tipo)
    
    			cn.Open()
    			Dim Maximo As Integer = Convert.ToInt32(cmd.ExecuteScalar)
    
    			dgvNcorr.Columns.Add("ColNumero", "Numero")
    			For index = 0 To datarow - 1
    				Dim Indice As Integer = dgvNcorr.Rows.Add()
    				dgvNcorr.Rows(Indice).Cells("ColNumero").Value = index
    			Next
    		End Using
    	Catch ex As Exception
    		MsgBox(ex.Message)
    	End Try
    
    End Sub


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 29 de diciembre de 2016 21:44

Todas las respuestas

  • lo probe y me tira error aqui 
    New OleDb.OleDbCommandBuilder(sqlSelect, con)
    jueves, 29 de diciembre de 2016 21:38
  • With frmAltas.dgvNcorr
                    .Columns.Add("0", "numero")
                    For i As Integer = 0 To datarow - 1
                        .Rows(i).Cells(0).Value = i
                    Next
                End With

    en este for aparece el mensaje

    jueves, 29 de diciembre de 2016 21:38
  • kumpiita,

    ¿Qué pinta la variable 'commandBuilder2' en el código adjunto?. Evita tener variables globales (por ejemplo max), podrías implementar un procedimiento Function si quieres retornar dicho valor. Por otro lado, separa responsabilidades, creo que agregar filas a la grilla de datos no corresponde al procedimiento. 

    Public Sub Ncorr(ByVal datarow As Integer)
    
    	Try
    		Using cn As New OleDbConnection("Cadena de conexión")
    			Dim ConsultaSQL As String = "SELECT MAX(N_CORR) AS MAXIMO
    				From TB_FRM_1926_DET_B
    				Where N_RUT = ? AND N_ANO_TRI = ? AND AND C_TIP_FRM = ?"
    
    			Dim cmd As New OleDbCommand(ConsultaSQL, cn)
    
    			cmd.Parameters.AddWithValue("param1", rutContri)
    			cmd.Parameters.AddWithValue("param2", Me.cmbAnio.Text)
    			cmd.Parameters.AddWithValue("param3", Me.tipo)
    
    			cn.Open()
    			Dim Maximo As Integer = Convert.ToInt32(cmd.ExecuteScalar)
    
    			dgvNcorr.Columns.Add("ColNumero", "Numero")
    			For index = 0 To datarow - 1
    				Dim Indice As Integer = dgvNcorr.Rows.Add()
    				dgvNcorr.Rows(Indice).Cells("ColNumero").Value = index
    			Next
    		End Using
    	Catch ex As Exception
    		MsgBox(ex.Message)
    	End Try
    
    End Sub


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 29 de diciembre de 2016 21:44