Actualizar tablas en Access

Yo tengo una tabla con cerca de 25.000 registros.
Esta tabla varían cada 7 días, o menos.
Las variaciones consisten en modificaciones de registros ya existentes o altas de nuevos registros.
Lo que varía puede que únicamente sea un campo de un registro. Pero yo, en principio, no conozco cuales son las variaciones.
Hasta ahora lo que hacía era sustituir la tabla antigua por la que contiene las actualizaciones.
Pregunta:
¿De qué manera se puede actualizar automáticamente el contenido de dicha tabla? Ya sea mediante consulta, código ...
Respuesta
1
Una forma es hacer una consulta de borrado:
"DELETE * FROM Tabla_1"
y luego insertar regitros desde la tabla actualizada (2) a la tabla por actualizar (1):
"INSERT INTO Tabla_1( campo1, campo2, ... ) SELECT campo1, campo2, ...
FROM Tabla_2;"
Estas acciones SQL se pueden ejecutar desde código con el comando:
DoCmd.RunSQL "DELETE..."
El comando SQL (como en el ejemplo "DELETE...") debe ser un texto entre comillas o una variable de texto.
Espero que te sea de utilidad. Suerte!
Bien, lo que me propones es automatizar, con código, el proceso que yo realizo ahora.
Comentas que este es un método, ¿cuál sería otro método? ¿No se puede actualizar únicamente los campos que varíen de una tabla a otra y añadir los nuevos registros?
Gracias de nuevo.
Si quieres actualizar sólo los registros que cambiaron y los nuevos el trabajo es mucho más complicado. Para resolverlo eficientemente es necesario saber más acerca de la estructura de las tablas y de los datos:
- ¿Existe algún campo de clave única? ¿O cómo se identifican dos registros correspondientes?
- ¿Existe un campo de fecha y hora de ultima actualización?
- ¿Existe algún cacmpo de numeración secuencial (por ejemplo numero de factura) de forma de poder descartar los números muy antiguos?
- Hay posibilidad de modificar la estructura de alguna de las tablas
- ¿Cuántos y cuales son los campos a actualizar?
En primer lugar agradecerte tu interés.
Ya sabía yo que era complicado, por eso he recurrido a todoexpertos ;D.
En cuanto a la tabla,
Hasta ahora esa tabla la manejaba "sola", así que la eliminaba y la sustituía por la nueva, pero ahora la quiero introducir dentro de una aplicación por lo que me surge este problema.
Respuestas:
- Ahora cada registro se identifica por el código del artículo (indexado sin duplicados, pero no es clave principal)
Sería este campo el que serviría para idetificar los registros.
Este campo quisiera convertirlo en clave principal y a partir de ahí establecer relaciones con otras tablas. (Por ello te decía [método 1] que si eliminaba todos los registros y pegaba los nuevos se mantendrían las relaciones) O si no añadir un indice, pero claro ese indice podría alterar las relaciones si eliminamos algún registro.
- No existe ningún campo fecha de actualización.
- No existe ningún campo autonumérico.
- La estructura no se puede modificar ya que es tal y como me la envía la central a mi. (Yo podría modificarla para que se adaptase mejor a mi aplicación, pero si cada vez que tengo que actualizar [puede que más de una vez a la semana], además tengo que variar la estructura de la tabla que me llega, sería un trabajo "doble". Y de lo que se trata es de hacerlo todo más fácil y rápido)
- Los campos a actualizar puede que sea un campo de un registro solamente o bien un campo en todos los registros, o varios campos en un registros, o varios campos en distintos/todos los registros,... en fin las combinaciones pueden ser infinitas.
Entre ellos existen campos numéricos, de fecha y de texto.
Como ya te comenté unicamente se dan altas y modificaciones, no hay bajas.
Espero que te sirva de ayuda, si necesitas más información dilo.
Y de nuevo muchas gracias.
Si quieres actualizar sólo los que han cambiado, tienes que comparar los datos de las
dos tablas. Es decir que para cada registro se debe buscar el correspondiente en la otra
tabla, verificar si existen diferencias entre ambos para luego actualizar el registro.
Y no se termina allí pues luego hay que buscar los artículos nuevos y agregarlos a la
tabla vieja. Este proceso ES MUCHO MÁS LENTO que la simple sustitución de datos entre
tablas (borrado completo y movimiento de registros), y la diferencia se acrecienta a
medida que crece el Nº de registros, tal es tu caso.
No le encuentro ventaja alguna a la complicación de actualizar sólo los registros
modificados o nuevos; y no llego a entender tu interés en este método.
Yo te recomendaría que por sencillez y por tiempo de proceso, implementes la automatización
del borrado de la tabla obsoleta y copiado de los nuevos registros desde la nueva según la
primer respuesta que te envié. De esta forma es bastante simple introducir el proceso dentro
de la aplicación.
Me has convencido ;D, lo haré según el método 1, reemplazando los registros.
Ahora viene la pregunta, que ya te formulé:
¿No se alteraran las relaciones de esa tabla con el resto, al hacer "DELETE * FROM Tabla_1"?
¿Por qué si quitamos el registro entero nos llevamos por medio la clave principal que relaciona esta tabla con las demás, no?
Saludos y prometo no preguntar más ;D.
Tendrás que revisar las razones por las que has definido relaciones entre tablas. En general no son estrictamente necesarias y sólo son necesarias cuando quieres que access mantenga la integridad referencial (permitir o no actualizar o borrar en cascada)
Fíjate si realmente necesitas definir relaciones entre la tabla a actualizar y las otras.
Además te aconsejaría que no definas campos autonuméricos en la tabla (la que contendrá los datos a actualizar) sino que utilices el Nº de articulo como clave principal.
En realidad si son necesarias las relaciones porque solo se puede utilizar un artículo, así que la relación ha de ser 1-1 para evitar que se introduzca dos veces el mismo.
Muchas gracias por tu ayuda y paciencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas