Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Grundlagen zum Arbeiten mit DAO.Recordsets
zurück: Datenbankeigenschaften - Workaround weiter: Sharepoint liste verknüpfen VBA Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Tutorial Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
neusel
Im Profil kannst Du frei den Rang ändern


Verfasst am:
05. Dez 2005, 22:12
Rufname:
Wohnort: Barcelona

Grundlagen zum Arbeiten mit DAO.Recordsets - Grundlagen zum Arbeiten mit DAO.Recordsets

Nach oben
       

So, hier ein kleines Tutorium... Falls ihr irgendwelche Fehler oder Verbesserungen seht, keine Scheu...
Zitat:
Arbeiten mit DAO.Recordsets

In diesem Beitrag dreht es sich um das Manipulieren von Daten innerhalb einer Access-Datenbank mit Hilfe von DAO.Recordset-Objekten.
Darüberhinaus existieren sogenannte ADO.Recordset-Objekte, auf die wird jedoch nicht weiter eingegangen.
Als Vorlage dient eine Tabelle ("Adressen") mit folgendem Aufbau:

Name Vorname Strasse Hausnr PLZ Ort

Es handelt sich also um eine Tabelle, die Adressen verwaltet.

Alle folgenden Schritte sollten nicht in einem bereits existierenden Projekt probiert werden!

Warum Recordsets
Ein Recordset-Objekt bietet die Möglichkeit, Daten anhand von VBA-Code zu verändern. Dazu zählt vor allem das Löschen, Neuanlegen und Verändern von Datensätzen. Nützlich sind diese aber auch für die Selektion innerhalb einer Tabelle anhand wechselnder Kriterien. Grundsätzlich lassen sich alle Aktionen auch anhand von SQL-Abfragen erledigen, aber unter Umständen mit grösserem Aufwand.

Erste Schritte
Je nach verwendeter Access-Version ist es erforderlich, die DAO Bibliothek in das Projekt einzubinden. Dieses macht man unter Extras? Verweise. Dort ist der Eintrag Microsoft DAO Object Library mit dem höchsten Index auszuwählen.
Fehlerquelle: Unter Umständen bekommt man bereits hier eine Fehlermeldung, dass diese Bibliothek nicht mit bereits ausgewählten kompatibel ist. Das kann die Bibliothek Active Data Objects sein. Ein Deaktivieren dieser schafft Abhilfe. Dieses sollte man aber nur machen, falls man sicher ist, dass im Projekt keine ADO-Objekte existieren.

Anlegen von Recordsets
Die Verbindung zu einer Tabelle erfolgt in zwei Schritten:
Code:
    Dim db As DAO.Database
    Dim rec_adr As DAO.Recordset

    'Hier wird die Verbindung zur Datenbank aufgebaut
    Set db = Application.CurrentDb
    Set rec_adr = db.OpenRecordset("Adressen")     'Die Tabelle wird geöffnet
Anstatt einer Tabellen lassen sich auch gespeicherte Abfrage oder komplette SQL-Befehle in die Anführungszeichen setzen.
Code:
    Set rec_adr = db.OpenRecordset("SELECT * FROM Adressen WHERE Hausnr > 15")
Zusätzlich möglich ist es, den SQL-Befehl in einen String zu schreiben
Code:
    Dim OpenSeq As String

    OpenSeq = "SELECT * FROM Adressen WHERE Hausnr > 15"
    Set rec_adr = db.OpenRecordset(OpenSeq)
Wir öffnen jedoch die gesamte Tabelle.

Wichtige Funktionen
Der Vorteil eines Objektes ist die Existenz von definierten Funktionen. In einem ersten Schritt nach Öffnen des Recordsets sollte man sich versichern, dass Datensätze enthalten sind. Falls nicht, führt das Benutzen von Navigationsfunktionen zu Fehlermeldungen.
Für die Überprüfung gibt es zwei Möglichkeiten:

Code:
    If rec_adr.RecordCount > 0 Then
' Die zweite:
    If Not (rec_adr.EOF And rec_adr.BOF) Then
Hier tauchen 3 Funktionen des Recordset-Objektes auf:
RecordCount: Gibt die Anzahl der Datensätze im Recordset zurück. Es existiert die Vermutung, dass diese Funktion nicht immer funktioniert. Ich kann das weder bestätigen noch widerlegen.
EOF: Wird 1, wenn der letzte Datensatz des Recordsets erreicht ist
BOF: Wird 1, wenn der erste Datensatz erreicht ist.

Falls diese beiden Funktionen 1 sind, existieren also keine Datensätze im Recordset.

Nachdem man sich versichert hat, dass Datensätze existieren, kann durch das Recordset navigiert werden:

MoveFirst: Springt zum ersten Datensatz
MoveLast: Springt zum letzten Datensatz
MoveNext: Springt zum nächsten Datensatz
MovePrev: Springt zum vorherigen Datensatz

Entscheidend ist die Ordnung, mit der man das Recordset geöffnet hat, also das Design der Tabelle oder eine ORDER BY-Klausel in einer Abfrage.
Nachdem wir uns im Recordset bewegen können, können wir beginnen, Daten zu manipulieren.

Datenmanipulation
Die Manipulation von Daten ist einfach, benutzt man die entsprechenden Funktionen. Wir wollen einen neuen Datensatz in unserer Tabelle anlegen:

Code:
    rec_adr.AddNew
    rec_adr.Fields(0) = "Meier"
    rec_adr.Fields(1) = "Max"
' oder auch {Edit by Willi Wipp}
    rec_adr.Fields("Vorname") = "Max"
' bzw.
    rec_adr!Vorname = "Max"
' bzw.
    rec_adr![Vorname] = "Max"
    '...   
    rec_adr.Update
Die einzelnen Spalten werden durch .Fields und die entsprechende Position angesprochen.
Fehlerquelle: Ein Datensatz wird nicht angelegt, wenn man im Tabellendesign die Eingabe erzwingt, aber keinen Wert zuweist.
Das Verändern von Daten erfolgt analog:

Code:
    rec_adr.Edit
    rec_adr.Fields(0) = "Meyer"
    '...
    rec_adr.Update
Für das Löschen eines Datensatzes muss man diesen entsprechend im Recordset suchen. Folgende Funktion ermöglicht dieses
Code:
    rec_adr.MoveFirst
    While Not rec_adr.EOF
        While Not rec_adr.Fields(0) = "Meyer"
            rec_adr.MoveNext   
        Wend
    Wend
    rec_adr.Delete
Wir löschen hier also den ersten Datensatz in unserem Recordset mit dem Nachnamen "Meyer".

Beenden der Datenbankverbindung
Ebenso wichtig wie das korrekte Öffnen ist auch das Schliessen einer Verbindung. Nicht richtig geschlossenen Tabellen sind eine Fehlerquelle ohnegleichen, falls man versucht, die gleiche Tabelle noch einmal zu öffnen. Darüberhinaus verbrauchen sie auch Speicher.

Code:
    rec_adr.Close
    Set rec_adr = Nothing
    db.Close
    Set db = Nothing
Wie gesagt, die ersten Schritte...

Edit: Die Opfer von Strg-C aus Word geheilt

_________________
viel spass, neusel
Willi Wipp
Moderator


Verfasst am:
06. Dez 2005, 11:12
Rufname:
Wohnort: Raum Wiesbaden


Re: Grundlagen zum Arbeiten mit DAO.Recordsets - Re: Grundlagen zum Arbeiten mit DAO.Recordsets

Nach oben
       

Hi neusel,

sehr schoener Ansatz, vielen Dank fuer Deine Muehe.
{Dieser Beitrag nimmt das Thema aus den unbeantworteten Themen heraus}
NicoB
Im Profil kannst Du frei den Rang ändern


Verfasst am:
16. Jan 2014, 15:42
Rufname:

AW: Grundlagen zum Arbeiten mit DAO.Recordsets - AW: Grundlagen zum Arbeiten mit DAO.Recordsets

Nach oben
       

RecordCount gibt nur dann garantiert den richtigen Wert aus wenn man vorher an das Ende des RecordSets gegangen war (MoveLast).
_________________
Lerne gerade Access, daher bitte ich um Nachsicht sollte das geschilderte Problem eigentlich das einfachste der Welt sein.

Ich verwende Access 2003.
FIAE
FIAE


Verfasst am:
03. März 2014, 10:02
Rufname: Nielsie
Wohnort: Paltz


AW: Grundlagen zum Arbeiten mit DAO.Recordsets - AW: Grundlagen zum Arbeiten mit DAO.Recordsets

Nach oben
       Version: Office 2010

Hey NicoB
Auch nur wenn bei Db.OpenRecordset("...", dbOpendynaset) die Option dbOpenDynaset eingeben ist. Mit dem Default klappts auch ohne Movelast.


Smile
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Formulare: Arbeiten mit Datumsvergleich 5 Gast 575 14. Aug 2008, 09:04
woamo Arbeiten mit Datumsvergleich
Keine neuen Beiträge Access Programmierung / VBA: auswerten eines recordsets 4 werdegang 481 17. Sep 2007, 15:37
werdegang auswerten eines recordsets
Keine neuen Beiträge Access Programmierung / VBA: DAO: Problem beim Erstellen eines Feldes 2 rurouni2108 501 02. Aug 2007, 07:57
rurouni2108 DAO: Problem beim Erstellen eines Feldes
Keine neuen Beiträge Access Berichte: RecordSets in Bericht eingeben! 1 Gast 482 31. März 2007, 20:25
jens05 RecordSets in Bericht eingeben!
Keine neuen Beiträge Access Programmierung / VBA: DAO Recordset - Kein aktueller Datensatz 7 Kl@vier 3418 05. März 2007, 12:07
Kl@vier DAO Recordset - Kein aktueller Datensatz
Keine neuen Beiträge Access Tabellen & Abfragen: Grundlagen und Verknüpfungen 7 Racle 598 01. März 2007, 14:42
Willi Wipp Grundlagen und Verknüpfungen
Keine neuen Beiträge Access Programmierung / VBA: DAO Problem - oder doch nicht? 1 Malchus 586 24. Nov 2006, 10:28
rita2008 DAO Problem - oder doch nicht?
Keine neuen Beiträge Access Programmierung / VBA: Löschen von Tabellen mit DAO 7 novakhans 2702 04. Sep 2006, 04:01
TommyK Löschen von Tabellen mit DAO
Keine neuen Beiträge Access Programmierung / VBA: DAO Hilfe unter Access2k 6 Edgar 685 12. Jul 2006, 16:03
Edgar DAO Hilfe unter Access2k
Keine neuen Beiträge Access Programmierung / VBA: Zugriffe im Netzwerk auf Tabelle mit DAO serialisieren 3 Korhan 885 06. Jul 2006, 12:32
rita2008 Zugriffe im Netzwerk auf Tabelle mit DAO serialisieren
Keine neuen Beiträge Access Programmierung / VBA: DAO, ADODB und Konsorten - kurze Technologieeinordnung 2 hquadrat 902 19. Apr 2006, 18:59
hquadrat DAO, ADODB und Konsorten - kurze Technologieeinordnung
Keine neuen Beiträge Access Programmierung / VBA: Problem beim Überspielen aus Excel in ein DAO.recordset 0 Mirko.hh 580 18. Nov 2005, 10:31
Mirko.hh Problem beim Überspielen aus Excel in ein DAO.recordset
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: HTML CSS