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.