Hola, necesito actualizar los datos de una cierta tabla de una base de datos, pero quiero actualizarlos solamente si no hubo cambios en los mismos. Trabajo con access, Tengo este codigo pero capturo el error que dice "@oldnombre no tiene un valor predeterminado", no se cual puede llegar a ser el problema. Gracias
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
connetionString = "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=C:\concurrencia\base.accdb;"
connection = New OleDbConnection(connetionString)
connection.Open()
adapter = New OleDbDataAdapter("SELECT * from tabla2", connection)
adapter.Fill(DataSet, "tabla2")
tabla = New DataTable()
adapter.Fill(tabla)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim comando As OleDbCommand = connection.CreateCommand()
adapter.UpdateCommand = New OleDbCommand("UPDATE tabla2 set nombre=@nombre, apellido=@apellido WHERE nombre=@oldnombre AND apellido=@oldapellido", connection)
adapter.UpdateCommand.Parameters.Add("@nombre", OleDbType.VarChar, 255).Value = txtID.Text
adapter.UpdateCommand.Parameters.Add("@apellido", OleDbType.VarChar, 255).Value = txtCharData.Text
parameter = adapter.UpdateCommand.Parameters.Add("@oldnombre", OleDbType.VarChar, 255, "nombre")
parameter.SourceVersion = DataRowVersion.Original
parameter = adapter.UpdateCommand.Parameters.Add("@oldapellido", OleDbType.VarChar, 255, "apellido")
parameter.SourceVersion = DataRowVersion.Original
adapter.UpdateCommand.ExecuteNonQuery()
adapter.Update(dataset, "tabla2")
adapter.Fill(dataset, "tabla2")
connection.Close()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
[MOD]: Utiliza el botón de "Insertar código", gracias.
Cita de: Matisca en 21 Enero 2015, 06:27 AMcapturo el error que dice "@oldnombre no tiene un valor predeterminado", no se cual puede llegar a ser el problema.
Prueba a añadir un valor predeterminado.
Un valor
DBNull.Value en lugar de un
null:
parameter = adapter.UpdateCommand.Parameters.Add("@oldnombre", OleDbType.VarChar, 255, "nombre").Value = DBNull.Value
parameter = adapter.UpdateCommand.Parameters.Add("@oldapellido", OleDbType.Char, 255, "apellido").Value = DBNull.Value
Saludos
Hola, ya lo hice, pero ahora no se guardan los registros en la base de datos con la sentencia update. La idea es saber si los registros en la base de datos cambiaron.
@oldapellido y @oldnombre supongo que debe ser los datos que habian en un comienzo en la base de datos, en el momento en que llene el dataset. Yo quiero hacer una actualizacion masiva de datos, pero antes de hacerla necesito saber si estos registros cambiaron desde la ultima vez que los consulte. Gracias