1 / 35

Datenbankprogrammierung von DAO nach ADO Tilo Böttcher, Technology Specialist Hans Brender, Presales Consultant tiloboe

Datenbankprogrammierung von DAO nach ADO Tilo Böttcher, Technology Specialist Hans Brender, Presales Consultant tiloboet@microsoft.com Microsoft GmbH. Von DAO nach ADO. Agenda Von ISAM und RDBMS? DAO vs. ADO, ADOX und JRO Tuning und Objektorientierung Code-Migration und Fehlerquellen.

dianne
Download Presentation

Datenbankprogrammierung von DAO nach ADO Tilo Böttcher, Technology Specialist Hans Brender, Presales Consultant tiloboe

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Datenbankprogrammierung von DAO nach ADOTilo Böttcher, Technology SpecialistHans Brender, Presales Consultanttiloboet@microsoft.comMicrosoft GmbH

  2. Von DAO nach ADO • Agenda • Von ISAM und RDBMS? • DAO vs. ADO, ADOX und JRO • Tuning und Objektorientierung • Code-Migration und Fehlerquellen

  3. IE DHTML HTML 3.2 VB 3-Tier VB 2-Tier Client RDS/HTTP RDS/DCOM ADO/OLEDB IIS IIS/ASP Middle Tier Business Objects ActiveX Data Objects (ADO) OLE DB Provider for SQL Server SQL Server Data Von DAO nach ADO warum ein Wechsel nötig ist/sein wird, mehrschichtige Applikationen

  4. DirectoryService Select top 10 SS.customer_ name, SS.sales, Excel.sales_plan, Oracle.DSO, Mail.call_reports, Access.Entertainment_budget From SS.cust_sales, Excel.budget_worksheet, Oracle.receivables, Mail.my_mail_folder, Access.Entertainment Where SS.sales and SS.cust = Excel.cust and SS.cust = Oracle.cust SS.cust = Mail.cust SS.cust = Access.cust Order by SS.sales Datenbank SQL 7.0 Query Processor Spreadsheet OLE DBInterface Photos Mail Landkarten Dokumente Von DAO nach ADO warum ein Wechsel nötig ist/sein wird, verteilte und heterogene Daten

  5. Client Tier • MD ActiveX Controls • MD Erweiterung für OLE DB • Office Schnittstellen • 3rd Party Clients OLEDB/ADO • OLAP Server Tier • MD Daten-Modellierung • MD Calculation Engine • Multidimensionaler Cache OLAPServer • Data Warehouse Tier • DW Management • Plato MD Cache (HOLAP) • SQL Server (ROLAP) • 3rd Party Datenspeicher OLEDB/ODBC Von DAO nach ADO warum ein Wechsel nötig ist/sein wird, Analyse zur Laufzeit online/offline - OLAP

  6. Von DAO nach ADO • Agenda • Von ISAM nach RDBMS? • DAO vs. ADO, ADOX und JRO • Tuning und Objektorientierung • Code-Migration und Fehlerquellen

  7. Von DAO nach ADOVon ISAM nach RDBMS? • ISAM-Dateien (Indexed Sequential Access Method) Jet/Access, Lotus • RDBMS (Relationelles DatenBank Management-System)SQL

  8. Von DAO nach ADOWarum gerade ADO? • Vereinfachtes Objektmodell via OLE DB • Verwendung von VARIANTS (VB oder Type-Mapping) • Bei Benutzung von Visual C++ #import Methode verwenden • Neue ADO Komponenten zur einfachen Benutzung • Optimiert für Visual Basic • Speichermanagement verbessert durch Aufspaltung in mehrere Komponenten • Bestimmung der Datenlokalität, Speicherverwendung und Datentypen

  9. Applikations-Schnittstelle ADO ODBC Direct DAO RDO OLE DB JET ODBC API RDBMS SQL 7.0 Von DAO nach ADOVon ISAM nach RDBMS? Warum gerade ADO? ADO ADOX JRO

  10. Von DAO nach ADOVon ISAM nach RDBMS? SQL Datenbanken im Vergleich

  11. Von DAO nach ADOVon ISAM nach RDBMS? Access 2000 ADP Objekte, ein Kompromiss beim Umstieg? • Tabellen • Sichten • Datenbankdiagramme • Gespeicherte Prozeduren • Formulare/Berichte • Seiten • Makros • Module

  12. Von DAO nach ADOVon ISAM nach RDBMS? Access 2000 ADP Objekte, ein Kompromiss beim Umstieg? • MSDE / Desktop unterstützt nicht: • Parallele Abfragen • Planung im Fibermodus • Read-Ahead-Scans • Hash- und Mergeverknüpfungen • Fail-Over-Cluster • Erweiterungsspeicher

  13. Von DAO nach ADO • Agenda • Von ISAM nach RDBMS? • DAO vs. ADO, ADOX und JRO • Tuning und Objektorientierung • Code-Migration und Fehlerquellen

  14. Eigenschaften: Scrolling cursors Fabricated data caches Disconnected caching Rich data-oriented services Sort, filter, find Multiple-tier deployment & configuration Remoting of data via HTTP and DCOM Business object integration persistent RecordSets (auch XML >= 2.1) Architektur: Connection Errors Recordset Fields Command Parameters Von DAO nach ADODAO vs. ADO, ADOX und JROEin kleiner ADO Überblick

  15. Eigenschaften: ADO ist sprachunabhängig, da als COM inproc Server implementiert (VB, VC++, VJ++, ASP ...) Zugriff auf unterschiedlichste relationale und nicht relationale Daten (SQL-Server, Oracle, DB2, Access, Active Directory, Index Server ...) Abstraktion erfolgt über den unterliegenden OLE DB Provider; ADO Programming Model bleibt gleich (Robust gegen Änderungen) Von DAO nach ADODAO vs. ADO, ADOX und JROEin kleiner ADO Überblick

  16. Von DAO nach ADODAO vs. ADO, ADOX und JROEin kleiner ADO Überblick • ADO 2.0 • Shipped mit Visual Studio 6.0 • Shipped mit NT 4.0 Service Pack 4 (2.0 SP1, kein standalone Setup) • ADO 2.1 • Shipped mit SQL Server 7.0 • Shipped mit Office 2000 • Dokumentation nur mit Office 2000 • Dokumentation Online unter msdn.microsoft.com\library • ADO 2.5 • Shipped mit Windows 2000 • Shipped als MDAC 2.5 (derzeit nur US) • www.microsoft.com\data für Updates und News zu UDA

  17. Von DAO nach ADODAO vs. ADO, ADOX und JRO, die wichtigsten ADO Eigenschaften (2.1) • ADO • Data Source Links • Persistence in XML • Client Cursor resync und auto-resync • Dynamic Properties • Index “on the fly” • ADOX • Für Schema Erzeugung und Manipulation (DDL) und Security • DDL als First Class Objekte (Schema Manipulation auch via Execute möglich) • Auf Microsoft Access resp. JET fokusiert • Zugang zu DAO Objekten über ADO Programming Model • JRO • Nur ACCESS resp. JET/DAO • Replica erzeugen und synchronisieren • Replica Priority • CompactDatabase mit Passwort Proctection und Encryption • JET Cache Refresh • Sync. zwischen MDB und SQL Server Publication möglich

  18. Von DAO nach ADODAO vs. ADO, ADOX und JRO • Bereiche • Öffnen der Datenbank • Datenmanipulation • Anlegen und Bearbeiten der Datenbankschema • Sicherheit • Replikation • Fehler(teufel) abfangen

  19. Von DAO nach ADODAO vs. ADO, ADOX und JRO; Öffnen der Datenbank DAO ADO Sub OpenJetDatabase() Dim db As DAO.Database Set db = DBEngine.OpenDatabase("C:\Nwind.mdb") db.Close End Sub Sub OpenJetDatabase() Dim cnn As New ADODB.Connection cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Nwind.mdb;" cnn.Close End Sub Sub OpenSecuredDatabase() Dim wks As DAO.Workspace Dim db As DAO.Database DBEngine.SystemDB = "nwindsysdb.mdw" Set wks = DBEngine.CreateWorkspace("", "Admin", "password") Set db = wks.OpenDatabase("c:\nwind.mdb") End Sub Sub OpenSecuredDatabase() Dim cnn As New ADODB.Connection cnn.Provider = "Microsoft.Jet.OLEDB.4.0" cnn.Properties("Jet OLEDB:System database") = "nwindsysdb.mdw" cnn.Open "Data Source=c:\nwind.mdb;User Id=Admin;Password=password;" End Sub Sub DAOOpenISAMDatabase() Dim db As DAO.Database Set db = DBEngine.OpenDatabase("C:\Sales.xls", _ False, False, "Excel 5.0;") db.Close End Sub Sub OpenISAMDatabase() Dim cnn As New ADODB.Connection cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data _ Source=C:\Sales.xls;Extended Properties=Excel 5.0;" cnn.Close End Sub

  20. Von DAO nach ADODAO vs. ADO, ADOX und JRO; Datenmanipulation DAO ADO Sub OpenRecordset() Dim db As DAO.Database Dim rst As DAO.Recordset Dim fld As DAO.Field 'Open the database Set db = DBEngine.OpenDatabase("C:\nwind.mdb") 'Open the Recordset Set rst = db.OpenRecordset("Select * from Customers where Region" & _ ' = WA'", dbOpenSnapshot, dbOpenForwardOnly) ' Display the records in the debug window While Not rst.EOF For Each fld In rst.Fields Debug.Print fld.Value & ";"; Next Debug.Print rst.MoveNext Wend 'Close the recordset rst.Close End Sub Sub OpenRecordset() Dim cnn As New ADODB.Connection Dim rst As New ADODB.Recordset Dim fld As ADODB.Field ' Open the connection cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\nwind.mdb;" ' Open the forward-only, read-only recordset rst.Open "Select * from Customers where Region = 'WA'", cnn, _ adOpenForwardOnly, adLockReadOnly ' Display the records in the debug window While Not rst.EOF For Each fld In rst.Fields Debug.Print fld.Value & ";"; Next Debug.Print rst.MoveNext Wend 'Close the recordset rst.Close End Sub

  21. Von DAO nach ADODAO vs. ADO, ADOX und JRO; Anlegen und Bearbeiten von Datenbankschemata DAO ADOX Sub CreateDatabase() Dim db As New DAO.Database Set db = DBEngine.CreateDatabase "C:\new.mdb;", dbLangGeneral, End Sub Sub CreateDatabase() Dim cat As New ADOX.Catalog cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\new.mdb;" End Sub Sub DAOListTables() Dim db As DAO.Database Dim tbl As DAO.TableDef ' Open the database Set db = DBEngine.OpenDatabase("C:\nwind.mdb") ' Loop through the tables in the database and print their name For Each tbl In db.TableDefs Debug.Print tbl.Name Next End Sub Dim cat As New ADOX.Catalog Dim tbl As ADOX.Table ' Open the catalog cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=c:\nwind.mdb;" ' Loop through the tables in the database and print their name For Each tbl In cat.Tables If tbl.Type <> "VIEW" Then Debug.Print tbl.Name Next End Sub

  22. Von DAO nach ADODAO vs. ADO, ADOX und JRO; Anlegen und Bearbeiten von Datenbankschemata DAO ADOX Sub DAOCreateTable() Dim db As DAO.Database Dim tbl As DAO.TableDef 'Open the database Set db = DBEngine.OpenDatabase("C:\nwind.mdb") ' Create a new TableDef object. Set tbl = db.CreateTableDef("Contacts") With tbl ' Create fields and append them to the new TableDef object. ' This must be done before appending the TableDef object to ' the TableDefs collection of the database. .Fields.Append .CreateField("FirstName", dbText) .Fields.Append .CreateField("LastName", dbText) .Fields.Append .CreateField("Phone", dbText) .Fields.Append .CreateField("Notes", dbMemo) End With ' Add the new table to the database. db.TableDefs.Append tbl db.Close End Sub Dim cat As New ADOX.Catalog Dim tbl As New ADOX.Table ' Open the catalog cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\nwind.mdb;" ' Create a new TableDef object. With tbl .Name = "Contacts" ' Create fields and append them to the new TableDef ' object. This must be done before appending the ' TableDef object to the TableDefs collection of the ' database. .Columns.Append "FirstName", adVarWChar .Columns.Append "LastName", adVarWChar .Columns.Append "Phone", adVarWChar .Columns.Append "Notes", adLongVarWChar End With ' Add the new table to the database. cat.Tables.Append tbl Set cat = Nothing End Sub

  23. Von DAO nach ADODAO vs. ADO, ADOX und JRO; Sicherheit DAO ADOX Sub SetDatabasePassword() Dim db As DAO.Database Set db = DBEngine.OpenDatabase("C:\nwind.mdb", True) db.NewPassword "", "password" db.Close End Sub Sub SetDatabasePassword() Dim cat As New ADOX.Catalog cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=nwind.mdb;Mode=" & adModeShareExclusive cat.Modify "Jet OLEDB:Database Password=password;" End Sub Sub CreateUser() Dim wks As DAO.Workspace ' Open a workspace DBEngine.SystemDB = "c:\nwindsysdb.mdw" Set wks = DBEngine.CreateWorkspace("", "Admin", "password") ' Create the user and append it to the Users collection wks.Users.Append wks.CreateUser("User1", "User001", "password") End Sub Sub CreateUser() Dim cat As New ADOX.Catalog ' Open the catalog, specifying the system database to use cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\nwind.mdb;" & _ "Jet OLEDB:System database=C:\nwindsysdb.mdw;" & _ "User Id=Admin;Password=password;" ' Create the new user and append it to the users collection cat.Users.Append "NewUser", "password", "User001" End Sub

  24. Von DAO nach ADODAO vs. ADO, ADOX und JRO; Replikation DAO ADO/JRO Sub MakeDesignMaster() Dim dbsNorthwind As DAO.Database Dim prpNew As DAO.Property ' Open database for exclusive access. Set dbsNorthwind = DBEngine.OpenDatabase("Northwind.mdb", True) With dbsNorthwind ' If Replicable property doesn't exist, create it. ' Turn off error handling in case property exists. On Error Resume Next Set prpNew = .CreateProperty("Replicable", dbText, "T") .Properties.Append prpNew ' Set database Replicable property to True. .Properties("Replicable") = "T" .Close End With End Sub Sub MakeDesignMaster() Dim repMaster As New JRO.Replica ' Make the Northwind database replicable. ' If successful, this will create a connection to the ' database. repMaster.MakeReplicable "Northwind.mdb", False Set repMaster = Nothing End Function

  25. Von DAO nach ADO • Agenda • Von ISAM nach RDBMS? • DAO vs. ADO, ADOX und JRO • Performancetuning und Objektorientierung • Code-Migration und Fehlerquellen

  26. Von DAO nach ADOPerformance • Cursor • Connection “rules”. Wird für einen RecordSet keine “CursorLocation” gesetzt erhält dieser die Einstellung auf Connection Basis • Für remotable Recordsets muss dies “adUseClient” sein • Bei incompatiblen Cursoreinstellungen versucht der Provider einen “best guess” zu machen. • Default: • Connection --> adUseServer • Recordset --> adUseServer • Scroll: adOpenForwardOnly • Isolation: adLockReadOnly • Für Remotable • Connection --> adUseClient • RecordSet --> erhält Setting von Conncetion Object oder explizit setzten • Scoll: odOpenDynamic oder adOpenKeyset • Isolation: adLockBatchOptimistic

  27. Von DAO nach ADOPerformance • Connection • “Teuer”, vor allem bei Web Applikationen • Asynchron ist O.K. aber nicht für 3-Tier Applikationen • Connection Objekte sollten bei einer Web App nicht im Session Object abgespei-chert werden • Connection immer explizit erzeugen  “under the hood” Connections nicht poolable • Abhilfe • --> Connection Pooling

  28. Von DAO nach ADOPerformance • Command und Connection • Asynchrone Operationen (default ist synchron) • 3 Möglichkeiten • adAsyncExecute: ADO führt Command in einem zweiten Thread aus, über ExecuteComplete erfolgt die Notification • adAsynchFetch: Zweiter Thread, bei einem Fetch wird solange geblockt bis der Datensatz gelesen ist. • adUseClient als CursorLocation • adAsyncFetchNonBlocking: Niemals Blocking, wenn ein Fetch auf einen Datensatz erfolgt der noch nicht da ist, erfolgt eine MoveEOF; im nächsten Fetch werden dann die Daten vorhanden sein. • adUseClient als CursorLocation erforderlich

  29. Von DAO nach ADOPerformance • Commands • Beste Performance über Stored Procedures • Parameter im Code definieren (nicht über Refresh, extra Roundtrip zum Server) • Command Typ angeben • Asynchron wenn angebracht • adExecuteNoRecords • Prepare - Falls es Sinn macht • Wenn der Typ nicht angegeben wird, versucht ADO über “Try and Error” den Typ zu erkennen • Reihenfolge: aCmdText, adCmdTable, adCmdStoredProc, adCmdFile Set cmd.ActiveConnection = cnn ‘Opening a table directly cmd.CommandType = adCmdTable Set rst = cmd.Execute(“authors”) ‘Executing a proc that doesn’t return results cmd.CommandType = adCmdStoredProc + adExecuteNoRecords cmd.Execute “sp_insert”

  30. Benutzerschicht Form1 Dim obj01 as new class1Dim obj02 as new class3 Form2 Dim obj01 as new class1Dim obj02 as new class2 Klasse 1 Klasse 2 Klasse 3 Anwendungsschicht Von DAO nach ADOObjektorientierung • Kapselung von logischen Einheiten in Klassen – keine direkte Datenbindung an GUI-Elemente (siehe Demo) • Arbeit mit zwei oder drei Schichten • Gepufferter Zugriff auf typisierte Daten

  31. Von DAO nach ADO • Agenda • Von ISAM nach RDBMS? • DAO vs. ADO, ADOX und JRO • Tuning und Objektorientierung • Code-Migration und Fehlerquellen

  32. Von DAO nach ADOCode Migration und Fehlerquellen DEMO

  33. Links und Newsgroups http://www.microsoft.com/germany/msdn/techtalk http://www.microsoft.com/germany/data http:// msdn.microsoft.com/library http://www.microsoft.com/AccessDev/ProdInfo/AUT97dat.htm http://www.vba-magazin.de/ http://www.basicworld.com/ Newsgroups Server msnews.microsoft.com microsoft.public.de.germany.entwickler.techtalk microsoft.public.de.germany.entwickler.techtalk.office2000

  34. Informationen von Microsoft Press http://www.microsoft.com/germany/mspress Artikel: Migrating from DAO to ADO (Using ADO with the Microsoft Jet OLE DB Provider) Alyssa Henry Msdn Library 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

  35. 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.

More Related