Ver Mensaje Individual
  #5 (permalink)  
Antiguo 04/12/2008, 23:25
leoi
 
Fecha de Ingreso: agosto-2002
Mensajes: 202
Antigüedad: 21 años, 9 meses
Puntos: 1
Respuesta: Actualizar una tabla en base a otra

Hola,

Aun no he conseguido hacerlo funcionar, pero encontre varias cosas.

En primer lugar hice las pruebas que me sugeriste y encontre algo que no esperaba. El dataset luego del merge deberia tener los datos actualizados o bien en el peor de los casos los datos originales sin actualizarse.

En realidad no se da ninguna de las dos opciones. El dataset tiene los datos de las dos tablas, es decir en el caso de las filas con algun cambio aparecen la original y la modificada y en el caso de las filas completamente iguales aparece la misma dos veces.

Esto me parecio raro debido a que en el dataset aparece dos veces cada clave. Lo primero que hice es verificar que en la bd que esten definidas como clave esas columnas y comprobe que estan correctamente definidas.

Luego lei un articulo que explica el mismo problema e indica que si el dataset no devuelve true al ejecutar el metodo haschanges() la base de datos no se actualiza. Hice la comprobacion y devolvia false, por lo tanto segun este articulo debo agregar antes de llenar el dataset la siguiente linea:

Código:
da_destino.AcceptChangesDuringFill = False

probe hacerlo para cada uno de los datasets y para ambos y logre que el dataset devuelva true para haschanges, pero la base de datos sigue sin actualizarse y dificlmente lo haga debido a lo de las filas duplicadas en el dataset. Actualmente el codigo quedo asi:


Código:
Dim sqlstr As String = "select * from personas"

conexion_origen.Open()
conexion_destino.Open()

Dim ds_origen As New DataSet
Dim da_origen As New OleDb.OleDbDataAdapter(sqlstr, conexion_origen)
da_origen.Fill(ds_origen)

Dim ds_destino As New DataSet
Dim da_destino As New OleDb.OleDbDataAdapter(sqlstr, conexion_destino)
da_destino.AcceptChangesDuringFill = False
da_destino.Fill(ds_destino)
Dim resultado As Boolean = ds_destino.HasChanges

ds_destino.Merge(ds_origen)
ds_destino.AcceptChanges()
da_destino.Update(ds_destino)

datagridview1.DataSource = ds_destino.Tables(0)

conexion_destino.Close()
conexion_origen.Close()
da_origen.Dispose()
da_destino.Dispose()
conexion_origen.Dispose()
conexion_destino.Dispose()

Ya no se que mas probar. Como comentaba antes hay muchos posts sobre como realizar esto que parece bastante simple, pero no funciona.

Saludos,
Leo
__________________
Principio Legal Legalidad en la web y Directorio de Software Open Source
Pais Once El lugar donde descubrir una ciudad