Comprobar cambios en los registros

Iniciado por Matisca, 21 Enero 2015, 06:27 AM

0 Miembros y 1 Visitante están viendo este tema.

Matisca

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

Código (vbnet) [Seleccionar]
 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.

Eleкtro

#1
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:
Código (vbnet) [Seleccionar]
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








Matisca

#2
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