VBA (Visual Basic for Application) Verbindung zur Datenbank mit Hilfe von DAO



Ähnliche Dokumente
VBA (Visual Basic for Application) D(ata) A(ccess) O(bjects)

C# - Einführung in die Programmiersprache Arbeiten mit ADO.NET. Leibniz Universität IT Services Anja Aue

Modul 122 VBA Scribt.docx

Informatik 12 Datenbanken SQL-Einführung

Eine völlig andere Form Abfragen zu erstellen ist, sie mit Hilfe der Datenbankabfragesprache SQL zu gestalten.

SQL. strukturierte Datenbankabfragesprache eine Datenbanksprache zur. Structured Query Language:

Access Grundlagen für Anwender. Susanne Weber. 1. Ausgabe, 1. Aktualisierung, Juni 2013

Aufbau des SELECT-Befehls. Im Folgenden werden zunächst Abfragen aus einer Tabelle vorgenommen.

Access [basics] Programmieren mit Arrays. Beispieldatenbank. Arrays. Eindimensionale Arrays. VBA-Grundlagen Programmieren mit Arrays

Microsoft Access 2010 Bilder

4. BEZIEHUNGEN ZWISCHEN TABELLEN

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Details zu den Ausdrücken nach FROM, WHERE, GROUP BY und HAVING finden Sie in den Abschnitten über JOIN, WHERE und GROUP BY.

Carl-Engler-Schule Karlsruhe Datenbank 1 (5)

Ein Ausflug zu ACCESS

Microsoft Access 2010 Auswahlabfragen erstellen. Leibniz Universität IT Services Anja Aue

Bedienungsanleitung. Stand: Copyright 2011 by GEVITAS GmbH

Microsoft Access 2013 Spezifikationen

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

Anleitung zur Einrichtung einer ODBC Verbindung zu den Übungsdatenbanken

Access Verbrecherdatenbank Teil 3

Artikel Schnittstelle über CSV

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken.

Schritt 1: Verwenden von Excel zum Erstellen von Verbindungen mit SQL Server-Daten

Beheben von verlorenen Verknüpfungen

Programmieren für mobile Endgeräte SS 2013/2014. Dozenten: Patrick Förster, Michael Hasseler

O UTLOOK EDITION. Was ist die Outlook Edition? Installieren der Outlook Edition. Siehe auch:

Datenbanken Microsoft Access 2010

Bilderverwaltung mit Access

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Datenbanken Kapitel 2

ODBC-Treiber Programmübersicht

Access [basics] Aktionsabfragen per VBA ausführen. Beispieldatenbank. Aktionsabfragen. Die Execute-Methode. Datenzugriff per VBA

Access Grundlagen für Anwender. Andrea Weikert 1. Ausgabe, 1. Aktualisierung, Juli inkl. zusätzlichem Übungsanhang ACC2010-UA

Access 2010 Programmierung Import und Export nach Excel

Datenbanken auf Sybase SQL-Anywhere

novapro Open Audittrail Report

Sin-Funktion vgl. Cos-Funktion

Arbeiten mit einem lokalen PostgreSQL-Server

Excel Funktionen durch eigene Funktionen erweitern.

Einkaufslisten verwalten. Tipps & Tricks

16 SQL Server-Zugriff per VBA

Alerts für Microsoft CRM 4.0

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.

Kleines Handbuch zur Fotogalerie der Pixel AG

Programmierkurs Java

SQL structured query language

Access und die andern (Office) Programme. Armin Hess

1. Einschränkung für Mac-User ohne Office Dokumente hochladen, teilen und bearbeiten

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

Im Original veränderbare Word-Dateien

INDEX. Öffentliche Ordner erstellen Seite 2. Offline verfügbar einrichten Seite 3. Berechtigungen setzen Seite 7. Öffentliche Ordner Offline

Schritt 1: Verwenden von Excel zum Erstellen von Verbindungen zu SQL Server Analysis Services-Daten

Updatehinweise für die Version forma 5.5.5

Durchführung der Datenübernahme nach Reisekosten 2011

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können.

Datenexport aus JS - Software

Bedienungsanleitung CAD-KAS Reklamationserfassung. Einen neuen Datensatz anlegen. Klicken Sie auf das + Symbol, um einen neuen Datensatz anzulegen.

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter

WIE KANN ICH ACCESS XML FÄHIGKEITEN UNABHÄNGIG VON DER VERSION BEIBRINGEN?

Die neue Datenraum-Center-Administration in. Brainloop Secure Dataroom Service Version 8.30

Funktionsbeschreibung. Lieferantenbewertung. von IT Consulting Kauka GmbH

Datenverwaltung mit MS Excel INHALTSVERZEICHNIS

SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Änderungen im Vertrags-Manager

Anleitung zum erstellen einer PDF-Datei aus Microsoft Word

7. Übung - Datenbanken

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Access Grundlagen. David Singh

Übungen Programmieren 1 Felix Rohrer. Übungen

6.3 Serienbriefe über Microsoft Excel und Word

Access 2003 Programmierung mit Visual Basic

Anleitung für das Content Management System

Um ein solches Dokument zu erzeugen, muss eine Serienbriefvorlage in Word erstellt werden, das auf die von BüroWARE erstellte Datei zugreift.

Auswahlabfragen mit ACCESS

esms - sms senden & empfangen mit Outlook

Abfragen: Grundbausteine

CVR Seniorentreff vom 04. und Serienbriefe/Seriendruck. Serienbriefe / Seriendruck

Arbeiten am Client. Achtung: Während der gesamten Vorbereitungsarbeiten darf das Programm MS Outlook auf keinen Fall geöffnet werden!

Access 2010 Grundlagen 2. MS Access Datenbanken

MS Access 2010 Kompakt

Schritt 1 - Registrierung und Anmeldung

Zur Bestätigung wird je nach Anmeldung (Benutzer oder Administrator) eine Meldung angezeigt:

CRM. Frequently Asked Questions

Antolin-Titel jetzt automatisch in WinBIAP kennzeichnen

Schnellstarthandbuch. Hilfe aufrufen Klicken Sie auf das Fragezeichen, um Hilfeinhalt anzuzeigen.

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Konfiguration Datenbank-Parameter

Access Datenbank an JetDBAccess

Verteilte Datenbanken

12. Dokumente Speichern und Drucken

Dokumentation. estat Version 2.0

Modul 8: Verwalten von Kunden, Artikeln und mehr - Datenlisten

IAWWeb PDFManager. - Kurzanleitung -

Vielen Dank an Dennis Riehle für die Bereitstellung dieser Folien

Transkript:

VBA (Visual Basic for Application) Verbindung zur Datenbank mit Hilfe von DAO

ADO (ActiveX Data Object)... ermöglicht ein Zugriff auf Datenquellen unterschiedlichster Art und Herkunft.... ist eine Datenbankschnittstelle, die eine Verbindung zu O(bject) L(inking) E(Embedding) Datenbanken herstellt.... nicht für Access 97 geeignet.... ist in Access 2000 Standard. Access 2007 nutzt die Version ADO 2.8. OpenOffice 13.08.08 Folie 2 Access 2007 VBA 06.03.08 Seite 2

DAO (Data Access Object)... wird für die Programmierung und Manipulation von Access- Datenbanken und deren Objekte genutzt.... wurde speziell als Datenbankschnittstelle für Access-Datenbanken und ODBC (Open Database Connectivity) entwickelt.... ist ab Access 2003 Standard für die Verbindung von Datenbanken und VBA.... wird bis Access 2003 als DAO 3.xx implementiert. Access 2007 nutzt die Neuentwicklung Microssoft Office 12.0 Access database engine object Library (acedato.dll). Die neue Schnittstelle enthält die älteren Versionen sowie neue Elemente wie Anlagen etc. http://msdn.microsoft.com/en-us/library/bb244889.aspx OpenOffice 13.08.08 Folie 3 Access 2007 VBA 06.03.08 Seite 3

DAO einbinden Klicken Sie auf das Menü Extras Verweise im VBA-Editor. In einer ACCDB (Access 2007) ist Microsoft Office 12.0 Access database engine Object Library standardmäßig eingebunden. Für eine MDB kann Microsoft DAO 3.6 Object Library eingebunden werden. OpenOffice 13.08.08 Folie 4 Access 2007 VBA 06.03.08 Seite 4

Objektmodell DBEngine (Access-Application) Workspaces (Benutzersitzung) Workspace Databases (Alle geöffneten Datenbanken) OpenOffice 13.08.08 Folie 5 Access 2007 VBA 06.03.08 Seite 5

Objektmodell Databases (Alle geöffneten Datenbanken) Database (Geöffnete Datenbank) Recordsets (Alle geöffneten Datensätze) Relations (Beziehungen in Access) TableDefs (Alle Tabellendefinitionen) Recordset (Datensatz) Fields (Alle Datenfelder) OpenOffice 13.08.08 Folie 6 Access 2007 VBA 06.03.08 Seite 6

Arbeitsablauf Die Arbeitsumgebung wird festgelegt. Die Datenbank wird geöffnet. Tabellen / Abfragen öffnen. Datensätze neu erstellen oder bearbeiten. Tabelle / Abfrage schließen. Datenbank schließen. OpenOffice 13.08.08 Folie 7 Access 2007 VBA 06.03.08 Seite 7

Standard-Arbeitsbereich Dim wsaccess As DAO.Workspace Set wsaccess = DBEngine(0) Set wsaccess = DBEngine.Workspaces(0) Beide Anweisungen geben ein Verweis auf die Standard- Arbeitsumgebung zurück. DBEngine... wird automatisch von der Jet-Engine erstellt.... repräsentiert die Daten in einer Access-Datenbank.... ist eine Eigenschaft der Access-Anwendung Workspace... repräsentiert eine Arbeitssitzung. Der Arbeitsbereich besteht aus dem Benutzernamen, dem Passwort sowie alle dazugehörigen Datenbanken. Es können mehrere Arbeitssitzungen geöffnet werden. OpenOffice 13.08.08 Folie 8 Access 2007 VBA 06.03.08 Seite 8

Neuen Arbeitsbereich Dim wsaccess As DAO.Workspace Dim struser As String Dim strpasswort As String struser = "Admin" strpasswort = "" Set wsaccess = DBEngine.CreateWorkspace( "database", struser, strpasswort, dbusejet) Workspaces.Append wsaccess Hier wird ein neuer Arbeitsbereich für einen bestimmten Benutzer angelegt. Das Benutzerkonto muss vorhanden sein, andernfalls wird eine Fehlermeldung ausgegeben. Der neu erstellte Arbeitsbereich wird nicht automatisch der Auflistung hinzugefügt. Append fügt einen Arbeitsbereich der Auflistung hinzu. OpenOffice 13.08.08 Folie 9 Access 2007 VBA 06.03.08 Seite 9

Zugriff auf Datenbanken Dim dbs As DAO.Database Set dbs = DBEngine.Workspaces(0).Databases(0) Set dbs = DBEngine(0)(0) Set dbs = DBEngine.Databases(0) Database... ist ein virtuelles Abbild der Datenbank. Zu einer Datenbank gehören Tabellen und Abfragen. Formulare, Berichte und Module sind abhängig vom Datenbank-Managmentsystem und gehören nicht zur Datenbank. DAO kann mehr als eine Datenbank gleichzeitig geöffnet haben. Alle Anweisungen greifen auf die aktuell geöffnete Datenbank in der Standard-Arbeitsumgebung zu. Mit Hilfe dieser Anweisungen kann zum Beispiel von Excel auf eine Access-Datenbank zugegriffen werden. OpenOffice 13.08.08 Folie 10 Access 2007 VBA 06.03.08 Seite 10

Zugriff auf die aktuelle Datenbank Dim dbs As DAO.Database Set dbs = CurrentDb() Set dbs = DBEngine(0)(0) Am meisten wird die Methode CurrentDb() genutzt. Die Methode... gibt einen Verweis auf die aktuell geöffnete Datenbank zurück.... erzeugt eine Instanz der aktuellen Datenbank.... greift immer auf die aktuelle Datenstruktur zurück.... kann nur in einer Access-Anwendung genutzt werden. Der Verweis auf die aktuelle Datenbank muss in einer Objektvariablen gespeichert werden. Der Verweis verliert nach dem Aufruf seine Gültigkeit. Der Verweis ist nur zum Zeitpunkt des Aufrufs existent. OpenOffice 13.08.08 Folie 11 Access 2007 VBA 06.03.08 Seite 11

Externe Datenbank öffnen Dim ws As Workspace Dim dbs As Database Dim pfad As String Set ws = DBEngine.Workspaces(0) pfad = Application.CurrentProject.Path & "\work.mdb" If Dir$(pfad ) <> "" Then Set dbs = ws.opendatabase( pfad, _ False, _ False, _ Welche Datenbank wird geöffnet? Öffnung in einer Mehrbenutzer-Umgebung Zum Schreiben und Lesen öffnen. "MS Access; pwd=passwort") End If Verbindungsinformationen. OpenOffice 13.08.08 Folie 12 Access 2007 VBA 06.03.08 Seite 12

Informationen zur Datenbank Dim dbs As DAO.Database Set dbs = CurrentDb() Debug.Print db.name ' Name der Datenbank Debug.Print db.version ' Genutzte Access-Version ' Pfad des aktuellen Projekts Debug.Print Application.CurrentProject.Path OpenOffice 13.08.08 Folie 13 Access 2007 VBA 06.03.08 Seite 13

Properties (Eigenschaften) nutzen Dim dbs As DAO.Database Dim obj As DAO.Property On Error GoTo Fehler Set dbs = CurrentDb() Debug.Print dbs.properties!apptitle Set dbs = Nothing Exit Sub Mit Hilfe der Collection Properties können verschiedene Eigenschaften der Datenbank abgefragt und gesetzt werden. Zum Beispiel AppTitle liefert den Titel der Anwendung, StartupShowDBWindow blendet den Navigationsbereich aus, StartupForm legt eine Startform fest. OpenOffice 13.08.08 Folie 14 Access 2007 VBA 06.03.08 Seite 14

Properties (Eigenschaften) erzeugen Const conpropnotfounderror = 3270... Fehler: If Err.Number = conpropnotfounderror Then Set obj = dbs.createproperty("apptitle", _ dbtext, "DAO-Example") dbs.properties.append obj Else MsgBox "Fehler: " & Err.Description End If Resume Next OpenOffice 13.08.08 Folie 15 Access 2007 VBA 06.03.08 Seite 15

Erläuterung CreateProperty... erzeugt eine Eigenschaft einer Datenbank. Falls die Eigenschaft vorhanden ist, wird ein Fehler geliefert.... bekommt den Namen der Eigenschaft sowie deren Datentyp übergeben. Für Zeichenfolgen wird der Typ dbtext, für boolsche Werte dbboolean und für Ganzzahlen dbinteger übergeben.... bekommt als dritten Parameter einen Wert entsprechend des Datentyps übergeben.. Append fügt der Auflistung Properties die neu erzeugte Eigenschaft hinzu. OpenOffice 13.08.08 Folie 16 Access 2007 VBA 06.03.08 Seite 16

Datenbank-Objekt zerstören Dim dbs As DAO.Database Set dbs = CurrentDb() dbs.close Set dbs = Nothing Die Verbindung zu der, in der Objektvariablen gespeicherten Datenbank wird geschlossen. Um eine Nutzung eines ungültigen Verweise zu verhindern, wird der Verweis mit Hilfe von Nothing zerstört. OpenOffice 13.08.08 Folie 17 Access 2007 VBA 06.03.08 Seite 17

Recordset... bildet eine Tabelle, eine Abfrage oder eine SQL-Anweisung ab.... hat immer eine bestimmte Anzahl von Datensätzen.... ermöglicht ein Zugriff auf die Datenfelder eines Datensatzes. OpenOffice 13.08.08 Folie 18 Access 2007 VBA 06.03.08 Seite 18

Öffnen einer Tabelle oder Abfrage Voraussetzung: Eine Datenbank ist geöffnet. Es ist eine Variable vom Typ Database initialisiert. vardatabase.openrecordset(quelle [, Typ, Optionen, Sperren] )... erstellt ein virtuelles Abbild einer Tabelle oder Abfrage. Als Abfrage kann eine SQL-Anweisung oder eine in der Datenbank vorhandene Abfrage genutzt werden.... ermöglicht das Arbeiten mit Daten aus Tabellen oder Abfragen. OpenOffice 13.08.08 Folie 19 Access 2007 VBA 06.03.08 Seite 19

Beispiel Dim dbs As DAO.Database Dim rstbl As DAO.Recordset Dim rsqry As DAO.Recordset Set dbs = CurrentDb() Es wird ein Verweis auf die Tabelle tblware erzeugt. Der Methode wird der Name der Tabelle sowie der Typ, auf den verwiesen werden soll, übergeben. Standardmäßig wird auf eine Tabelle in der angegebenen Datenbank verwiesen. Set rstbl = db.openrecordset("tblware", dbopentable) rstbl.close Set rsqry = db.openrecordset("qrywareinfo", dbopendynaset) rsqry.close dbs.close Set dbs = Nothing Es wird ein virtuelles Abbild einer Abfrage erzeugt. OpenOffice 13.08.08 Folie 20 Access 2007 VBA 06.03.08 Seite 20

Typen des Recordsets dbopentable... greift auf eine Tabelle in der geöffneten Datenbank zu. Die Daten in der Tabelle können bearbeitet, aber nicht sortiert werden.... wird für eine schnelle Suche in Tabellen genutzt. dbopendynaset... wird für Abfragen, verknüpfte Tabellen und SQL-Anweisungen genutzt.... lädt einen eindeutigen Schlüssel für jeden Datensatz in den Speicher. Die Daten werden bei Bedarf nachgeladen. Datensätze können hinzugefügt und gelöscht werden. Datensätze, die nicht auf einer 1:n-Beziehung beruhen, können verändert werden. Die Daten können beliebig gefiltert und sortiert werden. dbopensnapshot... erstellt eine Kopie der Daten zu einem bestimmten Zeitpunkt. Die Daten können nicht bearbeitet werden. OpenOffice 13.08.08 Folie 21 Access 2007 VBA 06.03.08 Seite 21

Optionen zum Öffnen der Datensätze Dim dbs As DAO.Database Dim rstbl As DAO.Recordset Dim rsqry As DAO.Recordset Set dbs = CurrentDb() Set rstbl = db.openrecordset("tblware", dbopentable, dbreadonly) rstbl.close Set rsqry = db.openrecordset("qrywareinfo", dbopendynaset, dbconsistent OR dbseechanges) rsqry.close dbs.close Set dbs = Nothing OpenOffice 13.08.08 Folie 22 Access 2007 VBA 06.03.08 Seite 22

Mögliche Optionen Die verschiedenen Optionen können durch eine OR-Verknüpfung miteinander verknüpft werden. dbappendonly Daten können einem Dynaset hinzugefügt, aber nicht angezeigt werden. dbreadonly Änderungen sind an den Datensätzen nicht möglich. Mehrbenutzer-Umgebung: dbdenywrite Andere Nutzer können keine Datensätze hinzufügen oder ändern. dbdenyread Andere Nutzer können keine Datensätze in der Tabelle lesen. dbconsistent In einem Dynaset oder Snapshot sind nur konsistente Änderungen möglich. dbseechanges Auslösung eines Laufzeitfehlers, wenn ein Benutzer Daten ändert, die ein anderer bearbeitet. OpenOffice 13.08.08 Folie 23 Access 2007 VBA 06.03.08 Seite 23

Datensätze sperren Dim dbs As DAO.Database Dim rstbl As DAO.Recordset Dim rsqry As DAO.Recordset Set dbs = CurrentDb() Set rstbl = db.openrecordset("tblware", dbopentable,, dbreadonly) rstbl.close dbs.close Set dbs = Nothing OpenOffice 13.08.08 Folie 24 Access 2007 VBA 06.03.08 Seite 24

Sperren... beeinflusst das Verhalten des Recordsets in einer Mehrbenutzerumgebung. dbreadonly Änderungen an den Datensätzen sind nicht möglich. Die Datensätze können nur gelesen werden. dbpessimistic Der Datensatz wird während der Bearbeitung für alle anderen Nutzer gesperrt. Ein lesender Zugriff ist aber möglich. dboptimistic Der Datensatz wird während der Aktualisierung gesperrt. Während der Bearbeitung ist der Datensatz nicht für andere Nutzer gesperrt. OpenOffice 13.08.08 Folie 25 Access 2007 VBA 06.03.08 Seite 25

Datensätze basieren auf einen SQL-String Dim dbs As DAO.Database Dim rs As DAO.Recordset Dim strsql As String strsql = "SELECT titel FROM qrybuchinfo " strsql = strsql & "WHERE nachname LIKE 'Williams'" Set dbs = CurrentDb() Set rs = db.openrecordset(strsql, dbopensnapshot) rs.close dbs.close Set dbs = Nothing OpenOffice 13.08.08 Folie 26 Access 2007 VBA 06.03.08 Seite 26

Ausflug zu SQL (Structured Query Language) Strukturierte Abfragesprache für relationale Datenbanken. Datendefinition, -manipulation, -abfrage.... definiert Kriterien, um nach Daten zu suchen.... kann eine Menge von Datensätze automatisch aktualisieren oder löschen.... besteht aus sehr wenigen Kommandos, sehr vielen Schlüsselwörter und einfachen Funktionen. In SQL sind keine Schleifen, bedingte Anweisungen oder die Nutzung von Variablen implementiert.... enden in der SQL-Ansicht der Abfrage mit einem Semikolon. OpenOffice 13.08.08 Folie 27 Access 2007 VBA 06.03.08 Seite 27

Werte in der Tabelle ansehen SELECT * FROM tabellenname Durch das Sternchen werden alle Datensätze aus einer Tabelle angezeigt. SELECT (Wähle aus, Selektierte) alle FROM (Wo?, von) tabelle. OpenOffice 13.08.08 Folie 28 Access 2007 VBA 06.03.08 Seite 28

Bestimmte Spalten auswählen SELECT datenfeld1, datenfeld2,... FROM tabellenname Das Sternchen kann durch Spaltennamen in der Tabelle ersetzt werden. Es werden nur die Daten in den angegebenen Spalten angezeigt. Die Spaltennamen... werden durch ein Kommata getrennt.... müssen in der angegebenen Tabelle vorkommen. Andernfalls wird ein Fehler angezeigt. Die Reihenfolge der Spaltennamen spielt keine Rolle. OpenOffice 13.08.08 Folie 29 Access 2007 VBA 06.03.08 Seite 29

Datensätze filtern SELECT * FROM tabellenname WHERE bedingung; Es werden alle Datensätze angezeigt, die der Bedingung entsprechen. Die Bedingung oder das Kriterium für die Auswahl beginnt mit WHERE. Eine Bedingung kann sich folgendermaßen aufbauen: feld Vergleichsoperator Wert Mehrere Bedingungen können miteinander verknüpft werden. OpenOffice 13.08.08 Folie 30 Access 2007 VBA 06.03.08 Seite 30

Bedingungen... sind Ausdrücke, die einen boolschen Wert zurückliefern. Ein boolscher Wert ist true(wahr) oder false(falsch, 0)... vergleichen mit Hilfe von bestimmten Operatoren zwei Werte.... sind zum Beispiel: Wenn die Bestellmenge eine gewisse Höchstmenge überschreitet... Wenn der Kontostand dem Dispo entspricht... Wenn die Strecke A doppelt so lang ist wie Strecke B... Wenn die Warenmenge eine Mindestmenge unterschreitet... OpenOffice 13.08.08 Folie 31 Access 2007 VBA 06.03.08 Seite 31

Vergleichsoperatoren Operator Rechenart = ist gleich < ist kleiner als <= ist kleiner gleich als > ist größer als >= ist größer gleich als <> ist ungleich Beispiel (7 = 3 ) => False (7 < 3 ) => False (7 <= 3 ) => False (7 > 3 ) => True (7 >= 3 ) => True (7<> 3 ) =>True SELECT artikel, preis, menge FROM lager WHERE artikel = 'Banane'; SELECT artikel, preis, menge FROM lager WHERE preis >= 2.53; SELECT artikel, preis, menge FROM lager WHERE menge < 10; OpenOffice 13.08.08 Folie 32 Access 2007 VBA 06.03.08 Seite 32

Logische Operatoren... oder relationale Operatoren.... verknüpfen zwei oder mehr Bedingungen miteinander. Folgende Möglichkeiten sind vorhanden: AND (Und, Konjunktion) ist nur wahr, wenn alle Bedingungen wahr sind. OR (Oder, Disjunktion) ist wahr, sobald eine der Bedingungen wahr ist. NOT (Negation) invertiert den boolschen Wert der Bedingung. OpenOffice 13.08.08 Folie 33 Access 2007 VBA 06.03.08 Seite 33

Logische Operatoren nutzen SELECT artikel, preis, menge FROM lager WHERE artikel = 'Banane' AND preis >= 1.23; SELECT artikel, preis, menge FROM lager WHERE (preis = 1.99) OR (preis = 2.89); SELECT artikel, preis, menge FROM lager WHERE (menge > 5) AND (menge < 10); Bedingung a b Not a a AND b a OR b false false true false false false true true false true true false false false true true true false true true OpenOffice 13.08.08 Folie 34 Access 2007 VBA 06.03.08 Seite 34

Wertebereiche und Listen nutzen SELECT * FROM tabellenname WHERE datenfeld BETWEEN untergrenze AND obergrenze; SELECT * FROM tabellenname WHERE NOT datenfeld BETWEEN untergr AND obergr; SELECT * FROM tabellenname WHERE datenfeld IN (element1, element2,...); SELECT * FROM tabellenname WHERE datenfeld NOT IN (element1, element2,...); OpenOffice 13.08.08 Folie 35 Access 2007 VBA 06.03.08 Seite 35

Undefinierte Werte SELECT * FROM tabellenname WHERE datenfeld IS NULL; SELECT * FROM tabellenname WHERE NOT(datenfeld IS NULL); SELECT * FROM tabellenname WHERE datenfeld = ''; SELECT * FROM tabellenname WHERE NOT(datenfeld = ''); OpenOffice 13.08.08 Folie 36 Access 2007 VBA 06.03.08 Seite 36

LIKE... entspricht dem Gleichheitszeichen.... kann nur für Textwerte genutzt werden.... wird für Mustervergleiche genutzt. Im Suchmuster können folgende Platzhalter an beliebiger Position vorkommen: Das Fragezeichen ersetzt ein Zeichen. Das Sternchen ersetzt eine beliebige Anzahl von Zeichen. Das Hash-Zeichen ersetzt eine beliebige Ziffer. OpenOffice 13.08.08 Folie 37 Access 2007 VBA 06.03.08 Seite 37

Beispiele SELECT nachname, eintritt FROM mitarbeiter WHERE nachname LIKE 'M*'; SELECT nachname, eintritt FROM mitarbeiter WHERE nachname LIKE 'Me?er'; SELECT artikel, preis, menge FROM lieferbar WHERE artikel LIKE 'Banane?'; SELECT artikelnr, artikel FROM lieferbar WHERE artikelnr LIKE '456-*-78-?'; SELECT standort, plz, groesse menge FROM lager WHERE plz LIKE '38###'; OpenOffice 13.08.08 Folie 38 Access 2007 VBA 06.03.08 Seite 38

Daten sortieren SELECT * FROM tabellenname ORDER BY datenfeld SELECT artikel, preis, menge FROM lager WHERE preis >= 1.23 ORDER BY artikel; Hier werden die Daten sortiert.... ORDER BY datenfeld ASC. ASC entspricht einer aufsteigenden Sortierung (A bis Z und 0 bis 9).... ist die Standardsortierung.... ORDER BY datenfeld DESC. DESC entspricht einer absteigenden Sortierung (Z bis A und 9 bis 0). Es kann mit Hilfe von ORDER BY feld1, feld2 mehrere Felder sortiert werden. Die Daten werden zuerst nach feld1 sortiert und anschließend nach feld2. OpenOffice 13.08.08 Folie 39 Access 2007 VBA 06.03.08 Seite 39

Inner - Join - Verknüpfung... oder Exklusionsverknüpfung, Equival-Join.... verknüpft über ein oder mehrere gemeinsame Felder.... sucht passend zu einem Fremdschlüssel in einer Detailtabelle einen Primärschlüssel in einer Mastertabelle. Es wird eine 1 : n Beziehung nachgebildet. Es werden nur die Datensätze angezeigt, deren verknüpfte Werte in beiden Tabellen vorkommen.... wird am häufigsten verwendet. Das Ergebnis ist ein Dynaset. Das Ergebnis dieser SQL-Anweisung kann bearbeitet werden. OpenOffice 13.08.08 Folie 40 Access 2007 VBA 06.03.08 Seite 40

Beispiel SELECT tabland.land, tabkontinent.kontinent FROM tabkontinent INNER JOIN tabland Welche Tabelle wird mit welcher Tabelle verknüpft? Auf welche Art werden die Tabellen verknüpft? ON tabkontinent.idkontinent = tabland.kontinent Welche Spalte aus der Mastertabelle wird mit welcher Spalte aus der Detailtabelle verknüpft? Die Werte beider Spalten muss übereinstimmen. OpenOffice 13.08.08 Folie 41 Access 2007 VBA 06.03.08 Seite 41

Grafische Darstellung Europa Frankreich Europa Europa Asien Asien Spanien China Indien Antarktis Inner Join Asien Amerika Australien Afrika tabkontinent tabland Afrika Südafrika Arktis Europa Frankreich Europa Spanien Asien China Asien Indien Afrika Südafrika OpenOffice 13.08.08 Folie 42 Access 2007 VBA 06.03.08 Seite 42

Left Join - Verknüpfung SELECT tabland.land, tabkontinent.kontinent FROM tabkontinent LEFT JOIN tabland ON tabkontinent.idkontinent = tabland.kontinent Es werden alle Datensätze aus der linken Tabelle angezeigt. Es werden nur die Datensätze aus der rechten Tabelle angezeigt, die eine Beziehung zu der linken Tabelle besitzen. OpenOffice 13.08.08 Folie 43 Access 2007 VBA 06.03.08 Seite 43

Grafische Darstellung Europa Frankreich Europa Europa Asien Asien Spanien China Indien Antarktis Left Join Asien Amerika Australien Afrika tabkontinent tabland Afrika Südafrika Arktis Europa Europa Frankreich Spanien Asien China Asien Indien Afrika Südafrika Amerika Australien OpenOffice 13.08.08 Folie 44 Access 2007 VBA 06.03.08 Seite 44

Right Join - Verknüpfung SELECT tabland.land, tabkontinent..kontinent FROM tabkontinent RIGHT JOIN tabland ON tabkontinent.idkontinent = tabland.kontinent Es werden alle Datensätze aus der rechten Tabelle angezeigt. Es werden nur die Datensätze aus der linken Tabelle angezeigt, die eine Beziehung zu der rechten Tabelle besitzen. OpenOffice 13.08.08 Folie 45 Access 2007 VBA 06.03.08 Seite 45

Right- Join - Verknüpfung Europa Frankreich Europa Europa Asien Asien Spanien China Indien Antarktis Right Join Asien Amerika Australien Afrika tabkontinent tabland Afrika Südafrika Arktis Europa Europa Frankreich Spanien Asien China Asien Indien Afrika Südafrika Antarktis Arktis OpenOffice 13.08.08 Folie 46 Access 2007 VBA 06.03.08 Seite 46

Sind Datensätze vorhanden? Set dbs = CurrentDb() Set rs = db.openrecordset(strsql, dbopensnapshot) If (rs.recordcount = 0) Then MsgBox("Es sind keine Datensätze vorhanden") Else MsgBox("Es sind x Datensätze vorhanden") End If rs.close OpenOffice 13.08.08 Folie 47 Access 2007 VBA 06.03.08 Seite 47

RecordCount... liefert die Anzahl der gelesenen Datensätze. Quelle: Tabelle (dbtable): Die Gesamtzahl aller Datensätze werden angezeigt. Wie viele Datensätze besitzt das Recordset? Quelle: dbdynaset oder dbsnapshot oder Abfragen: Die Gesamtzahl der Datensätze ist immer eins. Es wird ein falsches Ergebnis geliefert. OpenOffice 13.08.08 Folie 48 Access 2007 VBA 06.03.08 Seite 48

Besser... Set dbs = CurrentDb() Set rs = db.openrecordset(strsql, dbopensnapshot) ' Wenn der Anfang und das Ende der Datensätze gleich ist If (rs.bof AND rs.eof) Then MsgBox("Es sind keine Datensätze vorhanden") Else rs.requery ' Datensätze aktualisieren ' nur Dynaset, Snapshot rs.movelast ' Gehe zum letzten Datensatz MsgBox "Es sind " & rs.recordcount & _ " Datensätze vorhanden" End If rs.close OpenOffice 13.08.08 Folie 49 Access 2007 VBA 06.03.08 Seite 49

BOF und EOF BOF (Begin of) Datensatz 01 Datensatz 02 Datensatz 03 Datensatz 04 Datensatz 05 EOF (End of) OpenOffice 13.08.08 Folie 50 Access 2007 VBA 06.03.08 Seite 50

In Datensätzen navigieren BOF (Begin of) rs.moveprevious rs.movenext Datensatz 01 Datensatz 02 Aktueller Datensatz Datensatz 04 Datensatz 05 rs.movefirst rs.movelast EOF (End of) OpenOffice 13.08.08 Folie 51 Access 2007 VBA 06.03.08 Seite 51

In Datensätzen navigieren BOF (Begin of) Datensatz 01 rs.move(-1) rs.move(1) Datensatz 02 Aktueller Datensatz Datensatz 04 Datensatz 05 rs.absoluteposition = 3 rs.move(rs.absoluteposition - 2) EOF (End of) OpenOffice 13.08.08 Folie 52 Access 2007 VBA 06.03.08 Seite 52

AbsolutePosition... kann nur beim Typ Dynaset oder Snapshot genutzt werden.... positioniert den Datensatz-Zeiger neu oder gibt die aktuelle Position relativ zu 0 zurück. Der erste Datensatz hat den Index 0.... kann keinen Wert größer als (.RecordCount 1) annehmen. OpenOffice 13.08.08 Folie 53 Access 2007 VBA 06.03.08 Seite 53

Datensätze von vorn nach hinten durchlaufen Set dbs = CurrentDb() Set rs = db.openrecordset(strsql, dbopensnapshot) If (rs.bof AND rs.eof) Then MsgBox("Es sind keine Datensätze vorhanden") Else rs.requery Do While Not rs.eof rs.movenext Loop End If rs.close OpenOffice 13.08.08 Folie 54 Access 2007 VBA 06.03.08 Seite 54

Datensätze von hinten nach vorn durchlaufen Set dbs = CurrentDb() Set rs = db.openrecordset(strsql, dbopensnapshot) If (rs.bof AND rs.eof) Then MsgBox("Es sind keine Datensätze vorhanden") Else rs.requery rs.movelast Do While Not rs.bof rs.moveprevious Loop End If rs.close OpenOffice 13.08.08 Folie 55 Access 2007 VBA 06.03.08 Seite 55

Daten eines Datensatzes... Set rs = db.openrecordset("select * FROM tblmitarbeiter") Debug.Print rs!nachname Debug.Print rs![nachname] Debug.Print rs("nachname") recordset!feldname oder recordset![feld Name] Das Ausrufezeichen trennt Objektvariablen von benutzerdefinierten Bezeichnungen. Wenn die benutzerdefinierte Bezeichnung Leerzeichen oder Sonderzeichen wie Umlaute etc. enthält, muss der Name mit Hilfe von eckigen Klammern zusammengefasst werden. recordset("feldname") Hier wird der Feldname als Index einer Auflistung genutzt. OpenOffice 13.08.08 Folie 56 Access 2007 VBA 06.03.08 Seite 56

Daten eines Datensatzes... Set rs = db.openrecordset("select * FROM tblmitarbeiter") Debug.Print rs.fields!nachname Debug.Print rs.fields("nachname") Debug.Print rs.fields(1) Die Auflistung Fields enthält alle Spalten eines Recordsets. Die Anzahl der Spalten ist abhängig von der angegebenen Quelle (Tabelle, Abfrage oder SQL_Anweisung). Es sollte immer der Name als Index für die Elemente der Auflistung genutzt werden. OpenOffice 13.08.08 Folie 57 Access 2007 VBA 06.03.08 Seite 57

Neue Datensätze hinzufügen Set rs = db.openrecordset("tblkunde") With rs.addnew.fields(" firma") = "Molkerei Kuh Gut".Fields("mail") = "sekretariat@molkereikuhgut.de".update.move 0, rs.lastmodified End rs OpenOffice 13.08.08 Folie 58 Access 2007 VBA 06.03.08 Seite 58

AddNew Nach dieser Anweisung können neue Datensätze eingegeben werden. Für jedes Feld wird ein Wert eingegeben. Der Datensatz wird nicht direkt in der Tabelle gespeichert, sondern in einem Zwischenspeicher. Mit Hilfe der Eigenschaft.Updatable kann überprüft werden, ob der Datensatz verändert werden kann oder nicht. OpenOffice 13.08.08 Folie 59 Access 2007 VBA 06.03.08 Seite 59

Update... übernimmt Änderungen in die Datenbank.... speichert die Daten aus dem Puffer im Recordset.... führt eine Typüberprüfung der Daten durch.... überprüft die Gültigkeit der Daten. OpenOffice 13.08.08 Folie 60 Access 2007 VBA 06.03.08 Seite 60

Daten ändern With rs If rs.updatable Then.MoveFirst Do While.EOF = False If (.Fields("ort") Like "Braunschweig") Then End If.MoveNext Loop End If End With.Edit.Fields("plz") = "38100".Update OpenOffice 13.08.08 Folie 61 Access 2007 VBA 06.03.08 Seite 61

Daten löschen Set rs = db.openrecordset("select plz, ort FROM tblkunde") With rs.movefirst Do While.EOF = False If (.Fields("ort") Like "Braunschweig") Then.Delete End If.MoveNext Loop End With Nach der Löschung wird der Datensatzzeiger nicht automatisch neu gesetzt. Er zeigt auf den gelöschten Datensatz im Speicher. OpenOffice 13.08.08 Folie 62 Access 2007 VBA 06.03.08 Seite 62

Bestimmte Anzahl von Zeilen... Dim daten As Variant Dim anzahlrs As Integer... Set rs = db.openrecordset("select * FROM tblmitarbeiter") With rs.requery.movelast anzahlrs =.RecordCount.MoveFirst daten =.GetRows(anzahl) End With OpenOffice 13.08.08 Folie 63 Access 2007 VBA 06.03.08 Seite 63

Erläuterung Die Methode GetRows... füllt ein Array vom Datentyp Variant mit einer bestimmten Anzahl von Datensätzen.... verschiebt den Datensatzzeiger um die angegebene Anzahl von Datensätzen automatisch. Wenn weniger Datensätze als angegeben vorhanden sind, wird ein Laufzeitfehler angezeigt. OpenOffice 13.08.08 Folie 64 Access 2007 VBA 06.03.08 Seite 64

Lesezeichen nutzen Dim varlesezeichen As Variant... rs.requery rs.movelast rs.movefirst rs.absoluteposition = rs.recordcount \ 2 varlesezeichen = rs.bookmark Debug.Print "Aktuell: "& rs.absoluteposition rs.movelast Debug.Print "Aktuell: " & rs.absoluteposition rs.bookmark = varlesezeichen Debug.Print "Aktuell: " & rs.absoluteposition OpenOffice 13.08.08 Folie 65 Access 2007 VBA 06.03.08 Seite 65

Hinweise rs.bookmark ist eine Lesezeichen auf den aktuellen Datensatz. lesezeichen = rs.bookmark speichert die Position des aktuellen Datensatzes. rs.bookmark = lesezeichen setzt den Datensatzzeiger auf den Datensatz, deren Position in der Variable gespeichert ist. rs.bookmark = rs.lastmodified positioniert den Datensatzzeiger auf den zuletzt hinzugefügten oder geänderten Datensatz. rs.bookmarkable fragt ab, ob Lesezeichen gesetzt werden können. OpenOffice 13.08.08 Folie 66 Access 2007 VBA 06.03.08 Seite 66

Datensatz eines Formulars nutzen ' Klon eines Datensatzes in einem Formular erzeugen Set rs = Me.RecordsetClone ' Einen bestimmten Datensatz suchen rs.findfirst "[nachname] = '" & strname & "'" ' Falls der Datensatz gefunden wurde If Not(rs.NoMatch) Then ' wird das Lesezeichen des Formulars gesetzt Me.Bookmark = rs.bookmark End If OpenOffice 13.08.08 Folie 67 Access 2007 VBA 06.03.08 Seite 67

Hinweise zu RecordsetClone Es wird eine Kopie des Recordsets eines bestimmten Formulars erzeugt. Kopie und Original arbeiten mit dem gleichen Objekt. Wenn das Original zerstört wird, kann nicht mit der Kopie gearbeitet werden. OpenOffice 13.08.08 Folie 68 Access 2007 VBA 06.03.08 Seite 68

Index einer Tabelle durchsuchen Dim dbs As DAO.Database Dim rstbl As DAO.Recordset Dim rsqry As DAO.Recordset Set dbs = CurrentDb() Set rstbl = db.openrecordset("tblware", dbopentable) ' Ein Index muss gesetzt werden rstbl.index = "IDArtikel" ' Es wird nach einem bestimmten Index gesucht... rstbl.seek "=", 125 rstbl.close OpenOffice 13.08.08 Folie 69 Access 2007 VBA 06.03.08 Seite 69

Hinweise In einer Tabelle kann nur mit der Methode.Seek gesucht werden. Voraussetzung: In der Tabelle ist ein Index definiert. Der Primärschlüssel wird zum Beispiel immer indexiert. Folgende Parameter wird der Methode übergeben: Ein Vergleichsoperator als String. Ein Suchmuster. Falls in mehreren Indexfeldern gleichzeitig gesucht werden soll, wird für jedes Feld ein Suchmuster, getrennt durch Kommata angegeben. OpenOffice 13.08.08 Folie 70 Access 2007 VBA 06.03.08 Seite 70

Datensätze durchsuchen Dim dbs As DAO.Database Dim rs As DAO.Recordset Dim strsql As String strsql = "SELECT titel FROM qrybuchinfo" Set dbs = CurrentDb() Set rs = db.openrecordset(strsql, dbopendynaset) rs.findfirst "[nachname] LIKE 'W*'" If rs.nomatch Then MsgBox "Keine Daten vorhanden" End If rs.close OpenOffice 13.08.08 Folie 71 Access 2007 VBA 06.03.08 Seite 71

Möglichkeiten.FindFirst sucht den ersten übereinstimmenden Datensatz..FindLast sucht den ersten übereinstimmenden Datensatz..FindPrevious sucht den vorherigen übereinstimmenden Datensatz ab dem aktuellen Datensatz..FindNext sucht den nächsten übereinstimmenden Datensatz ab dem aktuellen Datensatz. OpenOffice 13.08.08 Folie 72 Access 2007 VBA 06.03.08 Seite 72