none
Insertar, Eliminar, Modificar y Buscar Datos en una tabla de Access2013 desde VS2010 RRS feed

  • Pregunta

  • Estiamdos, estoy programando en VS2010 no se mucho del tema, estoy desarrollando un aaplicacion ya que me interesa la programacion.

    aprendí hacer la conexión entre acces y visual y luego aprende a visualizar la tabla de access en un datagridview de visual.

    el codigo que tengo es el sigueinte:

    ****este codigo lo uso para la conexion y lo tengo en el form1_load

    conexion.ConnectionString = ("provider=microsoft.ace.oledb.12.0;data source=" & " C:\Users\ASUS\Desktop\PROGRAMACION\VB\LoginDefinitivo\Usuarios.accdb")
    conexion.Open()

    ******este codigo lo uso para mostrar los datos de la tabla tipo de access en el datagridview

    DataGridView1.DataSource = ds.Tables("[tipo]")

    y ahora necesito saber como hacer para poder agregar, eliminar, modificar y buscar datos. Me imagino que debo tener un boton para cada uno y es hay donde tengo que poner el codigo.

    por favor su ayuda para poder culminar y aprender un poco mas sobre todo esto. Gracias.

    miércoles, 8 de febrero de 2017 20:24

Respuestas

  • Hola eloshmt,

    No es tan difícil que digamos, es casi lo mismo que el cargar los datos, solo que incluirías parámetros.

    - Un ejemplo de un INSERT a una tabla, dónde txtId y txtNombre son controles TextBox de donde se tomarán los valores a registrar.

    Private Sub btnAddUser_Click(sender As Object, e As EventArgs) Handles btnAddUser.Click
        Try
            Using con As New OleDbConnection("MiCadenaConexion")
    
                Dim query = "insert into Usuarios (id, nombre) values (?,?)"
    
                Dim cmd As New OleDbCommand(query, con)
    
                'Agregamos los parámetros
                cmd.Parameters.AddWithValue("@id", txtId.Text)
                cmd.Parameters.AddWithValue("@nombre", txtNombre.Text)
    
                'Ejecutamos la consulta
                cmd.ExecuteNonQuery()
    
                MessageBox.Show("El usuario fue registrado correctamente.")
    
            End Using
        Catch ex As Exception
            MessageBox.Show(ex.Message)  'Si se produce un error lo mostramos
        End Try
    End Sub

    De la misma manera con el UPDATE y DELETE, envías los valores a editar o el ID a borrar, para eliminar el registro completo.

    Ayuda filtro buscar en vb.net con access

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta eloshmt jueves, 9 de febrero de 2017 15:09
    miércoles, 8 de febrero de 2017 22:01

Todas las respuestas

  • puedes checar el siguiente video te puede ayudar hacer lo que quieres  <cite class="_Rm">https://www.youtube.com/watch?v=kpn-QQev_sw</cite>

    responde si te ayudo esta repuesta, quedo atento a tus comentarios, saludos

    miércoles, 8 de febrero de 2017 20:38
  • Estimado, mediante el asistente si lo puedo hacer, lo que quiero es saber hacerlo mediante codigo para tener todo el control de la aplicacion. si pudieras ayudarme en eso, gracias de antemano.
    miércoles, 8 de febrero de 2017 21:13
  • Hola eloshmt,

    No es tan difícil que digamos, es casi lo mismo que el cargar los datos, solo que incluirías parámetros.

    - Un ejemplo de un INSERT a una tabla, dónde txtId y txtNombre son controles TextBox de donde se tomarán los valores a registrar.

    Private Sub btnAddUser_Click(sender As Object, e As EventArgs) Handles btnAddUser.Click
        Try
            Using con As New OleDbConnection("MiCadenaConexion")
    
                Dim query = "insert into Usuarios (id, nombre) values (?,?)"
    
                Dim cmd As New OleDbCommand(query, con)
    
                'Agregamos los parámetros
                cmd.Parameters.AddWithValue("@id", txtId.Text)
                cmd.Parameters.AddWithValue("@nombre", txtNombre.Text)
    
                'Ejecutamos la consulta
                cmd.ExecuteNonQuery()
    
                MessageBox.Show("El usuario fue registrado correctamente.")
    
            End Using
        Catch ex As Exception
            MessageBox.Show(ex.Message)  'Si se produce un error lo mostramos
        End Try
    End Sub

    De la misma manera con el UPDATE y DELETE, envías los valores a editar o el ID a borrar, para eliminar el registro completo.

    Ayuda filtro buscar en vb.net con access

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta eloshmt jueves, 9 de febrero de 2017 15:09
    miércoles, 8 de febrero de 2017 22:01
  • Gracias por tu apoyo, ya puedo insertar los datos, si me pudieras decir como actualizar el datagridview para que los datos aparescan ya que los datos ingresan pero no puedo verlos hasta que cierro la aplicacion y la vuelvo a ejecutar.

    con el update, delete y buscar no tuve suerte ya que me votan errores, si me pudieras ayudar con eso. Igualmente gracias.

    jueves, 9 de febrero de 2017 15:13
  • Hola eloshmt,

    Para actualizar los datos en el DataGridView solo tienes que volver a enlazar los datos al DataSource. Sería conveniente que encapsules en un método la parte en la que obtienes los datos de la BD.

    Algo como :

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        cargarUsuarios()
    End Sub
    
    Public Sub cargarUsuarios()
        Try
            Using con As New OleDbConnection("MiCadenaConexion")
    
                Dim query = "Select campo1, campo2 from miTabla"
    
                Dim adap As New OleDbDataAdapter(query, con)
    
                Dim dt As New DataTable
                adap.Fill(dt) 'Cargamos el DataTable con el resultado
    
                'Enlazamos la data
                DataGridView1.DataSource = dt
            End Using
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Así cuando haces un Delete/Update o Add vuelves a llamar al método 'cargarUsuarios()' para que cargue los datos actualizados de la BD.

    - Del ejemplo anterior en el botón Agregar

    'Ejecutamos la consulta
    cmd.ExecuteNonQuery()
    
    MessageBox.Show("El usuario fue registrado correctamente.")
    
    'Actualizamos el DataGridView, llamamos al método para que vuelva a enlazar los datos
    cargarUsuarios()

    [-] .. con el update, delete y buscar no tuve suerte ya que me votan errores, si me pudieras ayudar con eso. Igualmente gracias.

    Si tienes problemas deberías mostrarlos para poder ayudarte y decirte en donde está el error.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 9 de febrero de 2017 15:37
  • Estimado, en el codigo para crear la conexion y cargar los datos al datagridview uso este codigo

    Imports System.Data
    Imports System.Data.OleDb
    Public Class Form1
        Public conex As New OleDb.OleDbConnection("Provider=microsoft.ace.oledb.12.0;data Source=baseusuarios1.accdb")
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
           
            'crear la consulta a la base de datos
            Dim consulta As String = "SELECT * FROM [usuarios]"
    
            'crear el adaptador
            Dim adaptador As New OleDb.OleDbDataAdapter(consulta, conex)
    
            'crear el dataset
            Dim ds As New DataSet
            'agregamos la tabla tipo al dataset
            ds.Tables.Add("[usuarios]")
            'cargamos el adaptador con el dataset, usamos el comando fill
            adaptador.Fill(ds.Tables("[usuarios]"))
    
            'si ejecutamos hasta este punto habremos realizado la conexion pero no podemos visualizar datos
            'para poder visualizar datos nesecitamos un control como el datagridview el cual nos permite ver la informacion del dataset
    
            'cargar ds al control especificado--------------
    
            'cargando a un datagridview
            DataGridView1.DataSource = ds.Tables("[usuarios]")
        End Sub

    pero el tuyo me funciono igual, mi duda es en el codigo que uso por que se especifica tanto la tabla usuarios, en tu codigo solo la mencionas en query...

    con el delete y el modificar sigo teniendo problemas, crei que solo era cambiar las palabras insert por ellas pero no es asi.

    y para mi metodo buscar que lo encontre en internet uso esto

    Private Sub buscarData(ByVal search As String)
            'automáticamente (mientras escribe va buscando)  o mediante un botón y/o tecla ?
            'En caso sea la primera opción, tendrías que utilizar el evento TextChanged de tu TextBox.
            Try
                
    
                Dim query = "SELECT * FROM usuarios WHERE (nombre) LIKE (?)"
    
                Dim adap As New OleDbDataAdapter(query, conex)
                adap.SelectCommand.Parameters.AddWithValue("@p1", "%" & search & "%")
    
                Dim dt As New DataTable
    
                'Cargamos el resultado en el DataTable
                adap.Fill(dt)
    
                If dt.Rows.Count > 0 Then
                    'Si hay datos ..
    
                    'Asigno la data al DatagridView
                    DataGridView1.DataSource = dt
                Else
                    'No hay resultados
                    MessageBox.Show("No se encontraron coincidencias.")
                End If
    
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub

    pero eso hace que mientras escriba en un textbox se baya filtrando, lo que quisiera es un textbox y un combobox poder elegir en el combobox un datos a filtrar y escribir el dato en el text y mediante un boton poder hacer el filtro.

    soy nuevo en esto de la programación disculpa si no me expreso de forma funcional, si me pudieras recomendar algun libro o foro ya que me esta interesando bastante.

    gracias por tu apoyo nuevamente.

    jueves, 9 de febrero de 2017 16:31
  • Hola eloshmt,

    [-] ... el tuyo me funciono igual, mi duda es en el codigo que uso por que se especifica tanto la tabla usuarios, en tu código solo la mencionas en query.

    Lo que pasa es que estás utilizando un DataSet, el cual puede contener una colección de tablas, por lo que debes mandar el identificador para saber a cual de todas quieres acceder. Ya que solo tienes una consulta 'Select * from' solo retornará un resultado (una tabla con los 'n' registros) solo bastaría usar un DataTable.

    Un DataSet sería ideal para consultar varios tablas, un ejemplo sencillo sería :

    - Dos consultas de tipo Select

    Dim query = "Select * from Categories Select * from Customers"
    
    Dim adap As New OleDbDataAdapter(query, con)
    Dim ds As New DataSet
    adap.Fill(ds)
    
    dgvCategories.DataSource = ds.Tables(0)  'Resultado de la consulta 1, select * from Categories
    dgvCustomers.DataSource = ds.Tables(1) 'Resultado de la consulta 2, select * from Customers


    [-] ... lo que quisiera es un textbox y un combobox poder elegir en el combobox un datos a filtrar y escribir el dato en el text y mediante un boton poder hacer el filtro.

    * De dónde cargarías los datos del ComboBox, de la BD o mediante datos estáticos ?

    Ya que si usas un DataTable para cargar los datos tienes que asignar el ValueMember (campo que servirá como valor, ideal para los ID, no es visible al usuario ) y DisplayMember (campo que se mostrará como texto para la visualización) del ComboBox.

    Y tomarías el valor usando la propiedad SelectedValue el cual deberá ser convertido al tipo correspondiente ya que es de tipo object :

    'Si es string
    ComboBox1.SelectedValue.ToString()
    
    'Si es int
    CInt(ComboBox1.SelectedValue)

    Por lo que quedaría :

    Dim query = "SELECT * FROM usuarios WHERE estadoID = ? and nombre = ?"
    
    Dim adap As New OleDbDataAdapter(query, con)
    adap.SelectCommand.Parameters.AddWithValue("@p1", CInt(ComboBox1.SelectedValue))
    adap.SelectCommand.Parameters.AddWithValue("@p2", txtNombre.Text)
    
    Dim dt As New DataTable
    
    'Cargamos el resultado en el DataTable
    adap.Fill(dt)

    Si son datos estáticos que cargas del diseñador directamente o usando ComboBox.Items.Add() solo tomarías el valor usando ComboBox1.SelectedItem.ToString().

    Si tienes dudas puedes consultarlas.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 9 de febrero de 2017 17:46
  • Joel, muchas gracias por tu apoyo, me has aclarado varias dudas y me has ayudado a terminar mi programa, puedo editar una base de datos access desde visual.

    es mas decidi tomar un curso de Visual es interesante esto. si me pudieras recomendar libros te agradeceria.

    Nuevamente gracias por tu apoyo.

    jueves, 9 de febrero de 2017 22:35