Autor Tema: boton de Guardar DataGridView# en una base de datos access en Visual Basic  (Leído 23009 veces)

Lepizz

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
Hola, soy nuevo en lo respecta a programación y estoy haciendo lo que podría considerar yo como mi primer proyecto mas importante..
.
COMO HABRÁN LEÍDO NECESITO AYUDA y el problema con mi programa es que no logro configurar el botón de Guardar de manera que si corro el programa y hago cambios en mi DataGridView, se guarden para la próxima vez que lo corra y a la vez se guarden a la base de datos de access a la que estoy conectado con el programa... y francamente e buscado vídeos de youtube, foros y otros medios de investigación para aprender a hacerlo ya que nadie me esta enseñando y e visto ya tantas formas diferentes que no me han funcionado que no se ni como empezar.. alguien me puede dar ideas, de antemano se lo agradeceré.

Gracias
« Última modificación: 09 de Diciembre 2016, 19:43 por Ogramar »

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Aquí tienes un hilo donde se habla de algo parecido, quizás te pueda ayudar -- > www.aprenderaprogramar.com/foros/index.php?topic=1029

Saludos!!!

Lepizz

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
Gracias por ayudarme! encuentro bastante interesante el código que logro generar al final y perdona que sea tan novato en esto, el simple hecho que hayas respondido es de gran ayuda, pero tienes alguna idea de como aplicar ese código en mi botón de guardar????

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Con una imagen es difícil hacerse una idea. Pega el código de tu programa, o si es muy largo ponlo como archivos adjuntos para poder verlo  ;D

Lepizz

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
jajajaja si mis disculpas ;D esq no tengo nada de codigo en el boton de "Guardar" por eso no lo puse xD esq ya e visto tantos que mejor borre el código que tenia porq no se cual es la manera correcta :P la imagen es para que vieras el numero de columnas y eso... Intente con este codigo, intentando moldearlo a mi programa pero no me funciono y daba error, mira el codigo q consegui
Código: [Seleccionar]
Public Class Form1
    Dim row(4) As String
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Button1.Text = "Guardar"
        Button2.Text = "Cerrar"
        DataGridView1.ColumnCount = 4
        DataGridView1.Columns(0).Name = "Fabricante"
        DataGridView1.Columns(1).Name = "Modelo"
        DataGridView1.Columns(2).Name = "Nombre recambio"
        DataGridView1.Columns(3).Name = "Referencia"
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        row(0) = TextBox1.Text
        row(1) = TextBox2.Text
        row(2) = TextBox3.Text
        row(3) = TextBox4.Text
        Dim rowToSave As String() = New String() {row(1), row(2), row(3), row(4)}
        DataGridView1.Rows.Add(row)
        TextBox1.Text = ""
        TextBox2.Text = ""
        TextBox3.Text = ""
        TextBox4.Text = ""
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Me.Close()
        End
    End Sub
End Class
*
*
*
una vez que lo moldee me quedo de esta forma:

Código: [Seleccionar]
Public Class Form1

    Dim row(7) As String

    Private Property BOF As Boolean

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'TODO: esta línea de código carga datos en la tabla 'Database1DataSet.Esc_Salarial' Puede moverla o quitarla según sea necesario.
        Me.Esc_SalarialTableAdapter.Fill(Me.Database1DataSet.Esc_Salarial)
        'TODO: esta línea de código carga datos en la tabla 'Database1DataSet.Dependencias' Puede moverla o quitarla según sea necesario.
        Me.DependenciasTableAdapter.Fill(Me.Database1DataSet.Dependencias)

        Button1.Text = "Guardar"
        Esc_SalarialDataGridView.ColumnCount = 7
        Esc_SalarialDataGridView.Columns(0).Name = "cod_puesto"
        Esc_SalarialDataGridView.Columns(1).Name = "nom_puesto"
        Esc_SalarialDataGridView.Columns(2).Name = "Sal_nivel1"
        Esc_SalarialDataGridView.Columns(3).Name = "Sal_nivel2"
        Esc_SalarialDataGridView.Columns(4).Name = "Sal_nivel3"
        Esc_SalarialDataGridView.Columns(5).Name = "Sal_nivel4"
        Esc_SalarialDataGridView.Columns(6).Name = "Sal_nivel5"

    End Sub

    '' BOTON GUARDAR''

    Private Sub Guardar_Click(sender As Object, e As EventArgs) Handles Guardar.Click
        'Me.Esc_SalarialTableAdapter.Update(Me.Database1DataSet.Esc_Salarial)

        row(0) = Cod_puestoTextBox.Text
        row(1) = Nom_puestoTextBox.Text
        row(2) = Sal_nivel1TextBox.Text
        row(3) = Sal_nivel2TextBox.Text
        row(4) = Sal_nivel3TextBox.Text
        row(5) = Sal_nivel4TextBox.Text
        row(6) = Sal_nivel5TextBox.Text

        Dim rowToSave As String() = New String() {row(1), row(2), row(3), row(4), row(5), row(6), row(7)}
        Esc_SalarialDataGridView.Rows.Add(row)
        Cod_puestoTextBox.Text = ""
        Nom_puestoTextBox.Text = ""
        Sal_nivel1TextBox.Text = ""
        Sal_nivel2TextBox.Text = ""
        Sal_nivel3TextBox.Text = ""
        Sal_nivel4TextBox.Text = ""
        Sal_nivel5TextBox.Text = ""


    End Sub
End Class
*
*
*
 y eso me da este error:


Lepizz

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
No se si me estoy explicando bien, si ocupas ver todo el codigo me dices y lo pongo.. ocupo ayuda  :'(

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Hola, por el error que te está marcando la interpretación que yo hago es la siguiente:

Tienes un DataGridView cuyo contenido se establece a partir de una base de datos. En concreto en esta línea indicas:

Me.Esc_SalarialTableAdapter.Fill(Me.Database1DataSet.Esc_Salarial)

Es decir, que el dataGridView se rellena a partir de la tabla Esc_Salarial obtenidoa a partir de Database1DataSet

Pero después tienes un fragmento de código que dice lo siguiente:

Código: [Seleccionar]
        Esc_SalarialDataGridView.ColumnCount = 7
        Esc_SalarialDataGridView.Columns(0).Name = "cod_puesto"
        Esc_SalarialDataGridView.Columns(1).Name = "nom_puesto"
        Esc_SalarialDataGridView.Columns(2).Name = "Sal_nivel1"
        Esc_SalarialDataGridView.Columns(3).Name = "Sal_nivel2"
        Esc_SalarialDataGridView.Columns(4).Name = "Sal_nivel3"
        Esc_SalarialDataGridView.Columns(5).Name = "Sal_nivel4"
        Esc_SalarialDataGridView.Columns(6).Name = "Sal_nivel5"

Y aquí lo que estás diciendo es que el dataGridView tendrá 7 columnas, cuyos nombres serán cod_puesto, nom_puesto, etc.

¿Cuál es el problema? Que por un lado estás diciendo que los datos se cargarán desde la base de datos, imagínate que en la base de datos tienes 9 columnas y que son espec_puesto, rut_puesto, etc. y por otro lado estás diciendo que el dataGridView tiene 7 columnas cuyos nombres son cod_puesto, nom_puesto...

Es decir, tienes una contradicción, por un dato dices que los datos vienen de base de datos y por otro los estás tratando de establecer tú como si no vinieran de base de datos. Tienes que decidir: si vienen de base de datos, tendrás que eliminar el establecimiento manual del número de columnas y sus nombres ;)

Saludos!!

Lepizz

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
O.O eso tiene mucho sentido muchas gracias! *w* entonces basta con solo eliminar las lineas de las columnas o debo quitar todo lo que tenga q ver con el establecimiento manual?
de antemano gracias gracias gracias *-*

Lepizz

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
listo (Y) vieras que sí me actualiza en la BD de access *O*! pero no se guarda lamentablemente :( Te explico...si yo lo corro y hago algún cambio, si me actualiza la bd de access porque veo los cambios q hice desde el programa, y todavía si cierro el programa y le doy de nuevo "actualizar todo" (pero en el access) ahí continuan los cambios a pesar de estar cerrado el programa, sin embargo cuando lo corro de nuevo los cambios que hice en access desaparecen y vuelven a estar la tabla con los mismos datos que tenia al principio y en el programa en no se guardan tampoco porque veo el datagrid con los datos que tenian en un principio la bd de access...
tienes alguna idea de que puedo hacer o será que el código esta mal??? osea que el que estoy utilizando no me sirve?
mira esto tengo en el form y en el boton guardar:
Código: [Seleccionar]
Public Class Form1

    Dim row(7) As String
    Private Property BOF As Boolean

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'TODO: esta línea de código carga datos en la tabla 'Database1DataSet.Esc_Salarial' Puede moverla o quitarla según sea necesario.
        Me.Esc_SalarialTableAdapter.Fill(Me.Database1DataSet.Esc_Salarial)

        Guardar.Text = "Guardar"


    End Sub

Código: [Seleccionar]
    '' BOTON GUARDAR''

    Private Sub Guardar_Click(sender As Object, e As EventArgs) Handles Guardar.Click
        Me.Esc_SalarialTableAdapter.Update(Me.Database1DataSet.Esc_Salarial)
        row(0) = Cod_puestoTextBox.Text
        row(1) = Nom_puestoTextBox.Text
        row(2) = Sal_nivel1TextBox.Text
        row(3) = Sal_nivel2TextBox.Text
        row(4) = Sal_nivel3TextBox.Text
        row(5) = Sal_nivel4TextBox.Text
        row(6) = Sal_nivel5TextBox.Text

        Cod_puestoTextBox.Text = ""
        Nom_puestoTextBox.Text = ""
        Sal_nivel1TextBox.Text = ""
        Sal_nivel2TextBox.Text = ""
        Sal_nivel3TextBox.Text = ""
        Sal_nivel4TextBox.Text = ""
        Sal_nivel5TextBox.Text = ""

********************************************************
ademas me acabo de dar cuenta que si uso el boton de borrar para eliminar algunas filas q tengo de más, y luego intento guardar me da este error:

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Hola, de la misma forma que para recuperar datos lo haces desde la base de datos, también para guardar datos lo tienes que hacer en la base de datos, si no lo haces así no se guardarán. Tomando de referencia cómo lo hace en https://www.aprenderaprogramar.com/foros/index.php?topic=1029 el código con el que deberías guardar sería similar a este, pero en lugar de da, dt, etc. tendrías que meter los nombres que estás usando tú:


Código: [Seleccionar]
Private Sub ButtonGuardarEdicion_Click(sender As Object, e As EventArgs) Handles ButtonGuardarEdicion.Click

Try
            Dim GuardarEdicion As OleDbCommandBuilder
            GuardarEdicion = New OleDbCommandBuilder(da)
            da.Update(dt)
            MsgBox("Se han Actualizado los Datos Modificados")

         Cod_puestoTextBox.Text = ""
         Nom_puestoTextBox.Text = ""
         Sal_nivel1TextBox.Text = ""
         Sal_nivel2TextBox.Text = ""
         Sal_nivel3TextBox.Text = ""
         Sal_nivel4TextBox.Text = ""
         Sal_nivel5TextBox.Text = ""
           
            dt.Dispose()
            conexion.Close()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try


End Sub


Saludos!!

Lepizz

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
Amigo muchas gracias por contestar mis mensajes ! me ayudas demasiado de verdad te lo agradezco mucho, gracias a ti pude tener un avance en ese codigo despues de 4 dias de estar pegado en ese boton de guardar en horario de 7a.m a 5.p.m XD y no son bromas estoy trabajando en este proyecto y eso a sido un dolor de cabeza, en especial porque no tengo muchos conocimientos de programacion, asi que de verdad aprecio mucho tu ayuda jeje ahora tengo un pequeñisimo problema mira:
Código: [Seleccionar]
    '' BOTON GUARDAR''

    Private Sub Guardar_Click(sender As Object, e As EventArgs) Handles Guardar.Click
        Dim cadenaconexion As String
        cadenaconexion = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Database1.accdb"
        Dim comand As New OleDbCommandBuilder
  ***  Dim comand As New OleDbCommand(cadenaconexion)
  ***  comand = conexion

        Try
            Dim GuardarEdicion As OleDbCommandBuilder
            GuardarEdicion = New OleDbCommandBuilder()
            Esc_SalarialDataGridView.Update()
            ' MsgBox("Se han Actualizado los Datos Modificados")

            Cod_puestoTextBox.Text = ""
            Nom_puestoTextBox.Text = ""
            Sal_nivel1TextBox.Text = ""
            Sal_nivel2TextBox.Text = ""
            Sal_nivel3TextBox.Text = ""
            Sal_nivel4TextBox.Text = ""
            Sal_nivel5TextBox.Text = ""

            Esc_SalarialTableAdapter.Dispose()
   ***      conexion.Close()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try


    End Sub

las partes que tienen 3 asteriscos (***) es porque el programa me subraya las palabras comand o conexion en sentido de indicarme que hay un error pero no se cual es :(

Saludos!

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Creo que se deba a que haya que adaptar la sintaxis para la versión de Visual Basic que se esté utilizando. Según la versión de Visual Basic que se utilice es necesario hacer algunas adaptaciones. Aquí he dejado un ejemplo con Visual Basic 2012 y base de datos Access: https://www.aprenderaprogramar.com/foros/index.php?topic=1504.0

Saludos!!

Lepizz

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
entiendo, eso me explica muchas cosas, lastimosamente para mi no puedo dar con la configuración correcta que funcione para guardar en visual 2012 y e buscado por todos lados, manuales, internet, youtube, pero en este foro e encontrado mucha información, muchísimas gracias por su apoyo.

Lepizz

  • Sin experiencia
  • *
  • Mensajes: 40
    • Ver Perfil
Actualizar un DataGridView en Bisual Basic 2012 manteniendo la posición
« Respuesta #13 en: 22 de Octubre 2014, 17:00 »
Voy a dejar por aca este código que con una idea de Mastermind me ha funcionado, la sintaxis es de Visual Basic 2012 así que no sé si funcione  tan bien en otras versiones pero por si acaso le llega a servir a alguien el objetivo se esta cumplido por aca lo dejo (Y)

Código: [Seleccionar]
    ''BOTON ACTUALIZAR guarda en base de datos y mantienen posición en datagridview

    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click

        Dim record_actual As Integer

        record_actual = Esc_SalarialBindingSource.Position
        Me.Validate()
        Me.Esc_SalarialBindingSource.EndEdit()

        Me.Esc_SalarialTableAdapter.Update(Me.Database1DataSet.Esc_Salarial)
        Me.Esc_SalarialTableAdapter.Fill(Me.Database1DataSet.Esc_Salarial)
        Esc_SalarialBindingSource.Position = record_actual

    End Sub
« Última modificación: 22 de Octubre 2014, 23:27 por Alex Rodríguez »

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".