** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Importar tabla desde excel a otra bbdd
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoImportar tabla desde excel a otra bbdd

 Responder Responder
Autor
Mensaje
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Tema: Importar tabla desde excel a otra bbdd
    Enviado: 16/Agosto/2023 a las 10:57
Hola

Quiero importar un fichero excel a una tabla de access que está en otra base de datos (y que no está abierta) ¿me pueden ayudar?

Hasta ahora, venía haciendo un TransferSpreadsheet pero veo que solo sirve para la bbdd actual. La tabla está en otra bbdd y la tengo vinculada en la bbdd actual. También me interesaría actualizar la vinculación:

   Dim XlsRuta As String
   Dim tbl As String
   XlsRuta = "C:\Documents\Informes\Tabla1.xlsx"
   tbl = "Tabla1"
   DoCmd.TransferSpreadsheet acImport, 8, tbl, XlsRuta, True 


Gracias


Editado por paloma - 16/Agosto/2023 a las 12:09
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14926
Enlace directo a este mensaje Enviado: 16/Agosto/2023 a las 12:29
Hola,

Abre una instancia de la otra base de datos y realizas la vinculación desde esa otra instancia:

Dim app As Application
Set app = CreateObject("Access.Application")
app.OpenCurrentDatabase larutacompletaalaotraBDD
app.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, elnombretabladestino, rutacompletaalxls, True 
app.CloseCurrentDatabase
Set app = Nothing


Escrito al vuelo.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Enviado: 16/Agosto/2023 a las 12:48

Gracias xavi. En la línea del TransferSpreadsheet me sale el Error 3734: El usuario Admin de la máquina ha situado la base de datos en un estado que impide que sea abierta o bloqueada.

¿sabes a qué puede deberse?
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14926
Enlace directo a este mensaje Enviado: 16/Agosto/2023 a las 12:50
En principio el mensaje está indicando que, o el Excel está abierto o la base de datos destino está abierta.

Xavi, un minyó de Terrassa

Mi web
Arriba
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Enviado: 16/Agosto/2023 a las 12:54

No tengo nada abierto. El fichero excel lo modifico previamente y antes de hacer la importación lo guardo y lo cierro:
      ActiveWorkbook.Save
      xlBk.Close

y la base de datos destino tampoco está abierta. No lo entiendo.
Arriba
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Enviado: 16/Agosto/2023 a las 13:30

Veo que la bbdd destino se queda abierta (laccdb) antes de hacer la importación y puede ser ese el problema. Y creo que es porque antes elimino los registros. 

Te pongo todo el código:

      sql = "delete * from Tabla1
      CurrentDb.Execute sql

Y luego ya la importación:

      XlsRuta1 = "C:\Documents\tablas.accdb"
      XlsRuta = "C:\Documents\Informes\Tabla1.xlsx"
      DoCmd.SetWarnings False
      Dim app As Application
      Set app = CreateObject("Access.Application")
      app.OpenCurrentDatabase XlsRuta1
      app.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Tabla1" XlsRuta, True
      app.CloseCurrentDatabase
      Set app = Nothing
      DoCmd.SetWarnings True


¿cómo puedo hacer para eliminar los registros en la bbdd destino y no en la tabla vinculada?


Editado por paloma - 17/Agosto/2023 a las 10:15
Arriba
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Enviado: 18/Agosto/2023 a las 11:06

vale, Confused he encontrado el modo, me ha costado porque no controlo casi nada las instancias o conexiones a otras bases de datos. Lo que tenía que añadir es abrir la base de datos destino y correr la sentencia que elimina los registros. Luego después, pasar el TransferSpreadsheet:

        app.OpenCurrentDatabase XlsRuta1
        app.DoCmd.RunSQL sql


Pueden cerrar el hilo. Smile

Saludos,
Arriba
paloma Ver desplegable
Habitual
Habitual


Unido: 24/Junio/2010
Estado: Sin conexión
Puntos: 139
Enlace directo a este mensaje Enviado: 18/Agosto/2023 a las 12:07

Se puede cerrar el tema
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable