sql >> Base de Datos >  >> RDS >> Access

Abrir o vincular texto o Excel como fuentes de datos en Microsoft Access

Abrir o vincular texto o Excel como fuentes de datos en Microsoft Access

Access es una herramienta fenomenal para trabajar con muchas fuentes de datos. Es posible que sepa desde hace mucho tiempo que puede importar o exportar datos fácilmente en una amplia gama de formatos. Sin embargo, teníamos un escenario en el que necesitábamos procesar datos de fuentes de datos externas. El procesamiento se ejecuta con frecuencia, por lo que la importación de datos inflaría el archivo front-end rápidamente. Además, en esta situación, crear una segunda copia del archivo de Access como una base de datos temporal para evitar la hinchazón no era una opción viable. ¿Qué opciones teníamos? Ahí es donde notamos una escasez de información sobre la apertura o el enlace a fuentes de datos no relacionales. Entonces, profundicemos en este tema.

Esta serie de blogs tiene como objetivo llenar un vacío en la documentación de Microsoft sobre cómo abrir o vincular texto o Excel como fuente de datos en las aplicaciones de Access. Connectionstrings.com y otros sitios proporcionan algunas migas de pan. Por lo general, también puede descubrir parte del comportamiento utilizando los asistentes de Access y luego examinando los objetos después. Sin embargo, las conjeturas secundarias no son muy útiles. Por lo tanto, esta serie de artículos tratará sobre cómo usar archivos de Excel y de texto como fuentes de datos sin importar o exportar necesariamente los datos.

Tenga en cuenta que la serie no sería posible sin la ayuda de Dan Haught y Jim Ferguson, coautores de la Guía del programador del motor de base de datos Microsoft Jet. Aunque el libro está agotado hace mucho tiempo, sigue siendo un libro valioso si trabaja mucho con DAO.

Acceso y fuentes de datos no relacionales

Access siempre ha admitido el uso del Método de acceso secuencial indexado (ISAM) como fuente de datos potencial, lo que le permite importar, vincular o exportar a fuentes de datos no relacionales como archivos de texto u hojas de cálculo de Excel e incluso otros formatos de archivo como Exchange, dBASE o Fox Pro. DAO lo hace posible porque tiene los controladores ISAM que pueden funcionar con esos formatos. Sin embargo, me centraré en los archivos de texto y las hojas de cálculo de Excel, ya que son fuentes más comunes con las que necesitamos Access para trabajar. Si todo lo que ha hecho es importar datos usando la pestaña Datos externos a través de Access, puede parecer mágico, pero en realidad, todas las funciones de Access están disponibles para nosotros como programadores en el nivel de DAO.

Así que olvidemos que los magos existen. Olvidémonos de los íconos brillantes en la cinta. Olvidemos que hay tablas enlazadas. Usemos el código VBA para trabajar con fuentes de datos, de la nada. ¿Podemos? Absolutamente. Primero, veremos la diferencia entre vincular y abrir una fuente de datos.

Enlace vs. Apertura

Para ayudar con la terminología, necesitamos hacer una distinción entre vincular vs. apertura . Vincular significa que creamos una tabla vinculada que ahora es una "tabla" de Access que podemos usar como cualquier otra tabla de Access. Como tal, es un objeto permanente definido dentro de la aplicación de Access. Por el contrario, la apertura es cuando accedemos a la fuente de datos directamente mediante el OpenDatabase de DAO. método. Por su naturaleza, la apertura de una fuente de datos generalmente se realiza a través de un código VBA, como verá en breve.

Configuración de las muestras y el código

Debido a que la serie trata de comprender los detalles esenciales de cómo Access interactúa con esas fuentes de datos, primero nos enfocaremos en abrir en lugar de vincular aquí. Entonces, ¿cómo abrimos una hoja de cálculo de Excel? Seguramente, no es una base de datos? Vamos a configurar un ejemplo mínimo para empezar. En una carpeta, C:\Links , crearemos una hoja de cálculo de Excel y un archivo de base de datos de Access, llamado Products.xlsx y Sample.accdb , respectivamente:

Products.xlsx es una hoja de cálculo simple con una sola hoja con este contenido:

Con esto, agreguemos el código VBA en el Sample.accdb . En un módulo estándar:

Public Sub OpenExcel()
    Dim db As DAO.Database
    
    Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx")
    
    Dim tdf As DAO.TableDef
    For Each tdf In db.TableDefs
        Debug.Print tdf.Name
        
        Dim fld As DAO.Field
        For Each fld In tdf.Fields
            Debug.Print fld.Name,
        Next
        Debug.Print
        
        Dim rs As DAO.Recordset
        Set rs = tdf.OpenRecordset
        Do Until rs.EOF
            For Each fld In rs.Fields
                Debug.Print fld.Value,
            Next
            Debug.Print
            rs.MoveNext
        Loop
    Next
End Sub

Si ejecutamos el código, deberíamos obtener el siguiente resultado en nuestra ventana inmediata:

Products      Count         
Apples         3            
Bananas        5            
Figs           8            

Entonces, aunque Excel no es una "base de datos" (y si está usando Excel como base de datos, qué vergüenza 😉), aún podemos fingir que es una "base de datos" e iterar a través de sus "tablas" y "registros". usando objetos DAO familiares. Toda la magia proviene de esta cadena de conexión:

Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx

Pero no tiene que ser mágico. La serie diseccionará las partes de las cadenas de conexión para Excel y los controladores de archivos de texto. Entonces, comencemos con la comparación con la cadena de conexión ODBC con la que quizás esté más familiarizado.

Tipos de fuentes de datos

Si se ha vinculado a fuentes de datos ODBC, probablemente haya notado que las cadenas de conexión ODBC generalmente se ven así:

ODBC;DRIVER=...;SERVER=...;DATABASE=...;

Me preguntaba por qué siempre comenzaba con ODBC ? Esa primera parte es lo que usa DAO para identificar el tipo de fuente. Sin embargo, debido a que Excel no es una base de datos ODBC, debemos usar Excel 12.0 Xml para indicar que DAO necesita usar un controlador de Excel en particular. El resto de la sintaxis de la cadena de conexión está influenciada por el controlador que estamos usando en la primera parte de la cadena de conexión.

Aquí hay una lista parcial de posibles tipos de fuentes de datos que reconocerá MS Access:

  1. Excel 8.0 :97-2003 archivos xls
  2. Excel 12.0 :archivos xlsb
  3. Excel 12.0 Xml :archivos xlsx
  4. Text :Cualquier archivo de texto

Hay más fuentes de datos, incluidos SharePoint, Exchange o FoxPro, pero no las voy a cubrir. Aun así, demuestra que Access es capaz de trabajar con esas fuentes como una base de datos y eso puede permitirnos usar DAO para leer los contenidos. Tenga en cuenta que cuando usamos fuentes de datos no relacionales, es posible que no todas las operaciones sean totalmente compatibles. Por ejemplo, es posible que no se le permita editar una fila existente aunque pueda insertar una fila.

Sin embargo, un desafío con la apertura o el enlace a una fuente de datos significa que no puede simplemente importar los datos y luego editar el esquema para satisfacer sus necesidades. Por lo tanto, puede encontrar que el esquema predeterminado que obtiene al vincular no será el que desea. Por esa razón, será importante una comprensión profunda de la cadena de conexión. Por lo tanto, aprenderá más sobre los detalles de las cadenas de conexión tanto para Excel como para archivos de texto en los próximos artículos.

Conclusiones

Viste que, como alternativa a la importación de datos externos, podemos optar por vincular o incluso abrir una fuente de datos externa mediante DAO. La capacidad de vincular o abrir una fuente de datos externa está muy infrautilizada. Sin embargo, la capacidad de vincular o abrir no debe descartarse, ya que esto puede abrir nuevos escenarios, como evitar la hinchazón como efecto de la importación, especialmente en un entorno bloqueado. En el siguiente artículo, analizaré los diferentes parámetros que usa el controlador de Excel para construir una cadena de conexión válida. En los siguientes artículos, analizaré el controlador del archivo de texto y los parámetros de conexión. En el artículo final, lo pondremos todo junto.