** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Exportar objetos entre bases de datos
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoExportar objetos entre bases de datos

 Responder Responder
Autor
Mensaje
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Tema: Exportar objetos entre bases de datos
    Enviado: 14/Noviembre/2020 a las 18:17
Hola

Mediante DoCmd.TransferDatabase,  unos recordset, y unas consultas que pillan datos de las tablas del sistema,consigo exportar objetos de la base de datos a otra rapidamente.

Pero no encuentro nada de como hacerlo de una base de datos a otra, mediante una tercera base de datos donde elijas origen y destino y se exporten los objetos...

Se puede hacer??

Saludos
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1510
Respuesta Respuesta
Enlace directo a este mensaje Enviado: 15/Noviembre/2020 a las 09:38
Más o menos (hay que probarlo):

1. Creamos una instancia de Access:
   Dim oApp As Object
   Set oApp = New Object 'Access.Application

2. Abrimos la base de datos de origen:
   oApp.OpenDatabase ...

3. Usamos el Transfer... Indicando la base de datos de destino:
   oApp.TransferDatabase ...

4. Cerramos la base de datos y la instancia
   oApp.CloseCurrentDatabase
   Set oApp = Nothing

Es decir, en el punto 2 indicas la base de datos de origen, y en el 3 la de destino.

Un ejemplo: https://docs.microsoft.com/en-us/office/vba/api/Access.Application.CloseCurrentDatabase
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1510
Enlace directo a este mensaje Enviado: 14/Noviembre/2020 a las 19:46
Puedes abrir la base de datos de origen con automatización, y usar sobre ella el TransferDatabase
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 14/Noviembre/2020 a las 21:36
Publicado originalmente por pitxiku pitxiku escribió:

Puedes abrir la base de datos de origen con automatización, y usar sobre ella el TransferDatabase

Buenas pitxiku!
Creo que sabria hacer mas menos o intentar abrir una base de datos externa, pero no veo como pasarle esos datos a TransferDatabase....Ouch

Saludos
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1510
Respuesta Respuesta
Enlace directo a este mensaje Enviado: 15/Noviembre/2020 a las 09:38
Más o menos (hay que probarlo):

1. Creamos una instancia de Access:
   Dim oApp As Object
   Set oApp = New Object 'Access.Application

2. Abrimos la base de datos de origen:
   oApp.OpenDatabase ...

3. Usamos el Transfer... Indicando la base de datos de destino:
   oApp.TransferDatabase ...

4. Cerramos la base de datos y la instancia
   oApp.CloseCurrentDatabase
   Set oApp = Nothing

Es decir, en el punto 2 indicas la base de datos de origen, y en el 3 la de destino.

Un ejemplo: https://docs.microsoft.com/en-us/office/vba/api/Access.Application.CloseCurrentDatabase
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 15/Noviembre/2020 a las 20:10
Algo he conseguido, esto es lo que tengo. Accedo a la base de datos externa, el recordset que abro de prueba me muestra datos de la base de datos externa.

Pero me da error en lo marcado en rojo. No se encuentra el metodo o el dato miembro

Dim mdb As DAO.Database
Dim strDBName As String

'Obtenemos el nombre de la base de datos y la abrimos
strDBName = "Z:\MisDocumentos\Drive\ACCESS\UNAI BD\BD24 TPV_Unai\TPV V8\TPV_V8_TABLAS.accdb"
Set mdb = DBEngine.Workspaces(0).OpenDatabase(strDBName, False, False, ";pwd=CLAVE")

Dim varDestino As String
varDestino = "C:\Users\qqq\Desktop\Recibe.accdb"

Dim varTipoObjeto As String
varTipoObjeto = 0  

Dim varObjeto As String
varObjeto = "tbClientes"

'Abrimos los recordsets de prueba
Dim mrst As Recordset
Set mrst = mdb.OpenRecordset("SELECT tbClientes.Nombre, tbClientes.Apellidos, tbClientes.NumCliente FROM tbClientes WHERE (((tbClientes.NumCliente)='1'));", dbOpenDynaset, dbSeeChanges, dbOptimistic)

MsgBox mrst!Nombre & " " & mrst!Apellidos
                                                
mdb.TransferDatabase acExport, "Microsoft Access", varDestino, varTipoObjeto, varObjeto, varObjeto

mdb.Close 
Set mdb = Nothing
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1510
Enlace directo a este mensaje Enviado: 15/Noviembre/2020 a las 22:01
Los objetos DAO.Database no disponen del objeto DoCmd. Ese objeto es del objeto Access.Application. Por eso te dije de crear ese objeto (oApp) para poder acceder al método sin usar la instancia actual de Access (para no cerrar la tercera base e datos).

Estoy suponiendo que quieres exportar formularios e informes. Si solo se trata de exportar tablas y/o consultas, puedes usar consultas SQL y objetos Recordset y QueryDef.
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 16/Noviembre/2020 a las 19:50
Bueno, pues despues alguna prueba mas funciona!!!
La clave estaba en el enlace que me mandastes.....

Private Sub Comando0_Click()

' Include the following in Declarations section of module.
Dim appAccess As Access.Application

Dim varDestino As String
varDestino = "C:\Users\qqq\Desktop\Recibe.mdb"
 
Dim strDB As String
 
strDB = "C:\Users\qqq\Desktop\FrontListadoExterna.accdb"
 
' Create new instance of Microsoft Access.
Set appAccess = CreateObject("Access.Application")
' Open database in Microsoft Access window.
appAccess.OpenCurrentDatabase strDB
' Open Orders form.

appAccess.DoCmd.TransferDatabase acExport, "Microsoft Access", varDestino, acForm, "Formulario1", "Formulario1"
 
appAccess.DoCmd.Close 'Cierro
Set appAccess = Nothing
 
'error 29065 no se puede exportar a destino, esta abierto por otro usuario

End Sub


Se puede cerrar. Muchas Gracias


Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable