es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo hacer que un DataGridView esté conectado en tiempo real a una base de datos de Access almacenada localmente en VB.NET?

Me gustaría que cuando elimine/editar un registro de la datagridview, se elimine/edite automáticamente el archivo de la base de datos de acceso. Aquí hay un fragmento de mi código que carga la base de datos en la datagridview.

Public Function dbConnect() As Boolean
    Try
        cn = New OleDbConnection(DataBasePath)
        cn.Open()
        'MessageBox.Show("está funcionando")

        Return True
    Catch ex As Exception
        MessageBox.Show("No se puede abrir la base de datos: " & ex.Message)
        Return False
    End Try
End Function

Private Function GetOrders() As DataTable
    Dim dtOrders As New DataTable
    dbConnect()
    Dim SQLCMD As New OleDbCommand
    SQLCMD.Connection = cn
    SQLCMD.CommandText = "Select * From [OrdersTbl]"
    dtOrders.Load(SQLCMD.ExecuteReader())
    Return dtOrders
End Function

Private Sub EditOrdersForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    OrdersDataGrid.DataSource = GetOrders()
End Sub

¿Cómo puedo hacer para que los cambios se guarden en el archivo local?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para eliminar/editar automáticamente el archivo de base de datos de acceso cuando se elimina/edita un registro de la datagridview, puedes usar el objeto OleDbDataAdapter para actualizar la base de datos después de realizar cambios en la datagridview. Así es cómo puedes modificar el fragmento de código para lograr esto:

    1. Declara un objeto OleDbDataAdapter en tu nivel de módulo público:
      Dim myDataAdapter As New OleDbDataAdapter()
      
    2. Reemplaza la función GetOrders con el siguiente código:

      Private Function GetOrders() As DataTable
      Dim dtOrders As New DataTable
      dbConnect()
      Dim SQLCMD As New OleDbCommand
      SQLCMD.Connection = cn
      SQLCMD.CommandText = “Select * From [OrdersTbl]”

      myDataAdapter.SelectCommand = SQLCMD
      myDataAdapter.TableMappings.Add("OrderTbl", "OrderTbl")
      myDataAdapter.Fill(dtOrders)
      
      Return dtOrders
      

      End Function

    3. Agrega el siguiente código al evento cellValueChanged de tu datagridview:

      Private Sub OrdersDataGrid_CellValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles OrdersDataGrid.CellValueChanged
      ‘ obtener los cambios realizados en la datagridview
      Dim changes As DataTable = CType(OrdersDataGrid.DataSource, DataTable).GetChanges()

      If Not changes Is Nothing Then
          Try
              ' actualizar la base de datos con los cambios realizados
              myDataAdapter.Update(changes)
          Catch ex As Exception
              MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
          End Try
      End If
      

      End Sub

    Con estas modificaciones, los cambios realizados en tu datagridview se guardarán automáticamente en el archivo de base de datos de acceso local.

Comments are closed.