Autor Tema: Boton eliminar de base datos access desde dataGridview visual basic 2012 OleDb  (Leído 15371 veces)

Lepizz

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
 EL BOTON ELIMINAR SÍ ELIMINA DE LA BASE DE DATOS Y TAMBIEN DEL DATAGRID,                                               
  PERO SI ELIMINO DOS REGISTROS APARECE EL REGISTRO QUE FUE ELIMINADO LA PRIMERA VEZ,   
  TENGO QUE HACER QUE ELIMINE DE LA BASE DE DATOS(COMO LO HACE)Y DEL DATAGRID, ADEMAS   
  QUE SE PUEDAN ELIMINAR VARIOS REGISTROS SIN QUE REAPAREZCA UN REGISTRO QUE YA FUE     
 ELIMINADO.                                                                           


No se porque ocurre eso, aqui esta el codigo del boton sino me explique bien o deje algo en claro me lo hacen saber por favor y gracias:

Código: [Seleccionar]
  '_______________________________________________________________________________________
    ''BOTON ELIMINAR''----------Todo bien
    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
       Dim consulta_eliminar As String
        Dim respuesta As Byte
        Dim posicion4 As Integer


        respuesta = MsgBox("¿Esta seguro que desea eliminar este registro? ", vbYesNo, "Eliminar")
        If respuesta = vbYes Then
            Try

                conexion.Open()
                consulta_eliminar = ("Delete * FROM Esc_Salarial WHERE Esc_Salarial.cod_puesto = '" + Cod_puestoTextBox.Text + "'")
                comandos2 = New OleDb.OleDbCommand(consulta_eliminar, conexion)
                comandos2.ExecuteNonQuery()
                Me.Esc_SalarialBindingSource.RemoveCurrent()
                MsgBox("Registro eliminado.", vbInformation, "Eliminado.")

                Cod_puestoTextBox.Clear()
                Nom_puestoTextBox.Clear()
                Sal_nivel1TextBox.Clear()
                Sal_nivel2TextBox.Clear()
                Sal_nivel3TextBox.Clear()
                Sal_nivel4TextBox.Clear()
                Sal_nivel5TextBox.Clear()

                posicion4 = Esc_SalarialBindingSource.Position
                Me.Esc_SalarialTableAdapter.Fill(Me.Database1DataSet.Esc_Salarial)
                Me.Validate()
                Me.Esc_SalarialBindingSource.EndEdit()
                Me.Esc_SalarialTableAdapter.Fill(Me.Database1DataSet.Esc_Salarial)
                Esc_SalarialBindingSource.Position = posicion4
            Catch ex As Exception

                MsgBox("Error al eliminar.", vbCritical, "Atención.")

                posicion4 = Esc_SalarialBindingSource.Position
                Me.Esc_SalarialTableAdapter.Fill(Me.Database1DataSet.Esc_Salarial)
                Me.Validate()
                Me.Esc_SalarialBindingSource.EndEdit()
                Me.Esc_SalarialTableAdapter.Fill(Me.Database1DataSet.Esc_Salarial)
                Esc_SalarialBindingSource.Position = posicion4
            End Try

            conexion.Close()
        End If

    End Sub

« Última modificación: 16 de Noviembre 2014, 14:24 por Alex Rodríguez »

Mastermind

  • Experto
  • *****
  • Mensajes: 540
    • Ver Perfil
Re:(pregunta)Boton eliminar- de una BD access desde dataGridview en visual 2012
« Respuesta #1 en: 13 de Noviembre 2014, 12:49 »
Hola, ¿puedes poner un ejemplo con datos de ejemplo indicando paso a paso que es lo que ocurre? Si eliminas uno a uno ¿tienes problema? Cuando dices "aparece el registro que fue eliminado" ¿dónde aparece, cuándo, y a qué te refieres con que fue eliminado la primera vez? Puede ser que estés borrando del datagrid y no de la base de datos, por eso cuando trates de hacer una operación nuevamente te recupera el contenido de la base de datos¿?

Lepizz

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
Re:(pregunta)Boton eliminar- de una BD access desde dataGridview en visual 2012
« Respuesta #2 en: 13 de Noviembre 2014, 14:29 »
Gracias por responder, olvida lo que el registro aparece de nuevo, eso ya no me pasa, me explico, yo tengo las columnas Código de puesto, Nombre del puesto, Salario nivel1, salario nivel 2 y así hasta el nivel 5... y tengo textbox respectivamente para poder agregar los datos a la correspondiente columna.. lo que sucede es por ejemplo al tener varios registros ya agregados digamos que debo eliminar uno, muy bien tengo el botón de eliminar en el cual debo tener configurado que elimine de la base de datos de access pero q lo haga también del datagrid y se actualicen ambos para poder visualizar los cambios. Entonces al eliminar un registro cualquiera se elimina efectivamente de la BD y no vuelve a aparecer, también se elimina toda esa fila del dataGrid, hasta ahí esta bien...pero si elimino el registro que esta antes de ese por ejemplo, simplemente se eliminan del Datagrid y no de la BD... NO me da error pero eso claramente no debe pasar..
No comprendo porque si funciona a la perfección una vez no lo puede hacer mas veces

Lepizz

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
Re:(pregunta)Boton eliminar- de una BD access desde dataGridview en visual 2012
« Respuesta #3 en: 13 de Noviembre 2014, 14:33 »
Este es el código para ese boto que tengo ahora:


Código: [Seleccionar]
    '_______________________________________________________________________________________
    ''BOTON ELIMINAR''----------Todo bien
    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
       Dim consulta_eliminar As String
        Dim respuesta As Byte

        respuesta = MsgBox("¿Esta seguro que desea eliminar este registro? ", vbYesNo, "Eliminar")
        If respuesta = vbYes Then
            Try

                conexion.Open()
                consulta_eliminar = ("Delete * FROM Esc_Salarial WHERE Esc_Salarial.cod_puesto = '" + Cod_puestoTextBox.Text + "'")
                comandos2 = New OleDb.OleDbCommand(consulta_eliminar, conexion)
                comandos2.ExecuteNonQuery()
                Me.Esc_SalarialBindingSource.RemoveCurrent()
                MsgBox("Registro eliminado.", vbInformation, "Eliminado.")

                Cod_puestoTextBox.Clear()
                Nom_puestoTextBox.Clear()
                Sal_nivel1TextBox.Clear()
                Sal_nivel2TextBox.Clear()
                Sal_nivel3TextBox.Clear()
                Sal_nivel4TextBox.Clear()
                Sal_nivel5TextBox.Clear()

            Catch ex As Exception
                Me.Esc_SalarialTableAdapter.BORRAR(Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text)
                Me.Esc_SalarialTableAdapter.Fill(Me.Database1DataSet.Esc_Salarial)

                MsgBox("Error al eliminar.", vbCritical, "Atención.")

            End Try

            conexion.Close()
        End If

    End Sub

Simplemente elimine el código para q mantenga la posición en el datagrid, ya que no hacia falta, mantenia posición sin eso... eso es lo unico diferente.

Lepizz

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
Re:(pregunta)Boton eliminar- de una BD access desde dataGridview en visual 2012
« Respuesta #4 en: 14 de Noviembre 2014, 21:33 »
Me explique? ???

Mastermind

  • Experto
  • *****
  • Mensajes: 540
    • Ver Perfil
¿Puedes pegar la clase con el código donde tengas las instrucciones por las que se cargan los datos desde la base de datos al datagridview cuando abres el programa? Pienso que viendo eso pueda ayudar para resolver esto otro...  ::)

Lepizz

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
Si claro aca lo dejo...

Código: [Seleccionar]
Imports System.Data
Imports System.Data.OleDb
'_______________________________________________________________________________________
Public Class Form1
    Dim conexion As New OleDbConnection
    Dim comandos As New OleDbCommand
    Dim comandos2 As New OleDb.OleDbCommand
    Dim adaptador As New OleDb.OleDbDataAdapter
    Dim registro As New DataSet

gracias Saludos !!

Mastermind

  • Experto
  • *****
  • Mensajes: 540
    • Ver Perfil
Creo que se ha cortado... sólo aparece el comienzo del código  ???

Lepizz

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
Código: [Seleccionar]
Imports System.Data
Imports System.Data.OleDb
'_______________________________________________________________________________________
Public Class Form1
    Dim conexion As New OleDbConnection
    Dim comandos As New OleDbCommand
    Dim comandos2 As New OleDb.OleDbCommand
    Dim adaptador As New OleDb.OleDbDataAdapter
    Dim registro As New DataSet

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Me.Esc_SalarialTableAdapter.Fill(Me.Database1DataSet.Esc_Salarial)

        Try
            conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Soporte\Desktop\Nueva carpeta (2)\WindowsApplication7\Database1.accdb"

        Catch ex As Exception
            MsgBox("Error al cargar la Base de Datos", vbCritical, "Atención")
        End Try
        Me.Esc_SalarialTableAdapter.Fill(Me.Database1DataSet.Esc_Salarial)
        Me.BindingContext(Esc_SalarialBindingSource).Position =
       Me.BindingContext(Esc_SalarialBindingSource).Count - 1
        Esc_SalarialDataGridView.Text = Me.BindingContext(Esc_SalarialBindingSource).Position


    End Sub
    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
       Dim consulta_eliminar As String
        Dim respuesta As Byte

        respuesta = MsgBox("¿Esta seguro que desea eliminar este registro? ", vbYesNo, "Eliminar")
        If respuesta = vbYes Then
            Try
                conexion.Open()
                consulta_eliminar = ("Delete * FROM Esc_Salarial WHERE Esc_Salarial.cod_puesto = '" + Cod_puestoTextBox.Text + "'")
                comandos2 = New OleDb.OleDbCommand(consulta_eliminar, conexion)
                comandos2.ExecuteNonQuery()
                Me.Esc_SalarialBindingSource.RemoveCurrent()

                Cod_puestoTextBox.Clear()
                Nom_puestoTextBox.Clear()
                Sal_nivel1TextBox.Clear()
                Sal_nivel2TextBox.Clear()
                Sal_nivel3TextBox.Clear()
                Sal_nivel4TextBox.Clear()
                Sal_nivel5TextBox.Clear()

            Catch ex As Exception
                Me.Esc_SalarialTableAdapter.BORRAR(Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text, Cod_puestoTextBox.Text)
                Me.Esc_SalarialTableAdapter.Fill(Me.Database1DataSet.Esc_Salarial)
                MsgBox("Error al eliminar.", vbCritical, "Atención.")
            End Try
            conexion.Close()
        End If


    End Sub

ok ahi esta.. a ver si sale bien

Mastermind

  • Experto
  • *****
  • Mensajes: 540
    • Ver Perfil
¿El problema puede estar relacionado con que esto  Me.Esc_SalarialBindingSource.RemoveCurrent()
lo ejecutas después del delete sobre la base de datos.?

Prueba con esto: hacer el removeCurrent y luego el delete, o si no

prueba a recargar desde base de datos después de eliminar

  Try

                conexion.Open()
                consulta_eliminar = ("Delete * FROM Esc_Salarial WHERE Esc_Salarial.cod_puesto = '" + Cod_puestoTextBox.Text + "'")
                comandos2 = New OleDb.OleDbCommand(consulta_eliminar, conexion)
                comandos2.ExecuteNonQuery()
                Me.Esc_SalarialBindingSource.RemoveCurrent()
                MsgBox("Registro eliminado.", vbInformation, "Eliminado.")

      Me.Esc_SalarialTableAdapter.Fill(Me.Database1DataSet.Esc_Salarial)


Lo que he hecho es añadir el refresco del datagrid después del borrado

:)

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".