Autor |
Tema Buscar Opciones del Tema
|
rokoko
Colaborador
Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3065
|
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
|
|
pitxiku
Colaborador
Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1518
|
Respuesta
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
|
|
pitxiku
Colaborador
Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1518
|
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
|
|
rokoko
Colaborador
Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3065
|
Enviado: 14/Noviembre/2020 a las 21:36 |
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....
Saludos
|
|
pitxiku
Colaborador
Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1518
|
Respuesta
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
|
|
rokoko
Colaborador
Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3065
|
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
|
|
pitxiku
Colaborador
Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1518
|
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.
|
|
rokoko
Colaborador
Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3065
|
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
|
|