Automatizar importación en ACCESS

Estoy intentando automatizar lo máximo posible una serie de importaciones que tengo que hacer a diario de unos archivos txt.
Dichos archivos vienen nombrados con la fecha en la que se han creado, sería una cosa así: 0502_2012.txt
Me
Preguntaba si existía la posibilidad de no tener que estar cambiando
siempre el nombre del archivo para poder tenerlo guardado en una
especificación de importación, de manera que busque el archivo más
reciente y lo importe automáticamente.
Ya si queréis sacar nota,
me gustaría plantearos la posibilidad de que pueda automatizarse todos
los días esta importación, de forma que a las 9 de la mañana la realice
Access por sí mismo.

2 Respuestas

Respuesta
1

Después de dar muchas vueltas, creo que encontré una solución a tu problema:

Creas un botón en un formulario, con este código:

Dim Archivo as String

Const Ruta as String = "C:\...\" Ruta de la carpeta donde está el archivo txt, terminada en \

Archivo=Format(Date,"ddmm_yyyy") & ".txt"

DoCmd.TransferText acImportDelim,, "Nombre de la Tabla", Ruta & Archivo, True

Este código debería funcionarte si el archivo txt tiene nombres de columnas. Si no fuera así, tienes que cambiar el True del final por False, y hacer un pequeño "apaño":

En la barra de menús principal de Access, selecciona Obtener datos externos -> Importar. Busca el archivo "AnteriorP" en el cuadro de diálogo y pulsa en Importar. Ahora, en el
Asistente que aparece, pulsa en Avanzado... (abajo a la izquierda). Access te muestra ahora una pantalla para delimitar cómo es el archivo: si el formato es delimitado o de ancho fijo, el carácter delimitador de campo la coma o el punto y coma, los formatos de fechas y números, y en la grilla inferior, indica los nombres y tipos de los campos a lo que tengas en la tabla de la base de datos. Una vez tengas todo, guárdalo pulsando en Guardar como... Ahora ya tienes una especificación que puedes usar en DoCmd. TransferText, en el segundo parámetro que tenías vacío. Por ejemplo, si la especificación la nombras "MiEspecificación", la llamada sería así:

DoCmd. TransferText acImportDelim, "MiEspecificación", "Nombre de la Tabla", Ruta & Archivo, False.

Si tienes un formulario que haga las veces de menú, puedes colocar el código anterior en el evento al cargar de dicho formulario.

Y para acabar, para controlar que no se importen dos veces el mismo archivo, puedes crear una tabla (Importaciones) con dos campos: Nombre(tipo texto) e Importado (tipo Si/No).

Luego en el código le añadirías estas lineas en negrita:

Dim ArchivoImportado as Boolean

Dim Archivo as String

Dim miSQL as String
Const Ruta as String = "C:\...\" Ruta de la carpeta donde está el archivo txt, terminada en \
Archivo=Format(Date,"ddmm_yyyy") & ".txt"
ArchivoImportado=Nz(DLookup("Importado","Importaciones","[Nombre]='" & Archivo & "'"),False)

If ArchivoImportado=True then Exit Sub ' Si ya está importado, salimos sin más

DoCmd.TransferText acImportDelim, , "Nombre de la Tabla", Ruta & Archivo,True

miSQL="INSERT INTO Importaciones(Nombre,Importado) VALUES ('" & Archivo & "',True)"

DoCmd.SetWarnings False

DoCmd. RunSQL miSQL

DoCmd. SetWarningsTrue


Un saludo

Respuesta
1

Esta complicado este caso, pero me imagino que debe ser algo así.

Primero, debes conocer el nombre del archivo creado en una carpeta especifica y establecerlo en una variable temporal, luego asignárlo a través de una macro en el nombre del archivo a importar, el problema es el formato a importar ya que es un archivo de texto. Eso habría que analizar mas a fondo.

Bueno, creo que va a ser más difícil la solución que el problema. Cambiaré el nombre del archivo y solucionado.

Muchas gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas