Warum noch ein Access-Buch?
Für wen ist das Buch?
Jetzt bestellen
+ direkter Download des eBooks!
Nur EUR 59,95!
Fehler gefunden?
Bitte melden!
Wünsche an das Buch?
Her damit!
Was denken die Leser über dieses Buch?
Lesen Sie aktuelle Rezensionen!
Kapitel des noch nicht veröffentlichten Buchs zum Downloaden, Probelesen und Kommentieren
Beispieldatenbanken
Zusätzliches Material

Das Buch im HTML-Format

Für unbestimmte Zeit bieten Addison-Wesley und André Minhorst den kompletten Inhalt des Buchs als Download an. Schauen Sie rein und informieren Sie sich über den Inhalt! Und wenn Ihnen das Buch nützlich erscheint und Sie glauben, dass Sie etwas gelernt haben oder durch das Gelesene sogar etwas Zeit und somit Geld bei Ihrer Arbeit einsparen konnten, können Sie sich ja beim Autor und beim Verlag revanchieren - beispielsweise durch den Kauf dieses Buchs.

Am schönsten wäre es natürlich, wenn Sie das Buch direkt hier bestellen - Sie erhalten das Buch dann direkt vom Verlag, und der Autor und Verlag haben dann noch mehr davon, als wenn Sie es anderswo kaufen.

Danke für Ihr Interesse!

10.7.3 Ungebundene Recordsets verwenden

10.7.4 Disconnected Recordsets

Ein Vorteil von ADO gegenüber DAO ist, dass man ADO-Recordsets auf Basis einer Tabelle erstellen und dieses dann »disconnecten« kann - was nichts anderes heißt, als dass man seine Eigenschaft ActiveConnection auf den Wert Nothing setzt.

Die Verbindung zur Tabelle ist damit unterbrochen, Änderungen am Recordset werden nicht direkt in die Tabelle übertragen.

Wichtig ist bei dieser Technik, dass Sie das Recordset-Objekt so deklarieren, dass es auch nach dem Einlesen der Daten noch verfügbar ist - also nicht innerhalb der Routine, die das Recordset füllt. Am einfachsten erledigen Sie dies mit einer globalen Variablen, die Sie in einem Standardmodul deklarieren:

Public rstDisconnected As ADODB.Recordset

Es gibt im Wesentlichen zwei Einsatzgebiete für Disconnected Recordsets: nur lesende sowie schreibende und lesende. Bei den nur lesenden Einsätzen gilt es, oft benötigte und nicht zu ändernde Daten nur einmal einzulesen und immer wieder auf diese kopierten Werte zuzugreifen. Interessant ist dies vor allem, wenn die Daten über das Netzwerk oder gar das Internet beschafft werden müssen.

Beispiele für solche Einsatzmöglichkeiten sind Konfigurationsdaten, Texte für Meldungsfenster oder Fehlermeldungen oder VBA- oder SQL-Ausdrücke wie Funktionen und Abfragen.

Der zweite Grund für den Einsatz von Disconnected Recordsets sind Daten, die man vor einer (zwangsweisen) Trennung von der Datenherkunft einliest, bearbeitet und anschließend wieder speichert.

Da Verbindungen teuer sind, was die Performance angeht, kann es durchaus Sinn machen, diese bei Bedarf zu trennen, um Ressourcen freizugeben.

Disconnected Recordset zum Lesen öffnen

Das erste Beispiel zeigt das Einlesen von Daten, auf die nur lesender Zugriff erfolgt:

Public rstDisconnectedRead As ADODB.Recordset

Public Sub DisconnectedRecordsetsRead()
    
    Set rstDisconnectedRead = New ADODB.Recordset
    
    With rstDisconnectedRead
        .ActiveConnection = CurrentProject.Connection
        .CursorType = adOpenStatic
        .CursorLocation = adUseClient
        .LockType = adLockReadOnly
        .Source = "SELECT * FROM tblMitarbeiter"
        .Open , , , , adCmdText
        
        If Not rstDisconnectedRead Is Nothing Then
            Set .ActiveConnection = Nothing
        End If
    End With
    
End Sub

Listing 10.33: Einlesen von Daten in ein Disconnected Recordset

Aus performancetechnischen Gründen können Sie hier den CursorType auf adOpenStatic und den LockType auf adLockReadOnly einstellen.

Der Zugriff auf die im Recordset rstDisconnectedRead enthaltenen Daten erfolgt genau wie zu Beginn dieses Kapitels beschrieben.

Disconnected Recordset einlesen, ändern und zurückschreiben

Das zweite Beispiel zeigt, wie Sie ein Recordset öffnen, es von der Datenherkunft trennen, den Inhalt ändern und das Recordset wieder in die ursprüngliche Tabelle zurückschreiben.

Mit der folgenden einfachen Routine füllen Sie das Recordset und trennen es von der Datenherkunft:

Public Sub DisconnectedRecordsets()
    
    Set rstDisconnected = New ADODB.Recordset
    
    With rstDisconnected
        .ActiveConnection = CurrentProject.Connection
        .CursorType = adOpenDynamic
        .CursorLocation = adUseClient
        .LockType = adLockBatchOptimistic
        .Source = "SELECT * FROM tblMitarbeiter"
        .Open , , , , adCmdText
        If Not rstDisconnected Is Nothing Then
            Set .ActiveConnection = Nothing
        End If
    End With
    
End Sub

Listing 10.34: Füllen und »disconnecten« eines Recordset-Objekts

Das Recordset ist nun »disconnected«; das heißt, dass Sie unabhängig von der Datenherkunft Änderungen darin vornehmen können und diese nicht direkt dort übernommen werden. Eine einfache Änderung nehmen Sie mit folgender Routine vor:

Public Sub DisconnectedRecordsetUpdaten()

    If Not rstDisconnected Is Nothing Then
        With rstDisconnected
            .Find "Nachname = 'Minhorst'"
            If Not .EOF = True Then
                !Vorname = "Andree"
                .Update
            End If
        End With
    End If

End Sub

Listing 10.35: Ändern des Inhalts eines Disconnected Recordsets

Schauen Sie in der zugrunde liegenden Tabelle nach - der im Recordset geänderte Datensatz enthält immer noch denselben Wert wie zuvor. Das ändern Sie nun, indem Sie das Recordset wieder »connecten«. Wichtig ist dabei der Aufruf der Methode UpdateBatch zum Schreiben der Änderungen in die Tabelle - damit speichern Sie alle Änderungen an den enthaltenen Datensätzen:

Public Sub DisconnectedRecordsetWiederVerbinden()
    If Not rstDisconnected Is Nothing Then
        With rstDisconnected
            .ActiveConnection = CurrentProject.Connection
            .UpdateBatch
        End With
    End If
    rstDisconnected.Close
    Set rstDisconnected = Nothing
End Sub

Listing 10.36: Verbinden des Disconnected Recordsets mit der zugrunde liegenden Datenbank und Durchführen der Änderungen

Nächster Abschnitt:

10.7.5 Ereignisse von Datensatzgruppen

© 2006-2008 André Minhorst Alle Rechte vorbehalten.