Usuario
no se actualiza la base de datos desde los textbox, pero si desde un datagridview

Pregunta
-
Hola a todos, como les va? tengo un problema con una aplicacion en vb 2010 que tiene que actualizar unos datos desde unos textbox.
Todos los datos los muestro por textbox, y a la hora de modificarlos, cuando ejecuto el UPDATE, no se guardan. O sea, la cargo de nuevo a la tabla y se carga como si no se hubieran modificado los datos.
Pero si agrego un datagridview, y los modifico de ahi, si se modifican y se guardan los cambios
La base de datos es de access
El codigo es este:
Private Sub botguardarmod_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles botguardarmod.Click
datosTableAdapter.UpdateCommand = New OleDbCommand
datosTableAdapter.UpdateCommand.Connection = miconexion
datosTableAdapter.UpdateCommand.CommandText = "UPDATE Clientes SET [razon social]=@raz,direccion=@dir,cuit=@cui,contacto=@con,tel=@tel WHERE codigo=@cod"
datosTableAdapter.UpdateCommand.Parameters.Add("@raz", OleDbType.VarChar).Value = txraz.Text.ToString
datosTableAdapter.UpdateCommand.Parameters.Add("@dir", OleDbType.VarChar).Value = txdir.Text.ToString
datosTableAdapter.UpdateCommand.Parameters.Add("@cui", OleDbType.VarChar).Value = txcui.Text.ToString
datosTableAdapter.UpdateCommand.Parameters.Add("@tel", OleDbType.VarChar).Value = txtel.Text.ToString
datosTableAdapter.UpdateCommand.Parameters.Add("@con", OleDbType.VarChar).Value = txcon.Text.ToString
datosTableAdapter.UpdateCommand.Parameters.Add("@cod", OleDbType.BigInt).Value = txcod.Text.ToString
datosTableAdapter.Update(clientesDataSet.Tables("clientes"))
cargar_datos()
botguardarmod.Enabled = False
botcancelarmod.Enabled = False
botnuevo.Enabled = True
botmodificar.Enabled = True
End SubNo es un codigo muy elaborado, estoy probando para ver como funciona.
Saludos y gracias por la ayuda
- Cambiado Enrique M. Montejo lunes, 26 de enero de 2015 7:55 Pregunta relacionada con el acceso a datos.
Todas las respuestas
-
hola, a lo que veo todas tus declaraciónes están echas en el dgv, no veo ningún textbox en los parametros.
también me llama la atención los corchetes en UPDATE Clientes SET [razon social]
cmd.CommandText = "UPDATE clientes SET razonsocial = @raz,dom = @dom WHERE IdAlumno = @cod" ... 'aquí declaras de donde tomas los valores nuevos. cmd.Parameters.AddWithValue("@cod", Me.Textbox1.Text) cmd.Parameters.AddWithValue("@raz", Me.Textbox2.Text) cmd.Parameters.AddWithValue("@dom", Me.Textbox3.Text)
obio deverás declarar lo conexión y el tipo de comando.
- Propuesto como respuesta Karen Malagón jueves, 22 de enero de 2015 18:51
-
Hola, gracias por responder. Hice los cambios que me propusiste, pero sigue sin funcionar, no se que puede estar pasando.
El codigo para insertar un nuevo registro funciona perfecto, es el de actualizar el que no me anda. Pero si agrego un datagridview, y desde ahi lo modifico, se modifica bien, si lo hago desde un textbox, no se modifica.
te dejo el codigo modificado por si hice algo mal
Private Sub botguardarmod_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles botguardarmod.Click
datosTableAdapter.UpdateCommand = New OleDbCommand
datosTableAdapter.UpdateCommand.CommandText = "UPDATE clientes SET RazonSocial=@raz,Direccion=@dir,Cuit=@cuit,Tel=@tel,con=@con WHERE Codigo=@cod"
datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@raz", Me.txraz.Text)
datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@dir", Me.txdir.Text)
datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@cuit", Me.txcui.Text)
datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@tel", Me.txtel.Text)
datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@con", Me.txcon.Text)
datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@cod", Me.txcod.Text)
MsgBox(datosTableAdapter.UpdateCommand.CommandText)
datosTableAdapter.UpdateCommand.Connection = miconexion
datosTableAdapter.Update(clientesDataSet.Tables("clientes"))
cargar_datos()
botguardarmod.Enabled = False
botcancelarmod.Enabled = False
botnuevo.Enabled = True
botmodificar.Enabled = True
End Sub -
ve si funciona este código. luego pones las condiciones de habilitar o deshabiltar tus botones
Private Sub botguardarmod_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles botguardarmod.Click Using cnn = New OleDb.OleDbConnection(Cadena o string de conexión) Dim cmd As New OleDb.OleDbCommand cmd.CommandText = = "UPDATE clientes SET RazonSocial = @raz, Direccion = @dir, Cuit = @cuit,Tel = @tel,con = @con WHERE Codigo = @cod" cmd.Parameters.AddWithValue("@raz", Me.txraz.Text) cmd.Parameters.AddWithValue("@dir", Me.txdir.Text) cmd.Parameters.AddWithValue("@cuit", Me.txcui.Text) cmd.Parameters.AddWithValue("@tel", Me.txtel.Text) cmd.Parameters.AddWithValue("@con", Me.txcon.Text) cmd.Parameters.AddWithValue("@cod", Me.txcod.Text) Try cnn.Open() cmd.ExecuteNonQuery() MessageBox.Show("Registro actualizado correctamente", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information) Catch ex As Exception MessageBox.Show(ex.ToString) End Try 'botguardarmod.Enabled = False 'botcancelarmod.Enabled = False 'botnuevo.Enabled = True 'botmodificar.Enabled = True End Using End Sub
Edito.olvide preguntar si tienes un datareader que rellene tus textbox.
y si lo tienes: lo usas con el evento Leave o KeyPress(Enter)?
- Editado Ricardo Pacetti viernes, 23 de enero de 2015 1:18 addinfo
-
Al utilizar OleDb deberías utilizar marcadores de posición en lugar de parámetros con nombre:
datosTableAdapter.UpdateCommand.CommandText = "UPDATE clientes SET RazonSocial=?,Direccion=?,Cuit=?,Tel=?,con=? WHERE Codigo=?" datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@raz", Me.txraz.Text) datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@dir", Me.txdir.Text) datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@cuit", Me.txcui.Text) datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@tel", Me.txtel.Text) datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@con", Me.txcon.Text) datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@cod", Me.txcod.Text)
- Propuesto como respuesta Karen Malagón viernes, 23 de enero de 2015 15:43
- Votado como útil ale_o10 domingo, 25 de enero de 2015 16:40
-
Probe las dos opciones que me pusieron, y no se actualiza, no se que puede estar mal.
Pongo todo el codigo, quizas algo esta mal en otro lado.
Imports System.Data.OleDb
Public Class Clientes
Private cadenaconexion As String
Private miconexion As OleDbConnection
Private datosTableAdapter As OleDbDataAdapter
Private clientesDataSet As DataSet
Private Sub Clientes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
cadenaconexion = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|Base de datos.accdb"
miconexion = New OleDbConnection(cadenaconexion)
datosTableAdapter = New OleDbDataAdapter
datosTableAdapter.SelectCommand = New OleDbCommand("SELECT * FROM Clientes ORDER BY Codigo", miconexion)
clientesDataSet = New DataSet
cargar_datos()
txnuecod.Visible = False
txnuecon.Visible = False
txnuecui.Visible = False
txnuedir.Visible = False
txnueraz.Visible = False
txnuetel.Visible = False
End SubPrivate Sub cargar_datos()
clientesDataSet.Reset()
clientesDataSet.Tables.Add("clientes")
datosTableAdapter.Fill(clientesDataSet.Tables("clientes"))
txcod.DataBindings.Clear()
txraz.DataBindings.Clear()
txcui.DataBindings.Clear()
txdir.DataBindings.Clear()
txtel.DataBindings.Clear()
txcon.DataBindings.Clear()
txcod.DataBindings.Add("text", clientesDataSet.Tables("Clientes"), "Codigo")
txraz.DataBindings.Add("text", clientesDataSet.Tables("Clientes"), "Razon Social")
txcui.DataBindings.Add("text", clientesDataSet.Tables("Clientes"), "CUIT")
txdir.DataBindings.Add("text", clientesDataSet.Tables("Clientes"), "Direccion")
txtel.DataBindings.Add("text", clientesDataSet.Tables("Clientes"), "TEL")
txcon.DataBindings.Add("text", clientesDataSet.Tables("Clientes"), "Contacto")
lscod.DataSource = clientesDataSet.Tables("clientes")
lscod.DisplayMember = "Codigo"
'DataGridView1.DataSource = clientesDataSet.Tables("clientes")
End SubPrivate Sub botguardarmod_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles botguardarmod.Click
datosTableAdapter.UpdateCommand = New OleDbCommand
datosTableAdapter.UpdateCommand.CommandText = "UPDATE clientes SET RazonSocial=?,Direccion=?,Cuit=?,Tel=?,con=? WHERE Codigo=?"
datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@raz", Me.txraz.Text)
datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@dir", Me.txdir.Text)
datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@cuit", Me.txcui.Text)
datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@tel", Me.txtel.Text)
datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@con", Me.txcon.Text)
datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@cod", Me.txcod.Text)
MsgBox(datosTableAdapter.UpdateCommand.CommandText)
datosTableAdapter.UpdateCommand.Connection = miconexion
datosTableAdapter.Update(clientesDataSet.Tables("clientes"))
cargar_datos()
botguardarmod.Enabled = False
botcancelarmod.Enabled = False
botnuevo.Enabled = True
botmodificar.Enabled = True
End SubEnd Class
Gracias por ayudarme. Espero que lo podamos resolver.
Saludos