MSDE Programmierung Tilo Böttcher, Technology Specialist [email protected] Microsoft GmbH Agenda Access 2000 Client/server Entwicklung Native SQL Server Integration Erstellung von Datenprojekten (*.adp) Unterschiede zu MDBs Tipps and Tricks Optimierung der Client/Server Performance Generelle Performancefestlegungen Client/Server Performance Tipps Agenda Access 2000 Client/server Entwicklung Native SQL Server Integration Erstellung von Datenprojekten (*.adp) Unterschiede zu MDBs Tipps and Tricks Optimierung der Client/Server Performance Generelle Performancefestlegungen Client/Server Performance Tipps Unterschiedliche Dateiformate MDB: Datei/Server Jet 4.0 Datenbankobjekte (Tabellen, Abfragen etc.) Programmobjekte (Formulare, Berichte etc.) ADP: Client/Server Neu! ADP (SQL Server 6.5 und 7.0, MSDE 1.0) Programmobjekte (Formulare, Berichte etc.) SQL Server Connection Datei/Server vs. Client/Server Client Datei/ Server Access Jet Server Netzwerk Client Client/ Server Access OLEDB .MDB Datei Server Netzwerk SQL Server .MDF Datei Access Datenprojekte (.ADP) Access 2000 Projekt SQL Server Datenbank Verbindung des Access Projekts mit der SQL Datenbank OLE DB Datenbankobjekte aus der SQL Datenbank Datenbankobjekte im Access Projekt gespeichert Native OLEDB Datenschicht Access 97 Access 2000 Access Access Jet OLEDB ODBC SQL Server SQL Server OLEDB Datenschicht Skalierbarkeit und Performance Snapshot Cursor Jede Abfrage kommt nur einmal auf den Server Jet/ODBC benutzt key-set Cursors • Hit 1: Primärschlüssel auslesen • Hits 2-N: Stapelweises Auslesen der Datensatzreihen Server-side Query Processor Minimierung des Datenverkehrs über das Netzwerk Natives Interface zum SQL Server Integrierte Entwicklungswerkzeuge Create/Drop database Tabellen Beziehungen Views Stored Procedures Trigger Access Entwicklungsumgebung Formulare Berichte Wizards Visual Basic® Umgebung Neue Client/Server Eigenschaften Row Limit Server Filter Access 2000 Entwicklungstools Demo Access 2000 Development Tools Agenda Access 2000 Client/server Entwicklung Native SQL Server Integration Erstellung von Datenprojekten (*.adp) Unterschiede zu MDBs Tipps and Tricks Optimierung der Client/Server Performance Generelle Performancefestlegungen Client/Server Performance Tipps Datentypen Jet SQL Text varchar, nvarchar, char, nchar Memo text, ntext AutoNumber Identity Columns Currency money, smallmoney Date/Time datetime, smalldatetime Yes/No bit OLE Object image Hyperlink <kein Äquivalent> Long Integer int Integer smallint Double, Single float, real Tabellen und Beziehungen Trigger Daten Update, Einfügen und Löschen Events Nur auf dem SQL Server Kaskadierte Update- und Löschvorgänge Jet-Engine: native Unterstützung SQL Server: unter Benutzung von Trigger Einschränkungen Jet hat Validierungsschema für Tabellen und Spalten (eine per ~) SQL Server hate Tabellenbeschränkungen (mehrere per ~) Abfragen, Sichten, und Gespeicherte Prozeduren Sichten SELECT Abfragen kein Order By keine Parameter Gespeicherte Prozeduren SELECT und Aktionsabfragen TSQL Flußkontrolle (IF, WHILE, etc.) Keine nested ~ Parameter Explizite Parameter Parameter direkt mit einer Abfrage verbinden Bei Jet und SQL Server möglich Implizite Parameter Jet: Unbekannter Bezeichner = Parameter SQL Server: Unbekannter Bezeichner = Fehler Namenskonvention Jet: läßt lange Namen zu SQL: keine Leerzeichen oder Spezialzeichen SQL Syntax Jet Zeichenketten Datum Wildcard (mehrere) Wildcard (ein Zeichen) Wildcard (Negation/Nicht) SQL "STRING" 'STRING' #01.05.2000# '01.05.2000' LIKE "a*" LIKE 'a%' LIKE "a?" LIKE 'a_' J[!i]m J[^i]m Wildcard (Zahl) # 0/-1, Logisch/Bit True/False, Yes/No Abtrennung/Ver "J" & "im" bindung [0-9] 0/1/NULL 'J' + 'im' Programmierumgebung MDB VBA ADP Client - VBA Server - TSQL Update von Daten Definition eines Primärschlüssels ist Voraussetzung Um einen Join zu aktualisieren müssen die Unikat Tabellen Primärschlüssel der Unikat Tabellen bekannt sein Was ist eine unikate Tabelle? 1-n Tabelle in einem Join Tabelle, deren Primärschlüssel eine Reihe im Result-Set eindeutig bestimmt Es lassen sich nur Unique Tables aktualisieren Resynchronisation von Reihen Nach einem Update resynchronisiert Access automatisch die Reihe um Serverseitige Ausdrücke und Aktualisierungen eines Join Feldes bestimmen zu können Primärschlüssel der Unique Table wird benötigt Sichten Projeziert Primärschlüssel der Unique Table Stored procedures Müssen ein benutzerspezifisches resync-Kommando unterstützen Update über Tabellen Alle Updates werde in Tabellen vorgenommen Rechte für das Update müssen vorhanden sein Update Rechte Select (nach WHERE Bedingungen) Sicherheit von Views Zusicherung von Update Rechten auf eine Tabelle • Trigger um nicht autorisierte zu blocken nutzen Zusichern eines Select auf die gesamte Tabelle Select auf die Primärschlüssel und timestamp field zusichern Server Filter in Formularen Neue Eigenschaft in ADP Dateien Kein Datensatzzugriff bei Öffnen des Formulars Benutzer können Filter in Formularen definieren Filter werden auf den Server in einer WHERE Bedingung übertragen Gefilterte Datensätze werden an den Client zurückgegeben Vermeidung von Zugriffsverzögerungen Für beste Performance keine großen Text- oder BildFelder zurückgeben Anzeige nur wen angefordert Trick: Unterformular benutzen • Hauptformular zeigt nicht behindernde Daten an • Unterformular zeigt größere Datenausschnitte an • Es werden nur Daten zurückgegeben, die im Formular erscheinen sollen Migration von MDB nach ADP (DAO nach ADO :-)) Voraussetzungen im letzten TechTalk (auch Access 97 Migration Wizard) Access 2000 Upsizing Assistent Tabellen Abfragen (nur ADP) MDB mit verbundenen Tabellen vs. ADP Verbundene Tabellen: einfachste Integration ADP: beste Skalierbarkeit und Performance Data Transformation Services Agenda Access 2000 Client/server Entwicklung Native SQL Server Integration Ersatellung von Datenprojekten (*.adp) Unterschiede zu MDBs Tipps and Tricks Optimierung der Client/Server Performance Generelle Performancefestlegungen Client/Server Performance Tipps Optimierung der Leistung Allgemeine Regeln RAM, RAM, RAM, Prozessor, Plattenplatz Oft ist das Netzwerk der Flaschenhals Verringern der zurückgegebenen Datenreihen Verringern der Spalten (sinnvolle Auswahl mit WHERE) Weniger Funktionen integrieren Server Skalierbarkeit Minimieren von Round Trips vom Server Weniger Datenbewegung Weniger Daten in Formularen anfordern WHERE Bedingungen nutzen! Text und Bildfelder nur bei Bedarf nutzen/anzeigen Große ComboBocen vermeiden (alle Städte von Deutschland ) Statische Daten lokal cachen • Vorsicht vor nicht aktuellen Daten! Probleme mit verbundenen Tabellen Heterogene Joins Vermeidung benutzerdefinierter Funktionen • Stored Procedures benutzen Weniger Funktionen In ADO Code Read only ist schneller Forward only ist schneller Wiederverwendung von Connections ist schneller MSDE Entwicklung Demo Aufbau und Deployment einer MSDE Lösung MSDN wichtige Quellen für Entwickler MSDN Programm Abonnement Online Informationen Mitgliederprog ramme Publikationen Training, Veranstaltung en und Kongresse Library, Professional, Universal (European Pack(1)) auf CD, DVD oder Web verfügbar MSDN Online, MSDN Flash MSDN Business Connection, MSDN User Groups MS Journal, MSDN News MSDN Training, PDC, TechEd, TechTalk Informationen von Microsoft Press http://www.microsoft.com/germany/mspress Datenbankprogrammierung mit Visual Basic 6 Autor: Walter Doberenz, Thomas Kowalski ISBN: 3-86063-485-2 Umfang: 633 Seiten Preis: 79,00 DM ADO-Programmierung Autor: David Sceppa ISBN: 3-86063-618-9 Umfang: 384 Seiten Preis: 79,00 DM Access 2000 Programmierung Autor: Doberenz/Kowalski ISBN: 3-86063-471-2 Umfang: 924 Seiten Preis: 98,00 DM VB 6 Training Original MCSD Training Autor: MS ISBN: 3-86063-905-6/297-3 Preis: 98,00/119,00 DM Links und Newsgroups http://www.microsoft.com/germany/msdn/techtalk http://www.microsoft.com/data http://msdn.microsoft.com/library http://www.microsoft.com/AccessDev/ http://www.vba-magazin.de/ http://www.basicworld.com/ Newsgroups Server msnews.microsoft.com microsoft.public.de.germany.entwickler.techtalk This document is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS DOCUMENT. 2000 Microsoft Corporation. All rights reserved. Companies, names, and/or data used in screens and sample output are fictitious, unless otherwise noted. Microsoft, Windows, and Windows NT are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries. Other product and company names mentioned herein may be the trademarks of their respective owners.