Tekst of Excel openen of koppelen als gegevensbronnen in Microsoft Access
Access is een fenomenaal hulpmiddel om met veel gegevensbronnen te werken. U weet misschien al lang dat u eenvoudig gegevens in een breed scala aan indelingen kunt importeren of exporteren. We hadden echter een scenario waarin we gegevens uit externe gegevensbronnen moesten verwerken. De verwerking wordt regelmatig uitgevoerd, dus het importeren van gegevens zou het front-endbestand snel doen opzwellen. Bovendien was het in deze situatie geen haalbare optie om een 2e kopie van het Access-bestand te maken als tijdelijke database om een opgeblazen gevoel te voorkomen. Welke keuzes hadden we? Daar merkten we een gebrek aan informatie over het openen van of linken naar niet-relationele gegevensbronnen. Laten we dus een diepe duik nemen in dit onderwerp.
Deze blogserie is bedoeld om een gapend gat in de documentatie van Microsoft op te vullen over het openen van of linken naar tekst of Excel als gegevensbron in Access-toepassingen. Connectionstrings.com en andere sites bieden wat broodkruimels. U kunt meestal ook een deel van het gedrag ontdekken door de wizards van Access te gebruiken en vervolgens de objecten te onderzoeken. Detacheren-gissen is echter niet erg nuttig. Daarom wordt in deze serie artikelen besproken hoe u Excel- en tekstbestanden als gegevensbronnen kunt gebruiken zonder dat u de gegevens hoeft te importeren of exporteren.
Houd er rekening mee dat de serie niet mogelijk zou zijn zonder de hulp van Dan Haught en Jim Ferguson, die co-auteur waren van Microsoft Jet Database Engine Programmer's Guide. Ook al is het boek al lang niet meer gedrukt, het is nog steeds een waardevol boek als je veel met DAO werkt.
Toegang en niet-relationele gegevensbronnen
Access heeft altijd het gebruik van Indexed Sequential Access Method (ISAM) als een potentiële gegevensbron ondersteund, waardoor het kan worden geïmporteerd, gekoppeld aan of geëxporteerd naar niet-relationele gegevensbronnen zoals tekstbestanden of Excel-spreadsheets en zelfs andere bestandsindelingen zoals Exchange, dBASE of FoxPro. DAO maakt het mogelijk omdat het de ISAM-stuurprogramma's heeft die met die formaten kunnen werken. Ik ga me echter concentreren op tekstbestanden en Excel-spreadsheets, omdat dit meer algemene bronnen zijn waar we Access nodig hebben om mee te werken. Als alles wat je ooit hebt gedaan is het importeren van gegevens met behulp van het tabblad Externe gegevens via Access, kan het magisch lijken, maar in werkelijkheid zijn alle functies van Access beschikbaar voor ons als programmeurs op het niveau van DAO.
Dus laten we vergeten dat tovenaars bestaan. Laten we de glanzende pictogrammen op het lint vergeten. Laten we vergeten dat er gekoppelde tabellen zijn. Laten we gewoon VBA-code gebruiken om met gegevensbronnen te werken, uit de lucht. Kunnen we? Absoluut. Eerst zullen we kijken naar het verschil tussen het koppelen en openen van een gegevensbron.
Koppelen versus openen
Om te helpen met de terminologie, moeten we onderscheid maken tussen linken vs. opening . Koppelen betekent dat we een gekoppelde tabel maken die nu een Access-tabel is die we net als elke andere Access-tabel kunnen gebruiken. Als zodanig is het een permanent object dat is gedefinieerd in de Access-toepassing. Openen daarentegen is wanneer we rechtstreeks toegang krijgen tot de gegevensbron met behulp van DAO's OpenDatabase
methode. Het openen van een gegevensbron gebeurt door zijn aard meestal via VBA-code, zoals u binnenkort zult zien.
De voorbeelden en code instellen
Omdat de serie gaat over het begrijpen van de fijne kneepjes van de interactie met die gegevensbronnen, zullen we ons eerst concentreren op openen in plaats van hier te linken. Dus, hoe openen we een Excel-spreadsheet? Het is toch geen database? Laten we om te beginnen een minimaal voorbeeld opstellen. In een map, C:\Links
, maken we een Excel-spreadsheet en een Access-databasebestand, genaamd Products.xlsx
en Sample.accdb
, respectievelijk:
De Products.xlsx is een eenvoudige spreadsheet met slechts één blad met de volgende inhoud:
Laten we hiermee VBA-code toevoegen in de Sample.accdb
. In een standaardmodule:
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
Als we de code uitvoeren, zouden we de volgende uitvoer in ons directe venster moeten krijgen:
Products Count Apples 3 Bananas 5 Figs 8
Dus ook al is Excel geen "database" (en als je Excel als database gebruikt, schaam je ), we kunnen nog steeds doen alsof het een "database" is en de "tabellen" en "records" doorlopen met behulp van bekende DAO-objecten. Alle magie komt van deze verbindingsreeks:
Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx
Maar het hoeft niet magisch te zijn. De serie ontleedt de delen van de verbindingsreeksen voor stuurprogramma's voor Excel en tekstbestanden. Dus laten we beginnen met het vergelijken met de ODBC-verbindingsreeks waar u misschien meer bekend mee bent.
Typen gegevensbronnen
Als je hebt gelinkt aan ODBC-gegevensbronnen, is het je waarschijnlijk opgevallen dat ODBC-verbindingsreeksen er meestal ongeveer zo uitzien:
ODBC;DRIVER=...;SERVER=...;DATABASE=...;
Vroeg me af waarom het altijd begon met ODBC
? Dat eerste deel is wat DAO gebruikt om het type bron te identificeren. Omdat Excel echter geen ODBC-database is, moeten we Excel 12.0 Xml
gebruiken om aan te geven dat DAO een bepaald Excel-stuurprogramma moet gebruiken. De rest van de syntaxis van de verbindingsreeks wordt dan beïnvloed door het stuurprogramma dat we gebruiken in het eerste deel van de verbindingsreeks.
Hier is een gedeeltelijke lijst van mogelijke typen gegevensbronnen die MS Access zal herkennen:
Excel 8.0
:97-2003 xls-bestandenExcel 12.0
:xlsb-bestandenExcel 12.0 Xml
:xlsx-bestandenText
:Alle tekstbestanden
Er zijn meer gegevensbronnen, waaronder SharePoint, Exchange of FoxPro, maar die ga ik niet behandelen. Toch toont het aan dat Access in staat is om met die bronnen te werken, net als een database en dat het ons in staat kan stellen DAO te gebruiken om de inhoud te lezen. Houd er rekening mee dat wanneer we niet-relationele gegevensbronnen gebruiken, mogelijk niet alle bewerkingen volledig worden ondersteund. Het is bijvoorbeeld mogelijk dat u een bestaande rij niet mag bewerken, ook al kunt u wel een rij invoegen.
Een uitdaging bij het openen of koppelen aan een gegevensbron betekent echter dat u de gegevens niet zomaar kunt importeren en vervolgens het schema kunt bewerken om aan uw behoeften te voldoen. Daarom kan het zijn dat het standaardschema dat u krijgt tijdens het koppelen niet is wat u wilt. Om die reden is een diepgaand begrip van de verbindingsreeks belangrijk. Daarom leert u in de volgende artikelen meer over de details van de verbindingsreeksen voor zowel Excel als tekstbestanden.
Conclusies
Je zag dat als alternatief voor het importeren van de externe data, we ervoor kunnen kiezen om een externe databron te koppelen of zelfs te openen via DAO. De mogelijkheid om een externe gegevensbron te koppelen of te openen wordt enorm onderbenut. De mogelijkheid om te linken of te openen mag echter niet worden uitgesloten, omdat dit nieuwe scenario's kan openen, zoals het vermijden van een opgeblazen gevoel als gevolg van importeren, vooral in een vergrendelde omgeving. In het volgende artikel zal ik de verschillende parameters bespreken die door het Excel-stuurprogramma worden gebruikt om een geldige verbindingsreeks te maken. In de volgende artikelen zal ik kijken naar het stuurprogramma voor het tekstbestand en de verbindingsparameters. In het laatste artikel zetten we alles op een rijtje.