Professional Documents
Culture Documents
bazy danych
napisanej w
MS Access do MS SQL
2005
Wstęp
► Omówienie środowiska MS Access
► Przygotowanie do migracji
► Migracja danych z bazy Access do Bazy MS
SQL
► Migracja zapytań SQL-a z Access-a do MS
SQL-a
► Integracja MS SQL-a z zewnętrznymi
źródłami danych
► Wykorzystanie funkcjonalności MS SQL w
codziennej pracy po migracji
► Zagrożenia związane z migracją
Środowisko MS Access
► Relacyjna baza danych zintegrowana z
środowiskiem programistycznym
► Ścisła integracja z VBA i DAO
► Wszechobecne kreatory
► Baza i aplikacja w postaci pojedynczego
pliku
► W wersji podstawowej baza wymaga
aplikacji Access z możliwością jej
skompilowania do samodzielnego pliku
► Wbudowane mechanizmy importu i eksportu
danych
► Możliwość protezowania SQL-a za pomocą
funkcji VBA
Dostępne elementy
► Zróżnicowany dostęp do danych
Silnik JET i linki ODBC do zewnętrznych źródeł
danych - MDB
„projekt programu Microsoft Access” - ADP
► Formularze
► Raporty
► Strony dostępu HTML
► Makra
► Moduły VBA
Silnik JET
► Brak Triggerów
► Baza danych jest tylko w postaci pliku
► Blokady
► Transakcje
► Model relacyjny z możliwością
kaskadowego poprawiania i kasowania
► Podstawowe bezpieczeństwo oparte o
zewnętrzny plik lub hasło w bazie
Ograniczenia JET-a
► Maksymalny rozmiar bazy danych to 2 GB
(w tej przestrzeni muszą się również
zmieścić obiekty systemowe, np. indeksy),
► Maksymalna liczba obiektów w bazie: 32
768,
► Maksymalna liczba jednoczesnych
użytkowników: 255 (w praktyce dużo
mniej),
► Maksymalna liczba pól w tabeli: 255,
► Maksymalny rozmiar tabeli: 2 GB (wraz z
obiektami systemowymi)
JET bez Access-a
► Możliwość tworzenia plików oraz
dostęp do danych za pomocą
ADOX/ADO z poziomu np. skryptu VBS
► Pliki MDB są obsługiwane przez inne
aplikacje bez konieczności
instalowania Access-a
Częste praktyki występujące w
środowisku Access
► ArchitekturaFrontend – Backend
► Kaskadowanie kwerend
► Tworzenie baz pośredniczących
► Dynamiczne tworzenie kwerend za pomocą
DAO
► Wykorzystanie dynamicznych kwerend
krzyżowych – PIVOT-y
► Odwołania do formularzy wprost z SQL-a
► Umieszczanie funkcji z VBA w kodzie SQL
► Wykonywanie kodu SQL z poziomu VBA
Środowisko docelowe
► SQL Server 2005/2008 Express
SQL Server 2005/2008 Express Edition
with Advanced Services
Pojedyncza baza do 4 GB
1 GB RAM
1 CPU
► SQL Server 2005/2008
Brak ograniczeń
Przygotowanie do migracji
► Zapoznanie z migrowaną aplikacją i jej
specyfiką
► Określenie celu migracji
Ominięcie ograniczeń
Przyspieszenie działania
Całkowita migracja do nowego środowiska
► Określenie elementów które chcemy
migrować
► Oszacowanie czasu potrzebnego na
wykonanie zadania
► Zminimalizowanie ewentualnych szkód w
przypadku niepowodzenia
Warunki niezbędne do
powodzenia
► Kopia bezpieczeństwa migrowanych
danych
► Dostęp do bazy SQL Serwer oraz
Odpowiedni poziom uprawnień w
ramach SQL Serwer-a
► W przypadku gdy dane są
współdzielone dostęp do serwera dla
innych użytkowników
► Odpowiednią ilość miejsca na dysku
(plik danych i pliku log)
Włączenie obsługi TCP\IP dla
instancji SQL
► Jeżeli
docelowa instancja bazy posiada
nazwę SQLEXPRESS to:
NAZWA-KOMPUTERA\SQLEXPRESS
192.168.11.12\SQLEXPRESS
(local)\SQLEXPRESS
Migracja
Kreator rozszerzenia
Wynik Migracji
Podsumowanie
► Migruje tylko Tabele wraz z
ograniczeniami
► Całkiem nieźle sobie radzi z relacjami
► Tworzy linki po zakończeniu procesu
► Baza jest gotowa do użycia tuż po
migracji
Microsoft SQL Server Migration
Assistant for Access
Prezentacja procesu
migracji
Wynik Migracji
Podsumowanie
► Migracja Tabel i Kwerend
► Część relacji się nie migruje
► Nie linkują się widoki
► Dziwny sposób migrowania obiektów
► Konieczne poprawki ręczne,
niewygodne przy większych projektach
► Tworzone są linki do bazy docelowej
► Baza po migracji jest gotowa do pracy
Migracja Ręczna
Podsumowanie
► Migracja dowolnego obiektu
zwracającego dane (Tabela, kwerenda,
tabela połączona)
► Konieczność wykonania poprawek po
przeniesieniu danych, np. Włączenie
autonumerowania, relacje,
ograniczenia itp.
► Konieczność stworzenia linku po
przeniesieniu danych
Kreator DTS
Podsumowanie
► Jako jedyny pozwala wybrać schemat
do którego migrujemy dane
► Nie migruje informacji o relacjach
► Kwerendy są migrowane jako tabele
► Konieczność odbudowania struktury
bazy danych
Ręczne podlinkowanie
obiektu
Migracja zapytań
► Prostsze zapytania można migrować kreatorem lub
przenieść bezpośrednio do tworzonego obiektu
Kwerenda: Add or Delete Reports
SELECT Reports.ReportName
FROM Reports
ORDER BY Reports.ReportName;
http://weblogs.sqlteam.com/jeffs/archive/2007/03/30/
Quick-Access-JET-SQL-to-T-SQL-Cheatsheet.aspx
Zapytania zawierające
Access parametry MS SQL
PARAMETERS [Forms]![Sales by Year DECLARE @D_START datetime
Dialog]![BeginningDate] DateTime, DECLARE @D_STOP datetime
[Forms]![Sales by Year
Dialog]![EndingDate] DateTime; SET @D_START = '1/1/1994'
SELECT Orders.ShippedDate, SET @D_STOP = '1/1/2999'
Orders.OrderID, [Order
Subtotals].Subtotal, Format SELECT Orders.ShippedDate,
([ShippedDate],’yyyy’) AS [Rok] Orders.OrderID, [Order Subtotals].Subtotal,
cast(year(Orders.ShippedDate)as
FROM Orders INNER JOIN [Order
nvarchar(4)) as Rok
Subtotals] ON Orders.OrderID=[Order
FROM Orders INNER JOIN
Subtotals].OrderID
[Order Subtotals] ON
WHERE (((Orders.ShippedDate) Is Not Orders.OrderID = [Order Subtotals].OrderID
Null And (Orders.ShippedDate) WHERE (Orders.ShippedDate IS NOT NULL)
Between Forms![Sales by Year AND (Orders.ShippedDate BETWEEN
Dialog]![BeginningDate] And @D_START AND @D_STOP)
Forms![Sales by Year
Dialog]![EndingDate]));
Do czego przenosić obiekty
Access MS SQL
► Kwerenda ► Widok
► Kilka kwerend ► Procedura
uruchamianych
makrem
► Kwerenda ► Procedura
Parametryczna
► Dynamiczna ► Dynamiczna
kwerenda kwerenda
generowana z VBA przekazująca
(Dialekt JET) (Dialekt T-SQL)
Migracja użytkowników
► Brak możliwości bezpośredniego importu
użytkowników i grup z pliku System.mdw
► W razie potrzeby można importować te
informacje za pomocą odpowiednio
spreparowanego SQL-a:
SELECT DISTINCT Accounts.Name
FROM MSysAccounts AS Accounts IN ‘D:\System.mdw'
WHERE (((Accounts.Name)<>'Creator' And (Accounts.Name)<>'Engine')
AND ((Accounts.FGroup)=0));
UPDATE OPENQUERY(AccessSource,
'select * from Employees')
SET Title = 'test'
WHERE (EmployeeID = 2)