Apertura o collegamento di testo o Excel come origini dati in Microsoft Access
Access è uno strumento fenomenale per lavorare con molte origini dati. Potresti sapere da tempo che puoi facilmente importare o esportare dati in un'ampia gamma di formati. Tuttavia, avevamo uno scenario in cui dovevamo elaborare i dati da origini dati esterne. L'elaborazione viene eseguita frequentemente, quindi l'importazione dei dati potrebbe gonfiare rapidamente il file front-end. Inoltre, in questa situazione, la creazione di una seconda copia del file di Access come database temporaneo per evitare il gonfiore non era un'opzione praticabile. Quali scelte avevamo? È qui che abbiamo notato una carenza di informazioni sull'apertura o il collegamento a fonti di dati non relazionali. Quindi, facciamo un approfondimento su questo argomento.
Questa serie di blog mira a colmare una lacuna nella documentazione di Microsoft sull'apertura o il collegamento a testo o Excel come origine dati nelle applicazioni di Access. Connectionstrings.com e altri siti forniscono alcuni breadcrumb. Di solito puoi anche scoprire alcuni dei comportamenti usando le procedure guidate di Access e quindi esaminando gli oggetti dopo. Tuttavia, indovinare non è molto utile. Pertanto, questa serie di articoli discuterà su come utilizzare Excel e file di testo come origini dati senza necessariamente importare o esportare i dati.
Tieni presente che la serie non sarebbe possibile senza l'aiuto di Dan Haught e Jim Ferguson, co-autori della Guida del programmatore di Microsoft Jet Database Engine. Anche se il libro è fuori stampa da molto tempo, è comunque un libro prezioso se lavori molto con DAO.
Accesso e origini dati non relazionali
L'accesso ha sempre supportato l'utilizzo del metodo di accesso sequenziale indicizzato (ISAM) come potenziale origine dati, che consente di importare, collegare o esportare in origini dati non relazionali come file di testo o fogli di calcolo Excel e persino altri formati di file come Exchange, dBASE o FoxPro. DAO lo rende possibile perché ha i driver ISAM che possono funzionare con quei formati. Tuttavia, mi concentrerò su file di testo e fogli di calcolo Excel poiché sono fonti più comuni con cui abbiamo bisogno di Access per lavorare. Se tutto ciò che hai fatto è importare i dati utilizzando la scheda Dati esterni tramite Access, può sembrare magico ma in realtà tutte le funzionalità di Access sono disponibili per noi come programmatori a livello di DAO.
Quindi dimentichiamo che i maghi esistono. Dimentichiamoci delle icone lucide sul nastro. Dimentichiamo che ci sono tabelle collegate. Usiamo semplicemente il codice VBA per lavorare con le origini dati, dal nulla. Possiamo? Assolutamente. Innanzitutto, esamineremo la differenza tra il collegamento e l'apertura di un'origine dati.
Collegamento e apertura
Per aiutare con la terminologia, dobbiamo fare una distinzione tra collegamento vs. apertura . Il collegamento significa che creiamo una tabella collegata che ora è una "tabella" di Access che possiamo utilizzare come qualsiasi altra tabella di Access. In quanto tale, è un oggetto permanente definito all'interno dell'applicazione Access. Al contrario, l'apertura avviene quando accediamo all'origine dati direttamente utilizzando OpenDatabase
di DAO metodo. Per sua natura, l'apertura di un'origine dati viene solitamente eseguita tramite codice VBA, come vedrai a breve.
Impostazione dei campioni e del codice
Poiché la serie riguarda la comprensione dei dettagli essenziali di come Access interagisce con tali origini dati, ci concentreremo innanzitutto sull'apertura anziché sul collegamento qui. Quindi, come si apre un foglio di calcolo Excel? Sicuramente non è un database? Facciamo un esempio minimo per cominciare. In una cartella, C:\Links
, creeremo un foglio di calcolo Excel e un file di database di Access, denominato Products.xlsx
e Sample.accdb
, rispettivamente:
Il Products.xlsx è un semplice foglio di calcolo con un solo foglio con questo contenuto:
Con questo, aggiungiamo il codice VBA nel Sample.accdb
. In un modulo standard:
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
Se eseguiamo il codice, dovremmo ottenere il seguente output nella nostra finestra immediata:
Products Count Apples 3 Bananas 5 Figs 8
Quindi, anche se Excel non è un "database" (e se stai usando Excel come database, vergognati 😉), possiamo comunque fingere che sia un "database" e scorrere le sue "tabelle" e "record" utilizzando oggetti DAO familiari. Tutta la magia viene da questa stringa di connessione:
Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx
Ma non deve essere per forza magico. La serie analizzerà le parti delle stringhe di connessione per i driver di file di testo e Excel. Quindi iniziamo con il confronto con la stringa di connessione ODBC con cui forse hai più familiarità.
Tipi di origine dati
Se ti sei collegato a origini dati ODBC, probabilmente hai notato che le stringhe di connessione ODBC di solito hanno un aspetto simile a questo:
ODBC;DRIVER=...;SERVER=...;DATABASE=...;
Mi chiedevo perché iniziava sempre con ODBC
? Quella prima parte è ciò che DAO usa per identificare il tipo di fonte. Tuttavia, poiché Excel non è un database ODBC, dobbiamo utilizzare Excel 12.0 Xml
per indicare che DAO deve utilizzare un particolare driver di Excel. Il resto della sintassi della stringa di connessione è quindi influenzato dal driver che stiamo utilizzando nella prima parte della stringa di connessione.
Ecco un elenco parziale di possibili tipi di origine dati che MS Access riconoscerà:
Excel 8.0
:file xls 97-2003Excel 12.0
:file xlsbExcel 12.0 Xml
:file xlsxText
:Qualsiasi file di testo
Esistono più origini dati, tra cui SharePoint, Exchange o FoxPro, ma non le tratterò. Ciò nonostante, dimostra che Access è in grado di lavorare con tali fonti proprio come un database e che può consentirci di utilizzare DAO per leggere i contenuti. Tieni presente che quando utilizziamo origini dati non relazionali, non tutte le operazioni potrebbero essere completamente supportate. Ad esempio, potresti non essere autorizzato a modificare una riga esistente anche se puoi inserire una riga.
Tuttavia, una sfida con l'apertura o il collegamento a un'origine dati significa che non puoi semplicemente importare i dati, quindi modificare lo schema in base alle tue esigenze. Pertanto, potresti scoprire che lo schema predefinito che ottieni durante il collegamento non sarà quello che desideri. Per questo motivo, sarà importante una comprensione approfondita della stringa di connessione. Pertanto, imparerai di più sui dettagli delle stringhe di connessione sia per Excel che per file di testo nei prossimi articoli.
Conclusioni
Hai visto che, in alternativa all'importazione dei dati esterni, possiamo scegliere di collegare o addirittura aprire un'origine dati esterna utilizzando DAO. La possibilità di collegare o aprire un'origine dati esterna è ampiamente sottoutilizzata. Tuttavia, la possibilità di collegare o aprire non dovrebbe essere scartata in quanto ciò può aprire nuovi scenari come evitare il rigonfiamento come effetto dell'importazione, specialmente in un ambiente bloccato. Nel prossimo articolo parlerò dei diversi parametri utilizzati dal driver di Excel per costruire una stringa di connessione valida. Nei seguenti articoli, esaminerò il driver del file di testo e i parametri di connessione. Nell'articolo finale, metteremo tutto insieme.