Hola tengo problema al eliminar un registro, el problema reside en que cuando elimino en el primer registro elimina normal y actualiza el datatable normalmente el problema surge cuando quiero eliminar un segundo registro la eliminacion lo realiza correctamente en la base de datos de acces pero no actualiza la eliminacion en el datatable enlazado a un datagrid tengo que eliminar dos veces el mismo registro para que elimine el registro en el datatbale enlazado al data grid, he probado con hacer un select seleccionando solamente dos campos de mi tabla empleados, ahi si no tengo problema realiza la eliminacion del registro en el datatable y en la base de datos de acces el problema esta cuando hago un select de todos los campos ahi surge el problema de borrado, solamente tengo problema con el borrado de registro, con ingresar datos, modificar y actualizar no tengo problemas. tengo otros formularios que trabajan con otras tablas que tienen solamente 2 campos ahi no tengo problema al eliminar el registro, el problema esta cuando la tabla tiene varios campos. También he probado utilizando dataset y oledbdataadapter  y también sigue la misma falla, también he probado sin enlazar a un datagrid, utilizando solamente botones para la nevegacion el resultado es el mismo tiene la misma falla. 
 
Programo en vb.net 2008 winform con base de datos acces 2003
 
este es el codigo de conexion de mantenimiento y consulta esta en un modulo
 
el query y otras variables mas que se utiliza en este formulario  lo tengo declarado como public en otro modulo
 
Imports System.Data
 
Imports System.Data.OleDb
 
Module ModuloInicio
 
 
 
    Public Dreader As OleDbDataReader
 
    Public cn As New OleDbConnection
 
    Public strcodigo As String
    Public Sub main()
 
        conec()
 
        Dim objForm As New Lista_empleados()
 
        objForm.ShowDialog()
 
        Application.Run()
 
    End Sub
 
 
 
    Public Sub conec()
 
        Dim ruta = Application.StartupPath
 
        If cn.State = ConnectionState.Closed Then
 
            cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;  Data Source=" & ruta & "\almacen.mdb; Persist Security Info=False;User ID=ADMIN;jet OLEDB:Database Password=estalactita")
 
            cn.Open()
 
        End If
 
    End Sub
 
 
 
    Sub mantenimiento(ByVal query As String)
 
        Try
 
            If Not cn.State = ConnectionState.Open Then
 
                cn.Open()
 
            End If
 
 
            Dim com As New OleDbCommand(query, cn)
 
            com.ExecuteNonQuery()
 
            cn.Close()
 
 
 
        Catch ex As Exception
 
            cn.Close()
 
            MsgBox(ex.Message)
 
        End Try
 
    End Sub
 
 
 
 
 
    Function consulta(ByVal query As String) As OleDbDataReader
 
 
 
        If Not cn.State = ConnectionState.Open Then
 
            cn.Open()
 
        End If
 
 
 
        Dim com As New OleDbCommand(query, cn)
 
 
 
        com.ExecuteNonQuery()
 
        Dreader = com.ExecuteReader()
 
 
 
        Return Dreader
 
       cn.Close()
 
    End Function
 
 
 
Esto es el codigo de mi formulario empleados, la navegacion lo hago a traves del datagrid
 
Imports System.Data
 
Imports System.Data.OleDb
 
Public Class Lista_empleados
 
 
 
    Dim com As OleDbCommand
 
    Dim Dt As New DataTable
 
    Dim tot, fil, col, pos As Integer
 
    Dim estado As String
 
    Dim codcategoria, codmarca, codmodelo As String
 
 
 
 
 
    Private Sub Lista_empleados_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
        cargar_combo("CAR", cbcargo)
 
        cargar_combo("ARE", cbarea)
 
        cargar_combo("PAI", cbpais)
 
 
 
 
 
        With cbsexo
 
            .Items.Add("Masculino")
 
            .Items.Add("Femenino")
 
        End With
 
 
 
        With cbbusqueda
 
            .Items.Add("Nombre")
 
            .Items.Add("Categoria")
 
            .Items.Add("Marca")
 
        End With
 
 
 
        botones(True)
 
        cargargrid()
 
        verdatos()
 
        formatogrid()
 
 
 
    End Sub
 
 
 
 
 
    Private Sub cmdgrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdgrabar.Click
 
 
 
        If txtnombre.Text = "" Then MsgBox("Ingrese nombre ", vbExclamation, "Aviso") : txtnombre.Focus() : Exit Sub
 
        If cbcargo.Text = "" Then MsgBox("Seleccione Cargo  ", vbExclamation, "Aviso") : cbcargo.Focus() : Exit Sub
 
        If cbarea.Text = "" Then MsgBox("Seleccione Area de Trabajo ", vbExclamation, "Aviso") : cbarea.Focus() : Exit Sub
 
 
 
 
 
      If estado = "actualizar" Then
 
        Else
 
            generarcodigo()
 
            query = "INSERT INTO empleados VALUES ('" & txtcodigo.Text & "', '" & txtnombre.Text _
 
                    & "', '" & txtdireccion.Text & "','" & cbcargo.Text & "' ,'" & cbarea.Text _
 
                    & "', '" & cbpais.Text & "', '" & txtciudad.Text & "','" & cbsexo.Text _
 
                    & "', '" & txtemail.Text & "', '" & txttelefono.Text & "','" & txtcelular.Text _
 
                    & "', '" & dtfecha.Text & "', '" & txtobservacion.Text & "')"
 
            mantenimiento(query)
 
            mensajeagregado.ShowDialog()
 
        End If
 
 
 
        botones(True)
 
        limpiar()
 
        cargargrid()
 
        verdatos()
 
 
 
 
 
    End Sub
 
 
 
    Private Sub cargargrid()
 
       query = "SELECT * FROM empleados ORDER BY idempleado ASC"
 
        Dreader = consulta(query)
 
        Dt.Clear()
 
        Dt.Load(Dreader)
 
        dgempleados.DataSource = Dt
 
 
 
        dgempleados.Sort(dgempleados.Columns("idempleado")  , System.ComponentModel.ListSortDirection.Ascending)
 
    End Sub
 
 
 
 
 
 
 
    Private Sub dgempleados_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgempleados.CellContentClick
 
        verdatos()
 
    End Sub
 
 
 
    Private Sub dgempleados_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgempleados.CellEnter
 
        verdatos()
 
    End Sub
 
 
 
    Private Sub cmdeliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdeliminar.Click
 
 
 
 
 
        If MsgBox(" Desea borrar este registro permanentemente", MsgBoxStyle.YesNo, "Aviso") = MsgBoxResult.No Then
 
 
 
            verdatos()
 
            Exit Sub
 
 
 
        Else
 
            query = "DELETE FROM empleados WHERE idempleado = '" & txtcodigo.Text & "'"
            mantenimiento(query)
 
 
 
 
            limpiar()
 
            cargargrid()
 
 
 
        End If
 
 
 
 
     End Sub
 
End Class 
   
 


