Access2 SQLServer die Unvollendete Migration Thomas Kowoll Bjrn

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 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 datetime 2 • 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 Express. Edition 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 SPRecordset. Mit. Parameter(str. Stored. Procedure As String, str. Verbindungszeichenfolge As String, Param. Array var. Parameter() As Variant) As DAO. Recordset Dim db As DAO. Database Dim qdf As DAO. Query. Def Dim str. Parameter As String Set db = Current. Db Set qdf = db. Create. Query. Def("") str. Parameter = Parameterliste(var. Parameter) With qdf. Connect = str. Verbindungszeichenfolge. SQL = "EXEC " & str. Stored. Procedure & " " & str. Parameter Set SPRecordset. Mit. Parameter =. Open. Recordset On Error Go. To 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 MSys. Objects WHERE (((Left([Name], 4))=’dbo_’)); ” Set DB = Current. Db() Set RS = DB. Open. Recordset(SQL) If RS. EOF = False Then RS. Move. First Do Until RS. EOF Do. Cmd. Rename Mid(RS!name, 5, 100), ac. Table, RS!name RS. Move. Next Loop RS. Close End If End Sub

Code-snippet: Link 2 SQL Public Sub Tabellen. Relink (tbl. Name As String, str. New. Link As String) ' ---------------------------' Diese Funktion ändert den Link auf die Tabelle ‚tbl. Name‘. ' ---------------------------Dim tdf. Loop Dim New. Name As String For Each tdf. Loop In Current. Db(). Table. Defs If tdf. Loop. Name = tbl. Name Then tdfloop. Connect = str. New. Link tdfloop. Refresh. Link Exit For End If Next tdf. Loop End Sub Bsp. für Connect. String : ODBC; Description=SQL-Server BE; DRIVER=SQL Server; SERVER=KOWOLL-THINK 14; Trusted_Connection=Yes; APP=Microsoft Office 2010; DATABASE=KB 1

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.
- Slides: 10