Otevření nebo propojení textu nebo Excelu jako zdrojů dat v aplikaci Microsoft Access
Access je fenomenální nástroj pro práci s mnoha datovými zdroji. Možná už dávno víte, že můžete snadno importovat nebo exportovat data v široké škále formátů. Měli jsme však scénář, kdy jsme potřebovali zpracovat data z externích datových zdrojů. Zpracování probíhá často, takže import dat by rychle naplnil front-endový soubor. Kromě toho v této situaci vytvoření 2. kopie souboru aplikace Access jako dočasné databáze, aby se zabránilo nadýmání, nebylo schůdnou možností. Jaké jsme měli možnosti? Právě tam jsme zaznamenali nedostatek informací o otevírání nebo propojování nerelačních zdrojů dat. Pojďme se tedy na toto téma ponořit do hloubky.
Tato série blogů si klade za cíl vyplnit mezeru v dokumentaci společnosti Microsoft o otevírání nebo propojování textu nebo Excelu jako zdroje dat v aplikacích Access. Connectionstrings.com a další weby poskytují drobnosti. Některé z chování můžete také obvykle zjistit pomocí průvodců Accessu a poté prozkoumat objekty. Vyslání-hádání však není příliš užitečné. Tato série článků se proto bude zabývat tím, jak používat soubory Excel a textové soubory jako zdroje dat bez nutnosti importu nebo exportu dat.
Vezměte prosím na vědomí, že série by nebyla možná bez pomoci Dana Haughta a Jima Fergusona, kteří jsou spoluautory Microsoft Jet Database Engine Programmer’s Guide. I když je kniha již dávno vyprodaná, stále je to cenná kniha, pokud hodně pracujete s DAO.
Přístup ke zdrojům dat a nerelační zdroje dat
Access vždy podporoval použití metody indexovaného sekvenčního přístupu (ISAM) jako potenciálního zdroje dat, což mu umožňuje importovat, propojovat nebo exportovat nerelační zdroje dat, jako jsou textové soubory nebo tabulky aplikace Excel, a dokonce i jiné formáty souborů, jako je Exchange, dBASE. nebo FoxPro. DAO to umožňuje, protože má ovladače ISAM, které mohou pracovat s těmito formáty. Zaměřím se však na textové soubory a tabulky Excel, protože jsou běžnějšími zdroji, se kterými potřebujeme Access pracovat. Pokud vše, co jste kdy udělali, je import dat pomocí karty Externí data přes Access, může se to zdát kouzelné, ale ve skutečnosti jsou všechny funkce Accessu dostupné nám jako programátorům na úrovni DAO.
Takže zapomeňme, že kouzelníci existují. Zapomeňme na lesklé ikony na pásu karet. Zapomeňme, že existují propojené tabulky. Pojďme jednoduše použít kód VBA pro práci se zdroji dat z ničeho nic. Můžeme? Absolutně. Nejprve se podíváme na rozdíl mezi propojením a otevřením zdroje dat.
Propojení vs. otevření
Abychom pomohli s terminologií, musíme rozlišovat mezi propojováním vs. otevření . Propojení znamená, že vytvoříme propojenou tabulku, která je nyní Access „tabulkou“, kterou můžeme používat stejně jako kteroukoli jinou Accessovou tabulku. Jako takový je to trvalý objekt definovaný v aplikaci Access. Naproti tomu otevření je, když přistupujeme ke zdroji dat přímo pomocí OpenDatabase
DAO metoda. Jak brzy uvidíte, otevření zdroje dat se ze své podstaty obvykle provádí pomocí kódu VBA.
Nastavení vzorků a kódu
Vzhledem k tomu, že tato série je o pochopení nejhrubších podrobností o tom, jak Access interaguje s těmito datovými zdroji, zaměříme se nejprve na otevření, místo abychom zde odkazovali. Jak tedy otevřeme excelovou tabulku? Určitě to není databáze? Pro začátek si uvedeme minimální příklad. Ve složce C:\Links
, vytvoříme excelovou tabulku a soubor databáze aplikace Access s názvem Products.xlsx
a Sample.accdb
, respektive:
Products.xlsx je jednoduchá tabulka s pouze jedním listem s tímto obsahem:
S tímto přidejte kód VBA do Sample.accdb
. Ve standardním modulu:
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
Pokud spustíme kód, měli bychom v našem bezprostředním okně získat následující výstup:
Products Count Apples 3 Bananas 5 Figs 8
Takže i když Excel není „databáze“ (a pokud používáte Excel jako databázi, styďte se 😉 ), stále můžeme předstírat, že je „databází“ a procházet jejími „tabulkami“ a „záznamy“ pomocí známých objektů DAO. Veškeré kouzlo pochází z tohoto připojovacího řetězce:
Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx
Ale nemusí to být kouzelné. Série rozebere části připojovacích řetězců pro ovladače Excel a textových souborů. Začněme tedy srovnáním s připojovacím řetězcem ODBC, který možná znáte více.
Typy zdrojů dat
Pokud jste se propojili se zdroji dat ODBC, pravděpodobně jste si všimli, že připojovací řetězce ODBC obvykle vypadají nějak takto:
ODBC;DRIVER=...;SERVER=...;DATABASE=...;
Zajímalo by mě, proč to vždy začínalo ODBC
? Tato první část je to, co DAO používá k identifikaci typu zdroje. Protože však Excel není databáze ODBC, musíme použít Excel 12.0 Xml
k označení, že DAO potřebuje použít konkrétní ovladač Excel. Zbytek syntaxe připojovacího řetězce je pak ovlivněn tím, který ovladač používáme v první části připojovacího řetězce.
Zde je částečný seznam možných typů zdrojů dat, které MS Access rozpozná:
Excel 8.0
:97-2003 soubory xlsExcel 12.0
:soubory xlsbExcel 12.0 Xml
:soubory xlsxText
:Jakékoli textové soubory
Existuje více zdrojů dat, včetně SharePoint, Exchange nebo FoxPro, ale nebudu je pokrývat. I tak to ukazuje, že Access je schopen s těmito zdroji pracovat stejně jako s databází a to nám umožňuje používat DAO ke čtení obsahu. Upozorňujeme, že když používáme nerelační zdroje dat, nemusí být plně podporovány všechny operace. Například vám nemusí být povoleno upravovat existující řádek, i když můžete řádek vložit.
Jeden problém s otevřením nebo propojením se zdrojem dat však znamená, že nemůžete pouze importovat data a poté upravit schéma tak, aby vyhovovalo vašim potřebám. Proto můžete zjistit, že výchozí schéma, které získáte při propojování, nebude to, co chcete. Z tohoto důvodu bude důležité hloubkové pochopení připojovacího řetězce. Proto se v několika následujících článcích dozvíte více o podrobnostech připojovacích řetězců pro Excel i textové soubory.
Závěry
Viděli jste, že jako alternativu k importu externích dat můžeme zvolit propojení nebo dokonce otevření externího zdroje dat pomocí DAO. Možnost propojit nebo otevřít externí zdroj dat je značně nevyužitá. Schopnost propojit nebo otevřít by však neměla být podceňována, protože to může otevřít nové scénáře, jako je zamezení nadýmání v důsledku importu, zejména v uzamčeném prostředí. V příštím článku se budu zabývat různými parametry používanými ovladačem Excel k vytvoření platného připojovacího řetězce. V následujících článcích se podívám na ovladač textového souboru a parametry připojení. V posledním článku to všechno dáme dohromady.