Łączenie aplikacji programu Access z programem SQL Server — Azure SQL Database (AccessToSQL)
Jeśli chcesz używać istniejących aplikacji programu Access z programem SQL Server, możesz połączyć oryginalne tabele programu Access z migrowanym programem SQL Server lub tabelami sql azure. Łączenie modyfikuje bazę danych programu Access, aby zapytania, formularze, raporty i strony dostępu do danych używały danych w programie SQL Server lub usłudze Azure SQL Database zamiast danych w bazie danych programu Access.
Notatka
Tabele programu Access pozostają w programie Access, ale nie są aktualizowane razem z aktualizacjami programu SQL Server lub programu SQL Azure. Po łączeniu tabel i zweryfikowaniu funkcjonalności możesz usunąć tabele programu Access.
Łączenie tabel programu Access i programu SQL Server
Po połączeniu tabeli Programu Access z tabelą SQL Server lub SQL Azure aparat bazy danych Jet przechowuje informacje o połączeniu i metadane tabeli, ale dane są przechowywane w programie SQL Server lub usłudze SQL Azure. To łączenie umożliwia aplikacjom programu Access działanie względem tabel programu Access, nawet jeśli rzeczywiste tabele i dane znajdują się w programie SQL Server lub na platformie SQL Azure.
Notatka
Jeśli używasz uwierzytelniania programu SQL Server, hasło jest przechowywane w postaci zwykłego tekstu w połączonych tabelach programu Access. Zalecamy używanie uwierzytelniania systemu Windows.
Aby połączyć tabele
W Eksploratorze metadanych programu Access wybierz tabele, które chcesz połączyć.
Kliknij prawym przyciskiem myszy tabele, a następnie wybierz Połącz.
Program SQL Server Migration Assistant (SSMA) dla programu Access tworzy kopię zapasową oryginalnej tabeli programu Access i tworzy połączoną tabelę.
Gdy połączysz tabele, w programie SSMA pojawi się przy nich mała ikona linku. W programie Access tabele są wyświetlane z ikoną "połączoną", która jest kulą globusu ze strzałką wskazującą ją.
Po otwarciu tabeli w programie Access dane są pobierane przy użyciu kursora zestawu kluczy. W związku z tym w przypadku dużych tabel wszystkie dane nie są pobierane jednocześnie. Jednak podczas przeglądania tabeli program Access pobiera dodatkowe dane zgodnie z potrzebami.
Ważny
Aby połączyć tabele dostępu z bazą danych platformy Azure, potrzebujesz programu SQL Server Native Client (SNAC) w wersji 10.5 lub nowszej.
Najnowszą wersję SNAC można uzyskać z Microsoft SQL Server 2008 R2 Feature Pack.
Odłączanie tabel programu Access
Po odłączeniu tabeli programu Access z tabeli sql Server lub SQL Azure usługa SSMA przywraca oryginalną tabelę programu Access i jej dane.
Aby odłączyć tabele
W Eksploratorze metadanych programu Access wybierz tabele, które chcesz odłączyć.
Kliknij prawym przyciskiem myszy Tabele, a następnie wybierz Odłącz.
Łączenie tabel z innym serwerem
Jeśli tabele programu Access zostały połączone z jednym wystąpieniem programu SQL Server, a później chcesz zmienić łącza do innego wystąpienia, należy ponownie połączyć tabele.
Aby połączyć tabele z innym serwerem
W Eksploratorze metadanych programu Access wybierz tabele, które chcesz odłączyć.
Kliknij prawym przyciskiem myszy Tabele, a następnie wybierz Odłącz.
Kliknij przycisk Połącz ponownie z programem SQL Server.
Połącz się z wystąpieniem programu SQL Server lub usługą SQL Azure, z którym chcesz połączyć tabele programu Access.
W Eksploratorze metadanych programu Access wybierz tabele, które chcesz połączyć.
Kliknij prawym przyciskiem myszy tabele, a następnie wybierz pozycję Połącz.
Aktualizowanie tabel połączonych
Jeśli definicje tabel programu SQL Server lub SQL Platformy Azure zostały zmienione, możesz odłączyć i ponownie połączyć tabele w programie SSMA, korzystając z procedur przedstawionych wcześniej w tym temacie. Tabele można również zaktualizować przy użyciu programu Access.
Aby zaktualizować tabele połączone przy użyciu programu Access
Otwórz bazę danych programu Access.
Na liście obiektów , kliknij pozycję Tabele.
Kliknij prawym przyciskiem myszy tabelę połączoną, a następnie wybierz pozycję Połączony menedżer tabel.
Zaznacz pole wyboru obok każdej połączonej tabeli, którą chcesz zaktualizować, a następnie kliknij przycisk OK.
Możliwe problemy po migracji
W poniższych sekcjach wymieniono problemy, które mogą wystąpić w istniejących aplikacjach programu Access po przeprowadzeniu migracji baz danych z programu Access do programu SQL Server lub sql Azure, a następnie połączyć tabele wraz z przyczynami i rozwiązaniami.
Niska wydajność z połączonymi tabelami
Przyczyna: Niektóre zapytania mogą być powolne po zwiększeniu rozmiaru z następujących powodów:
Aplikacja zależy od funkcji, które nie istnieją w programie SQL Server lub SQL Azure, co powoduje, że Jet ściąga tabele lokalnie i uruchamia zapytanie SELECT.
Zapytania, które aktualizują lub usuwają wiele wierszy, są wysyłane przez jet jako sparametryzowane zapytanie dla każdego wiersza.
Rozwiązanie: Przekonwertuj wolno działające zapytania na zapytania przekazywane, procedury składowane lub widoki. Konwertowanie na zapytania przekazywane ma następujące problemy:
Nie można modyfikować zapytań przekazywanych. Modyfikowanie wyniku zapytania lub dodawanie nowych rekordów musi być wykonywane w alternatywny sposób, na przykład przez jawne przyciski Modyfikuj lub Dodaj w formularzu, który jest powiązany z zapytaniem.
Niektóre zapytania wymagają wprowadzania danych przez użytkownika, ale zapytania przekazywane tego nie obsługują. Dane wejściowe użytkownika można uzyskać za pomocą kodu języka VISUAL Basic for Applications (VBA), który wyświetla monit o parametry lub za pomocą formularza używanego jako kontrolka danych wejściowych. W obu przypadkach kod VBA przesyła zapytanie z danymi wejściowymi użytkownika do serwera.
Kolumny automatycznego zwiększania nie są aktualizowane, dopóki rekord nie zostanie zaktualizowany
Przyczyna: po wywołaniu RecordSet.AddNew w systemie Jet kolumna z automatycznym przyrostem jest dostępna, zanim rekord zostanie zaktualizowany. Nie jest to prawdą w programie SQL Server lub usłudze SQL Azure. Nowa wartość kolumny tożsamości nowa wartość jest dostępna dopiero po zapisaniu nowego rekordu.
Rozwiązanie: Uruchom następujący kod języka Visual Basic for Applications (VBA) przed uzyskaniem dostępu do pola tożsamości:
Recordset.Update
Recordset.Move 0,
Recordset.LastModified
Nowe rekordy są niedostępne
Przyczyna: Po dodaniu rekordu do tabeli programu SQL Server lub sql platformy Azure przy użyciu języka VBA, jeśli unikatowe pole indeksu tabeli ma wartość domyślną i nie przypisujesz wartości do tego pola, nowy rekord nie będzie wyświetlany do momentu ponownego otwarcia tabeli w programie SQL Server lub usłudze SQL Azure. Jeśli spróbujesz uzyskać wartość z nowego rekordu, zostanie wyświetlony następujący komunikat o błędzie:
Run-time error '3167' Record is deleted.
Rozwiązanie: Po otwarciu tabeli sql Server lub SQL Azure przy użyciu kodu VBA dołącz opcję dbSeeChanges
, jak w poniższym przykładzie:
Set rs = db.OpenRecordset("TestTable", dbOpenDynaset, dbSeeChanges)
Po migracji niektóre zapytania nie zezwalają użytkownikowi na dodawanie nowego rekordu
Przyczyna: Jeśli zapytanie nie zawiera wszystkich kolumn uwzględnionych w indeksie unikatowym, nie można dodać nowych wartości przy użyciu zapytania.
Rozwiązanie: Upewnij się, że wszystkie kolumny zawarte w co najmniej jednym indeksie są częścią zapytania.
Nie można zmodyfikować schematu tabeli połączonej za pomocą programu Access
Przyczyna: Po migracji danych i łączenia tabel użytkownik nie może zmodyfikować schematu tabeli w programie Access.
Rozwiązanie: zmodyfikować schemat tabeli przy użyciu programu SQL Server Management Studio, a następnie zaktualizować link w programie Access.
Funkcja hiperłącza zostanie utracona po migracji danych
Przyczyna: Po migracji danych hiperlinki w kolumnach tracą funkcjonalność i stają się prostymi kolumnami nvarchar(max).
rozwiązanie: Brak.
Niektóre typy danych programu SQL Server nie są obsługiwane przez program Access
Przyczyna: Jeśli później zaktualizujesz tabele programu SQL Server lub SQL Azure tak, aby zawierały typy danych, które nie są obsługiwane przez program Access, nie można otworzyć tabeli w programie Access.
Rozwiązanie: Można zdefiniować zapytanie programu Access, które zwraca tylko te wiersze z obsługiwanymi typami danych.