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

Parámetros de cadena de conexión para orígenes de archivos de texto

Parámetros de cadena de conexión para orígenes de archivos de texto

En el artículo anterior, cubrí los parámetros de la cadena de conexión para las fuentes de datos de Excel. Ahora nos centraremos en los archivos de texto. Existen diferentes métodos para describir el esquema de los archivos de texto y usar la información durante la apertura o vinculación en Access. Si bien las hojas de cálculo de Excel tenían cierta semejanza de estructura, esto no es cierto para los archivos de texto. Tenemos que responder varias preguntas sobre la estructura de un archivo de texto, entre ellas:

  1. ¿Es de ancho delimitado o fijo?
  2. ¿Cómo sabemos cuándo termina una columna y comienza otra?
  3. ¿Se cita el texto o no?
  4. ¿Cómo debemos analizar las fechas y las horas?
  5. ¿Qué pasa con los montos de moneda? ¿Cómo se deben formatear?

y posiblemente más. Si bien CSV puede parecer estar bien definido a primera vista, cuando lo examinas, en realidad está muy vagamente definido. No existe un acuerdo universal sobre si se debe citar el texto, cómo se deben formatear las fechas. Por todas esas razones, el uso de archivos de texto generalmente requiere el uso de algún tipo de información de esquema para describir la estructura del archivo de texto. Hay tres formas de almacenar información de esquema:

  1. Un schema.ini archivo almacenado en un directorio
  2. Acceso a MSysIMEX y MSysIMEXColumns mesas
  3. Acceder a ImportExportSpecification.XML propiedad.

Para complicar las cosas, hay varios métodos diferentes que podemos usar para trabajar con archivos de texto, pero no todos los métodos pueden usar las 3 formas diferentes de obtener la información del esquema. Por ejemplo, DoCmd.TransferText funciona con las tablas del sistema pero no con las importaciones/exportaciones guardadas. Por otro lado, DoCmd.RunSavedImportExport funciona con ImportExportSpecification objeto. Sin embargo, la ImportExportSpecification no se utiliza como parte de la vinculación. Entonces, para nuestra discusión, en realidad solo tenemos 2 métodos disponibles en el contexto de abrir o vincular un archivo de texto. Es importante tener en cuenta la diferencia entre guardar una especificación en MSysIMEXSpecs &MSysIMEXColumns tablas frente a guardar una importación/exportación que se convierte en una ImportExportSpecification objeto. Exploraremos esos 2 métodos en los próximos artículos.

Cadena de conexión para archivo de texto

Deberíamos considerar cómo Access percibirá un archivo de texto. En el artículo anterior, vimos que cada hoja o un rango con nombre se representaba como una "tabla" en una "base de datos" de una hoja de cálculo de Excel. Pero un archivo de texto no tiene tal construcción. ¿Qué hace una “base de datos” entonces? La respuesta es que la carpeta representa una "base de datos" y, por lo tanto, los archivos de texto dentro de una carpeta son "tablas". Por ese motivo, es posible tener información de varios esquemas para la misma carpeta si esa carpeta contiene más de un formato posible para los archivos de texto almacenados en la carpeta. Verá más adelante que cuando construimos la cadena de conexión, vinculamos a la carpeta y luego accedemos al archivo individual como una tabla.

Por lo tanto, usando esta configuración como se muestra:

Luego podemos abrir un archivo de texto usando este código VBA:

Dim db As DAO.Database
Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Text;DATABASE=C:\Links")

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
    
    Debug.Print
Next

Esto debería producir la salida:

Products#csv
Products      Count         PackDate      Amount        ShipDate      
Apples         3            12/4/2020     $ 1.02        4/12/2020     
Bananas        5            4/12/2020     $ 1,234.56    12/4/2020     
Figs           8            5/7/2020      $ 0.01        7/5/2020      
Grapes         11           10/10/2020    $12.30        10/10/2020

Tome nota de las siguientes cosas:

  1. No especificamos el archivo de texto en nuestra cadena de conexión. Usamos la carpeta en su lugar.
  2. Los nombres de las "tablas" se modificaron porque un punto en el nombre no es un carácter válido. Ergo, products.csv se convirtió en products#csv .
  3. En comparación con Excel, no hay parámetros obligatorios más allá de especificar el controlador del archivo de texto y la ruta a la carpeta.

En el próximo artículo, aprenderá más sobre la descripción del esquema de archivos de texto. Sin embargo, para la propia cadena de conexión, se reconocen las siguientes palabras clave.

FMT parámetro:Indicar el formato del archivo de texto.

Delimited :El archivo está delimitado por un carácter. El carácter utilizado se especifica en la información del esquema.
Fixed :El archivo tiene un ancho fijo para la(s) columna(s). Nuevamente, los anchos de columna específicos están especificados por la información del esquema.

HDR parámetro:fila de encabezado

YES :La primera fila es el encabezado y debe convertirse en los nombres de columna para la "tabla"/"conjunto de registros"
NO :La primera fila no se trata de manera diferente y es solo un dato. Todos los nombres de las columnas se llamarán "FN", donde "N" es un número que comienza con 1

IMEX parámetro:comportamiento de importación/exportación

Esto rige cómo se deben definir los tipos de datos de columna, según el contenido:
1 :si la columna contiene diferentes tipos de datos, trátela como una cadena. De lo contrario, haga coincidir la columna con el mejor tipo de datos.
2 :haga coincidir siempre la columna con un determinado tipo de datos en función de la muestra. Eso puede causar un error de lectura cuando leemos una fila que contiene datos que no coinciden con el tipo de datos esperado.

ACCDB parámetro:¿Indica que Access está usando el formato de archivo ACCDB?

De forma predeterminada, siempre se establece ACCDB=YES en un formato de archivo accdb. Sin embargo, omitirlo o establecerlo en NO parece no hacer nada. Es un poco misterioso. Si alguien puede compartir el efecto de este parámetro, publíquelo en un comentario y actualizaré el blog.

DATABASE parámetro:Ruta a la carpeta que contiene los archivos de texto

El parámetro debe contener una ruta completa. No debe incluir los nombres de los archivos de texto.

CharacterSet Parámetro:identifica la codificación de caracteres que se usará para leer los archivos de texto.

Esto se discutirá con más detalle en el próximo artículo. Esto también se puede describir en la información del esquema.

DSN Parámetro:identifica la información del esquema que se usará con el archivo de texto.

El nombre debe corresponder al MSysIMEXSpec , que se analizará en un artículo posterior. Esto solo funciona con MSysIMEX*** mesas. Si desea utilizar schema.ini , simplemente no incluye ningún DSN en sus cadenas de conexión.

Es importante tener en cuenta que el controlador de archivos de texto solo considerará los parámetros enumerados anteriormente. No es posible introducir otras palabras clave y hacer que el controlador del archivo de texto las analice. Por ese motivo, no podrá especificar todos los detalles sobre un archivo de texto solo a partir de la cadena de conexión.

Esquema predeterminado para archivos de texto

En teoría, puede abrir o vincular un archivo de texto sin ninguna información de esquema, pero esto rara vez funcionará. En esta situación, Access simplemente asumirá los valores predeterminados para varias opciones. Si el archivo de texto se ajusta a todos los valores predeterminados actuales, Access podrá leer el archivo. Más importante aún, la ausencia de errores al abrir o vincular el archivo de texto no significa que los datos se representen de manera significativa. Por ejemplo, los importes de moneda con formato especial pueden interpretarse como texto en lugar de moneda, y el texto no delimitado con comas dentro del texto puede analizarse incorrectamente, agregando columnas no deseadas. Los valores predeterminados se determinan en dos lugares posibles:

  1. Acceso examinará la configuración del registro. Para la instalación de Office 365, el registro se puede ubicar en:
    Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Access Connectivity Engine\Engines\Text . Nos referiremos a esta ubicación como "claves de registro de texto" en los próximos artículos.
  2. La configuración que vería en la Region applet en el panel de control de Windows. Nos referiremos a esta ubicación como "Configuración de Windows".

Nota sobre la codificación de los archivos de texto

Es obligatorio tener la codificación correcta, independientemente de los métodos que utilice para acceder a sus archivos de texto. Cuando el contenido de su archivo de texto está restringido a solo caracteres dentro de la mitad inferior de los puntos ASCII (por ejemplo, 0-127), poco importa qué codificación elija para sus archivos de texto. El valor predeterminado suele ser lo suficientemente bueno. Sin embargo, si sus archivos de texto pueden contener cualquier Unicode o cualquier carácter superior a 127, entonces depende de usted, el desarrollador, conocer la codificación. Si se especifica una codificación incorrecta, es posible que el texto no se importe como se esperaba y no arrojará ningún error. Para detalles complicados, lo remitiré a Joel Spolsky sobre este asunto.

Elegir entre schema.ini y MSysIMEX*** mesas

Como verá en los próximos artículos, ambos métodos tienen una superposición bastante grande en las capacidades. Por lo tanto, es posible que tenga la opción de usar cualquiera de los dos. La principal diferencia se reduce a si desea que el esquema se almacene dentro de su aplicación o dentro de una carpeta donde se espera que estén los archivos de texto. Cuando usa el schema.ini archivo, asume que los archivos de texto estarán presentes en una carpeta determinada y tendrán un nombre determinado.

Con el MSysIMEX*** , puede procesar cualquier archivo de texto desde cualquier lugar simplemente haciendo referencia a la especificación definida. Sin embargo, no es fácil editar la especificación fuera de Access. Incluso dentro de Access, no es fácil modificar las especificaciones mediante la interfaz de usuario. El schema.ini tiene algunas características adicionales que no están disponibles directamente con MSysIMEX*** mesas.

No obstante, la cuestión de dónde almacenar la especificación probablemente será su factor más importante para decidir cuál usar.

Conclusión

Le recomendamos encarecidamente que tenga definida la información del esquema para cualquier archivo de texto que contenga fechas o importes de moneda. Las fechas y los montos de moneda son sensibles a la configuración regional, lo que puede interferir con el análisis correcto de los datos. Debido a que tenemos dos sistemas diferentes con diferentes conjuntos de opciones disponibles, debemos considerar cada uno en los siguientes artículos. Tiene la opción de usar cualquiera (o incluso ambos entre diferentes archivos de texto). Ahora pasaremos al schema.ini en el próximo artículo. Más adelante veremos MSysIMEX*** tablas en el siguiente artículo.