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