Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: xRayderx en 14 Marzo 2018, 18:13 pm



Título: Problema para Actualizar y Guardar registros en Base de Datos
Publicado por: xRayderx en 14 Marzo 2018, 18:13 pm
Buenas tardes, el siguiente problema trata de un proyecto que estoy realizando en el cual estoy tratando de guardar registros y actualizar los mismos en mi base de datos access, pero me generan los siguientes errores:

Este es el diseño que tengo como ejemplo:

https://imageshack.com/a/img922/9868/XlQkSg.jpg (https://imageshack.com/a/img922/9868/XlQkSg.jpg)



Código:
Imports System.Data
Imports System.Data.OleDb

Public Class Form2
    Dim conexion As New OleDbConnection

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try
            conexion.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\jose\Documents\Visual Studio 2005\Projects\RJ Sports\RJ Sports\bin\Registro.mdb"

            MsgBox(" Conectado Correctamente ", vbInformation, " Conectado ")
        Catch ex As Exception
            MsgBox(" Error al conectar con la base de datos ", vbCritical, " Error ")
        End Try
    End Sub

    Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click
        conexion.Open()
        Try
            Dim cmd As OleDbCommand
            Dim r As Integer

            cmd = New OleDbCommand("insert into Registro(Cedula, Nombre, Apellido, Edad)values (' " & TextBox1.Text & " ', ' " & TextBox2.Text & " ', ' " & TextBox3.Text & " ', ' " & TextBox4.Text & " '),conexion")
            r = cmd.ExecuteNonQuery
            If r > 0 Then
                MsgBox(" Datos guardados correctamente ", vbInformation, " Guardado ")
            End If

        Catch ex As Exception
            MsgBox(" No se ha podido guardar los datos ", vbCritical, " Error ")

        End Try
        conexion.Close()

    End Sub

    Private Sub btnSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalir.Click
        Dim x As String
        x = MsgBox(" Desea Salir? ", vbQuestion + vbYesNo)
        If x = vbYes Then
            Close()

        End If
    End Sub

    Private Sub btnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscar.Click
        conexion.Open()
        Try
            Dim adaptador As OleDbDataAdapter
            Dim tabla As DataTable
            Dim buscar As String

            If ComboBox1.Text = " Todos " Then
                buscar = ("select * from Registro")
                adaptador = New OleDbDataAdapter(buscar, conexion)
                tabla = New DataTable
                adaptador.Fill(tabla)
                DataGridView1.DataSource = tabla

            Else

                buscar = ("select * from Registro where nombre = '" & ComboBox1.Text & " ' ")
                adaptador = New OleDbDataAdapter(buscar, conexion)
                tabla = New DataTable
                adaptador.Fill(tabla)
                DataGridView1.DataSource = tabla


            End If
        Catch ex As Exception
            MsgBox(ex.Message, vbCritical, " Error ")

        End Try
        conexion.Close()

    End Sub

    Private Sub btnEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminar.Click
        conexion.Open()
        Try
            Dim cmd1 As OleDbCommand
            Dim resul As MsgBoxResult

            If ComboBox1.Text = "Todos" Or ComboBox1.Text = "todos" Then
                resul = MsgBox(" Estas seguro de querer eliminar todos los registros de la tabla? ", vbQuestion + vbYesNo, " Advertencia ")

                If resul = vbYes Then
                    cmd1 = New OleDbCommand("delete from Registro", conexion)
                    cmd1.ExecuteNonQuery()

                    MsgBox(" Todos los datos se eliminaron correctamente ", vbExclamation, " Correcto ")

                End If

            Else
                cmd1 = New OleDbCommand("delete from Registro where nombre = '" & ComboBox1.Text & " ' ", conexion)
                cmd1.ExecuteNonQuery()

                MsgBox(" Registro eliminado correctamente ", vbInformation, " Correcto ")


            End If
        Catch ex As Exception
            MsgBox(ex.Message, vbCritical, " Error ")

        End Try
        conexion.Close()

    End Sub

    Private Sub btnActualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnActualizar.Click
        Try
            My.Forms.Form3.Actualizar_Cedula.Text = DataGridView1.SelectedRows.Item(1).Cells(1).Value.ToString
            My.Forms.Form3.Actualizar_Nombre.Text = DataGridView1.SelectedRows.Item(2).Cells(2).Value.ToString
            My.Forms.Form3.Actualizar_Apellido.Text = DataGridView1.SelectedRows.Item(3).Cells(3).Value.ToString
            My.Forms.Form3.Actualizar_Edad.Text = DataGridView1.SelectedRows.Item(4).Cells(4).Value.ToString
            My.Forms.Form3.Actualizar_Cedula.Enabled = False
            Form3.Show()

        Catch ex As Exception
            MsgBox(" Error: " & ex.Message.ToString)

        End Try
    End Sub
End Class


Cuando quiero guardar un registro me sale el mensaje de "No se ha podido guardar los datos"

El error al dar click en Actualizar dice esto: "Error: el indice estaba fuera del intervalo. Debe ser un valor no negativo e inferior al tamaño de la colección. 
Nombre del parametro: index"

No tengo mas idea de que pueda estar generando esos problemas. Saludos


Título: Re: Problema para Actualizar y Guardar registros en Base de Datos
Publicado por: Serapis en 15 Marzo 2018, 22:21 pm
No debes ser perezoso e intentar investigar por tí mismo...

Si sabes que el fallos e produce al actualizar, y el mensaje es que "el índice está fuera del rango...", y el objeto usado que tiene elementos es un datagridview, y la colección es "selectedRows", entonces porqué no investigas cuántos en efecto están seleccionados ?... es decir cuántos elementos tiene la colección SelectedRows?... y fíjate que es "selectedrows", quizás no esa colección la que desees usar...

En última instancia recuerda que aunque en efecto hubiera 4 elementos en la colección, los índices en general siempre van desde 0 hasta count-1, es decir 0, 1, 2, 3 ... naturalmente a veces el elemento 0, se deja como título, indice, etc...

Tu mismo tienes la respuesta, apenas pienses, pero investiga un poco, y usa el depurador que incluye el IDE... que es muy potente.


p.d.:
Volviendo a mirar, también veo que el ítem y la celda, tienen el mismo índice, esto implica que las celdas, están en diagonal... dudo mucho que deba ser así...

Así son los ítem(n).cell(n) que tienes
|0|1|2|3|4|
|x|_|_|_|_|
|_|x|_|_|_|
|_|_|x|_|_|
|_|_|_|x|_|
|_|_|_|_|x|


Cuando lo más probable es que fuere, así:
|0|1|2|3|4|
|x|_|_|_|_|
|x|_|_|_|_|
|x|_|_|_|_|
|x|_|_|_|_|
|x|_|_|_|_|

O así:
|0|1|2|3|4|
|x|x|x|x|x|
|_|_|_|_|_|
|_|_|_|_|_|
|_|_|_|_|_|
|_|_|_|_|_|