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

Ad-hoc spojovací řetězce a heterogenní dotazy pro MS Access

Ad-hoc připojovací řetězce a heterogenní dotazy pro MS Access

Heterogenní dotazy jsou důvodem, proč jsou připojovací řetězce, zejména připojovací řetězec ad-hoc, důležité. V předchozích článcích seriálu jste viděli, jak můžete upravit parametry připojení pro připojení k Excelu a textovým souborům. V případě textových souborů můžete také popsat schéma struktury textového souboru pomocí schema.ini nebo uložené specifikace. V prvním článku jste se také dozvěděli rozdíl mezi propojením a otevřením zdroje dat.

Heterogenní dotazy namísto kódu VBA

V předchozích článcích jste viděli ukázkový kód otevření takového zdroje dat pomocí OpenDatabase DAO metoda.

Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx")

To ve vás může vyvolat dojem, že jediným způsobem, jak otevřít zdroj dat, je kód. Ale nemusí to tak být! Ve skutečnosti můžete otevřít libovolný zdroj dat pouze pomocí dotazu Access. Zde je ukázková syntaxe, kterou můžete spustit v dotazu Access:

SELECT * 
FROM [Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx].[Sheet1$];

Obecně řečeno, připojovací řetězec, který vložíte do OpenDatabase Čtvrtý parametr je ten, který byste před „tabulkou“ přidali. Obecná syntaxe by tedy byla:

FROM [<complete connection string>].[<name of the table>]

Můžete použít OpenDatabase metodu a iterujte přes TableDefs najít platné názvy tabulky. To pak můžete použít k vyplnění 2. části jména.

Proč otevřít místo odkazu?

Jednou z výhod otevírání na rozdíl od propojení je to, že můžete změnit připojovací řetězec za běhu. Také se nemusíte zabývat požadovaným čištěním, jako je mazání již nepotřebných propojených objektů. Je čistě přechodný, což by bylo ideální pro přesun dat z jednoho zdroje do druhého bez psaní jakéhokoli kódu VBA.

Zde je jeden možný scénář. Předpokládejme, že chceme vytvořit textové soubory, které jsou výstupem z pohledu na naší databázi SQL Server. V předchozích článcích jste viděli, že bychom mohli napsat kód VBA, který by smyčkoval sady záznamů DAO a zapisoval obsah jeden po druhém. Jako alternativu však můžeme místo toho vytvořit Access dotaz s tímto SQL:

INSERT INTO [Text;DATABASE=C:\Links\].[products.csv;] (Products, Count)
SELECT Products, Count
FROM [ODBC;DRIVER=ODBC Driver 17 for SQL Server;SERVER=myServer;DATABASE=myDatabase;].[vwProducts];

Protože cíl ani zdroj nejsou zdrojem Accessu, nazýváme to „heterogenní dotaz“. Všimněte si, že i když vwProducts byla propojená tabulka, stále by to byl „heterogenní“ dotaz. Je to proto, že stále mícháme různé zdroje dat v jediném dotazu.

Ještě důležitější je, že použitím heterogenního dotazu se vyhneme nutnosti vytvářet dočasné objekty v rámci naší aplikace Access. Vytvoření dočasného objektu může způsobit nadýmání aplikace Access. To je případ i importu nebo propojení nebo použití sad záznamů ve VBA. Nafouklý soubor může zase vyžadovat zhutnění a opravu. Když však použijete heterogenní dotaz k přímému přenosu dat z jednoho zdroje dat do druhého, vyhnete se všemu tomu nadýmání. V důsledku toho je ideální pro scénáře, kdy vaše aplikace Access potřebuje generovat několik souborů bez údržby samotné aplikace.

Vytvoření ad-hoc připojovacího řetězce

Nyní můžete vidět, proč je cenné porozumět parametrům použitým v připojovacím řetězci. Zvláště důležité je ovládat cíl (např. cestu pro textové soubory nebo rozsah pro list Excel). U těchto nerelačních zdrojů dat nemusí být to, co tvoří „databázi“ a „tabulky“ v takovém zdroji dat, intuitivní. Poslední 3 články můžete použít jako referenci pro pomoc s vytvořením připojovacího řetězce a informace o schématu, abyste zajistili, že rozložení vyjde správně. To znamená, že existuje také zkratka, kterou můžete použít, abyste našli připojovací řetězec.

Můžete použít kartu Externí a buď „Importovat text“ nebo Importovat Excel“ a vybrat možnost odkazu. Obvykle je to třetí možnost v průvodci, jak je znázorněno.

Poté, co projdete průvodcem a uložíte novou propojenou tabulku, můžete prozkoumat připojovací řetězec prostřednictvím okamžitého okna VBA s tímto kódem:

?CurrentDb.TableDefs("<name of linked table>").Connect

To vám může poskytnout rady, jak vytvořit připojovací řetězec, a poté jej můžete přizpůsobit. Většinu času zjistíte, že si cestu nebo název tabulky přizpůsobujete, takže to obvykle jako technika během vašeho vývoje dostatečně funguje. Potom můžete podle toho vytvořit heterogenní dotaz a odstranit propojenou tabulku.

Závěry

V seriálu jste se naučili rozdíl mezi propojením a otevřením. Pak jste viděli, jak lze Excel a textové soubory používat, jako by šlo o DAO.Database objekty s „tabulkami“. Ve 2. článku jste se dozvěděli o parametrech připojení pro sešit Excel. Ve 3. článku jste viděli potřebu mít informace o schématu pro popis textového souboru. Čtvrtý článek popsal, jak používat schema.ini . V 5. článku jste viděli, jak MSysIMEXSpecs a MSysIMEXColumns lze použít jako alternativu k schema.ini metoda.

Nakonec jsme to všechno dali dohromady při konstrukci heterogenního dotazu jako příkladu řešení s nízkým kódem. Nemusíme psát velké množství kódu VBA jen proto, abychom přenášeli data z jednoho zdroje do druhého. Myslím, že budete souhlasit s tím, že je mnohem snazší upravit dotaz Access úpravou cesty nebo názvu tabulky, než psát velkou a složitou rutinu VBA pro čtení a zápis dat. Ještě důležitější je, že použitím heterogenního dotazu je mnohem snazší zvládnout změny ve struktuře na obou stranách. Přidán nový sloupec? Žádný problém, stačí přidat nový sloupec do dotazu a máme hotovo.

Jak však vidíte, vyžaduje to dobré pochopení konstrukce připojovacího řetězce. Z toho důvodu bylo nutné prostudovat složitosti spojovacího řetězce do hloubky, jak jsme to dělali od 2. do 5. článku. Můžeme však použít průvodce propojenou tabulkou, který nám poskytne nápovědu k připojovacím řetězcům. Ale jsou to jen narážky. Proto je dobré vědět, jak přesně ovládat výstup. Doufám, že souhlasíte s tím, že investování určitého úsilí do pochopení toho, jak fungují připojovací řetězce, se vyplatí ušetřenou prací.


  1. Jak získat aktuální datum v PL/SQL?

  2. Podporuje Microsoft OLE DB Provider pro SQL Server TLS 1.2

  3. Použití výstrah a operátorů na serveru SQL

  4. SELECT COUNT(*) AS count - Jak používat tento počet