Llenar tabla Access con los nombres de los archivos contenidos en una carpeta con VBA

Tengo un Informe Access donde muestro las fotos contenidas en una determinada carpeta. Esto lo hago realizando un Dir /b >>LISTA.TXT de la carpeta en cuestión y posteriormente hago una importación de los datos guardados en el fichero LISTA.TXT a una tabla de Access, llamada FOTOS, desde la que confecciono el Informe.

Esto es un poco lioso y me gustaría poder hacerlo todo desde una función al abrir el informe. Lo he intentado pero mis conocimientos no llegan a tanto. ¿Me podríais decir si esto se puede hacer?

Los pasos que quiero hacer son:

1-Borrar los registros de la tabla FOTOS

2-Recoger los nombres de las fotos de la carpeta.

3-Transferir estos nombres a la tabla FOTOS

Todo esto antes de que se ejecute el informe, para que los datos que muestre sean los que acabo de recuperar.

1 Respuesta

Respuesta
2

He aquí una forma sencilla, para hacerlo todo en un solo paso desde un botón de un formulario:

'Borro datos de la tabla
CurrentDb.Execute "DELETE * FROM TFotos"
'Cargo los archivos de la carpeta:
Dim archivo As String
archivo = Dir("C:\Users\Fotos\*.jpg")
Do While Len(archivo) > 0
    CurrentDb.Execute "INSERT INTO TFotos(Foto) VALUES('" & archivo & "')"
    archivo = Dir
Loop
'Abro el informe
DoCmd. OpenReport "RFotos", acViewPreview

Suposiciones que he hecho:

1º/ Que tienes una tabla llamada TFotos, con un campo llamado Foto. Si no es así, has de cambiar esos nombres en el código por los que tu tengas.

2º/ Que la carpeta a importar es "fija" (en el ejemplo la ruta de la carpeta es "C:\Users\Fotos").

Si la carpeta no fuera fija, hay muchas opciones para indicarla, por lo que solo voy a mencionarte dos y cómo tendrías que modificar el código:

a) Que pongas la ruta en un cuadro de texto del formulario llama txtCarpeta:

archivo = Dir(Me.txtCarpeta & "\*.jpg")

b) que uses una ventana FileDialog para seleccionar el archivo (con lo que usarás una función que te devuelva la ruta elegida, llamémosla fncRutaCarpeta):

archivo = Dir(fncRutaCarpeta() & "\*.jpg")

Si no sabes de qué te hablo en esta opción, hecha un ojo a este enlace

3º/ También he supuesto que todas tus imágenes tienen extensión .jpg

Si no fuera así, por ejemplo tienes .jpg, .gif, .jpeg... el código cambiaría a :

archivo = Dir("C:\Users\Sveinbjorn\Dropbox\1280\", vbDirectory)
Do While Len(archivo) > 0
If archivo <> "." And archivo <> ".." Then
CurrentDb.Execute "INSERT INTO TFotos(Foto) VALUES('" & archivo & "')"
End If
archivo = Dir
Loop

Si quieres ver otra forma, trabajando con FileSystemObject, puedes ver la aplicación que tengo en este otro enlace.

Un saludo.


Muchísimas gracias.

Me has resuelto mis dudas y ayudado a mejorar bastante la función con otros datos.

Gran explicación.

Encantado de haberte ayudado, y gracias por tus palabras. ¡Hasta otra!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas