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) 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| |_|_|_|_|_| |_|_|_|_|_| |_|_|_|_|_| |_|_|_|_|_|
|