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



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

Microsoft Access 2010 Bilder

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

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

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

Artikel Schnittstelle über CSV

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

Datenbanken auf Sybase SQL-Anywhere

Modul 122 VBA Scribt.docx

6.3 Serienbriefe über Microsoft Excel und Word

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

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

Einrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000

Update und Konfiguraton mit dem ANTLOG Konfigurations-Assistenten

Updatehinweise für die Version forma 5.5.5

Tel.: Fax: Ein Text oder Programm in einem Editor schreiben und zu ClassPad übertragen.

Handbuch ECDL 2003 Professional Modul 2: Tabellenkalkulation Vorlagen benutzen und ändern

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

Änderungen im Vertrags-Manager

Im folgenden wird die Outlookanbindung an organice/pi beschrieben.

Excel Funktionen durch eigene Funktionen erweitern.

Durchführung der Datenübernahme nach Reisekosten 2011

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

Sin-Funktion vgl. Cos-Funktion

Microsoft Access 2013 Spezifikationen

Beheben von verlorenen Verknüpfungen

Bilderverwaltung mit Access

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Bedienungsanleitung V1.0. PDA-Programm Eleusis Plus. TECTUS Transponder Technology GmbH

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

-Inhalte an cobra übergeben

Anleitung zum Einfügen von Daten aus OpenOffice Calc in OpenOffice Base Beispiel anhand einer Adressen Calc-Tabelle

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

Variablen & erweiterte Aktionen nutzen

CL-Mini-ABF. Kurzbeschreibung. Installation und Vorbereitung. Stand Ihre HTK-Filiale Michelstadt

HS WAWI. Inhaltsverzeichnis. Beschreibung Masken-Steuerungselemente Suchtoolbar Berichtstoolbar Auswahltabellen...

iphone-kontakte zu Exchange übertragen

Bedienungsanleitung V1.0. PC-Programm / Konverter EP-Schachtmanagement. TECTUS Transponder Technology GmbH

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

3 Richtlinienbasierte Verwaltung und Multi-Server- Administration

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

Installationsanleitung für CashPro im Mehrbenutzerzugriff/Netzwerkbetrieb

Access und die andern (Office) Programme. Armin Hess

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

Verteilte Datenbanken

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

Auswertung erstellen: Liste mit -

IT-Tutorial. Access Microsoft. Infos zur Migration von Access I MPRESSUM

Bedienungsanleitung. Stand: Copyright 2011 by GEVITAS GmbH

Installationsanleitung. Novaline Datenarchivierung / GDPdU

Access Verbrecherdatenbank Teil 3

VisiScan 2011 für cobra

4. BEZIEHUNGEN ZWISCHEN TABELLEN

DV-Organisation und Anwendungsentwicklung. 4. Klausur

SJ OFFICE - Update 3.0

Schrittweise Anleitung zur Installation von Zertifikaten der Bayerischen Versorgungskammer im Mozilla Firefox ab Version 2.0

Workflow. Installationsanleitung

Erstellen eines Formulars

Office Objektmodell (1)

Lehrer: Einschreibemethoden

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

1. Allgemeines. Mit der Vertragsverwaltung können u.a.

ecaros2 - Accountmanager

Ein Ausflug zu ACCESS

Direct Access Suite. Dokumentation

Interoperabilität mit Office-Anwendungen (1)

Klicken Sie auf Weiter und es erscheint folgender Dialog

Benutzer Verwalten. 1. Benutzer Browser

Anleitung zum Einspielen der Demodaten

Eine Anleitung, wie Sie Mozilla Thunderbird 2 installieren und konfigurieren können. Installation Erstkonfiguration... 4

Excel Pivot-Tabellen 2010 effektiv

ZIMT-Dokumentation für Studierende Webmail-Oberfläche (Roundcube)

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

1. Erreichen Sie, dass im Feld KdNr (Kunden-Nummer) nur 4-stellige Zahlen eingetragen

Einkaufslisten verwalten. Tipps & Tricks

I. Travel Master CRM Installieren

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

Web2Lead. Konfiguration

MSDE 2000 mit Service Pack 3a

Archiv - Berechtigungen

OP-LOG

Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge

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

Arbeitsabläufe FinanzProfiT Version 4.25

KURZANLEITUNG CLOUD OBJECT STORAGE

Speichern. Speichern unter

esms - sms senden & empfangen mit Outlook

Die Excel Schnittstelle - Pro Pack

Outlook-Daten komplett sichern

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

12. Dokumente Speichern und Drucken

Webseite innerhalb der TYPO3-Oberfläche anzeigen. Datei Verzeichnisbaum und Dateien anzeigen und bearbeiten

Dateipfad bei Word einrichten

Webseite innerhalb der TYPO3-Oberfläche anzeigen. Newsletter-Adressen verwalten. Datei Verzeichnisbaum und Dateien anzeigen und bearbeiten

Meldung Lokale Anwendung inkompatibel oder Microsoft Silverlight ist nicht aktuell bei Anmeldung an lokal gespeicherter RWE SmartHome Anwendung

Datenbanken Kapitel 2

Internet online Update (Internet Explorer)

Schritt 1 - Registrierung und Anmeldung

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

Wichtige Information zur Verwendung von CS-TING Version 9 für Microsoft Word 2000 (und höher)

Transkript:

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

DAO und ADO DAO (Data Access Object)... wird für die Programmierung und Manipulation von Access-Datenbanken und deren Objekte genutzt.... ist speziell für die Jet (Joint Engine Technologie) entwickelt.... besteht aus einer großen Anzahl von Laufzeitbibliotheken (.dll).... kann auf ODBC-Datenbanken seit Version 3.5 zugreifen. Momentan wird die Version 3.6 genutzt. Access 2007 nutzt eine Neuentwicklung, die auf diese Version aufbaut. ADO (Active(X) Data Object)... ermöglicht ein Zugriff auf Datenquellen unterschiedlicher Art und Herkunft.... baut auf OLE DB auf. OLE DB definiert Interfaces, die die Funktionalitäten für den Zugriff auf unterschiedliche Datenquellen kapseln. Access 2003 nutzt die Version ADO 2.1. Vergleich unter http://www.microsoft.com/germany/msdn/library/data/ MigrationskonzepteUndDerenUmsetzung.mspx?mfr=true OpenOffice 07.12.07 Folie 2

DAO einbinden Klicken Sie auf das Menü Extras Verweise im VBA-Editor. Der Verweis Microsoft DAO 3.6 Object Library ist aktiviert. OpenOffice 07.12.07 Folie 3

Datenmodell dbengine (Objektbibliothek für die Access-App.) Workspace (Arbeitsbereich.) Databases (Ein oder mehrere geöffnete Datenbanken) Recordsets (Alle Datensätze einer Tabelle / Abfrage) Relationes (Beziehungen) Database Recordset TableDefs (Alle vorhandenen Tabellen) QueryDefs (Alle vorhandenen Abfragen) Fields (Menge aller Felder) OpenOffice 07.12.07 Folie 4

Datenmodell dbengine (Objektbibliothek für die Access-App.) Workspace (Arbeitsbereich.)... ist die Basis für alle Datenbankobjekte in Access.... wird von der Jet-Engine automatisch erstellt.... stellt eine Objektbibliothek für Access-Anwendungen bereit.... stellt den Arbeitsbereich dar. Neue Datenbanken können angelegt werden. Vorhandene Datenbanken können geöffnet und verwaltet werden.... normalerweise wird der Arbeitsbereich der aktuellen Datenbank genutzt. OpenOffice 07.12.07 Folie 5

Databases Databases (Ein oder mehrere geöffnete Datenbanken)... ist eine Auflistung aller geöffneten Datenbanken. Database TableDefs (Alle vorhandenen Tabellen) QueryDefs (Alle vorhandenen Abfragen)... ist ein virtuelles Abbild einer geöffneten Datenbank mit allen Tabellen und Abfragen. Formulare, Berichte und Module werden nicht abgebildet.... enthält alle Tabellen und Systemtabellen der geöffneten Datenbank.... enthält alle Abfragen der geöffneten Tabelle. OpenOffice 07.12.07 Folie 6

Recordsets Recordsets (Alle Datensätze einer Tabelle / Abfrage) Es werden mehrere Recordsets über verschiedene Objektvariablen geöffnet. Recordset Fields (Menge aller Felder) Field... ist die Menge aller Datensätze einer Tabelle oder das Ergebnis einer Abfrage.... ist die die Auflistung aller Felder eines Recordsets.... ist ein bestimmtes Feld innerhalb einer Tabelle oder Abfrage. OpenOffice 07.12.07 Folie 7

Zugriff auf die aktuelle Datenbank Dim db As Database Set db = CurrentDb() In der ersten Zeile wird eine Variable vom Datentyp Database erstellt. Mit Hilfe von Set wird die Variable initialisiert. Hier wird der Variablen ein Verweis auf die aktuelle Datenbank übergeben. Falls die Verbindung zwischen Objekt und Objektvariable nicht benötigt wird, sollte diese mit Hilfe der Anweisung Set db = Nothing getrennt werden. CurrentDb()... öffnet eine neue aktuelle Instanz der momentan geöffneten Datenbank.... sollte, wenn möglich, nur einmal in einem Projekt einer Variablen zugewiesen werden. Anschließend sollte diese Objektvariable genutzt werden. OpenOffice 07.12.07 Folie 8

Zugriff auf die aktuelle Datenbank Dim db As Database Set db = DBEngine.Workspace(0).Databases(0) Hier wird der komplette "Pfad" genutzt. DbEngine bezeichnet das Objektmodell für Access-Anwendungen. Workspace(0) bezeichnet den Standard-Arbeitsbereich der aktuellen Datenbank. Databases(0) bezeichnet die aktuelle Datenbank. Der komplette Pfad kann auch durch die DBEngine(0)(0) ersetzt werden. OpenOffice 07.12.07 Folie 9

Zusätzliche Informationen Dim db As Database Set db = DBEngine.Workspace(0).Databases(0) Debug.Print db.name Debug.Print db.version Debug.Print db.properties("build") Die Eigenschaft Name gibt den vollständigen Pfad der Datenbank zurück. Die Eigenschaft Version gibt über die genutzte Access-Version Auskunft. Die Eigenschaft Build gibt die Buildnummer der installierten Access- Anwendung zurück. Diese Eigenschaft kann nur über die Properties- Auflistung abgefragt werden. OpenOffice 07.12.07 Folie 10

Zugriff auf eine beliebige Datenbank Dim ws As Workspace Dim db As Database Set ws = DBEngine.Workspace(0) Set db = ws.opendatabase("c:\eigene Dateien\work.mdb") OpenOffice 07.12.07 Folie 11

Zugriff auf eine beliebige Datenbank Zu Anfang werden zwei Objektvariablen erstellt Dim ws As Workspace Die erste Objektvariable ist vom Dim db As Database Datentyp Workspace. Sie kann ein Verweis auf ein Arbeitsbereich Set ws = DBEngine.Workspace(0) enthalten. Die zweite Objektvariable ist vom Set db = ws.opendatabase("c:\eigene Dateien\work.mdb") Datentyp Database. Sie kann ein Verweis auf eine Datenbank enthalten. OpenOffice 07.12.07 Folie 12

Zugriff auf eine beliebige Datenbank Dim ws As Workspace Dim db As Database Der Variablen enthält einen Set ws = DBEngine.Workspace(0) Verweis auf den Standard- Arbeitsbereich von Access. Set db = ws.opendatabase("c:\eigene Dateien\work.mdb") OpenOffice 07.12.07 Folie 13

Zugriff auf eine beliebige Datenbank Dim ws As Workspace Dim db As Database Set ws = DBEngine.Workspace(0) Set db = ws.opendatabase("c:\eigene Dateien\work.mdb") In diesem Beispiel wird der Objektvariablen ein Verweis auf eine beliebige Datenbank übergeben. Die Datenbank wird durch die Angabe des vollständigen Pfades identifiziert. Die existierende Datenbank selber kann geöffnet oder geschlossen sein. OpenOffice 07.12.07 Folie 14

Existiert die Datei? Dim ws As Workspace Dim db As Database Dim pfad As String Set ws = DBEngine.Workspace(0) pfad = Application.CurrentProject.Path & "\work.mdb" If Dir$(pfad ) <> "" Then Set db = ws.opendatabase(pfad) End If Der Dir-Funktion wird ein Suchmuster übergeben. Falls ein Dateiname oder Ordnername dem Suchmuster entspricht, gibt die Funktion die gefundene Bezeichnung zurück. Andernfalls wird ein leerer String zurückgegeben. Die Funktion gibt keine Auskunft darüber, ob eine Datei exklusiv geöffnet werden kann oder nicht. OpenOffice 07.12.07 Folie 15

Datei exklusiv und schreibgeschützt öffnen Dim ws As Workspace Dim db As Database Dim pfad As String Set ws = DBEngine.Workspace(0) pfad = Application.CurrentProject.Path & "\work.mdb" If Dir$(pfad ) <> "" Then Set db = ws.opendatabase(pfad, True, False) End If Der zweite, an OpenDataBase() zu übergebene Parameter ist true. Das heißt, die Datenbank wird exklusiv geöffnet. Die Datenbank kann innerhalb des Netzes nur einmal geöffnet werden, alle anderen Zugriffe werden gesperrt. Der dritte, an OpenDataBase() zu übergebene Parameter ist false. Die Datenbank wird nicht schreibgeschützt geöffnet. OpenOffice 07.12.07 Folie 16

Datei mit einem Passwort öffnen Dim ws As Workspace Dim db As Database Dim pfad As String Set ws = DBEngine.Workspace(0) pfad = Application.CurrentProject.Path & "\work.mdb" If Dir$(pfad ) <> "" Then Set db = ws.opendatabase(pfad, False, False, "MS Access; pwd=passwort") End If OpenDatabase() kann als letztes Argument Verbindungsinformationen wie Kennwörter etc übergeben werden. Zwischen den verschiedenen Angaben wird ein Semikolon als Trennzeichen genutzt. In diesem Beispiel wird die Art der Datenbank sowie ein Passwort zum Öffnen der Datenbank übergeben. OpenOffice 07.12.07 Folie 17

Verbindung schließen Dim ws As Workspace Dim db As Database Dim pfad As String Set ws = DBEngine.Workspace(0) pfad = Application.CurrentProject.Path & "\work.mdb" Set db = ws.opendatabase(pfad) db.close 'Andere Möglichkeit: Set db = NOTHING Mit Hilfe der Methode Close wird die Verbindung zu einer Datenbank geschlossen. Nach dem Verlassen der Prozedur wird automatisch die Datenbankverbindung getrennt. OpenOffice 07.12.07 Folie 18

Daten anzeigen Dim ws As Workspace Dim db As Database Dim rs As Recordset Dim pfad As String Set ws = DBEngine.Workspace(0) pfad = Application.CurrentProject.Path & "\work.mdb" Set db = ws.opendatabase(pfad) Set rs = db.openrecordset("tblmitarbeiter", dbopentable) In diesem Beispiel wird eine, in der geöffneten Datenbank, existierende Tabelle als Recordset genutzt. Als Argument wird der Tabellenname und die Art des Recordsets übergeben. OpenOffice 07.12.07 Folie 19

Recordsets Ein Recordset basiert immer auf... eine Tabelle,... eine Auswahlabfrage oder... eine SQL-Anweisung. Das Recordset stellt immer die Ergebnismenge von Datensätzen dar. Mit Hilfe von OpenRecordset() wird ein Recordset geöffnet. Wenn kein Typ angegeben wird, wird immer versucht auf eine lokale Tabelle zuzugreifen. Mit Hilfe von Close kann ein Recordset geschlossen werden. Anschließend sollte die Variable auf Nothing gesetzt werden, um einen Zugriff auf eine nicht bestehende Verbindung zu verhindern. OpenOffice 07.12.07 Folie 20

Mögliche Typen dbopentable... greift auf eine lokale Tabelle in der geöffneten Datenbank zu. Die Daten in der Tabelle können bearbeitet, aber nicht sortiert werden. dbopendynaset... wird für Abfragen und verknüpfte Tabellen genutzt.... lädt einen eindeutigen Schlüssel für jeden Datensatz in den Speicher. Die Daten können häufig editiert 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. dbopenforwardonly... erstellt eine Kopie der Daten zu einem bestimmten Zeitpunkt. Die Daten können nur von vorn nach hinten durchgeblättert werden. dbopendynamic... wird für OBCD-Abreitsbereiche genutzt. OpenOffice 07.12.07 Folie 21

Weitere Optionen Set rs = db.openrecordset("tblmitarbeiter", dbopentable, dbdenywrite) Als drittes Argument können der Funktion zum Beispiel folgende Parameter übergeben werden: dbappendonly: Die Benutzer können nur neue Datensätze hinzufügen. dbdenywrite verhindert Datensatzänderungen in einem geöffneten Recordset in einer Mehrbenutzer-Umgebung. dbdenyread verhindert Lesezugriffe von anderen Nutzern in einer Mehrbenutzer-Umgebung. dbseechanges löst einen Laufzeitfehler in einem Dynaset aus, wenn ein Benutzer Daten ändert, die ein anderer Benutzer momentan bearbeitet. OpenOffice 07.12.07 Folie 22

Datensätze in einer Mehrbenutzer-Umgebung Set rs = db.openrecordset("tblmitarbeiter", dbopentable,, dbreadonly) Als viertes Argument können der Funktion Parameter für das Arbeiten in einer Mehrbenutzer-Umgebung übergeben werden: dbreadonly: Die Datensätze können nur gelesen werden. dbpessimistic: Der erste Nutzer, der auf einen Datensatz zugreift, erhält Schreibrechte. Alle nachfolgenden Nutzer können nur lesend auf die Daten zugreifen. dboptimistic: Es ist keine Sperrung vorhanden. OpenOffice 07.12.07 Folie 23

SQL nutzen Set rs = db.openrecordset("select * FROM tblmitarbeiter") In diesem Beispiel wird eine SQL-Anweisung für die Angabe eines Recordsets genutzt. Mit Hilfe des Schlüsselwortes SELET werden die Tabellenfelder ausgewählt. Durch das Sternchen werden alle Tabellenfelder ausgewählt. Mit Hilfe von SELECT vorname, nachname werden nur die angegebenen Felder ausgewählt. Die einzelnen Feldnamen werden durch Kommata getrennt. Das Schlüsselwort FROM gibt Auskunft darüber, woher die Daten kommen. In diesem Beispiel kommen die Daten aus der Tabelle tblmitarbeiter. OpenOffice 07.12.07 Folie 24

SQL-Anweisungen... werden immer von links nach rechts gelesen.... ignorieren Groß- und Kleinschreibung bei Schlüsselwörtern, Tabellennamen und Spaltennamen. Schlüsselwörter werden in einer SQL-Anweisung standardmäßig groß geschrieben. Abfragen werden intern als SQL-Anweisungen interpretiert. Die SQL- Anweisung zu einer Abfrage wird in der SQL-Ansicht angezeigt. Zeichenketten in SQL-Anweisungen werden in Hochkommata gesetzt. Datumswerte werden in SQL-Anweisungen durch das Hash-Zeichen begrenzt. Mit Hilfe des Ausdrucks tabelle.feld wird ein Feld einer Tabelle zugeordnet. Der Tabellenname wird vom Feldnamen mit Hilfe eines Punktes getrennt. Leer- oder Sonderzeichen in benutzerdefinierten Bezeichnungen wie zum Beispiel Feldnamen müssen in eckige Klammern gesetzt werden. OpenOffice 07.12.07 Folie 25

Bestimmte Datensätze auswählen Dim sqlanweisung As String sqlanweisung = "SELECT * FROM tblmitarbeiter" sqlanweisung = sqlanweisung & "WHERE tblmitarbeiter.nachname LIKE 'M*'" Set rs = db.openrecordset(sqlanweisung) Mit Hilfe der Bedingung WHERE wird eine Bedingung angegeben. Hier werden alle Mitarbeiter angezeigt, die mit M beginnen. OpenOffice 07.12.07 Folie 26

Möglichkeiten für Strings Dim sqlanweisung As String sqlanweisung = "SELECT * FROM tblmitarbeiter" sqlanweisung = sqlanweisung & "WHERE tblmitarbeiter.nachname LIKE 'Meier'" Set rs = db.openrecordset(sqlanweisung) Dim sqlanweisung As String sqlanweisung = "SELECT * FROM tblmitarbeiter" sqlanweisung = sqlanweisung & "WHERE tblmitarbeiter.nachname LIKE 'M*er'" Set rs = db.openrecordset(sqlanweisung) Dim sqlanweisung As String sqlanweisung = "SELECT * FROM tblmitarbeiter" sqlanweisung = sqlanweisung & "WHERE tblmitarbeiter.nachname LIKE 'Me?er'" Set rs = db.openrecordset(sqlanweisung) OpenOffice 07.12.07 Folie 27

Vergleichsoperatoren nutzen sqlanweisung = "SELECT artikelname, artikelpreis FROM tblartikel" sqlanweisung = sqlanweisung & "WHERE tblartikel.artikelpreis > 10" sqlanweisung = "SELECT artikelname, artikelpreis FROM tblartikel" sqlanweisung = sqlanweisung & "WHERE" sqlanweisung = sqlanweisung & "(tblartikel.artikelpreis > 10) AND" sqlanweisung = sqlanweisung & "(tblartikel.artikelpreis < 100)" sqlanweisung = "SELECT artikelname, artikelpreis FROM tblartikel" sqlanweisung = sqlanweisung & "WHERE" sqlanweisung = sqlanweisung & "tblartikel.artikelpreis BETWEEN 10 AND 100" OpenOffice 07.12.07 Folie 28

Keine Datensätze vorhanden Dim ws As Workspace Dim db As Database Dim rs As Recordset Dim pfad As String Set ws = DBEngine.Workspace(0) pfad = Application.CurrentProject.Path & "\work.mdb" Set db = ws.opendatabase(pfad) Set rs = db.openrecordset("tblmitarbeiter", dbopentable) If (rs.bof AND rs.eof) Then MsgBox("Es sind keine Datensätze vorhanden") Else MsgBox("Es sind x Datensätze vorhanden") End If OpenOffice 07.12.07 Folie 29

BOF und EOF BOF (Begin of) Datensatz 01 Datensatz 02 Datensatz 03 Datensatz 04 Datensatz 05 EOF (End of) OpenOffice 07.12.07 Folie 30

RecordCount nutzen Dim ws As Workspace Dim db As Database Dim rs As Recordset Dim pfad As String Set ws = DBEngine.Workspace(0) pfad = Application.CurrentProject.Path & "\work.mdb" Set db = ws.opendatabase(pfad) Set rs = db.openrecordset("tblmitarbeiter", dbopentable) If (rs.recordcount > 0) Then MsgBox("Es sind keine Datensätze vorhanden") Else MsgBox("Es sind x Datensätze vorhanden") End If OpenOffice 07.12.07 Folie 31

Hinweise Die Eigenschaft RecordCount liefert nur beim Typ dbtable die Gesamtanzahl der Datensätze zurück. Falls der Typ Snapshot oder Dynaset genutzt wird, wird der Wert Eins zurückgeliefert. Für den Typ Snapshot oder Dynaset kann mit folgenden Codeschnipsel die korrekte Anzahl von Datensätzen ermittelt werden. rs.requery rs.movelast Debug.Print rs.recordcount Mit Hilfe von.requery werden die Datensätze aktualisiert. Anschließend wird zum letzten Datensatz gesprungen. Durch diesen Sprung werden die Datensätze gezählt und die Eigenschaft.RecordCount initialisiert. OpenOffice 07.12.07 Folie 32

In Datensätzen navigieren BOF (Begin of) rs.moveprevious rs.movenext Datensatz 01 Datensatz 02 Datensatz 03 (aktuell) Datensatz 04 Datensatz 05 rs.movefirst rs.movelast EOF (End of) OpenOffice 07.12.07 Folie 33

In Datensätzen navigieren BOF (Begin of) Datensatz 01 rs.move(-1) rs.move(1) Datensatz 02 Datensatz 03 (aktuell) Datensatz 04 Datensatz 05 rs.absoluteposition = 3 rs.move(rs.absoluteposition - 2) EOF (End of) OpenOffice 07.12.07 Folie 34

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 07.12.07 Folie 35

Alle Datensätze durchlaufen Set rs = db.openrecordset("select * FROM tblmitarbeiter") With rs.movefirst While Not.EOF.MoveNext Wend End With Set rs = db.openrecordset("select * FROM tblmitarbeiter") With rs.movefirst Do While.EOF = FALSE.MoveNext Loop End With OpenOffice 07.12.07 Folie 36

Feldnamen... Set rs = db.openrecordset("select * FROM tblmitarbeiter") Debug.Print rs![nachname] Debug.Print rs!nachname Debug.Print rs("nachname") Debug.Print rs.fields("nachname") Dim feldnachname As Field Set feldnachname = rs![nachname] Falls in benutzerdefinierten Bezeichnungen ein Leerzeichen oder Sonderzeichen genutzt wird, muss der Name in eckige Klammern gesetzt werden. Mit Hilfe von.fields wird die Auflistung der Spalten eines Datensatzes angesprochen. Tabellenfelder mit NULL-Werten müssen vom Entwickler abgefangen. werden. OpenOffice 07.12.07 Folie 37

Einzelne Zeilen auslesen Dim rs As DAO.Recordset Dim daten As Variant Dim anzahl As Integer... Set rs = db.openrecordset("select * FROM tblmitarbeiter") With rs.requery.movelast anzahl =.RecordCount.MoveFirst daten =.GetRows(anzahl) End With OpenOffice 07.12.07 Folie 38

Einzelne Zeilen auslesen Dim rs As DAO.Recordset Dim daten As Variant Dim anzahl As Integer... Set rs = db.openrecordset("select * FROM tblmitarbeiter") With rs.requery.movelast anzahl =.RecordCount.MoveFirst daten =.GetRows(anzahl) End With Die korrekte Anzahl der Datensätze ermittelt. Bei einer großen Anzahl von Datensätzen wird die Laufzeit des Programms durch die Berechnung beeinträchtigt. OpenOffice 07.12.07 Folie 39

Einzelne Zeilen auslesen.getrows gibt eine bestimmte Anzahl von Dim rs As DAO.Recordset Datensätze zurück. Dim daten As Variant In diesem Beispiel werden ab dem ersten Dim anzahl As Integer Datensatz alle Datensätze in einem Array gespeichert.... Die Daten werden in einer Variablen vom vom Datentyp Variant gespeichert. Diese Variable wird Set rs = db.openrecordset("select als * FROM Array ohne tblmitarbeiter") vorgegebene Dimension With rs.requery.movelast anzahl =.RecordCount.MoveFirst daten =.GetRows(anzahl) End With interpretiert. Die Methode liest immer nur Datensätze bis zum Ende des Recordset ein. Falls eine zu große Anzahl übergeben wird, bricht die Methode ohne Meldung ab. OpenOffice 07.12.07 Folie 40

Daten editieren Dim rs As DAO.Recordset Dim daten As Variant Dim anzahl As Integer... Set rs = db.openrecordset("select plz, ort FROM tblkunde") With rs.movefirst Do While.EOF = False If (.Fields("ort") Like "Braunschweig") Then.Edit.Fields("plz") = "38100".Update End If Loop End With OpenOffice 07.12.07 Folie 41

Daten editieren Dim rs As DAO.Recordset Dim daten As Variant Dim anzahl As Integer... Der aktuelle Datensatz wird in ein Set rs = db.openrecordset("select plz, Puffer ort geschrieben. FROM tblkunde") Der Datensatz wird für die Bearbeitung geöffnet. With rs.movefirst Do While.EOF = False If (.Fields("ort") Like "Braunschweig") Then.Edit.Fields("plz") = "38100".Update End If Loop End With OpenOffice 07.12.07 Folie 42

Daten editieren Dim rs As DAO.Recordset Dim daten As Variant Dim anzahl As Integer Der geänderte Datensatz wird in die... Datenbank übernommen. Der Datensatz wird aus dem Puffer in die Set rs = db.openrecordset("select plz, ort FROM Tabelle tblkunde") geschrieben. With rs.movefirst Do While.EOF = False If (.Fields("ort") Like "Braunschweig") Then.Edit.Fields("plz") = "38100".Update End If Loop End With Vor der Übernahme wird überprüft, ob die Datentypen korrekt sind und die angegebenen Gültigkeitsregeln eingehalten werden. OpenOffice 07.12.07 Folie 43

Datensätze löschen Set rs = db.openrecordset("select IDKunde FROM tblkunde") rs.movefirst Do While rs.eof = False kundeid = rs.fields("idkunde") For anzahl = 0 To Ubound(allKundeProjekt) if kundeid = allkundeprojekt(anzahl) Then rs.movenext Exit For End If Next anzahl If (anzahl > Ubound(allKundeProjekt)) Then If rs.updatable Then rs.delete rs.movenext End If End If Loop OpenOffice 07.12.07 Folie 44

Datensätze löschen Set rs = db.openrecordset("select IDKunde FROM tblkunde") rs.movefirst Do While rs.eof = False kundeid = rs.fields("idkunde") For anzahl = 0 To Ubound(allKundeProjekt) if kundeid = allkundeprojekt(anzahl) Then rs.movenext Exit For End If Next anzahl If (anzahl > Ubound(allKundeProjekt)) Then If rs.updatable Then rs.delete rs.movenext End If Wenn der Datensatz editierbar ist... End If Loop OpenOffice 07.12.07 Folie 45

Datensätze löschen Set rs = db.openrecordset("select IDKunde FROM tblkunde") rs.movefirst Do While rs.eof = False kundeid = rs.fields("idkunde") For anzahl = 0 To Ubound(allKundeProjekt) if kundeid = allkundeprojekt(anzahl) Then rs.movenext Exit For End If Next anzahl If (anzahl > Ubound(allKundeProjekt)) Then If rs.updatable Then rs.delete rs.movenext End If End If Loop... wird hier der aktuelle Datensatz gelöscht und zum nächsten Datensatz gegangen. Der Datensatz-Zeiger zeigt anschließend immer noch auf den gelöschten Datensatz. Hier wird mit Hilfe von.movenext der Zeiger auf den nächsten Datensatz gesetzt. OpenOffice 07.12.07 Folie 46

Neue Datensätze einfügen Dim ws As Workspace Dim db As Database Dim rs As Recordset Dim pfad As String Set ws = DBEngine.Workspace(0) pfad = Application.CurrentProject.Path & "\work.mdb" Set db = ws.opendatabase(pfad) 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 07.12.07 Folie 47

Neue Datensätze einfügen Dim ws As Workspace Dim db As Database Dim rs As Recordset Dim pfad As String Set ws = DBEngine.Workspace(0) pfad = Application.CurrentProject.Path & "\work.mdb" Set db = ws.opendatabase(pfad) Set rs = db.openrecordset("tblkunde") Hier wird mit Hilfe von.addnew ein neuer Datensatz angelegt. Die Felder werden anschließend mit den entsprechenden Werten belegt. With rs.addnew.fields(" firma") = "Molkerei Kuh Gut".Fields("mail") = "sekretariat@molkereikuhgut.de".update.move 0, rs.lastmodified End rs OpenOffice 07.12.07 Folie 48

Neue Datensätze einfügen Dim ws As Workspace Dim db As Database Dim rs As Recordset Dim pfad As String Set ws = DBEngine.Workspace(0) pfad = Application.CurrentProject.Path & "\work.mdb" Set db = ws.opendatabase(pfad) Set rs = db.openrecordset("tblkunde") With rs.addnew.fields(" firma") = "Molkerei Kuh Gut".Fields("mail") = "sekretariat@molkereikuhgut.de".update Der neue Datensatz wird am Ende der Tabelle eingefügt. Der Datensatzzeiger muss nicht neu gesetzt werden..move 0, rs.lastmodified End rs OpenOffice 07.12.07 Folie 49

Neue Datensätze einfügen Dim ws As Workspace Dim db As Database Dim rs As Recordset Dim pfad As String Set ws = DBEngine.Workspace(0) pfad = Application.CurrentProject.Path & "\work.mdb" Set db = ws.opendatabase(pfad) 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 Hier wird der Datenzeiger auf den zuletzt geänderten Datensatz gesetzt. OpenOffice 07.12.07 Folie 50

Werte aufsummieren Private Sub Form_Current() Dim rs As DAO.Recordset Dim summekm As Integer Set rs = Me.subFahrten.Form.RecordsetClone With rs.movefirst summekm = 0 Do While Not.EOF summekm = summekm +.Fields("Anzahl_KM").MoveNext Loop End With If summekm > 0 Then Me.txtAnzahlKilometer = summekm End If End Sub OpenOffice 07.12.07 Folie 51

Werte aufsummieren Private Sub Form_Current() Dim rs As DAO.Recordset Dim summekm As Integer Set rs = Me.subFahrten.Form.RecordsetClone With rs.movefirst summekm = 0 Do While Not.EOF summekm = summekm +.Fields("Anzahl_KM").MoveNext Loop End With If summekm > 0 Then Me.txtAnzahlKilometer = summekm End If End Sub Me ist das aktuell aktive Formular. subfahrten ist ein Unterformular in dem aktuellen Formular. Mit Hilfe der Eigenschaft Form wird auf das Unterformular verwiesen. OpenOffice 07.12.07 Folie 52

Werte aufsummieren Private Sub Form_Current() Dim rs As DAO.Recordset Dim summekm As Integer Set rs = Me.subFahrten.Form.RecordsetClone With rs.movefirst summekm = 0 Do While Not.EOF summekm = summekm +.Fields("Anzahl_KM").MoveNext Loop End With If summekm > 0 Then Me.txtAnzahlKilometer = summekm End If End Sub Jedes Formular hat die Eigenschaft RecordSetClone, um ein Duplikat des bestehenden Recordset zu erstellen. Die Daten in dem kopierten Recordset können nur gelesen werden. Ein Schreibzugriff besteht nicht. OpenOffice 07.12.07 Folie 53

Werte aufsummieren Private Sub Form_Current() Dim rs As DAO.Recordset Dim summekm As Integer Set rs = Me.subFahrten.Form.RecordsetClone With rs.movefirst summekm = 0 Do While Not.EOF summekm = summekm +.Fields("Anzahl_KM").MoveNext Loop End With If summekm > 0 Then Me.txtAnzahlKilometer = summekm End If End Sub Das geklonte Recordset wird durchlaufen. Die Werte des Feldes Anzahl_KM werden aufsummiert. Das Ergebnis wird in einem Steuerelement angezeigt. OpenOffice 07.12.07 Folie 54

Formulare synchronisieren Private Sub cmdfahrten_click() Const frmname = "frmmitarbeiterfahrten" Dim rs As DAO.Recordset Set rs = Forms(frmName).RecordsetClone rs.findfirst "IDMitarbeiter = " & Me!IDMitarbeiter.Value If Not rs.nomatch Then Forms(frmName).Bookmark = rs.bookmark End If End Sub OpenOffice 07.12.07 Folie 55

Formulare synchronisieren Private Sub cmdfahrten_click() Hier wird von einem Formular ein Const frmname = "frmmitarbeiterfahrten" Duplikat seines Recordsets erstellt. Dim rs As DAO.Recordset Set rs = Forms(frmName).RecordsetClone rs.findfirst "IDMitarbeiter = " & Me!IDMitarbeiter.Value If Not rs.nomatch Then Forms(frmName).Bookmark = rs.bookmark End If End Sub OpenOffice 07.12.07 Folie 56

Formulare synchronisieren Private Sub cmdfahrten_click() Const frmname = "frmmitarbeiterfahrten" Dim rs As DAO.Recordset Set rs = Forms(frmName).RecordsetClone rs.findfirst "IDMitarbeiter = " & Me!IDMitarbeiter.Value If Not rs.nomatch Then Innerhalb des Recordset des zweiten Forms(frmName).Bookmark = rs.bookmarkformulars wird nach einem End If bestimmten Wert gesucht. In diesem Beispiel wird vom Anfang End Sub des Recordset der erste Datensatz gesucht, der die gleiche Mitarbeiterkennung besitzt wie im aktuellen Formular angezeigt. OpenOffice 07.12.07 Folie 57

Suchen in einem Recordset,,, beginnend beim ersten Datensatz:.FindFirst sucht den ersten übereinstimmenden Datensatz.,,, beginnend beim letzten Datensatz:.FindLast sucht den ersten übereinstimmenden Datensatz.,,, beginnend beim aktuellen Datensatz:.FindPrevious durchsucht das Recordset rückwärts..findnext durchsucht das Recordset vorwärts. OpenOffice 07.12.07 Folie 58

Formulare synchronisieren Private Sub cmdfahrten_click() Das Lesezeichen des Recordsets liegt Const frmname = "frmmitarbeiterfahrten" auf dem aktuell gefundenen Datensatz. Dim rs As DAO.Recordset Diese Lesezeichen wird in das Lesezeichen des Formulars kopiert. Mit Hilfe diese Lesezeichen wird ein Set rs = Forms(frmName).RecordsetCloneDatensatz eindeutig identifiziert und kann in dem anderen Formular rs.findfirst "IDMitarbeiter = " & Me!IDMitarbeiter.Value angezeigt werden. If Not rs.nomatch Then Forms(frmName).Bookmark = rs.bookmark End If End Sub OpenOffice 07.12.07 Folie 59