Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Lepizz en 16 de Octubre 2014, 21:17
-
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
-
Aquí tienes un hilo donde se habla de algo parecido, quizás te pueda ayudar -- > www.aprenderaprogramar.com/foros/index.php?topic=1029
Saludos!!!
-
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????
-
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
-
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
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:
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:
-
No se si me estoy explicando bien, si ocupas ver todo el codigo me dices y lo pongo.. ocupo ayuda :'(
-
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:
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!!
-
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 *-*
-
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:
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
'' 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:
-
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ú:
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!!
-
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:
'' 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!
-
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!!
-
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.
-
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)
''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