Option Strict On Imports Imports Imports Imports Imports Imports Microsoft.VisualBasic System System.Windows.Forms System.Drawing System.Data System.Data.OleDb Public Class Form1 Private Sub btnConectar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConectar.Click Try If System.IO.File.Exists(txtBase.Text) = False Then MessageBox.Show("No existe la base de datos indicada") txtBase.Focus() Exit Sub End If Catch ex As Exception MessageBox.Show("ERROR: " & ex.Message & vbCrLf & "Seguramente porque no existe la base de datos indicada") txtBase.Focus() Exit Sub End Try ' ' La cadena de conexión Dim sCnn As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & txtBase.Text ' La cadena de selección Dim sSel As String = "SELECT * FROM Prueba ORDER BY ID" ' Para traer solo los registros entre dos fechas ' sSel = "SELECT * FROM Prueba WHERE (FechaAlta >= #2006/01/05# AND FechaAlta <= #2006/01/06#)" ' ' Comprobar si hay algún error Try ' Crear un nuevo objeto del tipo DataAdapter 'Dim cnn As New OleDbConnection(sCnn) da = New OleDbDataAdapter(sSel, sCnn) ' Crear los comandos de insertar, actualizar y eliminar Dim cb As New OleDbCommandBuilder(da) ' Como hay campos con caracteres especiales, ' al usarlos incluirlos entre corchetes. cb.QuotePrefix = "[" cb.QuoteSuffix = "]" ' Asignar los comandos al DataAdapter ' (se supone que lo hace automáticamente, pero...) da.UpdateCommand = cb.GetUpdateCommand da.InsertCommand = cb.GetInsertCommand da.DeleteCommand = cb.GetDeleteCommand ' ' Esta base de datos usa el ID con valores automáticos da.MissingSchemaAction = MissingSchemaAction.AddWithKey ' dt = New DataTable ' Llenar la tabla con los datos indicados da.Fill(dt) ' ' Habilitar los controles For Each c As Control In Me.GroupBox1.Controls c.Enabled = True Next Me.GroupBox1.Enabled = True Me.GroupBox1.Text = "Conexión realizada" ' Y mostrar el primer registro If dt.Rows.Count > 0 Then btnFirst_Click(Nothing, Nothing) Else fila = -1 btnActualizar.Enabled = False End If Catch ex As Exception MessageBox.Show("ERROR al conectar o recuperar los datos:" & vbCrLf & _ ex.Message, "Conectar con la base", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub Private Sub BtnExaminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnExaminar.Click Dim ofd As New OpenFileDialog ofd.Title = "Seleccionar base de datos" ofd.FileName = txtBase.Text If ofd.ShowDialog = DialogResult.OK Then txtBase.Text = ofd.FileName End If End Sub Private dt As DataTable Private da As OleDbDataAdapter Private fila As Integer Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For Each c As Control In Me.GroupBox1.Controls ' Limpiar los textbox If TypeOf c Is TextBox Then c.Text = "" End If ' Deshabilitarlos c.Enabled = False Next Me.GroupBox1.Enabled = False Me.GroupBox1.Text = "Debes conectar antes de usar los datos" ' ' El nombre de la base de datos: ' (poner el path real de la base de datos de prueba) Me.txtBase.Text = "C:\Prueba.mdb" End Sub Private Sub btnActualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnActualizar.Click If fila < 0 OrElse fila > dt.Rows.Count - 1 Then Exit Sub Dim dr As DataRow = dt.Rows(fila) ' Asignar los datos de los textbox a la fila asignarDatos(dr) 'dr("Nombre") = txtNombre.Text 'dr("e-mail") = txtEmail.Text 'dr("FechaAlta") = txtFechaAlta.Text 'dr("Comentario") = txtComentario.Text ' Guardar físicamente los datos en la base Try da.Update(dt) dt.AcceptChanges() Catch ex As DBConcurrencyException MessageBox.Show("Error de concurrencia:" & vbCrLf & ex.Message) Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click Dim dr As DataRow = dt.NewRow() ' Asignar los datos de los textbox a la fila asignarDatos(dr) 'dr("Nombre") = txtNombre.Text 'dr("e-mail") = txtEmail.Text 'dr("FechaAlta") = txtFechaAlta.Text 'dr("Comentario") = txtComentario.Text ' Añadir la nueva fila a la tabla dt.Rows.Add(dr) ' Guardar físicamente los datos en la base Try da.Update(dt) dt.AcceptChanges() ' Si es el primer registro de la base, ' volver a leer los datos para actualizar los IDs If CInt("0" & dr("ID").ToString) = 0 Then dt = New DataTable da.Fill(dt) End If ' Posicionarlo en la última fila btnLast_Click(Nothing, Nothing) Catch ex As DBConcurrencyException MessageBox.Show("Error de concurrencia:" & vbCrLf & ex.Message) Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Private Sub asignarDatos(ByVal dr As DataRow) ' Usar los datos que hay en los textbox dr("Nombre") = txtNombre.Text dr("e-mail") = txtEmail.Text dr("FechaAlta") = txtFechaAlta.Text dr("Comentario") = txtComentario.Text End Sub Private Sub mostrarDatos(ByVal f As Integer) Dim uf As Integer = dt.Rows.Count - 1 If f < 0 OrElse uf < 0 Then Exit Sub ' Dim dr As DataRow = dt.Rows(f) txtID.Text = dr("ID").ToString txtNombre.Text = dr("Nombre").ToString txtEmail.Text = dr("e-mail").ToString txtFechaAlta.Text = dr("FechaAlta").ToString txtComentario.Text = dr("Comentario").ToString ' btnActualizar.Enabled = True End Sub Private Sub btnFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFirst.Click ' Posicionarse en la primera fila fila = 0 ' Mostrar los datos de la fila indicada mostrarDatos(fila) End Sub Private Sub btnPrev_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrev.Click ' Posicionarse en la fila anterior fila = fila - 1 If fila < 0 Then fila = 0 ' Mostrar los datos de la fila indicada mostrarDatos(fila) End Sub Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click ' Posicionarse en la fila siguiente Dim uf As Integer = dt.Rows.Count - 1 fila = fila + 1 If fila > uf Then fila = uf ' Mostrar los datos de la fila indicada mostrarDatos(fila) End Sub Private Sub btnLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLast.Click ' Posicionarse en la última fila fila = dt.Rows.Count - 1 ' Mostrar los datos de la fila indicada mostrarDatos(fila) End Sub End Class