sql >> Databáze >  >> RDS >> Access

Otevírání nebo propojení textu nebo Excelu jako zdrojů dat v aplikaci Microsoft Access

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á:

  1. Excel 8.0 :97-2003 soubory xls
  2. Excel 12.0 :soubory xlsb
  3. Excel 12.0 Xml :soubory xlsx
  4. Text :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.


  1. ORACLE Connect by klauzule ekvivalentní v SQL Server

  2. Vrácená hodnota z příkazu SQL Server Insert pomocí c#

  3. Běžný tabulkový výraz, proč středník?

  4. Jak aktualizovat existující data pomocí SQLite