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

Tengo 2 bases de datos, una de ofertas y otra de trabajos adjudicados. Quisiera saber si es posible transferir los datos de las tablas de la base de ofertas cuando estén adjudicadas a la otra base de datos, teniendo en cuenta que las tablas son iguales en estructura y relaciones.

1 Respuesta

Respuesta
2

Ainhoa: Si que es posible, pero un tema es la transferecia y otra la "Sustitución".

Mira en la ayuda de Access el Método.

DoCmd. TransferDatabase acExport, "Microsoft Access", ...

Si no tienes a mano la ayuda, en éste enlace de Microsoft, tienes lo mismo.

Mis saludos >> Jacinto

Buenas tardes Jacinto,

Muchas gracias por responder. He estado ojeando tu propuesta, pero entiendo que este método funciona para transferir todos los datos de una tabla a otra, pero yo lo que necesito es transferir sólo parte de los datos. En ningún caso pretendo sustituir datos de ninguna de las bases.

¿Es así o lo estoy mirando mal?

Saludos,

Ainhoa

Ainhoa: Si es como dices, y por eso tecomentaba arriba>> ...pero un tema es la transferecia y otra la "Sustitución"

La verdad es que no acababa de entender bien tu propósito y veamos si lo he entendido.

Tienes una Tabla Ofertas en una BD y en Otra BD una Tabla TrabajosAdjudicados que tienen identica estructura, pero por lógica la segunda tendrá menos registros que la primera.

Sin entrar en que se pueda hacer con distintos códigos, al final se tratará de ejecutar una Consulta de Anexar Datos (INSERT INTO.. ) con un criterio adecuado.

'Esto va después de Importar y Tabla Origen es la Importada y Destino es la que se quiere ampliar
Dim StrSQL As String
StrSQL = "INSERT INTO TablaDestino "
StrSQL = StrSQL & "SELECT TablaOrigen.* "
StrSQL = StrSQL & "FROM TablaOrigen LEFT JOIN TablaDestino ON TablaOrigen.Identificador = TablaDestino.Identificador "
StrSQL = StrSQL & "WHERE ((([TablaDestino]![Identificador]) Is Null));"
CurrentDb. Execute StrSQL, dbFailOnError

Yo lo haría desde la segunda BD, en el evento al Cargar(Form_Load), del primer formulario que se abra:

1.-

Dim TablaFuente As String, BDOrigen As String
'Estos son Nombres Inventados
TablaFuente = "Ofertas"
BDOrigen = "Ofertas"
Call EliminaTablaSiExiste(TablaFuente)
DoCmd. TransferDatabase acImport, "Microsoft Access", RutaImport & BDOrigen & ".accdb", acTable, TablaFuente, TablaFuente, False, False
'Aquí ya tendremos la Tabla Importada que he llamado igual que la Original

2.-

Este Sub Elimina la Tabla antes de Importar.

Sub EliminaTablaSiExiste(ObjetoDestino)
Set dbs = CurrentDb
Call ExisteObjeto(ObjetoDestino)
If Existe = False Then
        MsgBox "La Tabla " & ObjetoDestino & " no existe en ésta BD. El Proceso seguirá", vbInformation, "MENSAJE INFORMATIVO"
        Exit Sub
Else
        StrSQL = "DROP TABLE " & ObjetoDestino & ";"
        DoCmd.SetWarnings False
        dbs.Execute StrSQL, dbFailOnError
        DoCmd.SetWarnings True
End If
End Sub

3.-

Y esta Funcion es la que sondea si existe la Tabla.

Function ExisteObjeto(NombreObjeto)
Existe = False
EsConsulta = False
EsTabla = False
For Each Objeto In CurrentDb.QueryDefs
        If NombreObjeto = LCase(Objeto.Name) Then
                Existe = True
                EsConsulta = True
                Exit For
        End If
Next
If Not Existe Then
        EsConsulta = False
        For Each Objeto In CurrentDb.TableDefs
                If NombreObjeto = LCase(Objeto.Name) Then
                        Existe = True
                        EsTabla = True
                        Exit For
                End If
        Next
End If
End Function ' ExisteObjeto

Quizá lo podia haber hecho mas corto, pero así tienes una panorámica general de Procedimientos y Funciones que puedes usar en otras ocasiones. Mis saludos >> Jacinto

Buenos días Jacinto,

Muchas gracias por tu respuesta. Creo que no me expliqué bien, perdona. Lo que quiero hacer es volcar los datos de la tabla ofertas a las base de datos de trabajos adjudicados cuando me adjudiquen un trabajo nuevo, pero sólo los trabajos adjudicados. El resto no me interesa exportarlos y los registros que ya existen en la base de trabajos adjudicados no quiero borrarlos. Sólo quiero adicionar los nuevos registros. Es decir, la base ofertas siempre tendrá muchos más registros que la base de trabajos adjudicados. Las tablas son idénticas en ambas bases y tienen el mismo nombre. Con tu propuesta tendría que eliminar la tabla fuente antes de importar la tabla origen si no lo he entendido mal, ¿no?

Saludos,

Ainhoa

Ainhoa: Si en el Código hay algo ue se me haya escapado, es posible ue ocurra lo ue comentas.

No es ese el Objetivo, sino a grandes rasgos el Siguiente.

1.- Al abrir la BD importa la Tabla llamemosle grande, previo borrado de esa misma si está presente por alguna razón.

2.- Actualiza la Tabla de esa BD ue abrimos, "solo" con los registros que faltensegún un criterio seguro. Sea simple o compuesto.

Eso es todo.

Ando un poco liado pero si por alguna razón ves que no vas a salir, me lo comentas e intento preparar un ejemplo y te facilito el enlace.

Como hay otras maneras de resolver el Problema, otra sería

En la segunda BD vincularle la Tabla Ofertas.

Seguir la metodología del INSERT sin más. Eso sí el WHERE debe contener la o las condiciones adecuadas. Yo te he citado una pero creo que en tu caso harán falta dos.

Mis saludos >> Jacinto

Buenos días Jacinto, la verdad es que te agradecería un ejemplo. No sé si voy a ser capaz de hacerlo sola, aunque voy a intentarlo, a ver si consigo que funcione.

Saludos,

Ainhoa

Ainhoa: Si no es hoy casi seguro que mañana preparo el Ejemplo y te mando el enlace.

Mis saludos >> Jacinto

¡Gracias Jacinto! Lo estoy intentando pero no consigo nada!!!

Saludos,

Ainhoa

Ainhoa: Tal como te había prometido, en éste enlace tienes el Ejemplo con un Word que solo tiene una breve explicación.

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

Ahora que ya está preparado el ejemplo, te comento lo que apunto en el Word y es que seguro tendrás tus razones para tener dos Bases de Datos. Sin conocerlos yo lo hubiera hecho en la misma BD. Mis saludos >> Jacinto

¡Gracias por tu ayuda Jacinto! Lo descargo y espero conseguirlo. La razón de tener 2 bases de datos iguales es la capacidad. Se hacen muchas ofertas, que ocupan mucho espacio, pero sólo se consigue parte de ellas.

Muchas gracias de nuevo.

Saludos,

Ainhoa

Ainhoa: Por nada. Si tienes dificultades me comentas, y admitiendo que cada uno tengamos nuestro punto de vista y no hay buenos ni malos, en lo referente la "capacidad", supongo que es porque guardas las Ofertas "dentro" de la BD.

Si eso es así puedes contemplar la alternativa de guardar las Ofertas fuera de la BD y concentrar la Gestión en una sola BD, pero como te cito solo es a titulo de sugerencia.

Mis saludos >> Jacinto

Hola Jacinto, no entiendo eso de guardar las ofertas fuera de la base de datos. Se supone que la información está almacenada en las tablas, que están relacionadas entre ellas para vincular la información, ¿no?

Saludos,

Ainhoa

Ainhoa: He supuesto que las Ofertas son documentos de Word o PDF etc que guardas en algún campo como Adjuntos o bien que guardas la literalidad en un Campo Memo, ya que de otro modo no veo el crecimiento de la BD por unos registros llamesmole "Normales", sin adjuntos ni Objetos OLE...

De no ser esa la estructura, alguna razón habrá para ese crecimiento.

Mis saludos >> Jacinto

No Jacinto, las ofertas las elaboro con la propia base de datos. En ella realizo todos los cálculos de todas las variables. Tengo unas 50 tablas, todas relacionadas entre sí, cada una de ellas con diferentes aspectos de la oferta. Dentro de una oferta puede haber 1 referencia o 100. Por eso, al ir realizando ofertas, se van incrementando los registros de todas las tablas, con lo que la base al final resulta muy pesada. Por eso quiero separar las referencias adjudicadas a otra base de datos idéntica, que así pesará menos. Además, una vez adjudicadas, necesito incorporar otras funciones de gestión como pedidos modificaciones,...que no existen en la base de ofertas.

He mirado tu ejemplo y ahora creo que entiendo el sistema. Mañana cuando regrese a la oficina intentaré ponerlo en práctica y espero o tener que molestarte de nuevo.

Una vez más, muchísimas gracias por tu ayuda. Sin ti no lo habría logrado, seguro.

Saludos,

Ainhoa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas