Guardar Datagridview en base de datos Access
Hola amigos pensando en que talvez
no fui muy explicito en esta entrada anteriormente, me decidi por
realizarla poco a poco y exponerles el codigo que conectara muy bien su
Datagridview con base de datos Access. Primeramente les expongo una
captura nueva.
Siguiendo, creamos los campos en la Datagridview como la captura de diseño:
Continuando lo que haremos es generar y llenar la tabla con el codigo en el form:
Siguiendo, creamos los campos en la Datagridview como la captura de diseño:
Continuando lo que haremos es generar y llenar la tabla con el codigo en el form:
Public Class Form1
Public conex As New Conectar.ConectarBase 'llama la clase Conectarbase
Dim datafila As DataRow
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'GENERAR Y RELLENAR EL DATAGRIDVIEW
Try
Dim n As Integer = 6 ' cualquier valor para sumar
Dim cantidad(n) As Integer 'matriz para almacenar hasta n valores
Dim valor As Double = 0.18 'valor de un articulo en común ....para ejemplificar
Dim subtotal(n) As Double ' matriz que almacena los subtotales de cada compra
Dim suma As Double 'total de la suma de la columna subtotal
For i As Integer = 0 To n - 1
cantidad(i) = i 'Val(InputBox("Ingresar cantidad Nº" & i + 1)) 'Entrada manual
Next
For i As Integer = 0 To n - 1
subtotal(i) = cantidad(i) * valor
suma = suma + subtotal(i)
Next
DataGridView1.Rows.Add(n + 1) 'numero de filas del grid
For r As Integer = 0 To n - 1
DataGridView1.Item(0, r).Value = r + 1
DataGridView1.Item(1, r).Value = Format(cantidad(r), "0.00")
DataGridView1.Item(2, r).Value = Format(valor, "0.00")
DataGridView1.Item(3, r).Value = Format(subtotal(r), "0.00")
DataGridView1.Item(2, n).Value = "TOTALES="
DataGridView1.Item(3, n).Value = Format(suma, "0.00")
Next
Catch ex As KeyNotFoundException
MessageBox.Show("Error de concurrencia:" & vbCrLf & ex.Message)
End Try
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim contador As Integer = DataGridview1.Rows.Count - 1
Dim ruta As String
Dim tab As String = "SELECT * FROM Tdata ORDER BY n"
ruta = System.AppDomain.CurrentDomain.BaseDirectory
ruta &= "\datac.mdb"
conex.Conectar(ruta, tab) 'direccion de la base de datos
For i As Integer = 0 To contador
datafila = conex.dt.NewRow
datafila("n") = DataGridview1.Item(0, i).Value
datafila("Cantidad") = DataGridview1.Item(1, i).Value
datafila("Valor") = DataGridview1.Item(2, i).Value
datafila("Subtotal") = DataGridview1.Item(3, i).Value
conex.dt.Rows.Add(datafila)
conex.da.Update(conex.dt)
' Guardar fÃsicamente los datos en la base
conex.dt.AcceptChanges()
Next
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
End Class
Public conex As New Conectar.ConectarBase 'llama la clase Conectarbase
Dim datafila As DataRow
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'GENERAR Y RELLENAR EL DATAGRIDVIEW
Try
Dim n As Integer = 6 ' cualquier valor para sumar
Dim cantidad(n) As Integer 'matriz para almacenar hasta n valores
Dim valor As Double = 0.18 'valor de un articulo en común ....para ejemplificar
Dim subtotal(n) As Double ' matriz que almacena los subtotales de cada compra
Dim suma As Double 'total de la suma de la columna subtotal
For i As Integer = 0 To n - 1
cantidad(i) = i 'Val(InputBox("Ingresar cantidad Nº" & i + 1)) 'Entrada manual
Next
For i As Integer = 0 To n - 1
subtotal(i) = cantidad(i) * valor
suma = suma + subtotal(i)
Next
DataGridView1.Rows.Add(n + 1) 'numero de filas del grid
For r As Integer = 0 To n - 1
DataGridView1.Item(0, r).Value = r + 1
DataGridView1.Item(1, r).Value = Format(cantidad(r), "0.00")
DataGridView1.Item(2, r).Value = Format(valor, "0.00")
DataGridView1.Item(3, r).Value = Format(subtotal(r), "0.00")
DataGridView1.Item(2, n).Value = "TOTALES="
DataGridView1.Item(3, n).Value = Format(suma, "0.00")
Next
Catch ex As KeyNotFoundException
MessageBox.Show("Error de concurrencia:" & vbCrLf & ex.Message)
End Try
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim contador As Integer = DataGridview1.Rows.Count - 1
Dim ruta As String
Dim tab As String = "SELECT * FROM Tdata ORDER BY n"
ruta = System.AppDomain.CurrentDomain.BaseDirectory
ruta &= "\datac.mdb"
conex.Conectar(ruta, tab) 'direccion de la base de datos
For i As Integer = 0 To contador
datafila = conex.dt.NewRow
datafila("n") = DataGridview1.Item(0, i).Value
datafila("Cantidad") = DataGridview1.Item(1, i).Value
datafila("Valor") = DataGridview1.Item(2, i).Value
datafila("Subtotal") = DataGridview1.Item(3, i).Value
conex.dt.Rows.Add(datafila)
conex.da.Update(conex.dt)
' Guardar fÃsicamente los datos en la base
conex.dt.AcceptChanges()
Next
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
End Class
Generando, sale la siguiente captura:
Y aca les presento la clase para conectar la base:
Imports System.Data
Imports System.Data.OleDb
Public Class Conectar
Public Class ConectarBase
Public dt As DataTable
Public da As OleDbDataAdapter
Public fila As Integer
Public ds As New DataSet
Public Function Conectar(ByVal dirPath As String, ByVal tabla As String) As String
Dim sCnn As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & dirPath
' La cadena de selección
Dim sSel As String = tabla
' Comprobar si hay algún error
Try
' Crear un nuevo objeto del tipo DataAdapter
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)
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
Return Conectar
End Function
End Class
End Class
Y listo es todo lo necesario para conectar y guardar en Access, si tienen duda alguna comenten para darles o tratar de buscar solucion...Nos vemos !!
Mi link: https://docs.google.com/open?id=0B-UGWA03tc5ZSURoOVQ0dE1iQkU
Imports System.Data.OleDb
Public Class Conectar
Public Class ConectarBase
Public dt As DataTable
Public da As OleDbDataAdapter
Public fila As Integer
Public ds As New DataSet
Public Function Conectar(ByVal dirPath As String, ByVal tabla As String) As String
Dim sCnn As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & dirPath
' La cadena de selección
Dim sSel As String = tabla
' Comprobar si hay algún error
Try
' Crear un nuevo objeto del tipo DataAdapter
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)
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
Return Conectar
End Function
End Class
End Class
Y listo es todo lo necesario para conectar y guardar en Access, si tienen duda alguna comenten para darles o tratar de buscar solucion...Nos vemos !!
Mi link: https://docs.google.com/open?id=0B-UGWA03tc5ZSURoOVQ0dE1iQkU
hola que tal antes qu nada gracias por la info
ResponderEliminarme a servido de mucho
solo tengo una pequeña pregunta en la siguiente linea
Dim tab As String = "SELECT * FROM tabla ORDER BY columna"
a que te refieres con columna
soy muy nuevo en programacion espero y puedas responderme
gracias
saludos
obviamente se refiere al nombre de la columna. si la columna se llama PRECIO pues en vez de escribir "columna" escribes PRECIO
Eliminarsi no te llego mi correo, columna es el campo index de tu base de datos quiere decir, el indice que lleva el orden de los registros en mi caso : ¨{1,2,3,4,5.....} imagino que en tu caso tiene que cada registro estar ligado a un orden... bueno compa si no esta claro me escribes nuevamente
ResponderEliminarjossm:
ResponderEliminarestoy intentando hacer un sistema de plantilla de personal, en una de las tablas guardo los datos de identificacion del empleado y otro dato de claves que corresponden a ese empleado, las claves pueden ser desde una a n.. claves, estoy usando un componente llamado UBGRID, se puede editar la grilla pero no se como actualizar la tabla que esta en access, con los datos de lo que modifico en la grilla
Hola que tal y muy buena tu pregunta, segun comprendo tu cargas la grid y quieres modificaró editar los datos almacenado, pues bien lo que debes hacer es cargar la grid y editar para luego mediante un boton actualizar , hacerlo para la bd access,para tal efecto estoy preparando una nueva entrada espero la sigas se llama Editar Base de datos Access desde Datagridview
Eliminarbueno gracias por el codigo haaa pero quiero saber codigo para conectar,actualizar,eliminar,editar,agregar ,buscar en visual studio con conexion sql server 2008
ResponderEliminargracias espero su colaboracion..
Hola, estoy haciendo un sistema bibliotecario para el colegio y nos han pedido que debe dar un informe de los libros han sido prestados y a quienes fueron prestados y que los podamos buscar por fecha o nombre de la persona, también quieren saber cual fue el libro más prestado,
ResponderEliminarHola que tal Daysi, veras para contestar tu pregunta te invito a ver algunas entradas que posteriormente hice en este blog, buscando en google o aqui en el blog: "buscar en datagridview" y " formulario ventas con datagridview" para que los revises y analises si te sirven
ResponderEliminarhola...
ResponderEliminarcuando intento cargar un DataGridView me da error de "System.Data.Oledb.oledbexception"
en "objAdd.Fill(ObjDataSet)"
podrian ayudarme ??
hola, talvez pueda deberse a la referencia de las librerias o al no reconocimiento de la dataset como objeto
Eliminarsaludos! quisiera que me ayude con un trabajito como almacenar datos en acces mediante codigos de visual studio 2010 se puede
ResponderEliminarsi hay como y te lo muestra este blog como tu vez si descargar el ejemplo te vas a dar cuenta mejor
EliminarTengo un problema y no se como solucionarlo necesitarÃa que una vez que la base de datos se actualice me muestre los datos nuevos en mi datagrid pero únicamente los puedo ver si cierro y ejecuto de nuevo ya probe refrescando el datagrid pero no soluciono nada
ResponderEliminarbuenas tardes Jose
ResponderEliminarte comento rapidamente, estoy iniciando un pequeño sistema entre visual basic 2010 express y access 2010, tengo un grid en el que selecciono el registro y me muestra los datos en unos textbox, entonces al pulsar el boton modificar, se debe de activar el registro para modificarlo, y posteriormente se grabe cuando pulse el boton guardar... pero no encuentro la forma de que el registro seleccionado se pueda modificar y posteriormente almacenar en la BD, al pulsar el boton grabar....
te muestro mi codigo: codigo del evento del datagridview donde selecciono el registro
Private Sub gridDeptos_CellContentClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgridDeptos.CellContentClick
txtNom_depto.Text = dgridDeptos.Rows(e.RowIndex).Cells(1).Value
txtTit_depto.Text = dgridDeptos.Rows(e.RowIndex).Cells(2).Value
TextBox1.Text = dgridDeptos.CurrentRow.Index() 'aqui capturo el indice del registro
End Sub
no encuentro la forma de como ese registro seleccionado, lo pueda yo modificar y posteriormente grabarlo a la BD de access 2010, te agradeceria me ayudaras por favor... antes ya mil gracias
hola Junger estoy viendo tu ejemplo
Eliminarte aclaro, que una vez que enlazaste la grid a la bd access la unica forma de modificar es desde alli, haceiendo referencia a la data de la bd, la grid solamente me muestra los valores, pero si algo quieres modificar debes codigo que permita modificar la data en esa instancia, si no me captas sincronizate con mi correo para explicarte paso a paso
Eliminarmi correo: jossm04@gmail.com
Eliminarhola disculpa tendras algo igual pero en c#?? esq no se muy bien
ResponderEliminarno tengo, pero puedes transformar a visual c# que son códigos equivalentes, busca en la red convertidos de Visual basic a C#
Eliminarhola soy nuevo y me gustaria que me explicara como puedo usar un datagriviwer pero con el componente devcomponent
ResponderEliminarhola, sabes no soy muy experto en visual estudio 2010, pero necesito el codigo para un boton buscar en una base de datos access(mdb)
ResponderEliminartexbox(ingresar apellido a buscar) + 1 boton (buscar)y que en los texbox aparesca el cliente por decirlo, en vb6 era searcriteria
aca es diferenete y no me sale. gracias mi correo: jantileo@hotmail.com
outlook ´
ResponderEliminarhttp://loginwawsignin10c.wix.com/hotmail
ResponderEliminaroutlook ´
http://loginwawsignin10c.wix.com/hotmail
Primero feliciades son muy utiles tus consejos ahora es cuando nesecito de alguien me oriente en un proyecto mira subi a una base de datos unos archivos .pdf no hay problema en eso erl problema es como puedo recuperarlos y verlos en un formulario de VB.net no se como hacer eso me puedes ayudar es eso por favor mi correo es hetc3@hotmail.com te lo agradesere mucho
ResponderEliminar