Otwieranie lub łączenie tekstu lub programu Excel jako źródeł danych w programie Microsoft Access
Access to fenomenalne narzędzie do pracy z wieloma źródłami danych. Być może od dawna wiesz, że możesz łatwo importować lub eksportować dane w wielu różnych formatach. Mieliśmy jednak scenariusz, w którym musieliśmy przetwarzać dane z zewnętrznych źródeł danych. Przetwarzanie odbywa się często, więc importowanie danych szybko rozszerzyłoby plik frontonu. Ponadto w tej sytuacji utworzenie drugiej kopii pliku Access jako tymczasowej bazy danych w celu uniknięcia rozrostu nie było realną opcją. Jakie mieliśmy wybory? W tym miejscu zauważyliśmy niedostatek informacji dotyczących otwierania lub łączenia z nierelacyjnymi źródłami danych. Więc przyjrzyjmy się bliżej temu tematowi.
Ta seria blogów ma na celu wypełnienie luki w dokumentacji firmy Microsoft dotyczącej otwierania lub łączenia z tekstem lub programem Excel jako źródłem danych w aplikacjach programu Access. Connectionstrings.com i inne witryny udostępniają pewne okruszki. Możesz również zwykle odkryć niektóre zachowania, korzystając z kreatorów programu Access, a następnie badając obiekty. Jednak odgadywanie nie jest szczególnie przydatne. Dlatego w tej serii artykułów omówimy, jak używać plików Excel i tekstowych jako źródeł danych bez konieczności importowania lub eksportowania danych.
Należy pamiętać, że seria nie byłaby możliwa bez pomocy Dana Haughta i Jima Fergusona, współautorów przewodnika programisty aparatu bazy danych Microsoft Jet. Mimo że książka dawno się skończyła, nadal jest cenną książką, jeśli dużo pracujesz z DAO.
Dostęp i nierelacyjne źródła danych
Program Access zawsze wspierał stosowanie metody Indexed Sequential Access Method (ISAM) jako potencjalnego źródła danych, co umożliwia importowanie, łączenie lub eksportowanie do nierelacyjnych źródeł danych, takich jak pliki tekstowe lub arkusze kalkulacyjne Excel, a nawet inne formaty plików, takie jak Exchange, dBASE lub FoxPro. DAO to umożliwia, ponieważ posiada sterowniki ISAM, które mogą pracować z tymi formatami. Skoncentruję się jednak na plikach tekstowych i arkuszach kalkulacyjnych Excel, ponieważ są one bardziej powszechnymi źródłami, z którymi potrzebujemy Access do pracy. Jeśli wszystko, co kiedykolwiek zrobiłeś, to importowanie danych za pomocą karty Dane zewnętrzne za pośrednictwem programu Access, może to wydawać się magiczne, ale w rzeczywistości wszystkie funkcje programu Access są dostępne dla nas jako programistów na poziomie DAO.
Zapomnijmy więc, że czarodzieje istnieją. Zapomnijmy o błyszczących ikonach na wstążce. Zapomnijmy, że istnieją tabele połączone. Po prostu użyjmy kodu VBA do pracy ze źródłami danych z powietrza. Czy możemy? Absolutnie. Najpierw przyjrzymy się różnicy między łączeniem a otwieraniem źródła danych.
Łączenie a otwieranie
Aby pomóc w terminologii, musimy rozróżnić linkowanie a otwieranie . Łączenie oznacza, że tworzymy połączoną tabelę, która jest teraz „tabelą” programu Access, której możemy używać tak jak każdej innej tabeli programu Access. Jako taki jest to stały obiekt zdefiniowany w aplikacji Access. W przeciwieństwie do tego, otwieranie ma miejsce, gdy uzyskujemy bezpośredni dostęp do źródła danych za pomocą OpenDatabase
DAO metoda. Ze swej natury otwarcie źródła danych odbywa się zwykle za pomocą kodu VBA, jak wkrótce zobaczysz.
Konfigurowanie próbek i kodu
Ponieważ seria dotyczy zrozumienia najdrobniejszych szczegółów dotyczących interakcji programu Access z tymi źródłami danych, najpierw skupimy się na otwieraniu, a nie na łączeniu tutaj. Jak więc otworzyć arkusz kalkulacyjny Excel? Na pewno nie jest to baza danych? Stwórzmy minimalny przykład na początek. W folderze C:\Links
, utworzymy arkusz kalkulacyjny Excel i plik bazy danych Access o nazwie Products.xlsx
i Sample.accdb
, odpowiednio:
Products.xlsx to prosty arkusz kalkulacyjny zawierający tylko jeden arkusz o następującej treści:
W tym celu dodajmy kod VBA w Sample.accdb
. W standardowym module:
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
Jeśli uruchomimy kod, w naszym bezpośrednim oknie powinniśmy otrzymać następujące dane wyjściowe:
Products Count Apples 3 Bananas 5 Figs 8
Więc mimo że Excel nie jest „bazą danych” (a jeśli używasz Excela jako bazy danych, szkoda, że ), nadal możemy udawać, że jest „bazą danych” i iterować po jej „tabelach” i „rekordach” przy użyciu znanych obiektów DAO. Cała magia pochodzi z tych parametrów połączenia:
Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx
Ale to nie musi być magiczne. Seria przeanalizuje części parametrów połączenia dla sterowników programu Excel i plików tekstowych. Zacznijmy więc od porównania z ciągiem połączenia ODBC, który być może znasz lepiej.
Typy źródeł danych
Jeśli łączyłeś się ze źródłami danych ODBC, prawdopodobnie zauważyłeś, że ciągi połączeń ODBC zwykle wyglądają mniej więcej tak:
ODBC;DRIVER=...;SERVER=...;DATABASE=...;
Zastanawiałem się, dlaczego zawsze zaczynało się od ODBC
? Ta pierwsza część jest tym, czego DAO używa do identyfikacji typu źródła. Jednak ponieważ Excel nie jest bazą danych ODBC, musimy użyć Excel 12.0 Xml
aby wskazać, że DAO musi używać określonego sterownika programu Excel. Na pozostałą składnię ciągu połączenia ma wpływ to, którego sterownika używamy w pierwszej części ciągu połączenia.
Oto częściowa lista możliwych typów źródeł danych, które MS Access rozpozna:
Excel 8.0
:97-2003 pliki xlsExcel 12.0
:pliki xlsbExcel 12.0 Xml
:pliki xlsxText
:Dowolne pliki tekstowe
Istnieje więcej źródeł danych, w tym SharePoint, Exchange lub FoxPro, ale nie zamierzam ich omawiać. Mimo to pokazuje, że Access jest w stanie pracować z tymi źródłami tak samo jak z bazą danych, co może umożliwić nam użycie DAO do odczytywania zawartości. Pamiętaj, że gdy korzystamy z nierelacyjnych źródeł danych, nie wszystkie operacje mogą być w pełni obsługiwane. Na przykład możesz nie mieć uprawnień do edycji istniejącego wiersza, nawet jeśli możesz go wstawić.
Jednak jedno wyzwanie związane z otwarciem lub połączeniem ze źródłem danych oznacza, że nie możesz po prostu zaimportować danych, a następnie edytować schematu, aby dopasować go do swoich potrzeb. Dlatego może się okazać, że domyślny schemat, który otrzymasz podczas łączenia, nie będzie tym, czego chcesz. Z tego powodu ważne będzie dogłębne zrozumienie parametrów połączenia. Dlatego w kilku następnych artykułach dowiesz się więcej o szczegółach parametrów połączenia zarówno dla plików Excel, jak i plików tekstowych.
Wnioski
Widziałeś, że jako alternatywę dla importowania danych zewnętrznych, możemy zdecydować się na połączenie lub nawet otwarcie zewnętrznego źródła danych za pomocą DAO. Możliwość łączenia lub otwierania zewnętrznego źródła danych jest bardzo słabo wykorzystywana. Nie należy jednak pomijać możliwości łączenia lub otwierania, ponieważ może to otworzyć nowe scenariusze, takie jak unikanie rozdęcia w wyniku importowania, zwłaszcza w zamkniętym środowisku. W następnym artykule omówię różne parametry używane przez sterownik Excel do konstruowania prawidłowego ciągu połączenia. W kolejnych artykułach przyjrzę się sterownikowi pliku tekstowego i parametrom połączenia. W ostatnim artykule połączymy to wszystko w całość.