Importar varios archivos ascii a access

Estoy haciendo un programa y necesito importar varios archivos a access. De momento paso de uno en uno, pero creo que se puede hacer para que importe todos los archivos de una carpeta. Los archivos que debo importar son todos del tipo av[fecha].txt, por ejemplo:
Av080201.txt, av080202.txt, av080203.txt, ...
¿Sabes cómo puedo hacer para que me importe todos los archivos?

1 respuesta

Respuesta
1
Debes hacer un botón con el siguiente código:
    fichero = Dir("c:\importar\*.txt")
    While (Len(fichero) > 0)
            DoCmd.TransferText , "esquema", fichero, fichero, -1
            fichero = Dir
    Wend
Nota: El comando transfertext tiene varios parámetros que modifican la importación. (Tipo de archivo delimitado, fijo, con cabeceras, etc). Pinta el comando con el mouse y con f1 te muestra los parámetros y sus explicaciones.
Si los archivos son idénticos en estructura, (misma cantidad y tipo de campos, mismo tipo de delimitador, etc, etc) puedes generar un schema para que la importación sea en un formato adecuado.
Prueba importando 1 archivo con el asistente, y antes de dar click a la opción finalizar, haz click en avanzado, guardar como y eliges un nombre. En este caso le puse "esquema".
Saludos. Jorge
Parece que reconoce el archivo, pero a la hora de ejecutarlo me da n error:
Se ha producido el error "3011" en tiempo de ejecución:
El motor de base de datos microsoft jet no pudo encontrar el objeto "AV080102.txt". asegúrese que el objeto existe, y ue se ha escrito el nombre y la ruta de acceso al objeto correctamente.
1) ¿Generaste el esquema?
2) ¿Usas caminos largos en la ubicación del /de los archivos?
El error informa que el archivo AV080102.txt no lo puede abrir. ¿Estará en uso? Prueba de copiar algunos en una carpeta con un nombre usual, c:\test por ejemplo.
Muchísimas gracias.
El error estaba en el esquema que había creado, he cambiado el marcador de decimales (estaba puesto, y he puesto un .) y como añado todos los archivos a la misma tabla, le he puesto que los datos sean indexados con duplicados y ya funciona perfectamente.
Solo una duda más con respecto a este tema.
Como te decía, cada día me vuelca en un archivo av080101.txt, av080102.txt... al volcar se me vuelca todo en un archivo, pero no se de que día era. ¿Se te ocurre alguna idea de como diferenciarlos? Yo lo más fácil que veo, seria que me añada en una columna el nombre del archivo del que vuelca y de ahí ya sacaría la fecha, pero no se si eso seria posible. Te pongo un ejemplo:
Si importo el archivo av080101.txt en la tabla que llamo "volcado" me aparecen los datos:
Articulo cantidad importe
001 50 1,00
Necesito que se añada ahí la columna "nombre de archivo" o "fecha"
Muchas gracias
La forma más simple sería crear en la tabla un campo fecha, de tipo fecha/hora, cuyo valor predeterminado sea =date().
Luego al insertar un registro en la tabla, automáticamente le inserta la fecha/hora del sistema.
Saludos. Jorge
El problema es que yo vuelco los datos de mes en mes. Había pensado con una consulta de actualización, pero es que no se ejecutar consultas. Estoy leyendo hacerlo en sql, pero no se que hacer para que ejecute el sql...
Para ejecutar un comando sql, lo escribes directamente en el asistente de consultas. El SQL es un lenguaje para seleccionar, agrupar, calcular, y otras operaciones en bases de datos que se utiliza en distintos sistemas, tanto en access, visual, fox, oracle, etc etc etc
El asistente cualquier consulta la transforma en un comando sql. Luego de realizada una consulta y si el resultado es satisfactorio, puedes incorporarla a un formulario copiando el código.
Por ejemplo una consulta de actualización:
Public Sub DoSQL()
    Dim SQL As String
    SQL = "UPDATE Employees " & _
          "SET Employees.Title = 'Regional Sales Manager' " & _
          "WHERE Employees.Title = 'Sales Manager'"
    DoCmd.RunSQL SQL
End Sub
Pd. No entendí porque no te sirve lo de la fecha, eso de mes en mes, ¿qué quisiste decir? Si el formato del campo fecha lo eliges tu. Si quieres que guarde solo el mes y el año no hay problema, eliges en formato= mm/aaaa
Saludos. Jorge
Lo que he creado es esto:
Function IMPORTAR()
fichero = Dir("c:\importar\*.txt")
While (Len(fichero) > 0)
DoCmd.TransferText , "esquema", "Aux volcado", "C:\importar\" & fichero, -1
fichero = Dir
Dim SQL As String
SQL = "UPDATE [Aux volcado] " & _
"SET [Aux volcado].Achivo= fichero " & _
"WHERE [Aux volcado].Archivo is Null"
DoCmd.RunSQL SQL
Wend
End Function
Lo que pasa es que me gustaría que en la columna de la tabla [Aux volcado]. Archivo me ponga el nombre de fichero. Como te pongo antes lo hago así:
"SET [Aux volcado].Achivo= fichero "
Pero en vez de ponerme el nombre del fichero, me pregunta que es fichero.
Por cierto, muchísimas gracias por toda la ayuda que me estas prestando, sin ti, creo que nunca lograría hacer esto!
Ya esta. Muchas gracias por todo.
Al final lo que he hecho es:
Option Compare Database
Function IMPORTAR()
Dim fichero As String
fichero = Dir("c:\importar\*.txt")
While (Len(fichero) > 0)
DoCmd.TransferText , "esquema", "Aux volcado", "C:\importar\" & fichero, 0
SQL = "UPDATE [Aux volcado] SET [Aux volcado].CONTROL = """ & fichero & """" & _
"where [aux volcado].CONTROL is null"
DoCmd.RunSQL SQL
fichero = Dir
Wend
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas