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

Parámetros de cadena de conexión para especificaciones guardadas

Parámetros de cadena de conexión para especificaciones guardadas

Access proporciona un segundo método para describir el esquema de los archivos de texto mediante el uso de tablas del sistema MSysIMEXSpecs y MSysIMEXColumns para guardar las especificaciones. En el artículo anterior, cubrí cómo schema.ini se puede utilizar para describir la estructura de un archivo de texto. El schema.ini involucró un archivo de texto externo implícitamente referenciado pero con las tablas del sistema, no tenemos ninguna dependencia externa. La estructura es bastante diferente, aunque hay algunas superposiciones.

MSysIMEXSpecs y MSysIMEXColumns tabla de sistema

En lugar de depender de que un schema.ini externo esté presente en la misma carpeta que el archivo de texto, es posible proporcionar especificaciones para un archivo de texto en cualquier ruta haciendo referencia a la especificación guardada dentro de la base de datos de Access. Cuando utiliza el asistente de Importación o Exportación, puede guardar o cargar las especificaciones a través de Advanced botón.

Al hacer clic en el botón avanzado, se mostrará el cuadro de diálogo de especificación. Además de cargar o guardar las especificaciones, también puede personalizar las especificaciones mediante el cuadro de diálogo que se muestra.

Cada vez que se guarda una especificación, se escribe tanto en MSysIMEXSpecs y MSysIMEXColumns tablas del sistema. Las tablas no existen en un nuevo archivo de Access y se crearán solo la primera vez. Además, puede editar o incluso eliminar datos de esas tablas. Aun así, siguen siendo tablas del sistema por lo que están ocultas por defecto. Si desea verlos en el panel de navegación, deberá ir a las Opciones de navegación y habilitar la visibilidad para los objetos ocultos y del sistema.

Si compara las opciones disponibles en el cuadro de diálogo con las opciones que tiene en schema.ini , se pueden ver algunas diferencias notables. Por ejemplo, el schema.ini permite más opciones con respecto a cómo se pueden formatear las fechas o los montos de moneda. Con las especificaciones guardadas, solo podemos controlar el formato de fecha desde una lista preestablecida de formato posible. No hay opciones directas para los montos de moneda porque usamos el tipo de datos para indicar que una columna se debe importar como moneda, independientemente del formato. Por lo tanto, las opciones de las tablas del sistema son simples en comparación con schema.ini. A continuación revisaremos la estructura de las tablas.

MSysIMEXSpecs estructura

La tabla representa un conjunto de especificaciones guardadas. Para cada fila, la tabla describe el formato general del archivo, similar a la segunda sección de schema.ini . Sin embargo, hay diferentes opciones que deben ser consideradas.

  • DateDelim :identifica el delimitador de las fechas. Normalmente es / o - . Puede ser solo uno o cero caracteres.
  • DateFourDigitYear :Un campo Sí/No que indica si las fechas tienen formato de cuatro dígitos para años. Si se establece en sí, valores como 10/10/20 no se considerarían fechas válidas.
  • DateLeadingZeros :Otro campo Sí/No que indica si las fechas tienen ceros a la izquierda.
  • DateOrder :Determina el formato de fecha que queremos usar. Los siguientes códigos son válidos:
    • 0 :DMA
    • 1 :DYM
    • 2 :MDA
    • 3 :MYD
    • 4 :YDM
    • 5 :AMD
  • DecimalPoint :Indica el carácter para separar la parte entera y fraccionaria de un número decimal. Debe ser exactamente un solo carácter.
  • FieldSeparator :Separa campos en el archivo de texto. Para un archivo CSV, sería , (un carácter de coma). Además, debe ser exactamente un solo carácter.
  • FileType :Similar a schema.ini 's CharacterSet . Como se mencionó en el artículo anterior, puede ubicar todas las posibles páginas de códigos admitidas en su máquina con Windows, busque en la clave de registro Computer\HKEY_CLASSES_ROOT\MIME\Database\Codepage\ . Identifica la codificación del archivo de texto. Puede utilizar el mismo identificador de página de códigos. Sin embargo, hay un problema. El FileType se define como un Integer . Por lo tanto, una página de códigos 65000 (por ejemplo, Unicode) se informaría como -536. Para convertir cualquier identificador de página de códigos mayor que 32767, puede usar la fórmula CInt("&H" & Hex(x)) y para invertir la operación, CLng("&H" & Hex(x)) . Por ejemplo, la conversión de la página de códigos 65000 pasaría por CInt("&H" & Hex(65000)) para producir -536. Para invertir, CLng("&H" & Hex(-536)) para recuperar 65000.
  • SpecID :Autonumeración para la tabla. Tenga en cuenta que esta no es la clave principal de la tabla. Esta columna se usa con MSysIMEXColumns.SpecID para relacionar registros. Sin embargo, no existe una restricción de clave externa entre las dos tablas, por lo que pueden ocurrir eliminaciones huérfanas.
  • SpecName :La clave principal de la tabla. Identifica de forma única la especificación. Siempre que guarde una especificación, el nombre que proporcione se registrará en este campo. Cuando importa o exporta usando asistentes, Access puede crear automáticamente una nueva especificación incluso si no usó el Advanced y guardarlo explícitamente.
  • SpecType :Solo puede ser 1 para indicar archivo delimitado o 2 para significar archivo de ancho fijo.
  • StartRow :determina la fila en el archivo de texto para comenzar a escanear para importar. Puede ser cualquier número, por lo que es posible omitir varias líneas en la parte superior del archivo. Puede ser útil para archivos de texto mal formados que tienen encabezados no conformes.
  • TextDelim :Un solo carácter que delimita un valor de texto. Se puede omitir si el texto no está delimitado. Si puede controlar el formato de los archivos de texto, generalmente es una buena idea tener delimitadores de texto. Un archivo de texto con delimitadores de texto permanecerá bien formado incluso si el texto contiene separadores de campo (por ejemplo, una coma) dentro del texto.
  • TimeDelim :Indica el carácter delimitador utilizado para la hora. Puede ser cualquier carácter individual o estar en blanco y el valor predeterminado es : (un carácter de dos puntos).

MSysIMEXColumns estructura

La tabla describe las columnas individuales en el archivo de texto y cualquier atributo. Esto corresponde aproximadamente a la tercera sección del schema.ini . Sin embargo, hay opciones adicionales como la indexación que no existe en schema.ini .

  • Attributes :Desconocido. En mis pruebas nunca conseguí que fuera algo más que 0 . Si sabe para qué sirve y cómo se puede utilizar, no dude en dejar un comentario.
  • DataType :el tipo de datos de la columna. El número debe corresponder a DAO.DataTypeEnum.
  • FieldName :el nombre de la columna. Tenga en cuenta que el acceso predeterminado será FieldN donde N es un entero positivo.
  • IndexType :Puede ser 0 para indicar que no hay índices, 1 para indicar índice regular o 2 para indicar un índice único.
  • SkipColumns :un valor booleano indica si se debe omitir la columna. Si se omite, no estará disponible para consulta o lectura.
  • SpecID :Corresponde al MSysIMEXSpecs.SpecID número automático. Tenga en cuenta que no hay restricciones de clave externa entre las dos tablas. Si ha eliminado registros, es posible que haya registros huérfanos de MSysIMEXSpecs mesa.
  • Start :un número entero que indica cuándo comienza la columna en el archivo de texto. Es significativo para un archivo de ancho fijo. Para archivos delimitados, Access seguirá usando la posición de columna de la primera fila donde se encuentra el campo para determinar el inicio. Además, Access usará la columna para implicar el orden ordinal de las columnas.
  • Width :Otro entero para gobernar el tamaño de la columna. En un archivo de ancho fijo, esto también es importante. Tenga en cuenta que Microsoft Access usará esa información para tipos de datos de longitud variable, como texto o binarios, para dimensionar la columna en consecuencia, incluso en un archivo delimitado.

Cadena de conexión usando especificaciones:DSN parámetro

En el artículo anterior, vio que no hubo ningún cambio en la cadena de conexión para usar un archivo schema.ini. Nos referimos implícitamente a schema.ini simplemente asegurándonos de que existe en la misma carpeta donde está el archivo de texto que estamos enlazando o abriendo. Sin embargo, para usar las especificaciones guardadas del sistema se requiere que proporcionemos la información en la conexión. Hacemos esto completando el DSN parámetro. El valor debe hacer referencia al nombre de la especificación guardada, tal como se registra en el MSysIMEXSpecs.SpecName columna.

Aquí hay una muestra:

Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Text;DSN=Products Link Specification;IMEX=1;DATABASE=C:\Links")

El acceso requerirá que tanto el parámetro DSN como los parámetros IMEX se proporcionen en la cadena de conexión. Si intenta omitir el IMEX obtendrá un error acerca de que Access no puede encontrar la especificación, aunque la especificación existe en MSysIMEXSpecs mesa. También se deduce que la tabla debe contener un registro con SpecName que contiene el mismo valor proporcionado en el DSN parámetro.

Como se señaló en el artículo anterior, los archivos de texto individuales se tratan como una "tabla" dentro de la "base de datos" de la carpeta. Entonces, aunque la cadena de conexión no apunta a un archivo de texto específico, la cadena de conexión utilizará las especificaciones especificadas en cualquier archivo de texto abierto a través de la conexión.

Si bien es posible usar otros parámetros, como se describe en el mismo artículo, debe tener en cuenta que, en caso de conflicto, la especificación guardada prevalecerá sobre la cadena de conexión. Por ese motivo, es mejor usar un conjunto mínimo de parámetros necesarios para conectarse con éxito a un archivo de texto y dejar que las especificaciones guardadas hagan el trabajo de describir cómo leer el archivo de texto.

Conclusión

Aprendió una forma alternativa de describir la estructura del archivo de texto sin usar un archivo externo. Vimos cómo Access utiliza dos tablas del sistema para almacenar las especificaciones. Por último, también aprendió cómo especificar las especificaciones guardadas usando el DSN parámetro. En este punto, hemos cubierto todo lo que necesitamos saber sobre cómo vincular o abrir archivos de texto en Access. En el próximo artículo, juntaremos la información aprendida en el resto de la serie. También veremos el uso de las cadenas de conexión en las consultas de Access para un enfoque sin código.