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

Cadenas de conexión ad-hoc y consultas heterogéneas para MS Access

Cadenas de conexión ad-hoc y consultas heterogéneas para MS Access

Las consultas heterogéneas son la razón por la cual las cadenas de conexión, especialmente las cadenas de conexión ad-hoc, son importantes. En artículos anteriores de la serie, vio cómo podía personalizar los parámetros de conexión para conectarse a Excel y archivos de texto. En el caso de los archivos de texto, también puede describir el esquema de la estructura del archivo de texto usando schema.ini o especificaciones guardadas. En el primer artículo, también aprendiste la diferencia entre vincular y abrir una fuente de datos.

Consultas heterogéneas en lugar de código VBA

En los artículos anteriores, vio un código de muestra para abrir dicha fuente de datos utilizando OpenDatabase de DAO. método.

Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx")

Esto podría dejarle la impresión de que la única forma de abrir una fuente de datos es a través del código. ¡Pero ese no tiene por qué ser el caso! En realidad, puede abrir una fuente de datos arbitraria utilizando solo la consulta de Access. Aquí hay una sintaxis de muestra que puede ejecutar en una consulta de Access:

SELECT * 
FROM [Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx].[Sheet1$];

En términos generales, la cadena de conexión que colocas en OpenDatabase El cuarto parámetro de es con el que prefijarías la "tabla". Por lo tanto la sintaxis general sería:

FROM [<complete connection string>].[<name of the table>]

Puede usar OpenDatabase método e iterar sobre TableDefs para encontrar los nombres válidos de la tabla. Luego puede usarlo para completar la segunda parte del nombre.

¿Por qué abrir en lugar de vincular?

Una ventaja de abrir en lugar de vincular es que puede cambiar la cadena de conexión en tiempo de ejecución. Tampoco tiene que lidiar con la limpieza requerida, como eliminar los objetos vinculados que ya no son necesarios. Es puramente transitorio, lo que sería perfecto para mover datos de una fuente a otra sin escribir ningún código VBA.

Aquí hay un escenario posible. Supongamos que queremos crear archivos de texto que sean una salida de una vista en nuestra base de datos de SQL Server. En artículos anteriores vio que podíamos escribir código VBA para recorrer los conjuntos de registros DAO y escribir el contenido uno por uno. Sin embargo, como alternativa, podemos simplemente crear una consulta de Access con este SQL:

INSERT INTO [Text;DATABASE=C:\Links\].[products.csv;] (Products, Count)
SELECT Products, Count
FROM [ODBC;DRIVER=ODBC Driver 17 for SQL Server;SERVER=myServer;DATABASE=myDatabase;].[vwProducts];

Debido a que tanto el destino como la fuente no son la fuente de Access, esto es lo que llamamos "consulta heterogénea". Tenga en cuenta que incluso si los vwProducts fuera una tabla vinculada, seguiría siendo una consulta "heterogénea". Esto se debe a que todavía estamos mezclando diferentes fuentes de datos en una sola consulta.

Más importante aún, al usar una consulta heterogénea, evitamos la necesidad de crear objetos temporales dentro de nuestra aplicación de Access. La creación de un objeto temporal puede hacer que la aplicación de Access se hinche. Este es el caso incluso con la importación, vinculación o uso de conjuntos de registros en VBA. Un archivo inflado a su vez puede requerir compactación y reparación. Sin embargo, cuando utiliza una consulta heterogénea para transferir datos directamente de una fuente de datos a otra, evita toda esa hinchazón. En consecuencia, lo hace ideal para escenarios en los que su aplicación de Access necesita generar varios archivos sin mantenimiento en la propia aplicación.

Construyendo la cadena de conexión ad-hoc

A estas alturas, puede ver por qué es valioso comprender los parámetros utilizados en la cadena de conexión. Es especialmente importante controlar el destino (por ejemplo, la ruta de los archivos de texto o el rango de la hoja de Excel). Con esas fuentes de datos no relacionales, lo que constituye una "base de datos" y "tablas" en dicha fuente de datos puede no ser intuitivo. Puede usar los últimos 3 artículos como referencia para obtener ayuda con la construcción de la cadena de conexión y la información del esquema para asegurarse de que el diseño salga bien. Dicho esto, también hay un atajo que puede usar para ayudarlo a encontrar la cadena de conexión.

Puede usar la pestaña externa e "Importar texto" o "Importar Excel" y elegir la opción de enlace. Por lo general, es la tercera opción del asistente, como se muestra.

Después de pasar por el asistente y guardar la nueva tabla vinculada, puede inspeccionar la cadena de conexión a través de la ventana inmediata de VBA con este código:

?CurrentDb.TableDefs("<name of linked table>").Connect

Esto puede proporcionarle sugerencias sobre cómo construir la cadena de conexión y luego puede personalizarla. La mayoría de las veces, se encontrará personalizando la ruta o el nombre de la tabla, por lo que generalmente funciona como una técnica suficiente durante su desarrollo. A continuación, puede crear una consulta heterogénea en consecuencia y eliminar la tabla vinculada.

Conclusiones

En la serie, aprendiste la diferencia entre vincular y abrir. Luego vio cómo los archivos de texto y Excel se pueden usar como si fueran una DAO.Database objetos con “tablas”. Con el segundo artículo, aprendió sobre los parámetros de conexión para un libro de Excel. En el tercer artículo, vio la necesidad de tener información de esquema para describir un archivo de texto. El cuarto artículo describía cómo usar schema.ini . En el quinto artículo, vio cómo las MSysIMEXSpecs y MSysIMEXColumns se puede utilizar como alternativa a schema.ini método.

Finalmente, juntamos todo en la construcción de una consulta heterogénea como ejemplo de una solución de código bajo. No tenemos que escribir una gran cantidad de código VBA solo para enviar datos de una fuente a otra fuente. Creo que estará de acuerdo en que es mucho más fácil modificar una consulta de Access ajustando la ruta o el nombre de la tabla que escribir una rutina VBA grande y compleja para leer y escribir datos. Más importante aún, al usar una consulta heterogénea, se vuelve mucho más fácil manejar los cambios en la estructura en ambos lados. ¿Se agregó una nueva columna? No hay problema, simplemente agregue la nueva columna a la consulta y listo.

Sin embargo, como puede ver, esto requiere una buena comprensión de la construcción de la cadena de conexión. Por esa razón, fue necesario estudiar en profundidad las complejidades de la cadena de conexión como lo hicimos del 2 al 5 artículos. Aunque podemos usar el asistente de tablas vinculadas para darnos una pista sobre las cadenas de conexión. Pero son solo pistas. Por lo tanto, es bueno saber cómo controlar con precisión la salida. Espero que esté de acuerdo en que invertir un poco de esfuerzo en comprender cómo funcionan las cadenas de conexión se amortizará en mano de obra ahorrada.