Doraźne parametry połączenia i heterogeniczne zapytania dla MS Access
Zapytania heterogeniczne są powodem, dla którego parametry połączenia, zwłaszcza parametry połączenia ad-hoc, są ważne. W poprzednich artykułach z serii widzieliście, jak można dostosować parametry połączenia do łączenia się z Excelem i plikami tekstowymi. W przypadku plików tekstowych możesz również opisać schemat struktury pliku tekstowego za pomocą schema.ini
lub zapisane specyfikacje. W pierwszym artykule poznałeś również różnicę między łączeniem a otwieraniem źródła danych.
Zapytania heterogeniczne zamiast kodu VBA
Widziałeś w poprzednich artykułach przykładowy kod otwierania takiego źródła danych przy użyciu 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")
Może to wywołać wrażenie, że jedynym sposobem otwarcia źródła danych jest użycie kodu. Ale tak nie musi być! W rzeczywistości możesz otworzyć dowolne źródło danych, używając tylko zapytania programu Access. Oto przykładowa składnia, którą można uruchomić w zapytaniu programu Access:
SELECT * FROM [Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx].[Sheet1$];
Ogólnie rzecz biorąc, parametry połączenia, które umieściłeś w OpenDatabase
Czwarty parametr to ten, którym poprzedziłbyś „tabela”. Dlatego ogólna składnia będzie wyglądać tak:
FROM [<complete connection string>].[<name of the table>]
Możesz użyć OpenDatabase
metody i iteruj po TableDefs
aby znaleźć prawidłowe nazwy tabeli. Możesz wtedy użyć tego do wypełnienia drugiej części imienia.
Dlaczego otwierać zamiast linku?
Jedną z zalet otwierania w przeciwieństwie do łączenia jest możliwość zmiany parametrów połączenia w czasie wykonywania. Nie musisz również zajmować się wymaganym czyszczeniem, takim jak usuwanie niepotrzebnych już połączonych obiektów. Jest to czysto przejściowe, co byłoby idealne do przenoszenia danych z jednego źródła do drugiego bez pisania kodu VBA.
Oto jeden z możliwych scenariuszy. Załóżmy, że chcemy utworzyć pliki tekstowe, które są danymi wyjściowymi z widoku naszej bazy danych SQL Server. Widzieliście z poprzednich artykułów, że możemy napisać kod VBA, aby zapętlić zestawy rekordów DAO i zapisywać zawartość jeden po drugim. Jednak jako alternatywę możemy zamiast tego utworzyć zapytanie Access za pomocą tego kodu 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];
Ponieważ zarówno miejsce docelowe, jak i źródło nie są źródłem programu Access, nazywamy to „zapytanie heterogeniczne”. Pamiętaj, że nawet jeśli vwProducts
była tabelą połączoną, nadal byłaby to zapytanie „heterogeniczne”. Dzieje się tak, ponieważ wciąż mieszamy różne źródła danych w jednym zapytaniu.
Co ważniejsze, używając zapytania heterogenicznego, unikamy konieczności tworzenia obiektów tymczasowych w naszej aplikacji Access. Utworzenie obiektu tymczasowego może spowodować rozdęcie aplikacji Access. Dzieje się tak nawet w przypadku importowania, łączenia lub używania zestawów rekordów w VBA. Rozdęty plik może z kolei wymagać kompaktowania i naprawy. Jeśli jednak używasz heterogenicznego zapytania do bezpośredniego przesyłania danych z jednego źródła danych do drugiego, unikasz tego rozdęcia. W związku z tym idealnie nadaje się do scenariuszy, w których aplikacja Access musi wygenerować kilka plików bez konserwacji samej aplikacji.
Konstruowanie ciągu połączenia ad-hoc
Do tej pory możesz zobaczyć, dlaczego warto zrozumieć parametry używane w parametrach połączenia. Szczególnie ważne jest kontrolowanie miejsca docelowego (np. ścieżki dla plików tekstowych lub zakresu dla arkusza Excel). W przypadku tych nierelacyjnych źródeł danych to, co stanowi „bazę danych” i „tabele” w takim źródle danych, może nie być intuicyjne. Możesz użyć ostatnich 3 artykułów jako odniesienia, aby uzyskać pomoc w konstruowaniu parametrów połączenia i informacji o schemacie, aby upewnić się, że układ jest prawidłowy. To powiedziawszy, istnieje również skrót, którego możesz użyć, aby znaleźć ciąg połączenia.
Możesz użyć zakładki Zewnętrzne i „Importuj tekst” lub Importuj Excel” i wybrać opcję łącza. Jest to zwykle trzecia opcja kreatora, jak pokazano.
Po przejściu przez kreatora i zapisaniu nowej tabeli połączonej możesz sprawdzić ciąg połączenia za pomocą bezpośredniego okna VBA za pomocą tego kodu:
?CurrentDb.TableDefs("<name of linked table>").Connect
Może to dostarczyć wskazówek, jak skonstruować ciąg połączenia, a następnie dostosować. W większości przypadków będziesz dostosowywać ścieżkę lub nazwę tabeli, aby zwykle działało to wystarczająco jako technika podczas tworzenia. Następnie możesz odpowiednio utworzyć heterogeniczne zapytanie i usunąć połączoną tabelę.
Wnioski
W serii nauczyłeś się różnicy między łączeniem a otwieraniem. Zobaczyłeś wtedy, jak Excel i pliki tekstowe mogą być używane tak, jakby były DAO.Database
obiekty ze „stołami”. W drugim artykule poznałeś parametry połączenia dla skoroszytu programu Excel. W trzecim artykule zauważyłeś potrzebę posiadania informacji o schemacie w celu opisania pliku tekstowego. Czwarty artykuł opisuje, jak używać schema.ini
. W piątym artykule zobaczyłeś, jak MSysIMEXSpecs
i MSysIMEXColumns
może być używany jako alternatywa dla schema.ini
metoda.
Na koniec połączyliśmy to wszystko w konstruowanie heterogenicznego zapytania jako przykładu rozwiązania o niskim kodzie. Nie musimy pisać dużej ilości kodu VBA tylko po to, aby przesyłać dane z jednego źródła do drugiego. Myślę, że zgodzisz się, że znacznie łatwiej jest zmodyfikować zapytanie programu Access, dostosowując ścieżkę lub nazwę tabeli, niż pisać duże i złożone procedury VBA do odczytu i zapisu danych. Co ważniejsze, przy użyciu zapytania heterogenicznego znacznie łatwiej jest obsługiwać zmiany w strukturze po obu stronach. Dodano nową kolumnę? Nie ma problemu, po prostu dodaj nową kolumnę do zapytania i gotowe.
Jednak, jak widać, wymaga to dobrego zrozumienia konstrukcji ciągu połączenia. Z tego powodu konieczne było dogłębne przestudiowanie zawiłości parametrów połączenia, tak jak to zrobiliśmy w artykułach od 2 do 5. Chociaż możemy użyć kreatora tabel połączonych, aby uzyskać wskazówkę dotyczącą parametrów połączenia. Ale to tylko wskazówki. Dlatego warto wiedzieć, jak precyzyjnie sterować mocą. Mam nadzieję, że zgadzasz się, że zainwestowanie pewnego wysiłku w zrozumienie, jak działają ciągi połączeń, zwróci się w postaci zaoszczędzonej pracy.