La idea basica es utilizar un 'bindingsource' y un commandbuilder para tu adataptador de datos, a partir de este concepto es tan simple como añadir un 'datarow' o registro a tu tabla de datos 'datatable' cada vez que pulsamos 'enter' y la longitud de los datos introducidos es mayor de cero. Posteriormente para actualizar o añadir los registros del 'datatable' a la BD de access utilizaremos el mandato 'update' (al pulsar un boton en nuestro caso), o asociado al momento que consideres oportuno.
Puedes descargarte este ejemplo haciendo click en 'attachments'
Imports System.Data.OleDb
Imports System.Data.DataRow
Public Class Form1
Private MiConexion As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\bd1.mdb")
Private MiAdaptador As New OleDbDataAdapter("SELECT * FROM Nombres", MiConexion)
Private MiDataSet As New DataSet()
Private MiEnlazador As New BindingSource
Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
If (e.KeyChar = Chr(Keys.Enter)) And (Me.TextBox1.Text.Length > 0) Then
Dim nombre As DataRow
nombre = MiDataSet.Tables(0).NewRow()
nombre("Nombre") = TextBox1.Text
MiDataSet.Tables(0).Rows.Add(nombre)
Me.TextBox1.Text = ""
Me.ComboBox1.SelectedIndex = Me.ComboBox1.Items.Count – 1
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim commandbuilder As New OleDb.OleDbCommandBuilder(Me.MiAdaptador)
MiConexion.Open()
MiAdaptador.Fill(MiDataSet)
MiEnlazador.DataSource = MiDataSet.Tables(0)
Me.ComboBox1.DataSource = MiEnlazador
Me.ComboBox1.DisplayMember = "Nombre"
Me.ComboBox1.ValueMember = "Id"
Me.TextBox1.Select()
End Sub
Private Sub Guardar(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.MiAdaptador.Update(CType(Me.MiEnlazador.DataSource, DataTable))
End Sub
Espero que sea de tu utilidad.
Pep Lluis,
gracias, me ha sido util
ME SIRVIO DE MUCHO GRACIAS
Me fue muy util pero no he podido pasar a la siguiente columna
Me fue de gran ayuda para unas cosas q tenia pensado ojala me puedas ayudar en algunas otras cosas mas vere que mas puedo ver jejeje y tomar para un proyecto
muy util este aporte, gracias….
Me fue de mucha ayuda… lo unico es que estoy teniendo problemass para agregar otro textbox.. son textos en 3 textbox, 1 datetimepicker y 1 combobox….
pero ya probe con solo 2 textbox.. y me agrega 2 rows en el access.. en vez de solo una.
pero gracias!
logre ya mucho! de lo que no podia
Hola tengo el siquiente codigo que lo armé basandome en el ejemplo de este post y la verdad que no me tira ningún error pero tampoco me graba la base de datos.
Alguien me podría decir que es lo que tengo mal o lo que me falta para que me grabe los datos en la base de datos.
Desde ya muchas gracias.
Aca les dejo el código
Public cn As New OleDbConnection(String.Format(“Provider=Microsoft.jet.OLEDB.4.0; Data Source=” + My.Application.Info.DirectoryPath + “\Sueldos y Jornales.mdb;”))
Private da As New OleDbDataAdapter(“SELECT * FROM EMPLEO”, cn)
Private bs As New BindingSource
Private Sub BotonGrabarEmpleo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BotonGrabarEmpleo.Click
Dim ds As New DataSet
da.Fill(ds)
bs.DataSource = ds.Tables(0)
Dim dr As DataRow
dr = ds.Tables(0).NewRow()
dr(“APELLIDO”) = Nuevo_Empleado.TextBoxApellidoEmpleado.Text
dr(“NOMBRE”) = Nuevo_Empleado.TextBoxNombreEmpleado.Text
dr(“CONVENIO”) = ComboBoxConvenioEmpleado.Text
dr(“CATEGORIA”) = ComboBoxCategoriaEmpleado.Text
dr(“FECHA_INGRESO”) = DateTimePicker1.Text
If DateTimePicker2.Text < "31/12/3000" Then dr("FECHA_EGRESO") = DateTimePicker2.Text End If Dim Tipo_de_Liquidacion As String If RaBotonJoranlizadoEmpleado.Checked = True Then Tipo_de_Liquidacion = "Jornalizado" Else Tipo_de_Liquidacion = "Mensualizado" End If dr("TIPO_DE_LIQUIDACION") = Tipo_de_Liquidacion Dim Legajo_Interno As String Legajo_Interno = Nuevo_Empleado.TextBoxLegajoEmpleado.Text + " / " + Trim(Str(Val(ComboBoxConsorcioEmpleado.Text))) dr("LEGAJO_INTERNO") = Legajo_Interno dr("CONSORCIO") = ComboBoxConsorcioEmpleado.Text dr("FUNCION") = ComboBoxFuncionEmpleado.Text ds.Tables(0).Rows.Add(dr) Me.da.Update(CType(Me.bs.DataSource, DataTable)) If DateTimePicker2.Text < "31/12/3000" And ComboBoxConvenioEmpleado.SelectedIndex = 1 Then If MsgBox("Desea Imprimir la Carta de Aviso de Suplencia para el Consorcio", MsgBoxStyle.YesNo, "Cartas Suplencia") = MsgBoxResult.Yes Then Cartas_Suplencia.Show() End If End If Me.Close() End Sub