Vortrag von B.Schober und T.Kowoll “Access

Werbung
Access-2-SQL-Server
die Unvollendete …
(Migration)
Thomas Kowoll
Björn Schober
17.05.2014
Erfahrungsbericht
Bitte beachten: Wir sind Anfänger! - Learning by testing/presenting
Blöcke:
• „Umgebungsvariablen“
– SSMA-A SQL Server Migrations-Assistenten für Access 5.3
– SQL-Server 2012 (inkl. SQL-Server Profiler = nicht in Express-Edition)
– MS Access 2010
• Objekt der Leidenschaft: Klassenbuch-Anwendung (Front-/Backend,
Backend als Replikat)
• SSMA – Backend- Tabellen migrieren - ohne/mit link-Tables
• SSMA – Frontend-Abfragen migrieren
• Analyse im SQL-Server-Profiler Vergleich
• Parameter-Abfrage
SQL-Server-Konfiguration
• Protokolle für SQL-Server Netzwerkkonfiguration
TCP/IP als Dienst starten
• Für SQL-Server-Profiler: SQL Native Client –
Clientprotokolle TCP/IP aktivieren
• Ohne Primär-Schlüssel kein Update
• Bei Änderung des Datentyps:
Extras-Optionen-Designer-“Speichern von Änderungen
verhindern, die die Neuerstellung einer Tabelle erfordern“
auf ‚nein‘ setzen.
ACHTUNG: Gefahr von Datenverlust
Nur temporär/Entwicklungsphase deaktivieren!
Ausgangslage:
Klassenbuch-Anwendung
• Stundenplan -> Klassenbuch -> Dozenten tragen
ein … auch Versäumnisse
• Gibt‘s doch schon! Aber nicht so:
– Mehrere Berufsbilder in einem Kurs
– Berichtshefte
– Soll-/Ist-Lehrplan
• Performance zu gering Lösungsansatz: Front- und Backend mit Replikation
SSMA for Access 5.3 (32 bit!)
Vorbereitung
•
Feldtypen-Entsprechungstabellen Tools – Project-Settings – Type Mapping, z.B. Datum  datetime2
•
SQL-Server-Connect WICHTIG: Entweder „localhost“ oder servername/instanzname --- sonst laaaaange Suche
1. Wizard durchlaufen: Tabellen aus dem Backend
–
–
Ohne Link-Tables
mit Link-Tables
•
•
•
•
–
Umbenennung der Tabellen im Backend in SSMA$(Tabellenname)$local
Link auf Tabellen im SQL-Server angelegt
(ohne „dbo“ im Präfix)
Lokale Anbindung
Keine Änderung im Frontend nötig
Protokoll genau durchgehen
•
Arten der Einträge
–
–
–
•
•
–
Hinweise: Timestamp-Felder werden automatisch erstellt (Präfix „SSMA“), keine Standardwerte hinterlegt, E-Mail als
Textfelder (nicht als „Hyperlink“), Replikationsspalten werden nicht übernommen.
Warnungen: Leerzeichen, Bindestriche, Spaltenname „E-Mail“, Standardwert bei Ja/Nein-Felder
Fehler
Klick auf Protokoll-Einträge bewirkt die Darstellung der Tabelle
Link converted tables: Synchronisationsfehler bei Replikationsspalten und bei Conflict-Tabellen
Was passiert mit den Systemspalten?
2. Wizard-Durchlauf: Abfragen aus Frontend
Performance analysieren:
SQL-Server-Profiler
s. Kap. 5 aus „Access und SQL-Server“
• SQL-Server-Profiler: Nicht in der ExpressEdition vorhanden und ist abgekündigt
• Alternative: XEvent = Zukunft (Verwaltung –
Erweiterte Ereignisse)
Parameter-Abfrage
Pass-Through-Abfrage via VBA erstellen
– Connect
– Stored Procedure auf dem SQL-Server
– Parameter
Public Function SPRecordsetMitParameter(strStoredProcedure As String,
strVerbindungszeichenfolge As String, ParamArray varParameter() As Variant) As
DAO.Recordset
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim strParameter As String
Set db = CurrentDb
Set qdf = db.CreateQueryDef("")
strParameter = Parameterliste(varParameter)
With qdf
.Connect = strVerbindungszeichenfolge
.SQL = "EXEC " & strStoredProcedure & " " & strParameter
Set SPRecordsetMitParameter = .OpenRecordset
On Error GoTo 0
End With
Set db = Nothing
End Function
Ohne dbo-Präfix
Public Sub Remove_DBO_Prefix()
Dim SQL As String
Dim DB As database
Dim RS As Recordset
SQL = “SELECT Name FROM MSysObjects WHERE (((Left([Name],4))=’dbo_’));”
Set DB = CurrentDb()
Set RS = DB.OpenRecordset(SQL)
If RS.EOF = False Then
RS.MoveFirst
Do Until RS.EOF
DoCmd.Rename Mid(RS!name, 5, 100), acTable, RS!name
RS.MoveNext
Loop
RS.Close
End If
End Sub
Code-snippet: Link 2 SQL
Public Sub TabellenRelink (tblName As String, strNewLink As String)
' ------------------------------------------------------' Diese Funktion ändert den Link auf die Tabelle ‚tblName‘.
' ------------------------------------------------------Dim tdfLoop
Dim NewName As String
For Each tdfLoop In CurrentDb().TableDefs
If tdfLoop.Name = tblName Then
tdfloop.Connect = strNewLink
tdfloop.RefreshLink
Exit For
End If
Next tdfLoop
End Sub
Bsp. für ConnectString :
ODBC;Description=SQL-Server BE;DRIVER=SQL Server;SERVER=KOWOLL-THINK14;Trusted_Connection=Yes;APP=Microsoft Office 2010;DATABASE=KB1
Empfehlungen
• Developer-Version vom MS SQL-Server 2012
kostet ca. 60 EUR, sie ist sehr leistungsstark
und enthält alle wichtigen Features.
• Buchtipp: Jungbluth und Minhorst „Access
und SQL Server“ gehen sehr detailliert und
praxisorientiert auf das Thema Migration ein.
Herunterladen