Importar información de excel a access, algo complejo

Bueno como todos sabemos podemos utilizar el asistente, tablas vinculadas o importar desde excel en access pero lo que yo busco es algo complejo y diferente.

Explico tengo mi base de datos dividida fromEnd y BackEnd respectivamente.

Por lo tanto supongamos que una persona a la cual le doy mi aplicación y ella no quiere ingresar datos de uno en uno en los formularios y en cambio quiere importar la información masiva en una sola instancia para así ponerse al día y luego trabajar normalmente en el sistema.

Por lo tanto lo que busco es por ejemplo si en mi aplicación tengo el formulario clientes y su tabla vinculada clientes poder agregar en el formulario un botón en el formulario que al seleccionarlo solicite el archivo excel de donde se extraerá la información. Ciertamente este archivo tendría la misma estructura de la tabla de mi aplicación.

Ejemplo: tabla clientes tendría los campos, nombrecliente, dni y el archivo excel las mismas columnas

Entonces luego de ubicar el archivo(puede ser en una ruta predeterminada o que la busque el usuario) tome la información y la agregue a la tabla en cuestión.

Pero aquí es cuando se vuelve mas interesante el tema: supongamos que esta persona (la cual utilizara la aplicación) depende también de otra para alimentar el sistema y esta le envía la información por correo en un excel con la misma estructura. Entonces este botón tendría que tener la capacidad de insertar la información luego del ultimo registro en la tabla clientes siempre y cuando exista informaron anterior y mantenga la estructura.

¿Esto se puede lograr?

1 respuesta

Respuesta
1

Si, se puede hacer. Puedes utilizar diferentes técnicas. Algunas de ellas requieren conocimientos medios de VBA.

- Automatización. Abres el fichero Excel, abres un recordset sobre la tabla de destino, recorres las líneas del fichero y, después de evaluar si el registro existe o no, sobrescribes o añades.

- Recordset sobre el fichero Excel y recordset sobre la tabla de destino. Misma técnica

- Importar el fichero Excel a una tabla temporal y desde allí, lanzar consulta de inserción a la tabla definitiva o utilizar los recordsets.

Para cualquiera de ellas hay literatura en internet para aburrir..

No tengo idea como hacerlo... solo quiero que me lo explique con un ejemplo básico, como lo seria una tabla de personal que solo tiene tres campos dni nombre y teléfono . Esta misma información debería estar en el archivo excel pero de forma masiva y esa información importarla a la tabla personal. Y si ya tengo tres registros en la tabla personal se ingresen los nuevos en el siguiente registro y que no reemplace los existentes. Todo esto realizado con un botón en el formulario

Algo así seria genial pero claro todo incorporado en access sin visual por separado

https://www.youtube.com/watch?v=PjFs5glbS4k

Sin la utilización de VBA, por mi parte lo veo impossible.

De la misma forma, tampoco te puedo pasar ningún código genérico porque las adaptaciones serian grandes.

perdón parece que me exprese mal si es utilizando vba pero con el accesos no como sale en el vídeo que lo utiliza de forma independiente....y si un código o un ejemplo básico seria ideal para yo trabajar con ello.

Vamos a ver... La cosa no es sencilla.

Requiere conocimientos medios de VBA: referencias, automatización, recordsets, etc

Te dejo un código básico. Te recomiendo que lo ejecutes paso a paso para analizar lo que hace cada una de las líneas y el porqué.

Código escrito al vuelo

Los experimentos se hacen con gaseosa.

Function EjemploExcel(strFileName As String, strSheetName As String)
    ' Procdimiento de ejemplo
    ' El nombre del fichero y de la hoja se pasan como argumentos
    ' Se asume que:
    ' Los títulos están en fila 1
    ' Los datos empiezan en fila 2
    ' La tabla de destino se llama tblClientes
    ' La columna A contiene DNI
    ' La columna B contiene el NOMBRE
    ' La columna C contiene el teléfono
    ' No pueden haber DNI's duplicados
    ' Se leerán registros mientras haya valor en la columna A.
    ' Declaramos variables
    Dim rst     As DAO.Recordset
    Dim xlsAPP  As Object
    Dim f       As Integer
    ' Abrimos destino de datos
    Set rst = CurrentDb.OpenRecordset("SELECT * FROM tblClientes")
    ' Instanciamos Excel
    Set xlsAPP = CreateObject("Excel.Application")
    With xlsAPP
        ' Abrimos el libro
        .Workbooks.Open strFileName
        ' Nos posicionamos en la hoja adecuada
        .Sheets(strSheetName).Select
        ' inicializamos la fila
        f = 2
        ' Iteramos mientras tengamos un texto en la columna A
        Do Until .Cells(f, 1) = ""
            ' Creamos una cadena de búsqueda
            strCriteria = "DNI = '" & .Cells(f, 1) & "'"
            ' Buscamos el registro en el recordset
            Rst. FindFirst strCriteria
            If rst.NoMatch Then
                ' Al no encontrarlo lo damos de alta
                Rst. AddNew
            Else
                ' Al encontrarlo lo editamos
                Rst. Edit
            End If
            ' Rellenamos los datos
            rst!DNI = .Cells(f, 1)
            rst!Nombre = .Cells(f, 3)
            rst!Telefono = .Cells(f, 3)
            ' Salvamos
            rst.Update
            ' Siguiente fila
            f = f + 1
        Loop
        ' Cerramos el libro sin salvar
        .ActiveWorkbook.Close False
        ' Cerramos Excel
        .Quit
    End With
    ' Matamos la instancia
    Set xlsAPP = Nothing
    ' Cerramos el recordset
    rst.Close
    Set rst = Nothing
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas