Guardar en una tabla de access los nombres de los ficheros contenidos en una carpeta (access vba)

¿Cómo puedo guardar en una tabla de access los nombres de los ficheros contenidos en una carpeta dada de un form?

He conseguido seleccionar la carpeta y leer los ficheros que contenga, introduciéndolos en una lista de valores,..., ¿pero cómo puedo guardar estos nombres en una tabla?

Este es el código que uso:

Private Sub BUSCARCARPETA_Click()
    Dim cArchivo As String
    'Dim SQL As String
    Buscar_Destino ("C:\")
    cArchivo = Dir(Me.txtFile & "\", 0)

    Do While cArchivo > ""
        Me.Lista.AddItem cArchivo
            'MsgBox ("EL ARCHIVO ES..." & cArchivo)
            'DoCmd.SetWarnings True
        cArchivo = Dir
    Loop

    MsgBox "No quedan más archivos"
End Sub

2 respuestas

Respuesta
1

¿Cómo quieres guardar los nombres de los archivos en la tabla: todos en un campo (separados por ;, por ejemplo) de un mismo registro o cada nombre de archivo en un registro distinto?

Si lo quieres hacer de la primera forma (con el punto y coma como separador), una forma "rápida" podría ser:

Private Sub Comando2_Click()
Dim cArchivo As String
'Dim SQL As String
Buscar_Destino ("C:\")
cArchivo = Dir(Me.txtFile & "\", 0)
Do While cArchivo > ""
Me.Lista.AddItem cArchivo
'MsgBox ("EL ARCHIVO ES..." & cArchivo)
'DoCmd.SetWarnings True
cArchivo = Dir
Loop
CurrentDb.Execute "INSERT INTO Tabla10(Archivos) VALUES('" & Me.Lista.RowSource & "')"
MsgBox "No quedan más archivos"
End Sub

Si quieres otro separador, por ejemplo un guión (-):

Private Sub Comando2_Click()
Dim cArchivo As String
'Dim SQL As String
Buscar_Destino ("C:\")
Dim losArchivos As String
cArchivo = Dir(Me.txtFile & "\", 0)
Do While cArchivo > ""
Me.Lista.AddItem cArchivo
'MsgBox ("EL ARCHIVO ES..." & cArchivo)
'DoCmd.SetWarnings True
cArchivo = Dir
losArchivos = losArchivos & "-" & cArchivo
Loop
CurrentDb.Execute "INSERT INTO Tabla10(Archivos) VALUES('" & losArchivos & "')"
MsgBox "No quedan más archivos"
End Sub

Hola, lo primero mil gracias por tu ayuda.

Decirte que la tabla está creada en la misma bd, y se llama TABLAARCHIVOS, Y solo contiene un campo llamado NOMBREARCHIVO.

Lo que me gustaría es que guarde cada nombre de archivo, incluida su extensión, en un registro

(Un registro por cada archivo).

Por otro lado, acabo de probar tú instrucción, y la tabla sigue vacía, por lo que no ha guardado nada, he adaptado tu código, espero haberlo hecho bien:

CÓDIGO:

Private Sub BUSCARCARPETA_Click()
    Dim cArchivo As String
    Buscar_Destino ("C:\")
    Dim losArchivos As String
    cArchivo = Dir(Me.txtFile & "\", 0)
    Do While cArchivo > ""
    Me.Lista.AddItem cArchivo
    cArchivo = Dir
    losArchivos = losArchivos & "-" & cArchivo
    Loop
    CurrentDb.Execute "INSERT INTO TABLAARCHIVOS(NOMBREARCHIVO) VALUES('" & losArchivos & "')"
    MsgBox "No quedan m?s archivos"
End Sub

Empiezo por el final:

La instrucción está bien adaptada a lo que tienes, y te debería funcionar

Te envío un archivo con la misma tabla y nombre del campo y la instrucción, que a mi me funciona perfectamente.

Además, tienes en el otro botón cómo sería para que cada nombre vaya a un registro.

http://www.filebig.net/files/LazyGCzaWh 

Un saludo.


Lo pruebo cuando llegue a casa,... pero lo primero es lo primero : Gracias !!!!

luego te digo como funciona.

Ok, quedo a la espera por si hay que afinar algo en el código, pero seguro que te sirve.

Hola de nuevo, decirte que funciona a la perfección, de nuevo Muchas Gracias por tu ayuda.

Ahora voy a por el siguiente paso, que es separar de los nombres el prefijo de los números, y asi como paso final, poder renombrar los archivos y tener ordenadas las fotos.

Voy a por ello.

Saludos

Hola, imaginemos que el nombre de uno de los archivos es "img_0518.jpg", he conseguido extraer los números (0518), pero al guardarlos en la tabla me lo guarda como "518" discriminando el cero. Como puedo hacerlo?

Este es el código:

Private Sub BUSCARCARPETA_Click()
    Dim cArchivo As String
    Buscar_Destino ("C:\")  'Esta linea la elimino porque no tengo ese procedimiento/funci?n
    Dim losArchivos As String
    Dim i As Integer
    Dim Caracter As String
    Dim tempCaracter As String
    cArchivo = Dir(Me.txtFile & "\", 0)
    Me.Lista.RowSource = "" 'A?ado esta linea para resetear el cuadro de lista y que no encadene archivos
    Me.NUMERODEARCHIVO.RowSource = "" 'A?ado esta linea para resetear el cuadro de lista y que no encadene archivos
    Do While cArchivo > ""
        Me.Lista.AddItem cArchivo
        'sacamos tambien los numeros del archivo
        tempCaracter = ""
        For i = 1 To Len(cArchivo)
            If IsNumeric(Mid(cArchivo, i, 1)) Then
                Caracter = Mid(cArchivo, i, 1)
                tempCaracter = tempCaracter & Caracter
            End If
        Next
        Me.NUMERODEARCHIVO.AddItem tempCaracter
        MsgBox ("EL QUE VA A GUARDAR ES..." & Format(tempCaracter, "0000"))
        CurrentDb.Execute "INSERT INTO TABLAARCHIVOS(NOMBREARCHIVO,NUMERODELARCHIVO) VALUES('" & cArchivo & "' ,'" & Format(tempCaracter, "0000") & "')"
        cArchivo = Dir
    Loop
    MsgBox "No quedan mas archivos"

End Sub

y en el form:

Gracias de antemano

La forma fácil sería guardar el campo numeroarchivo como texto.

Otra forma fácil sería darle una máscara de entrada al campo para que "muestre" ese 0 a la izquierda

¡Gracias! 

Hola,

Disculpa, una vez ordenada la tabla de los archivos, necesito añadir en el campo "numeronew" el numero "0001" al primer registro de la tabla, al segundo registro el "0002",... y así sucesivamente hasta el ultimo registro.

Lo he intentado con un recordset, pero me da fallo.

¿Cómo podría hacerlo?

http://www.filebig.net/files/6J7DiNT9eR

Te falta registrar la librería DAO para trabajar con recordsets y además, el nombre de la tabla tiene que ir entre comillas dobles.

Gracias,

Ya he puesto las comillas.

En cuanto a las referencias, sigue dándome error, estas son las que tengo seleccionadas, ¿cuál me falta?

Cuando escribo el rs.edit,... me dice que no encuencuentra el método "edit"

Busca Microsoft DAO x.xx Object Library

Respuesta
1

Otra posibilidad. Abre la ventana del editor de VB y activa la casilla Microsoft Office XX.X(Es por la versión del Office que tengas instalada).

Si tengo la tabla

Y con ella construyo un formulario continuo y en el código del formulario le pongo

Public Function buscaArchivo() As String
Dim fDialog As Office.FileDialog
Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
With fDialog
.AllowMultiSelect = False
.ButtonName = "Seleccionar"
.Title = "Seleccionar el archivo"
.InitialFileName = Application.CurrentProject.Path
.InitialView = msoFileDialogViewDetails
.Filters.Clear
.Filters.Add "All files", "*.*"
If .Show = True Then
buscaArchivo = .SelectedItems(1)
Else
MsgBox "Ha pulsado el botón <Cancelar>."
End If
End With
End Function
Private Sub NombreArchivo_DblClick(Cancel As Integer)
If IsNull([NombreArchivo]) Then
NombreArchivo = buscaArchivo()
End If
End Sub

 y en las propiedades del cuadro de texto NombreArchivo-Eventos-Al hacer doble clic le pongo Procedimiento de evento, cuando abro el formulario y hago doble clic sobre él, se abra un "explorador" para que localice el archivo que sea. 

Una vez localizado y pulsado abrir

Y lógicamente te queda guardado en la tabla

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas