Access
 sql >> Database >  >> RDS >> Access

Parametri della stringa di connessione per le origini dei file di testo

Parametri della stringa di connessione per le origini dei file di testo

Nell'articolo precedente ho trattato i parametri della stringa di connessione per le origini dati di Excel. Ci concentreremo ora sui file di testo. Esistono diversi metodi per descrivere lo schema dei file di testo e utilizzare le informazioni durante l'apertura o il collegamento in Access. Mentre i fogli di calcolo di Excel avevano una certa somiglianza di struttura, questo non è vero per i file di testo. Dobbiamo rispondere a diverse domande sulla struttura di un file di testo, tra cui:

  1. Ha una larghezza delimitata o fissa?
  2. Come facciamo a sapere quando una colonna finisce e un'altra inizia?
  3. Il testo è citato o meno?
  4. Come dovremmo analizzare date e orari?
  5. E gli importi in valuta? Come devono essere formattati?

e forse di più. Mentre CSV potrebbe sembrare ben definito a prima vista, ma quando lo scavi, in realtà è definito in modo molto vago. Non esiste un accordo universale sul fatto che il testo debba essere citato, come dovrebbero essere formattate le date. Per tutti questi motivi, l'utilizzo di file di testo di solito richiede l'uso di informazioni sullo schema per descrivere la struttura del file di testo. Esistono tre modi per archiviare le informazioni sullo schema:

  1. Un schema.ini file memorizzato in una directory
  2. Accesso a MSysIMEX e MSysIMEXColumns tabelle
  3. Accesso a ImportExportSpecification.XML proprietà.

Per complicare le cose, ci sono diversi metodi che possiamo usare per lavorare con i file di testo, ma non tutti i metodi possono usare tutti e 3 i diversi modi per ottenere le informazioni sullo schema. Ad esempio, DoCmd.TransferText funziona con le tabelle di sistema ma non con le importazioni/esportazioni salvate. D'altra parte, DoCmd.RunSavedImportExport funziona con ImportExportSpecification oggetto. Tuttavia, la ImportExportSpecification non viene utilizzato come parte del collegamento. Quindi, per la nostra discussione, in realtà abbiamo solo 2 metodi disponibili nel contesto dell'apertura o del collegamento a un file di testo. È importante notare la distinzione tra il salvataggio di una specifica in MSysIMEXSpecs &MSysIMEXColumns tabelle rispetto al salvataggio di un'importazione/esportazione che diventa una ImportExportSpecification oggetto. Esploreremo questi 2 metodi nei prossimi articoli.

Stringa di connessione per file di testo

Dovremmo considerare come Access percepirà un file di testo. Nell'articolo precedente, abbiamo visto che ogni foglio o un intervallo denominato era rappresentato come una "tabella" in un "database" di un foglio di calcolo Excel. Ma un file di testo non ha tale costrutto. Cosa rende allora un "database"? La risposta è che la cartella rappresenta un "database" e quindi tutti i file di testo all'interno di una cartella sono "tabelle". Per tale motivo, è possibile avere più informazioni sullo schema per la stessa cartella se tale cartella contiene più di un formato possibile per qualsiasi file di testo archiviato all'interno della cartella. Vedrai più avanti che quando costruiamo la stringa di connessione, ci colleghiamo alla cartella, quindi accediamo al singolo file come tabella.

Pertanto, utilizzando questa configurazione come mostrato:

Possiamo quindi aprire un file di testo utilizzando questo codice 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

Questo dovrebbe produrre l'output:

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

Prendi nota delle seguenti cose:

  1. Non abbiamo specificato il file di testo nella nostra stringa di connessione. Abbiamo usato invece la cartella.
  2. I nomi delle "tabelle" sono stati modificati perché un punto nel nome non è un carattere valido. Ergo, products.csv è diventato products#csv .
  3. Rispetto a Excel, non ci sono parametri obbligatori oltre a specificare il driver del file di testo e il percorso della cartella.

Nel prossimo articolo imparerai di più sulla descrizione dello schema di un file di testo. Tuttavia, per la stringa di connessione stessa, vengono riconosciute le seguenti parole chiave.

FMT parametro:Indica il formato del file di testo.

Delimited :Il file è delimitato da un carattere. Il carattere utilizzato è specificato dalle informazioni sullo schema.
Fixed :Il file ha una larghezza fissa per le colonne. Anche in questo caso, le larghezze di colonna specifiche sono specificate dalle informazioni sullo schema.

HDR parametro:riga di intestazione

YES :La prima riga è l'intestazione e dovrebbe diventare i nomi delle colonne per la "tabella"/"recordset"
NO :La prima riga non viene trattata in modo diverso ed è solo un dato. Tutti i nomi delle colonne saranno denominati "FN" dove "N" è un numero che inizia con 1

IMEX parametro:comportamento di importazione/esportazione

Questo determina come definire i tipi di dati delle colonne, in base al contenuto:
1 :se la colonna contiene tipi di dati diversi, trattala come una stringa. In caso contrario, abbina la colonna al miglior tipo di dati.
2 :abbina sempre la colonna a un determinato tipo di dati in base al campione. Ciò potrebbe causare un errore di lettura quando leggiamo una riga che contiene dati che non corrispondono al tipo di dati previsto.

ACCDB parametro:indica che Access utilizza il formato file ACCDB?

Per impostazione predefinita, questo è sempre impostato ACCDB=YES in un formato di file accdb. Tuttavia, ometterlo o impostarlo su NO sembra non fare nulla. È un po' un mistero. Se qualcuno può condividere l'effetto di questo parametro, posta nei commenti e aggiornerò il blog.

DATABASE parametro:Percorso della cartella che contiene i file di testo

Il parametro deve contenere un percorso completo. Non dovrebbe includere i nomi dei file di testo.

CharacterSet Parametro:Identifica la codifica dei caratteri da utilizzare per la lettura dei file di testo.

Questo sarà discusso in modo più dettagliato nel prossimo articolo. Questo può anche essere descritto nelle informazioni sullo schema.

DSN Parametro:identifica le informazioni sullo schema da utilizzare con il file di testo.

Il nome deve corrispondere a MSysIMEXSpec , che sarà analizzato nel successivo articolo. Funziona solo con MSysIMEX*** tavoli. Se desideri utilizzare schema.ini , semplicemente non includi alcun DSN nelle stringhe di connessione.

È importante notare che il driver del file di testo considererà solo i parametri sopra elencati. Non è possibile inserire altre parole chiave e farle analizzare dal driver del file di testo. Per questo motivo, non sarai in grado di specificare tutti i dettagli su un file di testo dalla sola stringa di connessione.

Schema predefinito per i file di testo

In teoria, puoi aprire o collegare un file di testo senza alcuna informazione sullo schema, ma raramente funzionerà. In questa situazione, Access assumerà semplicemente le impostazioni predefinite per varie opzioni. Se il file di testo è conforme a tutte le impostazioni predefinite correnti, Access riuscirà a leggere il file. Ancora più importante, l'assenza di errori nell'apertura o nel collegamento al file di testo non significa che i dati siano rappresentati in modo significativo. Ad esempio, gli importi in valuta con formattazione speciale potrebbero essere interpretati come testo anziché come valuta e il testo non delimitato con virgole all'interno del testo potrebbe essere analizzato in modo errato, aggiungendo colonne indesiderate. Le impostazioni predefinite sono determinate in due possibili posizioni:

  1. Access esaminerà le impostazioni del registro. Per l'installazione di Office 365, il registro si trova in:
    Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Access Connectivity Engine\Engines\Text . Ci riferiremo a questa posizione come "Chiavi del registro di testo" nei prossimi articoli.
  2. Le impostazioni che vedresti nella Region applet nel pannello di controllo di Windows. Ci riferiremo a questa posizione come "Impostazioni di Windows".

Nota sulla codifica dei file di testo

È obbligatorio disporre della codifica corretta indipendentemente dai metodi che potresti utilizzare per accedere ai tuoi file di testo. Quando il contenuto del tuo file di testo è limitato ai soli caratteri entro la metà inferiore dei punti ASCII (ad es. 0-127), non importa quale codifica scegli per i tuoi file di testo. L'impostazione predefinita è generalmente abbastanza buona. Tuttavia, se i tuoi file di testo possono contenere qualsiasi Unicode o qualsiasi carattere maggiore di 127, spetta a te, lo sviluppatore, conoscere la codifica. Se viene specificata una codifica errata, il testo potrebbe non essere importato come previsto e non genererà alcun errore. Per dettagli disordinati, ti rimando a Joel Spolsky su questo argomento.

Scelta tra schema.ini e MSysIMEX*** tabelle

Come vedrai nei prossimi articoli, entrambi i metodi hanno una sovrapposizione abbastanza ampia nelle capacità. Pertanto, potresti trovarti ad avere la possibilità di scegliere l'uno o l'altro. La differenza principale si riduce al fatto che si desidera che lo schema venga archiviato all'interno dell'applicazione o in una cartella in cui dovrebbero trovarsi i file di testo. Quando usi schema.ini file, stai presumendo che i file di testo saranno presenti in una determinata cartella e avranno un certo nome.

Con il MSysIMEX*** , puoi elaborare qualsiasi file di testo da qualsiasi luogo semplicemente facendo riferimento alla specifica definita. Tuttavia, non è facile modificare la specifica al di fuori di Access. Anche all'interno di Access, non è facile modificare le specifiche utilizzando l'interfaccia utente. Lo schema.ini ha alcune funzionalità aggiuntive che non sono direttamente disponibili con MSysIMEX*** tabelle.

Tuttavia, la domanda su dove archiviare le specifiche sarà molto probabilmente il fattore più importante per decidere quale utilizzare.

Conclusione

Si consiglia vivamente di definire le informazioni sullo schema per tutti i file di testo che contengono date o importi in valuta. Le date e gli importi in valuta sono sensibili alle impostazioni regionali che possono interferire con la corretta analisi dei dati. Poiché abbiamo due diversi sistemi con diversi set di opzioni disponibili, dobbiamo considerarli nei prossimi articoli. Hai la possibilità di utilizzare uno (o anche entrambi tra diversi file di testo). Passiamo ora allo schema.ini nel prossimo articolo. In seguito esamineremo MSysIMEX*** tabelle nel seguente articolo.