Połączone tabele mogą być fantastycznie przydatne (choć oczywiście nie zawsze) - szczególnie gdy masz do czynienia z informacjami zewnętrznymi, które regularnie się zmieniają. Typowym przykładem może być sytuacja, w której dostawca zapewnia dostęp do aktualnego pliku cen miesięcznych. Ale co się stanie, kiedy wydadzą plik w przyszłym miesiącu, a nazwa pliku zmieni się z „Cennik-01-01-2016” na „Cennik-01-02-2016”? Pierwszą rzeczą, która się stanie, będzie zerwanie łącza, więc będziesz musiał ręcznie go zaktualizować. Za każdym razem, gdy zmieniają nazwę pliku. Dotyczy to również nazw tabel (oczywiście!). Czy istnieje sposób, aby to zrobić szybko i łatwo, o co pytasz? Cieszymy się, że zapytałeś - czytaj dalej i dowiedz się, jak…
Sceneria - scenariusz
W tym artykule wykorzystam fikcyjny scenariusz - ale jestem pewien, że szybko go rozpoznasz!
Co miesiąc firma Acme Trading przesyła nam zaktualizowany cennik wszystkich materiałów eksploatacyjnych używanych w DataNumen. Abyśmy wiedzieli, ile każdego miesiąca będziemy wydawać na stacjonarne, łączymy się z tym plikiem w naszej bazie danych zarządzania biurem.
Problem w tym, że mimo iż format pliku pozostaje ten sam, jego nazwa zmienia się co miesiąc. W zeszłym miesiącu była to „koszty stacjonarne styczeń 2017.xls”, a w tym miesiącu „koszty stacjonarne luty 2017.xls”.
Niewielka zmiana. Jestem pewien, że się zgodzisz, ale chyba, że zajmiemy się problemem ręcznej zmiany nazwy pliku (po usunięciu starego pliku z drogi lub usunięciu go) lub przejdziemy przez proces ponowne łączenie tabeli za pośrednictwem połączonego menedżera tabeli w programie Access.
Ponieważ nie chcieliśmy tego robić, stworzyliśmy następujący kod, aby to zrobić - o wiele łatwiejsze, ponieważ jestem pewien, że zobaczysz:
Public Sub UpdateLink (tableName As String, newFileName As String) Dim objDB As Database Dim objTableDef As TableDef Dim newConnect as String Set objDB = CurrentDb Set objTableDef = objDB.TableDefs(tableName) 'format of the connection string in our case, for example, is: ' Excel 5.0;HDR=YES;IMEX=2;DATABASE=File name including path and extension type newConnect = "Excel 5.0;HDR=YES;IMEX=2;DATABASE=" & newFileName objTableDef.Connect = newConnect objTableDef.RefreshLink Set objTableDef = Nothing Set objDB = Nothing End Sub
Wyjaśnienie kodu
Jak widać, przekazujemy nazwę (powiązanej) tabeli wraz z nazwą nowego pliku, z którym tabela ma być powiązana. Nazwa pliku powinna zawierać pełną ścieżkę do pliku. Jednym z potencjalnych problemów na początku może być znalezienie poprawnego formatu ciągu połączenia, który należy umieścić w zmiennej „newConnect”. Chociaż istnieje wiele źródeł informacji o prawidłowym formacie, jednym z najłatwiejszych, jakie znalazłem, jest po prostu sprawdzenie ciągu połączenia bieżącej powiązanej tabeli. Aby to zrobić, wystarczy dodać poniższy wiersz bezpośrednio pod wierszem „Set objTableDef = objDB.TableDefs(tableName)”:
Debug.Print (objTableDef.Connect)
Spowoduje to wydrukowanie istniejących parametrów połączenia w oknie debugowania / bezpośredniego okna edytora kodu (jeśli nie jest to jeszcze widoczne, naciśnij CTRL-G na ekranie edytora kodu VBA, aby przełączyć widoczność okna bezpośredniego przed uruchomieniem kodu.
Ostrzeżenie
Jak zawsze, nie zapominaj, że chociaż powyższy fragment kodu może pomóc zaoszczędzić czas, gdy musisz zmienić plik, z którym jest połączona tabela, to nie może ci pomóc, jeśli napotkasz jakikolwiek Uzyskaj dostęp do uszkodzeń plików, więc upewnij się, że przechowujesz kopie zapasowe i wiesz, gdzie się zwrócić, jeśli wszystko inne zawiedzie.
Wprowadzenie autora:
Mitchell Pond jest ekspertem w dziedzinie odzyskiwania danych w DataNumen, Inc., która jest światowym liderem w technologiach odzyskiwania danych, w tym napraw uszkodzenia SQL i doskonałe oprogramowanie do odzyskiwania. po więcej informacji odwiedź www.datanumen.com