Traspaso de datos de una Base de datos a otra Base

Tengo dos programas en access, y tengo una Tabla intermediario que recoge movimientos de diferentes partes del programa en la Base 1 del programa principal.

En la Base 2 la receptora de otro Programa, ha de recibir estos datos y despues con otro proceso han de ser actualiazados.

Necesitaria saber como puedo traspasar los datos de la Tabla intermedia de la Base 1 a la otra base

2 Respuestas

Respuesta
3

Sin dudar por un instante del buen funcionamiento de la propuesta de Jacinto, hay una forma infinitamente más sencilla, que sólo requiere una linea de código asociada a un botón de un formulario de tu Base 1, siempre que la tabla a exportar y la de destino tengan la misma estructura (que sería lo lógico). Sería algo así, adaptado a los nombres que tu tengas:

Private Sub  NombreBoton_Click()

CurrentDb.Execute "INSERT INTO TablaDestino IN ['C:\CarpetaDbs\Base2.mdb'] SELECT * FROM TablaOrigen"

End Sub

Si quieres poner el botón en un formulario de Base 2, el código sería similar:

Private Sub  NombreBoton_Click()

CurrentDb.Execute "INSERT INTO TablaDestino SELECT * FROM TablaOrigen IN ['C:\CarpetaDbs\Base1.mdb'] "

End Sub

Tendrás que poner la ruta completa a tu BD, con nombre y extensión y cambiar los nombres de las tablas.

Saludos!


Visítanos: http://nksvaccessolutions.com/ 

Para responder a la duda de Jacinto, hay dos soluciones:

1ª/ Si los registros de la tabla origen tienes un campo clave único, y ese campo clave existe como calve también en la de destino, al ejecutar esa SQL los registros repetidos (los ya existentes) no se anexan de nuevo, con lo que sin hacer nada ya solo anexas los nuevos.

Si la tabla de la BD origen se vacía después de cada exportación, ya no tienes ese problema.

2ª/Ejecutar una SQL de borrado (como haces en tu BD) antes de anexar. ¡OJO! Si la tabla de la BD de origen se vacía, no puedes usar este sistema pues perderías registros.

Los códigos serían:

Si lo ejecutas en la BD Origen:

CurrentDb.Execute "DELETE * FROM TablaDestino IN ['C:\CarpetaDbs\Base2.mdb']"

Si lo ejecutas en la BD de Destino:

CurrentDb. Execute "DELETE * FROM TablaDestino"

Estas lineas irían antes de las otras.

Se me olvidaba una tercera forma de solucionar el inconveniente que plantea Jacinto:

Añade un campo de tipo Sí/NO en tu tabla de la BD Origen (por ejemplo Traspasado) y en el código SQL pones para que solo te coja los que no están marcados, y luego los marcas:

Te pongo el código para el caso de hacerlo en la BD1:

Private Sub  NombreBoton_Click()

'Traspasas los registros nuevos (no marcados)

CurrentDb.Execute "INSERT INTO TablaDestino IN ['C:\CarpetaDbs\Base2.mdb'] SELECT * FROM TablaOrigen WHERE Traspasado=0"

'Los marcas

CurrentDb.Execute "UPDATE  TablaOrigen SET Traspasado=-1 WHERE Traspasado=0"

End Sub

Estoy utilizados estos parámetros, no tengo aun troceado con el Back end

TRASPASOAPUNTESCONTABLES -> Tabla de apuntes a traspasar

GESCONTA Contabilidad -> Directorio emplazamiento Aplicación

GESCONTA ->Nombre Programa

CurrentDb.Execute "INSERT INTO TRASPASOAPUNTESCONTABLES IN ['C:\Users\PePe\Desktop\GESARVE\GESCONTA Contabilidad\GESCONTA.mdb'] SELECT * FROM TRASPASOAPUNTESCONTABLES WHERE Traspasado=0"

' Marcado como traspasado

CurrentDb.Execute "UPDATE TRASPASOAPUNTESCONTABLES SET Traspasado=-1 WHERE Traspasado=0"

y me da este error

Los he quitado y sigue dandome errorres

Un saludo

Sí, efectivamente los corchetes no van con la BD externa usando esa sintaxis (pero sí con otra forma de referenciar la tabla a la BD).

El segundo error te indica que no se encuentra el archivo, por lo que o tienes mal la ruta, o tienes mal el nombre de la bd o tienes mal la extensión. Yo me inclinaría por esta última posibilidad ya que con casi total seguridad tu archivo sea un accdb y no mdb...

¿Tenias razón estaba la extensión mal era .accdb. Después cuando particione la BD que tendré de darla la extensión .mdb y la nueva dirección de la tabla?

Un saludo

Tendrás que darle la extensión que tenga mdb o accdb y la ruta al archivo que tenga la tabla.

Respuesta
1

Jobe: Hago una síntesis de lo que yo entiendo que quieres.

Actualizar una Tabla de una BD2 con los datos de otra Tabla en otra BD1.

Si eso es así, la estructura de la Consulta de Anexado de Datos que es lo que supongo querrás usar cambiará bastante si la "Estructura" de las Tablas es distinta.

En cualquier caso y como guia de una Forma de hacerlo, te adjunto el enlace de un ejemplo que preparé hace unos días para una persono que hizo una pregnta similar.

http://www.mediafire.com/download/e154nginbyla9s3/InsertCriterios.rar

Si quieres ver el texto completo de la pregunta y mis respuestas (es un poco largo), está en éste otro enlace.

Copiar datos de tablas de una base a otra - Access 2007

Mis saludos >> Jacinto

Hola Jacinto.

Te explico un poco más el proceso.

Me he bajado el ejemplo que me indicas y no entiendo bien la forma de poder acoplar a mi aplicación.

Te explico con detalle lo que necesito:

Tengo dos programas uno es GESTIÓN y el otro CONTABILIDAD, los en desarrollados en Access

En el programa GESTIÓN tengo creada una tabla MOVIMIENTOS que recoge todos las transacciones de varios procesos (Compras, Ventas, Gastos, Caja... etc) y que han de ser transferidos y convertidos en asientos dentro de la CONTABILIDAD.

Lo que estoy buscando es como transferir la tabla MOVIMIENTOS dentro de la Gestión a la tabla MOVIMIENTOS con la misma estructura dentro de la Contabilidad para contabilizar los apuntes correspondientes.

Un saludo

Jobe: Estaba preparando una nueva respuesta, cuando me ha saltado un aviso con la respuesta de Sveinbjorn.

Una vez vista creo que es mejor seguir el camino que el indica, ya que como cita es muy simple.

Lo que no se ver y ahora le pondré un comentario a él, es cómo hace para que solo anexe los registros que falten y no todos.

Su experiencia es bastante mayor y creo que nos lo puede aclarar.

Mis saludos a ambos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas