Principales respuestas
Error al eliminar

Pregunta
-
Hola, me podrían ayudar para ver donde puede estar el error?
No me elimina la fila del datagrid.
Private Function EliminarFilas() As Integer ' Hay que encerrar el código entre un bloque ' Try ... End Try a fin de capturar la excepción ' producida y actuar en consecuencia. ' Try Using cnn As New SqlConnection("Data Source=MARTIN-PC;Initial Catalog=BASEDATOSCOMERCIO;Integrated Security=true") ' Hay que abrir explícitamente la conexión ' cnn.Open() ' Creamos el comando. ' Dim cmd As SqlCommand = cnn.CreateCommand() ' Le indicamos la consulta T-SQL de ' eliminación que vamos a ejecutar. ' cmd.CommandText = _ "DELETE FROM PedProv " & _ "WHERE Id_PedPro = @Id_PedPro" ' Almacenamos el número de registros que ' se han eliminado. ' Dim n As Integer ' En lugar de recorrer todas las filas del ' control DataGridView, únicamente recorremos ' aquellas que actualmente se encuentran ' seleccionadas. ' For Each row As DataGridViewRow In DataGridView1.SelectedRows ' Obtenemos el valor de la primera columna ' de la fila actual, que se supone es el ' valor del campo llamado Clave. ' Dim Id As Object = row.Cells(0).Value ' Limpiamos la colección de parámetros cmd.Parameters.Clear() ' Añadimos el parámetro ' cmd.Parameters.AddWithValue("@Id_PedPro", Id_PedPro) ' Ejecutamos la consulta ' Dim result As Integer = cmd.ExecuteNonQuery() ' Sumamos los registros eliminados ' n += result Next ' Devolvemos el número de registros eliminados MsgBox("Pedido eliminado") Return n End Using Catch ex As Exception ' Devolvemos la excepción al procedimiento llamador MsgBox("Ocurrio un error al eliminar") End Try End Function Private Function Id_pedPro() As Object Throw New NotImplementedException End Function
Saludos- Editado Federico32113 lunes, 7 de noviembre de 2016 16:54
Respuestas
-
Hola Pedro9089,
[-] ... me podrían ayudar para ver donde puede estar el error?
Pero que error te muestra ?
Aparte de lo mencionado por Rodripelto, es lógico que te muestre un error ya que envías el resultado de una función y está no está implementada para devolver un valor.
Private Function Id_pedPro() As Object Throw New NotImplementedException End Function
Además, si cambias el valor por el de la fila te mostraría otro error : la propiedad Connection no se ha inicializado, ya que nunca estableces la conexión al SQLCommad, no lo asignas al constructor y menos a la propiedad Connection :
cmd.Connection = cnn
Tu código podrías simplificarse a :
Private Function EliminarFilas() As Integer Using cnn As New SqlConnection("MiCadenaConexion") cnn.Open() Dim query = "DELETE FROM PedProv WHERE Id_PedPro = @id" Dim cmd As New SqlCommand(query, cnn) Dim n As Integer = 0 For Each row As DataGridViewRow In DataGridView1.SelectedRows cmd.Parameters.Clear() cmd.Parameters.AddWithValue("@id", CInt(row.Cells(0).Value)) n += cmd.ExecuteNonQuery() Next MsgBox("Pedidos eliminados") Return n End Using End Function
Es importante visualizar el mensaje de error para detectar el problema y/o parte del código que la está produciendo, si implementas un mensaje personalizado te mostrará "Ocurrió un problema" pero nunca sabrás el porqué ?
Private Sub btnEliminar_Click(sender As Object, e As EventArgs) Handles btnEliminar.Click Try EliminarFilas() 'Cargas nuevamente los datos al DGV para actualizar la grilla cargarDatos() Catch ex As Exception MessageBox.Show(ex.Message) 'Muestra el error que se produce End Try End Sub
No obstante, ya que estás elaborando una eliminación masiva podrías crear una columna de tipo DataGridViewCheckBoxColumn para que el usuario seleccione las filas a eliminar (solo es una sugerencia).
También podrías hacer uso de Transacciones usando SQLTransaction tal y como muestro aquí. Imagínate que tengas que eliminar 10 registros y se te produce error en el registro 5, sería bueno controlar eso.
Saludos.
JC NaupaCrispín
Lima - Perú
La magia no existe, la programación SI- Marcado como respuesta Federico32113 lunes, 7 de noviembre de 2016 21:53
-
Hola,
Creo que tu error está en
cmd.Parameters.AddWithValue("@Id_PedPro", Id_PedPro)
Pones Id_PedPro cuando más arriba declaras una variable que se llama Id que contiene el valor de la celda.
Un saludo.
Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
Blog- Marcado como respuesta Federico32113 lunes, 7 de noviembre de 2016 21:53
Todas las respuestas
-
Hola,
Creo que tu error está en
cmd.Parameters.AddWithValue("@Id_PedPro", Id_PedPro)
Pones Id_PedPro cuando más arriba declaras una variable que se llama Id que contiene el valor de la celda.
Un saludo.
Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
Blog- Marcado como respuesta Federico32113 lunes, 7 de noviembre de 2016 21:53
-
Hola Pedro9089,
[-] ... me podrían ayudar para ver donde puede estar el error?
Pero que error te muestra ?
Aparte de lo mencionado por Rodripelto, es lógico que te muestre un error ya que envías el resultado de una función y está no está implementada para devolver un valor.
Private Function Id_pedPro() As Object Throw New NotImplementedException End Function
Además, si cambias el valor por el de la fila te mostraría otro error : la propiedad Connection no se ha inicializado, ya que nunca estableces la conexión al SQLCommad, no lo asignas al constructor y menos a la propiedad Connection :
cmd.Connection = cnn
Tu código podrías simplificarse a :
Private Function EliminarFilas() As Integer Using cnn As New SqlConnection("MiCadenaConexion") cnn.Open() Dim query = "DELETE FROM PedProv WHERE Id_PedPro = @id" Dim cmd As New SqlCommand(query, cnn) Dim n As Integer = 0 For Each row As DataGridViewRow In DataGridView1.SelectedRows cmd.Parameters.Clear() cmd.Parameters.AddWithValue("@id", CInt(row.Cells(0).Value)) n += cmd.ExecuteNonQuery() Next MsgBox("Pedidos eliminados") Return n End Using End Function
Es importante visualizar el mensaje de error para detectar el problema y/o parte del código que la está produciendo, si implementas un mensaje personalizado te mostrará "Ocurrió un problema" pero nunca sabrás el porqué ?
Private Sub btnEliminar_Click(sender As Object, e As EventArgs) Handles btnEliminar.Click Try EliminarFilas() 'Cargas nuevamente los datos al DGV para actualizar la grilla cargarDatos() Catch ex As Exception MessageBox.Show(ex.Message) 'Muestra el error que se produce End Try End Sub
No obstante, ya que estás elaborando una eliminación masiva podrías crear una columna de tipo DataGridViewCheckBoxColumn para que el usuario seleccione las filas a eliminar (solo es una sugerencia).
También podrías hacer uso de Transacciones usando SQLTransaction tal y como muestro aquí. Imagínate que tengas que eliminar 10 registros y se te produce error en el registro 5, sería bueno controlar eso.
Saludos.
JC NaupaCrispín
Lima - Perú
La magia no existe, la programación SI- Marcado como respuesta Federico32113 lunes, 7 de noviembre de 2016 21:53