private Vorlesungsmitschrift (nicht offiziell) Datenbanken letzter Kurs nach DPO2000, Prof. Dr. U. Klug Fachhochschule Südwestfalen - Campus Iserlohn Frauenstuhlweg 31 58644 Iserlohn Dieses Skript wurde in der Vorlesung „Datenbanken“ bei Prof. Dr. Klug von mir getippt; der Inhalt wurde nicht durch Professoren geprüft und enthält ggf. einige syntaktische Fehler. Fehler, die Sie entdecken, teilen Sie mir bitte einfach per Kontaktformular auf www.ChristianSchlueter.de mit. Danke im Voraus, Christian Schlüter Stand: 2003-07-10 (www.ChristianSchlueter.de) 1 Inhaltsverzeichnis Seite 1 2 3 8 11 13 15 Kap. Inhalt, Titel .................. -.................. -.................. 01 .................. 02 .................. 03 .................. 04 .................. 05 Deckblatt Inhaltsverzeichnis Grundzüge Kategorien klassischer DB-Systeme Grundlagen zur Access-DB DB-Architekturmodell Objektorientierte SW-Entwicklung .................. 06 .................. 07 .................. 08 fehlt noch fehlt noch fehlt noch 20 21 24 27 32 37 50 51 .................. .................. .................. .................. .................. .................. .................. .................. Benutzersichten Formularverarbeitung mit MS-Access Erstellung von Berichten mit MS-Access Grundzüge SQL Grundlagen: relationales Modell Structured Query Language (SQL) Formularverarbeitung (Unterformulare) Transaktionen 52 .................. -- 09 10 11 12 13 14 15 16 Anhang - wichtige Begriffe und Abkürzungen (www.ChristianSchlueter.de) 2 Kapitel 1 - Grundzüge 1. Einführung in DB 1.1 Ausgangssituation Problemfelder in Daten- und Informationsmanagement (bereits ab 1950) wachsende Informationsmenge (als Problem) aufwendige Ablageorganisation (Problem: Mehrfachablage) Informationsgewinnung aus den Datenbeständen (lesen aus den gespeicherten Datensätzen) als Engpass (fehlende Strukturierung) zeitaufwendig, Information zu suchen; teilweise Zufallsergebnisse Verlust an Informationen (nicht genutzte Informationen mangels Zugriffsmöglichkeiten Alte Form von Informationsmanagment: Karteisystem (Kunden-, Lieferanten-, Personal-, Urlaubskartei) Ziele bei der Verwendung von DB: einfache Verwaltung und Pflege der Datenbestände (strukturierte Ablage von Informationen, übersichtliche Informationsdarstellung und übersichtliche Benutzerführung beim Auffinden von Infos) Aktualisierung von Daten erleichtern Fehler vermeiden Daten sollen korrekt und aktuell sein gezielte Abfragemöglichkeiten und komplexe Suchfunktionalitäten (Bereitstellung von Infos zur Entscheidungsfindung) verbessertes Auskunftswesen (statistische Auswertungen) Abbildung von Arbeitsabläufen Modellierung eines Ausschnitts der Realwelt bestehend aus Daten (Informationen und deren Bearbeitung (z.B. KFZ-Reparatur: Auftrag Werkstatt Arbeit Material (Lager ) Rechnung 1.2 Filesysteme als Vorläufer von DB-Systemen Datensatz: Folge von Feld-(Variablen-)Inhalten z.B. Müller, Harald, 14.02.48, Essen oder Kurbelwelle, Golf, 4/94, 3, 281.37 Inhalt einer Bildschirm- oder Druckerzeile Satzlänge: Daten: Datei: Anzahl der Zeichen in einem Datensatz Menge von logisch zusammenhängenden Datensätzen, z.B.: Ein-/Ausgabedateien bei Berechnung großer D.mengen Dokumentdateien von Textverarbeitungsprogrammen Sourcecodes Programmdateien (ausführbare Dateien) wird unterschieden in formatiert (Text) und unformatiert (binär) formatierte Datei: von Anwender lesbar (mit bloßem Auge) (www.ChristianSchlueter.de) 3 mit Texteditor erfasst bzw. änderbar Informationen in einem Zeichencode abgelegt, z.B. printf („%s %i“,“Summe: “, 217) Datei S u 5316 76 m 6D m 6D e 65 : 3A 20 2 32 1 31 7 37 Erzeugung einer Satzstruktur durch Vereinbarung spezieller Satzendefunktionen, z.B. CR/LF (Windows) oder LF (Unix) daher wird auch unter Unix eine WindowsDatei fehlerhaft formatiert (je eine Leerzeile) main() { printf(„Hello World“); } Compiler erkennt „“ als Satzende (bei C(++) egal) Bildschirmausgabe erkennt „“ als Satzende Dokumentverarbeitungsprogramme besitzen im Wesentlichen eine größere Auswahl an Steuerungszeichen, z.B. Absatz, ... unformatierte Datei: ausführbare Dateien Datei enthält Prozessanweisung; CR\LF nicht als Satzende interpretiert! aus dem Speicher ohne Konversion übertragene Daten, z.B. int i = 217, im Hauptspeicher (int besitzt 4 Bytes a 8 Bit): 3 x 0 Byte, 1101 1001 (oder HEX: E916 ) der Verzicht auf Konversion bietet sich an, wenn: Daten nicht mit bloßem Auge gelesen werden müssen Lese-/Schreibzugriffe zeitsparender ausgeführt werden sollen Konversionen können Rundungsfehler verursachen; z.B. 217.1 ist dual periodisch Satzlänge: sequentiell - Zugriff auf den n-ten Satz in einer Datei ist nur möglich, indem zuvor die n-1 davor liegenden Sätze gelesen (bzw. überlesen) werden; z.B.: (www.ChristianSchlueter.de) 4 - Bearbeitung des 144. Satzes (=Zeile) in einer Sourcecodedatei mit dem Editor erfordert das Lesen (vorwärts blättern) der 143 Vorgänger - Programmdateien werden in der darin enthaltenen Prozessorbefehlsfolge (Reihenfolge von Bytes) abgearbeitet direkt - Zugriff auf einen bestimmten Datensatz aus der Menge der in der Datei enthaltenen Sätze (ohne lesen der Vorgänger), z.B.: - feste Satzlänge (ähnelt einer Tabelle): Kname Kort Kplz FAMA Langen ... Klöckner ... ... . . . . . . . . . Kstrasse ... ... . . . Umzug bei FAMA Anschrift ändern, Dialog erfordert schnellen Zugriff Analoges Beispiel: Online-Buchungen (Bank, Lager, Konzerte) Prinzip: jeder Satz wird mit Identifikation versehen; z.B. Nummer, die die Position des Satzes in der Datei markiert. Beispiel: Die Sätze in obiger Tabelle sind nach Namen sortiert auszugeben ohne physische Position der Sätze innerhalb der Datei zu ändern. Idee: Die Sätze werden durchnummeriert in einer zusätzlichen Tabelle; jedes Tabellenglied hat die Form typedef struct { int index; char Kundenname[20];} //eindeutige lfd. Nr. //zugeordn. Daten Index: nach Namen sortierte Liste: FAMA Göhler Klöcker Rudovan 1 4 2 3 direkter Zugriff auf Ort von Rudovan: a) Suchen von Rudovan in sortierter Tabelle b) über Index direkter Zugriff auf Datensatz (www.ChristianSchlueter.de) 5 indizierte Dateien (indexsequentielle Datei; ISAM-Datei) - auf jeden Satz soll direkt zugegriffen werden können die Sätze der Datei sollen nach einem vorgegebenen Begriff geordnet sein Lösung: zur ursprünglichen Datei (mit vorläufiger Ordnung) wird eine Indextabelle wie im Beispiel angelegt, d.h. alle Datenzugriffe (update, insert, delete) von Sätzen erfolgen nur über Zugriffe über die Indextabelle Indextabelle: - auf Befehl neu anlegen - kann Array / verkettete Liste sein - wird in Datei gespeichert Die Indextabelle umfasst den/die Ordnungsbegriffe und die zugehörige Satzposition indizierte Dateien sind ein Modell für den prinzipiellen Aufbau einer "relationalen DB"! Sprechweise: indexsequentielle Bearbeitung von Dateisätzen Bearbeitung mehrerer Datensätze gemäß Ordnungsbegriffes. Filesysteme bilden: a) Generation (auf Band 1950-1960) b) Generation (auf Band 1960-1970) von DB-Systemen Sortierreihenfolge des Beispiel (Bibliotheksverarbeitung): Probleme: - hohe Redundanz von Dateien (Mehrfachspeicherung einzelner Dateien für Anwendungsprogramme) - Inkonsistenz (unabgestimmte Änderungen an einzelnen Dateien, z.B. Namensänderungen in Leserdateien, aber nicht in Ausleihdatei) - Inflexibilität (neue Arbeitsvorgänge, z.B. Verwaltung eines Fachbereichkatalogs erfordern neue Programme, obwohl Daten ähnlich zu „normalen“ Buchdaten) - Wartung der Anwenderprogramme (erforderlich bereits für kleine Änderungen in der Struktur der Datei) - Datenschutzproblem (www.ChristianSchlueter.de) 6 - (Authorisisation für Zugriff auf Daten und Programme) Datenaustausch (erschwert, da Datenstrukturen individuell festgelegt werden können Standards erforderlich) (www.ChristianSchlueter.de) 7 Kapitel 2 – Kategorien klassischer DB-Systeme 2.1 allgemeine Struktur Unterscheidung von Informationen in a) logisch (fachlich) b) physisch ((speicher-)technisch) Ziel: integrierte Verwaltung - verschiedene Informationsarten - unabhängige Verwaltung von Daten, Datenbeschreibung, Programmen Komponenten: - DBS (Datenbanksystem) - DB (Datenbank – Gesamtheit aller Dateien des Anwend.bereichs) - DD (Data Dictionary – Beschreibung von Struktur und Eigenschaften der Daten in der DB) - DBMS (Datenbank Management System – Verwaltung und zentrale Kontrolle der Dateibestände in der DB gemäß DD) DBS = DBMS + DD + nDB - - - DBS sorgt für zuverlässige Verwaltung Bereitstellung von Mechanismen zur Erhaltung von Konsistenz, Integrität, Unversehrtheit (kein Verlust / keine Verfälschung von Daten auf Grund technischer Fehler) unabhängige Verwaltung (Datenunabhängigkeit) (fachliche) Anwendungsprogramme und (technische) Programme des DBS getrennt, strukturelle Änderungen wirken sich nur dort aus, wo von Bedeutung einheitliche Beschreibung von Daten innerhalb des DBS komfortable Verwendung Zugriff auf DB über einheitliche Schnittstelle (ohne technische Daten) flexible Anwendung Datenzugriff mit speziellen Abfragesprachen, d.h. z.T. ohne Programmierung geschützte Verwendung (www.ChristianSchlueter.de) 8 - 2.2 Privatheit von Daten, Zugriffsrecht integrierte Verwendung DB redundanzarme Speicherung von Daten möglich unabhängige Verwendung von Daten in verschiedenen Anwendungsprogrammen Möglichkeit, verschiedene Sichten auf Teile der DB definieren zweistufige Arbeitsweise: 1. Datenauswahl, 2. Datenbearbeitung leistungsfähige Auswahlmechanismen (Anfrageproblem) effiziente Speicherstrategien für große Datenmengen Prärelationale Systeme logische Beschreibung physischer Strukturen durch Datenmodelle Festlegung dort: - Eigenschaften der Datenelemente - Struktur der Datenelemente - einzuhaltende Konsistentbedingungen - erlaubte Operationen zum Speichern, Auffinden, Ändern, Löschen von Datenelementen Syntax und Semantik eines Datenmodells wird beschrieben durch: DL – Definition Language ML – Manipulation Language Datenmodelle untergliedert in... hierarchisches Modell – Netzwerkmodell (3. Generation 1970-1980) Idee: Beschreibung der logischen Zusammenhänge von Daten mit Hilfe von Bäumen bzw. Graphen DBMS (Data Base Management System) verwaltet die „in bestimmter Weise“ vernetzten Daten !!! Heutzutage nur noch vereinzelt eingesetzt !!! 2.3 Relationale DB-Systeme falls DBS auf relationalem Datenmodell basiert rel. DBS (RDBS) (4. Generation, 1980-...) erste Eigenschaften: - einfaches konzeptionelles Modell (Relationen) - hohe physische Datenunabhängigkeit - sehr geeignet für mengenorientierte Verarbeitung Prinzip: Datenspeicherung in Form von Tabellen (www.ChristianSchlueter.de) 9 Beispiel: - Schlüsselattribut ist Sortierkriterium Schlüsselattribut kennzeichnet Datensatz eindeutig (Primärschlüssel) Tabelle ohne Schlüssel sequentielles Lesen der Sätze Anwendungsgebiete: - Buchhaltungssysteme (Lieferanten-, Kundenverwaltung, ...) - Bibliotheksverwaltung - Reservierungssysteme (Bahn, Konzert) - Banken / Versicherungen - Einwohnermeldewesen neue Gebiete: - Büroinformationssysteme (www.ChristianSchlueter.de) 10 Kapitel 3 - Grundlagen zur Access-DB Eigenschaften: - relationale DB - Office-Paket (MS) - netzwerkfähig (max. 255 Benutzer) - System für Zugriffsberechtigung - grafische Benutzeroberfläche - Expertenanwender - Wenignutzer 3.1 Aufbau der MS-DB Bestandteile: - Tabellen - Berichte (Darstellung von Tab.inhalten in (ausdruckbaren) Listen - Formulare (benutzerdefinierte Masken zur komfortablen Anzeige und Pflege einzelner Datensätze am Bildschirm - Abfragen (benutzerdefinierte Anfragen an die DB mit QBE (query by example) oder SQL Ergebnis: Tabelle 3.2 Einrichten einer neuen DB Menü Datei Neu ( im Praktikum) 3.3 Assistentengestützte Tabellenanlage schnelle, benutzergeführte Tabellenerstellung auf Grund vorhandener Tabellenstrukturen (geringfügige Anpassungen an den Tabellen möglich) 3.3.1 Import und Export von Daten Import / Export von Daten aus / in - andere Access-DB - andere MS-Produkte (Word, Excel, Paradox, FoxPro, ...) - gängige Datenformate, z.B. Textdateien Import Kopie der externen Daten in neue oder bestehende Tabellen; Beispiel für Import aus Textdatei formatierte Datei Voraussetzung: Typen in Datei müssen Typen der Felder in DB-Tabelle entsprechen! Variante 1: Dateiinhalt ist „Harry, Meier, 50898, Köln, 30.05.64, 4000 “ (alle Felder mit Trennzeichen wie Komma, Semikolon, o.ä. (www.ChristianSchlueter.de) 11 Variante 2: 8 12 5 20 Harry Meier 50898 Köln (nur Daten fester Breite verwenden) 2 30 2 2 ... 05 64 4000 Anwendung: a) Importdatei anlegen b) Datei externe Daten Importieren c) Datei angeben ... Importassistent Export Anwendung: a) Daten speichern unter... (Exportieren) b) in externe Datei oder DB c) Dateityp festlegen (Excel-, Textdatei, ...) d) Exportieren Anmerkungen: - Textdatei enthält zeilenweise die Sätze mit den Tabellenwerten - 1. Zeile enthält Spaltenbezeichnung der Tabelle - Datei „Schema.ini“ enthält Feldbeschreibungen 3.4 Berichterstellung Anwendungsgebiete: Listen verschiedener Art (Adress-, Tel.-, Teilnehmerlisten) Ergebnisse von Auswertungen (Statistiken, Diagramme, spezielle Sortierungen, Berechnungen, Gruppierung von Daten) Entwurfsmöglichkeiten Autobericht einspaltig, tabellarisch automatisch erzeugte Berichte im vordefinierten Layout - Berichtsassistent Werkzeug zur Benutzerunterstützung bei Berichterstellung (Frage nach Feldern, Sortieren, Layout, Stil, Positionierung) - manuelle Berichterstellung volle Gestaltungsfreiheit, aufwendig (www.ChristianSchlueter.de) 12 Kapitel 4 – DB-Architekturmodell Ziele einer DB-Anwendung: - Sammlung von Daten über einen kleinen Teil der Realwelt (z.B. Auftragsbearbeitung) zur Bearbeitung dortiger Vorgänge auf EDV-Anlage) Schichtenartige Datenbankarchitektur (Entwicklermodell) (ANSI / SPARC ´75) externe Ebene (Schema) (Benutzerschicht = USER INTERFACE) externes Modell = Sicht (View) auf Datenbestände, die Anwender sehen darf bzw. möchte externe Modelle unterscheiden sich in der Art der Präsentation (ggf. gleicher Datenbestände) Veränderung von Daten erfolgt durch DML (Data Manipulation Language); Programmiersprachen mit spezifischen Funktionen, embedded SQL, SQL verwaltet durch DB-Entwickler konzeptionelle Ebene (Schema) (log. Gesamtübersicht) Festlegung der Datenobjekte und Beziehungen zwischen den Daten, einschließlich der Verwendungsmöglichkeiten (zulässige Operationen, z.B. Änderungsverbote, Integritätsbedingungen, Zugriffsrechte) Spezifikation durch DDL (Data Definition Language) Verwaltung durch den DB-Entwickler interne Ebene (Schema) (physische Ebene) Beschreibung der physischen Datenorganisation im Speicher und den zugehörigen Zugriffsmöglichkeiten Verwaltung durch DB-Administrator, benutzt DAL (Data Administration Language) Festlegung von Zugriffs- und Integritätskontrollen Festlegung von Sicherheitsstrategien Überwachung von Systemauslastung und Laufzeitverhalten Tuning des Systems (hinsichtlich neuer Aufgaben) und DSDL (Data Storage Definition Language) Definition von Speicherstrukturen Tätigkeiten logisches Datenbankdesign definieren des konventionellen und externen Schemas physisches DB-Design, Administration und technischer Betrieb (www.ChristianSchlueter.de) 13 Modell in grafischer Darstellung (www.ChristianSchlueter.de) 14 Kapitel 5 – Objektorientierte SW-Entwicklung 5.1 Grundbegriffe des DB-Designs Def.: Entität individuelles und identifizierbares Objekt der Realwelt, dessen Existenz unabhängig von anderen Objekten ist Beispiel: - Hans Meier, Oststr. 6, Wilhelmshafen - Ausgabeder FAZ vom 14.11.00 Def.: Entitätstyp / Entitätsmenge Zusammenfassung von Entitäten mit gleichen Eigenschaften Beispiel: Kunde, Lieferant, Artikel Def.: Attribut beschreibt eine fachliche Eigenschaft, die allen Entitäten einer Entitätsmenge gemein ist Eigenschaften: - Name ( Eigenschaft) - Wertebereich, (zugelassene) mögliche Werte Def.: Beziehung beschreibt einen Zusammenhang zwischen Entitäten; Zusammenfassung gleichartiger Beziehungen zwischen Entitäten gleicher Entitätsmengen zu Beziehungsmengen; Beziehungen / Beziehungsmengen können Attribute haben. Mathematisches Konzept der Relation dient zur Darstellung von Entitäten, Entitätsmengen und ihrer Beziehungen (E. F. Codd, 1970) Def.: kartesisches Produkt Seien Ai, i{1,...n} ihre Wertebereiche, dann heisst die Menge aller Kombinationen ihrer Elemente ihr kartesisches Produkt [W(A1)xW(A2)x...xW(An)] Elemente des kart. Produkts heissen Tupel. Ist RW(A1) x... x W(An), dann heisst R Relation. Beispiel: A1 = R := individuelle Familienzustände R = W(A1)xW(A2) = {(M,le);(M,verh);(M,verw);(M,gesch); (W,le);(W,verh);(M,verw);(M,gesch)}; Bemerkung: (www.ChristianSchlueter.de) 15 jede Relation kann als Tabelle dargestellt werden. Spalten tragen Attributnamen, Zeilen sind Tupel: Beispiel: individuelle Familienstände Beispiel: Firma Geschlecht Familienstand M M M M W W W W le verh verw gesch le verh verw gesch Kurzname Colonia ... Name Colonia AG ... Adresse Köln ... Kurzmitteilung blablabla ... (vgl. Kapitel 2.3) Bemerkung: - Tabelle, Datenbank, Spalte, Zeile Darstellungsform, techn. Implementierung - Relation, Tupel, Attribut abstrakte Beschreibung - Identifikation von Relationen (Primärschlüssel, Key) ist Attribut oder eine minimale Attributkombination - die jedes Tupel einer Relation identifiziert - deren Wert sich während der Existenz des Tupels nicht ändert Schlüssel heisst minimal, wenn bei Weglassen eines Attributs ein Tupel nicht mehr eindeutig identifizierbar ist. Beispiel: a) Kunde (Kundennummer, Anrede, Name, Vorname, ...) b) Patient (Name, Vorname, Anschrift, Land, Vorwahl, Diagnose, ...) c) Patient (Name, Vorname, Geburtsdatum, Diagnose, Behandlungart, ...) Bemerkung: falls notwendig, künstlichen Schlüssel einführen (i.d.R. laufende Nummer) 5.2 Systembeschreibung und Datendefinition 5.2.1 Entity-Relationship-Diagramme (P. P. Chen, 1976) Ziel: Beschreibung der permanent gespeicherten Daten und ihrer Beziehungen untereinander; Analyse aus fachlogischer Sicht (www.ChristianSchlueter.de) 16 Bemerkung: - datenorientierte Modellierung - strukturierte Top-Down-Vorgehensweise zur Abbildung von Informationen im DBS Def.: Beziehung (Relationship) / Assoziation Eine Beziehung ist eine Zuordnung zwischen Entitäten; Zusammenfassung gleichartiger Beziehungen zu Beziehungsmengen (=Assoziationen) Def.: Rolle einer Entität in einer Beziehung ist die Funktion, die sie in der Beziehung ausübt (Unternehmensrollen: Kunde, Lieferant, Arbeitgeber, ...) Visualisierung mit Hilfe von Diagrammen Beispiele: (www.ChristianSchlueter.de) 17 5.2.2 Kardinalitäten Ausgabe der Anzahl Beziehungen einer Entitätsmenge zu anderen Entitätsmengen - Entität einer bestimmten Erläuterungen (nur Lesbarkeit): ein Lieferant liefert mindestens einen bis n Artikel n Artikel hat (keine) 0 ... n Lieferanten ... alternative Iterationen: (www.ChristianSchlueter.de) 18 Kapitel 6 bis 8 fehlen nochû (www.ChristianSchlueter.de) 19 Kapitel 9 – Benutzersichten (eine) Aufgabe der Systemanalyse: Festlegung von Sichten auf den Datenbestand für verschiedene Benutzergruppen Zentraler Begriff: VIEW Varianten von Datensichten direkte Anzeige von Daten aus DB Anzeige von aufbereiteten Daten aus DB Möglichkeiten einer Aufbereitung: - (mit Filtern erstellte) Listendarstellungen - ausgewählte Daten aus einem Datensatz ein Bildschirm (Formular, Screen, Maske) - weiterverarbeitete Daten oder berechnete Werte, z.B. Summen, Preise; dabei sind MwSt, EK und Aufschlag einzelne (gesonderte) Datensätze, die möglichst global verstellt werden können (sollten) Ausgangspunkt (bislang): Grundtabelle weiterer Ausgangspunkt: Selektionsergebnis (Query) - Erzeugung neuer Tabellen an Hand von Abfragen nur zur Darstellung / Pflege von Daten Bemerkung: für den korrekten Umgang mit Daten muss zum Zeitpunkt der View-Erzeugung ein Berechtigungskonzept für Datenzugriffe vorliegen (www.ChristianSchlueter.de) 20 Kapitel 10 – Formularverarbeitung mit MS-Access Def.: Formulare Hilfsmittel zur übersichtlichen Darstellung von Informationen am Bildschrim Einsatzgebiete: - Datenerfassung / -pflege - Anzeige von Erebnisdaten von Selektionen 10.1 automatische Formularerstellung Unterstützung durch Assistenten (einspaltig, blockweise, ...), (vollständig automatische Formularerstellung) 10.2 Formularerstellung mit Assistenten Entwicklung gibt Einstellungen vor 10.3 manuelle Formularerstellung Def. Steuerelement: Objekt zur Anzeige von Daten, zur Durchführung von Aktionen, zur Gestaltung gebunden: direkter Bezug zu Tabelle ungebunden: ohne Bezug zu Tabelle VORLESUNG vom 17. Oktober (Reihenfolge irgendwie durcheinander) 10.3.2 Bereiche in Formularen Es sind maximal 5 Bereiche verwendbar: Seitenkopf Überschrift für gesamtes Formular immer am oberen Bildschirmrand bzw. am Dokumentanfang; Inhalt: konstante Werte (Texte, Daten, z.B. auch Bemerkungen) bei Ausdruck am Anfang jeder Seite; Inhalt: konstante Texte, z.B. Spaltenüberschriften Detailbereich Kernbereich immer vorhanden, Leerlayouts für Daten Seitenfuß bei Ausdruck am Ende jeder Seite; Inhalt z.B. Seitennr. Formularfuß immer am unteren Bildschirmrand bzw. am Dokumentende; Inhalt: z.B. ungebundene Felder, Formularkopf (www.ChristianSchlueter.de) 21 Buttons bei Formularen, abschließender Text bei Berichten 10.3.1.1 Positionierung von Feldern Prinzip: anklicken oder per Drag&Drop Ausrichtung: Menüformat 10.3.1.2 Aktivierungsreihenfolge Definition: Die Aktivierungsreihenfolge ist Folge der Felder ,durch die mit TAB (Tabulator-Taste) gewechselt und navigiert werden kann. Änderung: Entwurfsansicht; Ansicht Aktivierungsreihenfolge 10.4 Berechnungen Berechnungen enthalten in der Regel elementare Werte, z.B. Einkaufspreise, Steuersätze, kalkulatorische Zuschläge, nicht zusammengesetzte Werte, z.B. für Umsatzübersichten dynamische Ermittlung (immer wieder automatisch (aktuell) berechnet) Gründe: Speicherplatz, Aktualität 10.4.1 Formelverarbeitung Beschreibung / Festlegung der Attribute in Steuerelement im Eigenschaftenfenster Formeln: - - Festlegung Steuerelementinhalt Einleitung durch „=“ Verwendung von Ausdrücken wie +, -, usw. für numerische und alphabetische Werte; bei alphabetischen Werten „+“ und „&“ für Stringvorgabe Standardfunktionen (von Access) VORSICHT: Steuerelementname darf nicht mit Feldname in Tabelle übereinstimmen! - - zeitbezogene Verarb., z.B. Jahr (Datum), z.B. Jahr (20.01.2002) 2002 ... Jetzt( ), Datum( ), DateDiff( ), Dat.Seriell(Jahr, Monat, Tag) If-Abfrage durch „wenn (log. Ausdruck); ...; ...;“ datensatzübergreifende Beschreibungen (AggregatBeschreibungen) operieren auf Menge von Datensätzen, z.B. Summen( ), Mittelwert( ), StdAbw( ), Anzahl( ); Sätze in Tabelle 10.4.2 gab es in der Vorlesung nicht. Wir machen weiter am 24.10.2001 mit: (www.ChristianSchlueter.de) 22 10.5 Formular zur Benutzerführung Ziel: Benutzerführung durch Menüstruktur 10.5.1 Menüerstellung durch Menüstruktur Aufgabe: Erstellung baumartiger Menüstruktur zum Zugriff auf Formulare, Berichte, Funktionen Aufruf über: Extras Add-Ins Übersichtsmanager Wurzel des Menübaums: „Hauptübersicht“ Bemerkung: Es gibt ein automatisch erzeugtes Formular namens „Übersicht“, das den Einstieg (die Hauptübersicht) ins Menü enthält. - automatisch erstellte Tabelle „Übersichtseinträge“ enthält Daten der Menüstruktur sofortige Anzeige der Hauptübersicht nach Programmstart Extras Start ... dort den Formularnamen eintragen Vorteile anwenderspezifisch definierter Menüs - Anwendung von Buttons zur Navigation - vollständig selbstdefinierbare Navigationsmöglichkeiten, unabhängig von MS Access eigene Dialogführung Hinweis: bei der Neuanlage von Buttons kann man den Assistenten für Steuerelementanlage benutzen. [Das ist der Zauberstab mit den Sternchen] (www.ChristianSchlueter.de) 23 Kapitel 11 – Erstellung von Berichten mit MS-Access Zielsetzung: Darstellung von Tabelleninhalten in gedruckter Form (Nachschlageinstrument, Präsentationsgegenstand) Anwendungsgebiete: - Listen (Teilnehmer, Artikel-, Lagerbestands-, Inventarlisten) - Auswertungen (Geschäfts-, Verkaufsberichte, Statistiken) Bemerkungen: Berichte bieten hohe Flexibilität bei Gestaltung von Ausgaben (deutlich mehr als Formulare), Anzeige von Berichten: Vorschau, Seitenansicht Einstellungen zur Druckerausgabe von Berichten: Datei Seite einrichten ... dort: Hoch-/Querformat, Ränder, Drucktypen, Anzahl Spalten, Ausgabenreihenfolge quer oder längs) Auch automatische Listenerstellungen sind möglich mit Hilfe des Assistenten 11.1 Manuelle Berichterstellung Hinweis: Technik der Berichtgestaltung wie bei Formularen Bemerkungen: Berichte verfolgen andere Intention Wegfall einiger Darstellungsmittel (keine Dialogelemente); verfügbare Elemente: (un-/gebundene) Steuerelemente, Schriftarten, graphische Symbole, Formelausdruck zur Berechnung, importierte Grafiken, Diagramme Bereiche in Berichten Berichtskopf und –fuß (nur einmal im Bericht), Seitenkopf und –fuß, Detailbereich für Daten 11.2 Berichte mit Gruppenwechseln (GW) Ziel: Zusammenfassung von Daten einer Tabelle zu Gruppen zwecks Ausgabe / Erzeugung gruppenbezogener Information Ansatz: - Gruppe wird identifiziert durch ein oder mehrere Attribute - Sortierung nach Gruppenattributen stellt die Gruppen optisch dar - Gruppen können auf verschiedenen Stufen definiert werden Bildung von Untergruppen in Gruppen Beispiel: Einwohnerregister Name, Vorname, PLZ, Ort, Straße, Fon, Fax, Geburtsdatum, eMail Arm, Harry, 45678, Klein, Karl, Klein, Oscar, Klein, Petra, 16.05.77 31.08.44 04.04.57 06.03.78 (www.ChristianSchlueter.de) 24 Klein, Petra, Klein, Tobias Müller, Felix, 19.08.51 14.11.57 16.02.56 Erklärung: Setzt man z.B. „Name“ auf „Gruppe 1“, so kann man alle Sätze mit dem Namen „Klein“ zusammenfassen. In „Gruppe 1“ können wir eine Untergruppe „Petra“ als „Gruppe 2“ erstellen. Als „Gruppe 3“ kann man z.B. das Geburtsdatum auswählen. Hinweis: zu Anfang jeder Gruppe / Untergruppe existiert eine Gruppenkopfzeile, an jedem Ende ist ein Gruppenfuss(zu kompliziert für eine PC-Grafik, sorry) Bemerkung: - Gruppenwechselverarbeitung gibt eine spezielle Anzeigereihenfolge für Daten vor (entspricht einfacher Sortierung nur, falls nur ein GW pro Feld existiert) - optionale Spezifikation von GW-Kopf / GW-Fuß für jede Gruppe Ausgabe gruppenspezifischer Informationen z.B. allg. Informationen, Spaltenüberschriften, Summen, Durchschnitts-, Maximal- und Minimalwerte Beispiel: A-Nr. KdNr. 4722 ... 4723 ... Auftragspositionen Kostenar Mat.-Nr. Meng t e T(ätigk. ) J123134 1 T J237927 ... M(aterial ) M Zahnrie m. M Schraub en M Frostsch. ... ... ... Bereich Zahnriemen einsetzen Preis EK ... Preis VK 159,79 134,17 ... ... ... ... ... ... Autohaus XY[Seitenkopf] Hans Mustermann [ab hier Gruppenkopf] ... Datum: Kd.Nr. Rechnung für Kennzeichen MK-ZZ 90 Km-Stand: 348918 [bis hier] Auftrag Nr. 4722 [GK1] Nr. Bezeichnung [GK2] J123134 Zahnriemen ersetzen [] (www.ChristianSchlueter.de) Preis 159,79 25 J237927 ... [GF2] Zwischensumme 142,97 _______ 302,76 Zwischensumme Preis ... _______ 543,23 <z.B. Seitenwechsel o.ä.> Nr. [POST] [GF2] Bezeichnung [GK2] weitere Positionen usw., evtl. noch Seitenfuß mit Bankverbindung, etc. 11.3 < fehlt hier was oder war das ein Kapitelende? > (www.ChristianSchlueter.de) 26 Kapitel 12 – Grundzüge SQL 12.1 Abfrageerstellung mit QBE 12.1.1 Auswahlabfragen erzeugen Beispiel: Mailing an alle Kunden im Postleitzahlengebiet 5.... Kundenanschriften? Vorgehen 1) Datenbankfenster Abfragen Neu Entwurfsansicht 2) Tabelle auswählen (Menü Abfrage Tabelle anzeigen ...) (aus Feldern aus ausgewählten Tabellen können für Selektion verwendet werden) 3) Kriterien festlegen 3.1) Felder auswählen (Doppelklick in Feldliste) 3.2) Sortierung festlegen default: Reihenfolge wie in Tabelle alternativ: auf/-absteigend 3.3) Festlegung, ob Feld angezeigt werden soll 3.4) Kriterien bestimmen, z.B. “5x“ 3.5) Abfrage ausführen (Menü Abfrage Ausführen) Ergebnisdarstellung in Datenblattansicht (default) Bemerkung: - beliebiges Wechseln zwischen Ergebnis- und Entwurfsansicht möglich (zwecks Entwicklung) 4) (ggf.) Abfrage speichern (z.B. für periodische Auswertungen) gleiche Abfrage / Auswertung über geänderten Grunddatenbestand 5) Abfrage erneut ausführen Doppelklick auf Name der Abfrage Bemerkung: - Verarbeitung von DB-Inhalten mit Abfragen praktische Anwendung von Mengenlehre (Durchschnitt, Vereinigung, disj. Vereinigung, Differenz) - Ergebnis einer Abfrage wird in Dynaset (= dynamische Datenmenge; interne, temporäre Tabelle) gespeichert - Inhalte der Dynasets können aktualisiert werden (Wertänd. von Feldinhalten); Aktualisierungen werden automatisch in DB übernommen!!! - nach Schließen der Abfrage Löschung des Dynasets; jederzeit Neuerstellung Abfrage darf nicht den gleichen Namen wie eine Tabelle tragen (www.ChristianSchlueter.de) 27 - - die verwendeten Felder dürfen aus verschiedenen Tabellen stammen, falls zwischen den betroffenen Tabellen eine Beziehung definiert ist. ggf. auch ohne Beziehung, aber mit zwischengeschalteter Tabelle Abfrage darf Felder enthalten, über die nicht selektiert wird Spalte wird in Dynaset aufgenommen für spätere Verwendung (z.B. Formular, Bericht) Verwendung von Abfragen Grundlage für - Berichte - Formulare - Diagramme - weitere Abfragen 12.1.2 Formulierung von Selektionskriterien Selektionskriterium: Feldname Eingabe im Feld „Kriterien“: Vergleichsoperator, Vergleichswert Selektion von Textinfo (Beispiele) =“Meyer“ Vergleichsoperator am Anfang (=,<,>,<=,>=,...) der „=“-Operator darf entfallen Meier “ “ werden ggf. automatisch ergänzt >=“5“ z.B. PLZ ab 50000 aufwärts “5*“ PLZ, die mit 5 beginnen; Wildcards unterstützt IN (“Meyer“; “Müller“; “Schulze“) nur Meyer, Müller oder Schulze nicht “Meier“ alle außer Meier “[K-N]*“ alle, die mit K bis N beginnen Bemerkung: - keine Unterscheidung zw. Groß- und Kleinbuchstaben bei Kriterien - Eintrag „ODER“ für alternative Vergleichskriterien aussagelogisch: nicht ausschließendes Oder Selektion von numerischen Informationen verfügbar: - übliche Vergleichsoperatoren <, <=, >, >=, =, <> - besondere Notation für Wertebereichseinschränkungen (“zwischen“) Beispiel: gesucht sind Artikel mit 50,- < Preis < 100, Eingabe: >=50 UND <=100 keine Wiederholung des Kriteriums mit anderen Vergleichswerten nötig alternative Schreibweise: zwischen 50 und 100 (www.ChristianSchlueter.de) 28 Bemerkung: - Sel. mit num. Werten anwendbar auf Felder vom Typ Zahl, Währung, Autowert - nur Dezimaltrennzeichen (keine Tausendertrennzeichen!) Selektion von Datums- / Uhrzeitinformationen Beispiele: ># 31.12.1980# alles ab 1.1.1981; “#“wird normalerweise automatisch eingefügt (intern zur Datumserkennung) <=#31.Dez.1999# alles vor 2000; unterschiedliche Eingabeformate werden unterstützt zwischen #1.5.99# und #31.5.99# alles im Mai 1999 >Datum() – 30 alles im Zeitraum von heute bis vor 30 Tagen Rechenoperationen sind erlaubt!!! Selektion von bool´schen Werten Bemerkung: Vergleichswerte “Ja“ oder “Nein“ ohne besondere Kennzeichnung aussagelogische Verknüpfung von Selektionskriterien UND-Verknüpfung Beispiel: Lieferanten für Moselweine gesucht log. Kriterium: (Lieferant) Regel: PLZ=5* UND Branche = Getränke UND Kz = L bei Spezifikationen von Vergleichswerten in Kriterienzeile werden die betreffenden Selektionskrit. durch UND verknüpft. ODER-Verknüpfung Beispiel: beliebiger Qualitätswein oder Bordeaux log Kriterium: Regel: (Einzelpreis > 20 ODER Artikelname = Bordeaux) UND Warengruppe = Wein bei ODER-Verknüpfungen muss ein Vergleichswert in der Krit.zeile eingetragen werden; die Vergleichswerte für die mit ODER zu verknüpfenden Krit. werden in ODER-Zeile aufgeführt (www.ChristianSchlueter.de) 29 In Access erscheint eine Art Tabelle, in die die Kriterien eingefügt werden: Kriterium ODER Warengruppe Wein E-Preis >20,00 Art_name Bordeaux Auswertungen in Abfragen Ziel: Ausführung von Auswertungen und Berechnungen in Abfragen Anwendung: Entwurfsansicht für Abfragen, Menü-Ansicht Funktionen Einblendung der Zeile “Funktion“, dort Auswahl verfügbare Fkt.: Summe, Mittelwert, Min, Max, Anzahl, ... 12.1.3 Parameterabfrage Ziel: komfortable Wiederholung von Abfragen mit „überwiegend“ gleichbleibenden Selektionskrit. Beispiel: Suche nach Getränkegroßhändlern für bestimmte Getränke; Abfrage fest formuliert, aber Region soll bei Aufruf spezifiziert werden Sel.krit.: Feld PLZ Händlername ... Kriterien in “ [Region]“ PopUp-Window bei Ausführung, das die Schaltflächen “OK“ und “abbrechen“ sowie das Eingabefeld für zu suchende Region enthält. Bemerkungen: - Text der Eingabeaufforderung [Region] muss sich vom Feldnamen unterscheiden - Verwendung von Vergleichsoperatoren in Sel.krit. möglich, z.B. >[Region] //Anzeige aller PLZ, die größer als aktuell eingegebene sind 12.2 Anwendung von SQL SQL Werkzeug zur Datenbankmanipulation; kleiner, mächtiger Befehlssatz Historie: Beginn ca. 1970-er von E.F. Codd „A relational model of data for large data banks“ in CACM (Zeitschrift) (er erwähnte dabei das Relationentheorie, eng zusammenhängend mit Mengenlehre) Umsetzung ca. 1975 SE QU EL als Abfragespache von IBM (www.ChristianSchlueter.de) 30 1979 SEQUEL SQL als Sprache für DB2 erstmals kommerziell angeboten 1980 ORACLE, INFORMIX und andere bieten relationale DB mit SQL an 1982 Gründung des ANSI-Kommitees zur SQL-Standardisierung 1986 Verabschiedung ANSI-Standards SQL-1 (Datendefinition, administration, -manipulation) 1981 (?) Verabschiedung von SQL-1 als ISO-Standard ab 1987 SQL als Industriestandard 1992 SQL-2 als ISO-Standard (neue Datentypen, Gültigkeitsprüfungen, Festlegung, Primärschlüssel); !!! DB-Systeme unterstützen SQL-2 meist nicht vollständig, besitzen aber umfangreiche Erweiterungen ???? Verabschiedung SQL-3 (objektrelationale Erweiterungen, ...) Gliederung der SQL-Anweisungen - Datendefinition (DDL, Data Definition Language) - Datenabfrage (DQL, Data Query Language) - Datenmanipulation (DML, Data Manipulation Language) - Zugriffskontrolle 12.2.1 SQL in Abfragen QBE-Abfrageassistent: - vereinfachtes User Interface für Abfrageformulierung - automatische Erzeugung von SQL-Code (SQL-Ansicht) - manuelle Anpassung von SQL-Befehlen - automatische Anpassung in QBE-Interface 12.2.2 SQL beim Oberflächenentwurf in Access Anwendung von SQL-Anweisungen, wo Tabellen-, Abfrage-, Feldnamen einzugeben sind, z.B: „Datenherkunft“. 12.2.3 SQL in V-Basic-Code folgt später (www.ChristianSchlueter.de) 31 Kapitel 13 – Grundlagen: relationales Modell Bemerkung: in relationalen DB werden Ausdrücke der relationalen Algebra auf SQL abgebildet. 13.1 Relationen, Attribute, Domäne Def: (Wiederholung Kap. 5) 1) kartesisches Produkt: W; i ist Element {1,...,n} beliebige Mengen a Element W (Zettel 1) 2) (A1,...,An) Kombination von Attributen mit Wertebereichen Mi; eine nstellige Relation R ist eine Teilmenge des kartesischen Produkts M1x....xMn. Rn bezeichne die Menge aller n-stelligen Relationen, auch R(A1,...,An). [RTabelle, AttributeSpaltenüberschriften]; Anzahl der Attribute heißt Degree. 3) Wertebereiche W i heißen Domänen. 4) (a1, ...., an) RZeilen einer Tabelle Eigenschaften - Relation hat per Definition keine doppelten Tupel - Tupelreihenfolge ist undefiniert. - Attribute sind atomar (d.h. nicht fachlich sinnvoll weiter zerlegbar) - für Attribute sind NULL-Werte erlaubt 13.2 Relationen, Operationen 13.2.1 Selektion Anwendung einer Operation führt auf die Enstehung einer neuen Relation, z.B. F1:RnRm mit n, m ist Element Natürl. Zahlen F2: Rn x Rm Rk mit n, m, k ist Element natürl. Zahlen Def: auf R(a1,..., an) sei B als Abbild definiert. B : R {wahr, falsch} also B (a1, ..., an) ist Element{w,f}, dann heißt: SelektionB ( R ) :={a1,...,an) Element R|B(a1,...,an)=wahr} die Selektion von R aufgrund von B < Zeichnung1 ist abhanden gekommen > 13.2.2 Projektion Sei R(a1, ..., an) eine Relation, L=(bk1, ...,bkj) ki Element{1,...,n} eine Attributkombination, d.h. eine geordnete Teilmenge von (a1, ..., an). Projektion ist definiert durch: < Text2 unauffindbar > (www.ChristianSchlueter.de) 32 Beispiel: Kundentabelle (Zettel) Projektion heißt: Lasse bestimmte Kriterien weg. < ups, sollte wirklich mal den Zettel suchen... > 13.2.3 Join-Operationen (Verbunde) Definition: Seien zwei Relationen R1 (A1, ..., An), R2 (B1, ..., Bm ) gegeben. Das kartesische Produkt zweier Relationen ist die Menge aller Paare aus Tupeln der ersten Relation verknüpft mit Tupeln aus der 2. Relation: R1xR = |A1, ..., An, B1, ..., Bm ) | (A1, ..., An) R1 (B1, ..., Bm ) R2} |R1xR2| = |R1| * |R2| Beispiel: R1 A1 A2 1 A 2 B 3 C R2 B1 B2 B3 1 x v 2 y w R1xR2 A1 A2 B1 B2 B3 1 A 1 x v 1 A 2 y w 2 B 1 x v 2 B 2 y w 3 C 1 x v 3 C 2 y w Definition: Seien zwei Relationen R1 Rn und R2 Rm sowie Selektionsprädikat B:R1xR2 {wahr;falsch} gegeben, also B(A1, ..., An, B1, ..., Bm ) {wahr;falsch}, dann ist ein Theta()-Join von R1 und R2 auf Grund von B definiert durch: (R1, R2, B) := {(A1, ..., An, B1, ..., Bm ) R1xR2 | B(A1, ..., An, B1, ..., Bm ) = wahr} Bemerkung: Join = kartesisches Produkt + Selektion Beispiel: Tetha(R1, A1 A2 B1 B2 B3 R2, A1=B1) 1 A 1 x v (www.ChristianSchlueter.de) 33 2 B 2 y w Tetha(R1, A1 A2 B1 B2 B3 R2, A1>B) 2 B 1 x v 3 C 1 x v 3 C 2 y w Definition: Ein Equi-Join ist ein Theta-Join, der im Selektionsprädikat nur den Vergleichsoperator „=“ zulässt. Definition: EIn Equi-Join, bei dem die doppelt vorkommenden Attribute nur einmal aufgelistet werden, heißt Natural-Join oder einfach Join. Er wird abgekürzt mit „*“ Beispiel: R1 und R2 wie oben R1 * R2 A1 A2 B2 B3 1 A x v 2 B y w Definition: Ein Equi- oder Natural-Join zwischen R und S heisst verlustfrei, wenn alle Tupel von R und S im Join vertreten sind. Die inverse Operation erzeugt dann wieder R bzw. S. Bemerkung: ggf. besteht Interesse an allen beim Natural-Join herausgefallenen Sätzen Outer Join Bemerkung: bisherige Join-Operation Inner Join Definition: Der linke Outer Join zwischen Relationen R1 und R2 ist ein Natural Join, bei dem alle Tupel der linken Relation, hier R1, die im Natural-Join unterdrückt werden, als Tupel mit aufgeführt und in den Spalten, die zu R2 gehören, mit NULL aufgeführt werden. analog: rechter Join Beispiel: R1 linker Outer Join mit R1.S2 = R2.S4 S1 S2 R2 S3 A W C B X D C Y (www.ChristianSchlueter.de) S4 Y Z 34 R1 x R2 S3 C D C D C D S4 Y Z Y Z Y Z Tetha S1 S2 S3 (R1,R2S2=S 4) C Y C S4 R1 * R2 LOJ S1 A A B B C C S2 W W X X Y Y Y S1 S2 S3 C Y C S1 A B C S2 W X Y S3 ? ? C S4 ? ? Y rechts Die Spalte S4 wurde zum Schluss durchgestrichen LOJ steht für Linker Outer Join rechter OJ S1 C ? S3 C D S4 Y Z Definition: Der Full Outer Join zwischen Relation R1 und R2 ist ein Natural Join, bei dem alle Tupel der linken und rechten Relation, die beim Natural Join unterdrückt werden, erhalten bleiben. Nicht verwendete Attribute der jeweils anderen Relation werden mit NULL-Werten gefüllt. FOJ (S2=S4) S1 S2 S3 C A B ? Y W X Z C ? ? D Bemerkung: Inner Join Operationen besitzen immer Ergebnistupel aus beiden beteiligten Relationen. Eigenschaften: (www.ChristianSchlueter.de) 35 - Attribute, über die Join ausgeführt wird (Join-Attribute), müssen keine Schlüsselattribute sein Join Attribute der beteiligten Relationen müssen nicht den gleichen Namen haben jede Relation kann mit einer anderen gejoint werden (auch mit sich selbst) Domänen der Join-Attribute müssen gleich sein 13.2.4 Mengenoperatoren Seien R1(A1, ..., An) und R2(B1, ..., Bm ) Relationen mit gleichen Attributen Union (R1, R2) := {(x1, ..., xn) | (x1, ..., xn) R1 ODER (x1, ..., xn) R2} Durchschnitt (R1, R2) := {(x1, ..., xn) | (x1, ..., xn) R1 UND (x1, ..., xn) R2} Differenz (R1, R2) := {(x1, ..., xn) | (x1, ..., xn) R1 UND (x1, ..., xn) R2} disj. Vereinigung (R1, R2) := {(x1, ..., xn) | (x1, ..., xn) R1 PUNKTODER (x1, ..., xn) R2} Argument Beschreibung Spalte Name der Felder in einer Tabelle Größe Feldgröße (nur bei "TEXT") Datentyp COUNTED, SINGLE, DOUBLE, SHORT, LONG, TEXT, ... (www.ChristianSchlueter.de) 36 Kapitel 14 – Structured Query Language (SQL) Regeln: - Eingabe von SQL-Anweisungen beliebig über 1...n Zeilen, max. 256 Zeichen - Anweisung mit „;“ abschließen - SQL ignoriert Groß- und Kleinschreibung - Einteilung von Befehlen für Datendefinition (DDL) , -abfrage (DQL) und – manipulation (DML) Tipp: Im Praktikum hat es sich bewährt, verwendete SQL-Anweisungen komplett in Großbuchstaben zu schreiben, jedoch die eigenen Variablen und Wertzuweisungen komplett klein oder normal (klein/groß) zu schreiben. 14.1 Data Definition Language (DDL) 14.1.1 Tabellenerstellung Anweisung: CREATE TABLE Tabellenname ( Spalte1 Datentyp[(Größe)][NOT NULL][CONSTRAINT Klausel] Spalte2 [...] ); Bemerkung: Feldnamen dürfen Leerzeichen enthalten, dann aber mit „[ ]“ einschließen, z.B. [Bilanz 1999] 14.2 Data Query Language (DQL) Aufbau einer Datenabfrage als Ergebnis folgender Fragen: - was wird gesucht? (SELECT) - wie wird es aufbereitet? (AS ...) - woher kommen die Daten? (FROM) - zu welchen Bedingungen? (WHERE) - in welcher Reihenfolge? (Anzeige) (ORDER BY) - in welcher Gruppierung? (GROUP BY) 14.2.1 Grundlagen für Abfragen Ziel: Auswahl von Feldern aus Datensätzen, die bestimmten Bedingungen genügen Syntax: SELECT [PRAEDIKAT] {*|Tabelle.*|[Tabelle.]Spalte1[AS Alias1[,Alias2][,[...]]][,[Tabelle.]Spalte2[,...]} FROM Tabellenausdruck [,...] [IN EXTERNE DB] [WHERE ...] [GROUP BY ...] [HAVING ...] (www.ChristianSchlueter.de) 37 [ORDER BY ...]; Erläuterungen: - SELECT wählt die Spalten aus den gegebenen Tabellen aus und erzeugt neue (temporäre) Tabellen mit Sätzen, die den Bedingungen genügen - - Details Sternchen wählt alle Spalten aus Tabelle, Bsp.: SELECT * FROM Personen; Gegenteil: SELECT Vorname, Nachname FROM Personen; Spalte1 ... auszugebende Spalten, Benennung z.B. „Nachname“ PRAEDIKAT ALL Default TOM m Anzeige der ersten m Sätze DISTINCTION ignorieren gleicher Zeilen entstanden durch Projektion AS Personen; SELECT Personen.Nachname AS Name FROM (Name ist der Spaltenname für Dynaset) SELECT Nachname + ‘,‘ + Vorname AS Name FROM Personen; (Projektion durch Stringverarbeitung) FROM Personen p; Ausgabe einer oder mehrerer Tabellen SELECT Personen.Nachname, Abteilung.Name FROM Personen,Abteilung (Personen.Nachname ist vollständiger Spaltenname) Tabellenaliase: SELECT p.Nachname, p.Vorname FROM selbstbezügliche Verknüpfungen erlaubt: p1.Nachname, p2.Name FROM Personen p1,Personen p2; - Reihenfolge Diese ist bei den verschiedenen Klauseln signifikant!!! 14.2.2 Auswahl von Datensätzen Ziel: Formulierung von Kriterien für die Selektion von Datensätzen Syntax: SELECT * WHERE Vergleichsausdruck (also „Operand Operator Operanden“) zulässige Operanden: (www.ChristianSchlueter.de) 38 - Spaltennamen von Tabellen aus FROM Klausel Konstanten (30, -0.135, 10.55, „MFH“, „,#Z5,D5,200#“) arithmetische Ausdrücke (+,-,*,/,()Klammern in üblicher Priorität)) Systemvariablen ( Hersteller) Unterabfragen (später) zulässige Operatoren: =,<,>,<=,>=,<>, besondere Operatoren, s.Ü. (?), AND, OR, NOT A T T F F T T T U U B T F T F U U T F U A und B A oder B neg A neg B U F U F U T U T U U F T U U U U U F T U Beispiel: SELECT Namen FROM Mitarbeiter WHERE KostenstellenNr >= 1000 AND KostenstellenNr <= 2000; BETWEEN WHERE Spaltenname [NOT] BETWEEN Ausdruck AND Ausdruck Ausdruck z.B. Spaltenname, Konstante, arithmetischer Ausdruck Beispiel: SELECT Vorname, Nachname FROM Mitarbeiter WHERE Nachname BETWEEN ‚P‘ AND ‚H‘ ; gleichwertig: WHERE ‚F‘ <= Nachname AND Nachname <= ‚H‘ LIKE-Operator Ziel: Verwendung von Textmustern Syntax: WHERE Spaltenname [NOT] LIKE ‚Maske‘ Bemerkung: - LIKE nur für Zeichenketten definiert - Wildcards „*“ und „?“ und weitere Hersteller - ANSI: *% ? _ (Unterstrich) siehe Hilfe Beispiel: SELECT * FROM Mitarbeiter - WHERE Nachname = „Schulz“ - WHERE Nachname LIKE „Schulz“ (www.ChristianSchlueter.de) 39 - WHERE Nachname LIKE „Schulz*“ Schulz, Schulze, Schulze-Heinsch Datumsvergleich Format # Monat/Tag/Jahr # SELECT * FROM Mitarbeiter WHERE Geburtstag < #05/15/1933#; Bem.: Das aktuelle Datum erhält man mit der Funktion "Now()". Hiermit sind auch Berechnungen möglich, z.B. alle Mitarbeiter anzeigen lassen, die älter als 50 sind: SELECT * FROM Mitarbeiter WHERE Geburtsdatum < (Now() - 50); Der Typ eines Datumsfeldes ist übrigens DATE. Eine Tabellenerstellung könnte also so aussehen: CREATE TABLE Geburtstagskalender ( Name TEXT(20), Geb_tag DATE); IN-Klausel Untersuchung auf Mengenzugehörigkeit (Aufzählung) Syntax: WHERE Spaltenname [NOT] IN (Literal-1[,Literal-2[,...]]) Beispiel: SELECT * FROM Mitarbeiter WHERE Ort IN ("Köln“, "Iserlohn“, "Dortmund“); Bemerkung: - Menge nach IN darf nur Konstante enthalten - alle Konstanten vom gleichen Typ - keine Konstanten doppelt NULL-Prädikat Suche nach NULL-Werten Syntax: Ausdruck IS [NOT] NULL Beispiel: SELECT * FROM Mitarbeiter WHERE AbtNr IS NULL; (Mitarbeiter ohne Abt.zugehörigkeit) (www.ChristianSchlueter.de) 40 Tabellenübergreifende Suche Gegeben: Mitarbeiter | VName NName GebDat Raum Räume | Nr 3 8 9 Bezeichnung gelbe Suche B36 Gesucht: Alle Personen in B36 SELECT NName, VName FROM Mitarbeiter, Räume WHERE Mitarbeiter, Raum = Räume.Nr AND Räume.Bezeichnung = „B36“; //-Join 14.2.3 Ordnen von Selektionsergebnissen Festlegung einer Reihenfolge für Ergebnisdarstellung Syntax: SELECT ... ORDER BY [Tabelle1.]Feld1 | RefNr [ ASC | DESC ]; (ASC = aufsteigend (Standard), DESC = absteigend) Bemerkung: RefNr gibt die Position in der Spaltenliste von SELECT an; wichtig bei * Beispiel: SELECT * FROM Mitarbeiter WHERE Name >=‘M*‘ ORDER BY NName DESC; SELECT Nr, NName, Gehalt, Raum FROM Mitarbeiter WHERE ... ORDER BY NName, 4 ASC; (bei der 4 handelt es sich sicher um einen Tippfehler, oder?) 14.2.4 Berechnungen in Tabellen 14.2.4.1 Ausdrücke in Spalten an Stelle eines Spaltennamens kann ein mathem. Ausdruck verwendet werden Beispiel: neue Gehaltsstruktur nach Anhebung um 5% SELECT MA_Nr, NName, VName, Gehalt AS [altes Gehalt], (Gehalt * 1.05) AS [neues Gehalt], (Gehalt * 1.05) – Gehalt AS Erhoehung (www.ChristianSchlueter.de) 41 FROM Mitarbeiter ORDER BY 5; sortieren 14.2.4.2 // nach dem 5. Element Datensatzübergreifende Verarbeitung Spalten- (Gruppen-) Funktionen für Auswertungen aus Tabellenebene (Ergebnisse immer EINE Zeile) - Summen- / Durchschnittsbildung Syntax: {SUM | AVG} (Spaltenname | arithm. Ausdruck) Beispiel: gesucht ist die durchschnittliche Prämie pro MA (neues Attribut) SELECT AVG (Prämie) AS [Durchschnitt MA] FROM Mitarbeiter; Durchschnitt MA ... gesucht: durchschnittlich gezahlte Prämie über 100,SELECT WHERE Prämie > 100; ... gesucht: Gesamtkosten der Gehaltserhöhung SELECT SUM (Gehalt * 1.05 – Gehalt) FROM Mitarbeiter; - Minimum- / Maximumbestimmung Syntax: {MIN | MAX} (Spaltenname | ...) Bemerkung: - ‘*‘: alle Zeichen zählen - bei spaltenbezogener Zählung: Sätze mit NULL nicht zählen Beispiel: SELECT COUNT (*) AS [Gesamtzahl] FROM Mitarbeiter; SELECT COUNT (Raum) AS [Anzahl Räume] FROM Mitarbeiter; 3 im Beispiel Prozentsatz MA mit Prämie SELECT COUNT (Prämie) | COUNT (*) * 100 FROM Mitarbeiter; 14.2.5 Gruppenverarbeitung Ziel: (www.ChristianSchlueter.de) 42 Gruppieren von Informationen und Darstellung gruppenbezogener Ergebnisse Syntax: GROUP BY Spalte1 [, Spalte2, [,...]] [HAVING Suchbedingung] Bemerkung: - Spaltenname korrespondiert mit Spaltennamen hinter SELECT - RefNr nicht zulässig! - bei Kombination mit Funktion (SUM, ...) wird Funktion auf niedrigster Gruppenwechselebene zuerst ausgeführt Beispiel: Mitarbeit er ... Kost AusbBeruf Gesucht: Wie viele MA jeder Berufsgruppe sind im Unternehmen tätig? SELECT AusbBeruf COUNT (*) AS Anzahl FROM Mitarbeiter GROUP BY AusbBeruf; Erg AusbBeruf Bankkaufma nn Dipl.Inf. ... Anzahl 2 5 ... Gesucht: Wie ist das durchschnittliche Gehalt der Berufsgruppe „Kaufmann“ im Unternehmen und wie viele Einzelposten würden in die Auswertung mit aufgenommen? SELECT AusbBeruf COUNT (*) AS Anzahl AVG (Gehalt) AS Durchschnittsgehalt FROM Mitarbeiter WHERE AusbBeruf LIKE ‘*Kauf*‘ GROUP BY AusbBeruf; Gruppenselektion WHERE-Klausel wird auf den gesamten Datenbestand angewandt; HAVING-Klausel (syntaktisch genauso) wird nur innerhalb von Gruppen angewandt. Gesucht: wie oben (Durchschnitts-Berufsgruppe), aber nur Gruppen mit mehr als 1 Einzelposten (www.ChristianSchlueter.de) 43 SELECT ... GROUP BY AusbBeruf HAVING COUNT (*) > 1; // Gruppen mit einem Element ignorieren 14.2.6 Vereinigung von Tabellen (UNION) Zusammenführen von Datensätzen aus verschiedenen Tabellen Syntax: [TABLE] Abfrage 1 UNION [ALL] [TABLE] Abfrage 2 [UNION ...]; Bemerkung : - Abfrage x: -- SELECT - Anweisung -- Name von gespeicherten Abfragen / Tabellen - Voraussetzung : identische Strukturen - Spaltennamen der Ergebnisliste = Spaltennamen der ersten Abfrage - ORDER BY nur hinter letzter Abfrage zulässig An einem Beispiel erklärt: Gesucht: Gemeinsames Telefonverzeichnis aus Tabellen "Kunden", "Lieferanten" SELECT Name, Telefon FROM Kunden UNION SELECT Name, Telefon FROM Lieferanten; Gesucht: Übersicht über alle Kunden und Lieferanten in Brasilien mit Name und Ort, sortiert nach dem Ort SELECT Firma, Ort, 'Lieferant' AS Quelle FROM Lieferanten WHERE Land = "Brasilien" UNION SELECT Firma, Ort, 'Kunde' AS Quelle FROM Kunden WHERE Land = "Brasilien" ORDER BY Ort; ... Firma ... ... Ort ... ... Quelle Kunde Lieferant (www.ChristianSchlueter.de) 44 14.2.7 Unterabfragen Problem: Welcher Mitarbeiter hat das höchste Gehalt? mehrzeilig einzeilig SELECT MA_Nr, NName, MAX (Gehalt) FROM Mitarbeiter; Lösung: Schritt 1: Suche Maximum Schritt 2: Suche MA, der dieses Maximum enthält Verschachtelung von Abfragen SELECT MA_Nr, NName, Gehalt FROM Mitarbeiter WHERE Gehalt = (SELECT MAX(Gehalt) FROM Mitarbeiter); Syntax: 1) Vergleich [ ANY | ALL | SOME ] 2) Ausdruck [NOT] IN 3) Ausdruck [NOT] EXISTS (SQL-Anweisung) (SQL-Anweisung) (SQL-Anweisung) Erläuterungen: Unterabfragen sind zulässig in - WHERE- und HAVING-Klauseln - FROM-Klauseln - in Falllisten einer SELECT-Anweisung (Vorsicht bei diesen!) Variante 1: Variante 2: Variante 3: Vergleichsausdruck mit Unterabfrage als Vergleichswert "normale" IN-Anweisung / Vergleich Feststellung, ob Abfrage überhaupt Daten zurückgibt Beispiele: 1) Wie lauten Mitarbeiternummer und Name der Person, die auf der gleichen Kostenstelle arbeiten wie MA_Nr 360? SELECT MA_Nr, NName FROM Mitarbeiter WHERE KoSt = ( SELECT KoSt FROM Mitarbeiter WHERE MA_Nr = 360); 2) Welche Mitarbeiter sind verheiratet? SELECT MA_Nr, VName, NName FROM Mitarbeiter (www.ChristianSchlueter.de) 45 WHERE MA_Nr IN (SELECT MA_Nr FROM Angehörige WHERE VerwGrad LIKE "Ehe*"); Regeln zur Bildung von Subqueries - Subquery ist immer ein rechtsseitiger Term einer Vergleichs- oder EXISTS-Bedinung Subqueries stehen in runden Klammern "( )" nach SELECT der Subquery darf nur ein Ausdruck folgen (eine Spalte) mit dem gleichem Typ, wie er im linksseitigen Term vorkommt bei Vergleich mit Operatoren =, >, <, ù darf Subquery nur einen Wert (eine Zeile) als Ergebnis liefern bei IN, ANY, ALL, EXISTS sind mehrzeilige Ergebnisse zulässig 3) Ersatzlösung für Outer Joins z.B. Liste der MA einschließlich Ehepartner SELECT B.MA_Nr, B.VName, B.NName, A.Name FROM Mitarbeiter B, Angehörige A WHERE A.MA_Nr = B.MA_Nr AND VwGrad LIKE "EHE*" UNION SELECT MA_Nr, VName, NName '...' FROM Mitarbeiter WHERE MA_Nr NOT IN (SELECT MA_Nr FROM Angehörige); Beispiel: Welche Mitarbeiter haben keine Angehörigen? SELECT MA_Nr, VName, NName FROM Mitarbeiter WHERE MA_Nr <> ALL (SELECT MA_Nr FROM Angehörige); - "<> ALL" entspricht "NOT IN" ANY oder SOME: Vergleich Textwert mit jeder Zeile WHERE-Ausdruck wahr, falls mindestens ein Vergleich wahr "=ANY" entspricht "IN" Beispiel: Welche Mitarbeiter der Kostenstelle 1100 verdienen weniger als der Meistverdienende SELECT MA_Nr, NName, Gehalt, KoSt FROM Mitarbeiter WHERE Gehalt < ANY (SELECT Gehalt FROM Mitarbeiter WHERE KoSt = 1100) AND KoST = 1100; Bemerkung: (www.ChristianSchlueter.de) 46 EXISTS-Test erfüllt, wenn Ergebnis mindestens eine Zeile enthält Beispiel: Anzeige aller Mitarbeiter, für die Angehörigendaten gespeichert sind SELECT MA_Nr, NName, VName FROM Mitarbeiter M WHERE EXISTS (SELECT * FROM Angehörige A WHERE M.MA_Nr = A.MA_Nr) ORDER BY 1; Inner Outer Reference Reference Kombination Haupt- / Unterabfrage Bemerkung: - Verwendung von Unterabfragen in FROM-Klausel anstelle von Tabellennamen Beispiel: Welche Kinder von Mitarbeitern wurden seit dem 01.01.2000 geboren? (Unter Access muss der grau markierte Bereich in einer gesonderten Abfrage gespeichert werden!) SELECT A.MA_Nr, A.NName FROM Mitarbeiter A, (SELECT * FROM Angehörige WHERE GebDat >= #01.01.2000#) B WHERE A.MA_Nr = B.MA_Nr; 14.3 Datenmanipulation (DML) Grundsatz: keine Rückgabe von Daten, nur Änderungen 14.3.1 Einfügen von Daten in Tabellen Ziel: Anhängen von Datensätzen an eine bestehende Tabelle Syntax: 1) INSERT INTO Ziel [Feld1 [ù]] VALUES (Wert1 [, Wert2[, ù]]); 2) INSERT INTO Ziel [IN Externe_DB] INTO (Feld1 [, Feld2 [,ù]]) SELECT (Anweisung); 3) SELECT Feld1 [, Feld2 [,ù ]] INTO neue_Tabelle [IN EXTERNE_DB] FROM Quelle; Bemerkung: - (2) und (3) fügen mehrere Datensätze, (1) nur einen Datensatz ein (www.ChristianSchlueter.de) 47 Beispiel: Aufnahme der Amgehörigen Ehefrau "Eva", GebDat unbekannt INSERT INTO Angehörige VALUES (10, 'Eva', NULL, 'Ehefrau'); Beispiel: Aufnahme einer neuen Kostenstelle für "Projekt x&y" INSERT INTO Kostenstelle (KoSt, Bez) VALUES (1140, 'Projekt x&y'); Beispiel: Welcher ehemalige Mitarbeiter (>=65 Jahre) werden noch betreut (sind in DB)? SELECT NName, GebDat INTO Ehemalige FROM Mitarbeiter WHERE DateDiff ('yyyy', GebDat,now()) >= 65; Beispiel: Welche Mitarbeiter sind in 5 Jahren voraussuchtlich zu betreuen? INSERT INTO Ehemalige SELECT NName, GebDat FROM Mitarbeiter WHERE DateDiff ('yyyy', GebDat, now()) BETWEEN 60 AND 65; 14.3.2 Ändern von Datensatzattributen Syntax: UPDATE Tabelle SET NeuerWert1 [, NeuerWert2, [, ...]] WHERE Kritierien; Bemerkung: UPDATE operiert auf Originaldaten Beispiel: UPDATE Mitarbeiter SET Gehalt = Gehalt * 1.025; UPDATE Mitarbeiter SET Prämie = Prämie * 1.1 + 100 WHERE DatDiff ('yyyy', Eintrittsjahr, now) > 5; Bemerkung: Mathematische Operationen auf Felder mit NULL-Werten ergeben wieder NULL-Werte. Vorsicht bei UPDATE auf Key-Felder!!! (www.ChristianSchlueter.de) 48 14.3.3 Löschen ausgewählter Datensätze Syntax: DELETE FROM Tabelle WHERE Kriterien; Bemerkung: DELETE ohne Kriterien löscht alle vorhandenen Sätze, aber NICHT die vorhandene Struktur – im Gegensatz zu DROP TABLE, wobei die gesamte Tabelle gelöscht würde. DELETE ist eine Löschabfrage und löscht einzelne Felder innerhalb von Sätzen mit UPDATE ( ... SET ... = NULL). DELETE arbeitet auf Originaldaten Beispiel: Mitarbeiter mit MA.Nr 150 ist aus Unternehmen ausgeschieden: DELETE FROM Mitarbeiter WHERE MA.Nr = 150; DELETE FROM Angehörige WHERE MA.Nr = 150; Bemerkung am Rande: Herzlichen Dank an Andreas Rauer für die Ergänzung von Kapitel 14.2.7 bis 14.3.2! (www.ChristianSchlueter.de) 49 Kapitel 15 – Formularverarbeitung ( Unterformulare) Ziel: Darstellung von fachlich zusammen gehörenden Informationen aus unterschiedlichen Tabellen, wobei i.d.R. 1 Satz "führend", Rest enthält Detailinfos, z.B. Rechnungskopf, Rech-Positionen; MA, Angehörige Teilschritte für das Erstellen von Haupt- / Unterformularen 1) Unterformular wir normales Formular; beachte: - Eigenschaft: Format, Standardansicht: "Endlosformular", "Datenblatt" - als Datenbank-Herkunft: SQL-Befehl 2) Hauptformular (HF) wie gewohnt anlegen 3) Unterformular (UF) in HF einfügen durch a) Auswahl von "Unterformular" in Toolbox + Assistent verfolgen b) Drag & Drop des UF-Namens in HF-Entwurf prüfen: Eigenschaften (UF-Steuerelement im HF) Daten --> Herkunftsobjekt <-> UF-Name Verknüpfung von / nach --> Feldname (Pfeile umschreiben Beziehungen) <Es folgte eine Präsentation, die sich hier schlecht kommentieren ließù> (www.ChristianSchlueter.de) 50 Kapitel 16 – Transaktionen Definition: Transaktion ist eine Folge von DB-Operationen, die eine gemeinsame Einheit bilden (=> Zwischenspeicherung aller Änderungen zunächst separat, zu bestimmtem späteren Zeitpunkt in DB übernommen oder verworfen) Beispiel: telefonische Bestellung von einem Artikel X Realisierung: a) Bestellung aufnehmen => Auftragstabelle b) Aktualisierung in Kundentabelle c) Bestandsanpassung in Artikeltabelle; Artikel nicht lieferbar (Kollisionsabfrage!) Transaktionskonzept ist zentrales Mittel zur Aufrechterhaltung konsistenter Datenbestände! Methodik in Access: 1) BeginTrans (Transaktionseinleitung) 2) Commit (Übernahme aller gespeicherten Operationen) 3) Rollback (Verwerfen der Operationen in der Transaktion) (www.ChristianSchlueter.de) 51 Anhang - wichtige Begriffe und Abkürzungen ACID Atomicity, Consistency, Isolation, Durability DAL Data Administration Language DAO Data Access Object DBMS Data Base Management System DBS Data Base System DD Data Dictionary DDL Data Definition Language DL Definition Language DML Data Manipulation Language DQL Data Query Language DSDL Data Storage Definition Language ER Entity Relationship ISAM Index Sequential Access Method ODBC Open Data Base Connectivity SQL Structured Query Language Atomicity Unteilbarkeit von Transaktionen, Transaktionen werden entweder vollständig oder gar nicht ausgeführt Consistency Konsistenz: Nach Abschluss einer Transaktion ist eine Datenbank in einem korrekten Zustand; während der Transaktionen können inkonsistente Zustände auftreten Isolation Jede Transaktion läuft so, als wäre sie die einzige laufende im System; parallele Transaktionen dürfen sich nicht beeinflussen Durability Dauerhaftigkeit: Änderungen, die von einer erfolgreichen Transaktion durchgeführt werden, überdauern jeden nachfolgenden Fehlerfall Methodik Access (Transaktionen) in BeginTrans = Transaktionseinleitung Commit = Aktualisierung z.B. in Kundentabelle (Sprungmarke setzen) Rollback = Verwerfen der Operationen in Transaktion (Undo-Funktion) Assoziation Zusammenfassung gleichartiger Beziehungen zwischen Entitäten (werden mit Verben benannt und können Attribute besitzen) Attribut beschreibt eine fachliche Eigenschaft, die allen Entitäten einer Entitätsmenge gemeinsam ist (entspricht den Spalten einer Tabelle) Degree Anzahl der Attribute Domäne Wertebereich eines Attributs Entität individuelles und identifizierbares Objekt der Realwelt Entitätsmenge Zusammenfassung von Entitäten mit gleichen Eigenschaften Kardinalität Komplexitätsgrad der Beziehungen zwischen Entitätsmengen (min, max) Relation Beziehung zwischen Entitätsmengen untereinander Rolle beschreibt welche Funktion eine Entität in einer Assoziation hat Schlüsselattribut eindeutige Identifizierung eines Objektes bzw. einer Entität Tupel Zeile einer Tabelle (Entitäten in einer Entitätsmenge) Primärschlüssel Schlüssel zum eindeutigen Identifizieren eines Tupels in einer Tabelle Fremdschlüssel Verweis auf den Primärschlüssel einer Fremdtabelle minimaler Schlüssel Ein Schlüssel heisst minimal, wenn bei Weglassen eines Attributs ein Tupel nicht mehr eindeutig identifizierbar ist. DAO DAO (Data Access Objects) is an application program interface (API) available with Microsoft's Visual Basic that lets a programmer request access to a Microsoft Access database. DAO was Microsoft's first object- oriented interface with databases. DAO objects encapsulate Access's Jet functions. Through Jet functions, it can also access other Structured Query Language (SQL) databases. ODBC ... is a widely accepted application programming interface (API) for data base access. It is based on the Call-Level interface (CLI) specified from X/Open and ISO/IEC for data base APIs and uses SQL as its data base language (www.ChristianSchlueter.de) 52