Beibehalten von Daten
Portable Computing (z. B. mit Laptops) hat die Notwendigkeit für Anwendungen generiert, die sowohl in einem verbundenen als auch getrennten Zustand ausgeführt werden können. ADO hat dies unterstützt, indem er dem Entwickler die Möglichkeit gibt, ein Clientcursor Recordset auf Datenträger zu speichern und später neu zu laden.
Es gibt mehrere Szenarien, in denen Sie diese Art von Feature verwenden können, einschließlich der folgenden:
Auf Reisen: Wenn Sie die Anwendung unterwegs einsetzen, müssen Sie unbedingt die Möglichkeit haben, Änderungen vorzunehmen und neue Datensätze hinzuzufügen, die dann später wieder mit der Datenbank verbunden und festgeschrieben werden können.
Unregelmäßig aktualisierte Lookups: In einer Anwendung werden häufig Tabellen als Nachschlagewerke verwendet, z. B. Steuertabellen. Sie werden nur selten aktualisiert und sind schreibgeschützt. Anstatt diese Daten jedes Mal neu zu lesen, wenn die Anwendung gestartet wird, kann die Anwendung einfach die Daten aus einem lokal beibehaltenen Recordset laden.
In ADO verwenden Sie zum Speichern und Laden von Recordsets die Methoden Recordset.Save und Recordset.Open(,,,,adCmdFile) für das ADO Recordset-Objekt.
Sie können die Methode Recordset Save verwenden, um Ihr ADO-Recordset in einer Datei auf einer Festplatte zu speichern. (Sie können ein Recordset auch in einem ADO Stream-Objekt speichern. Stream-Objekte werden später in diesem Handbuch behandelt.) Später können Sie die Methode Open verwenden, um das Recordset wieder zu öffnen, wenn Sie es verwenden möchten. ADO speichert das Recordset standardmäßig im proprietären Microsoft Advanced Data TableGram (ADTG) Format. Dieses Binärformat wird mit dem Wert adPersistADTG PersistFormatEnum angegeben. Alternativ können Sie Ihr Recordset auch als XML speichern, indem Sie adPersistXML verwenden. Weitere Informationen zum Speichern von Recordsets als XML finden Sie unter Speicherung von Datensätzen im XML-Format.
Die Syntax der Methode Save lautet wie folgt:
recordset.
Save
Destination, PersistFormat
Wenn Sie das Recordset zum ersten Mal speichern, ist die Angabe des Ziels optional. Wenn Sie Destination auslassen, wird eine neue Datei mit einem Namen erstellt, der dem Wert der Eigenschaft Source des Recordsets entspricht.
Lassen Sie das Ziel aus, wenn Sie anschließend Speichern aufrufen, nachdem der erste Speicher- oder Laufzeitfehler aufgetreten ist. Wenn Sie anschließend Speichern mit neuem Ziel aufrufen, wird das Recordset unter dem neuen Ziel gespeichert. Das neue Ziel und das ursprüngliche Ziel sind jedoch geöffnet.
Speichern schließt weder das Recordset noch das Ziel, so dass Sie mit dem Recordset weiterarbeiten und Ihre letzten Änderungen speichern können. Ziel bleibt offen, bis das Recordset geschlossen wird. Während dieser Zeit können andere Anwendungen das Ziel lesen, aber nicht beschreiben.
Aus Sicherheitsgründen erlaubt die Methode Save nur die Verwendung von niedrigen und benutzerdefinierten Sicherheitseinstellungen über ein Skript, das vom Microsoft Internet Explorer ausgeführt wird.
Wenn die Methode Save aufgerufen wird, während ein asynchroner Vorgang zum Abrufen, Ausführen oder Aktualisieren von Recordsets läuft, wartet Save, bis der asynchrone Vorgang abgeschlossen ist.
Datensätze werden beginnend mit der ersten Zeile des Recordset gespeichert. Wenn die Methode Save beendet ist, wird die aktuelle Zeilenposition in die erste Zeile des Recordsets verschoben.
Die besten Ergebnisse erzielen Sie, wenn Sie die Eigenschaft CursorLocation mit Save auf adUseClient setzen. Falls Ihr Anbieter nicht alle Funktionen unterstützt, die zum Speichern von Recordset-Objekten erforderlich sind, stellt der Cursor Service diese Funktionen zur Verfügung.
Wenn ein Recordset mit der Eigenschaft CursorLocation, die auf adUseServer eingestellt ist, persistiert wird, ist die Aktualisierungsmöglichkeit für das Recordset eingeschränkt. In der Regel sind nur Einfügevorgänge, Einfügevorgänge und Löschungen zulässig (abhängig von der Anbieterfunktionalität). Die Resync-Methode ist auch in dieser Konfiguration nicht verfügbar.
Da der Ziel-Parameter jedes Objekt akzeptieren kann, das die OLE DB IStream-Schnittstelle unterstützt, können Sie ein Recordset direkt im ASP Response-Objekt speichern.
Im folgenden Beispiel werden die Methoden Save und Open verwendet, um ein Recordset beizubehalten und später erneut zu öffnen:
'BeginPersist
conn.ConnectionString = _
"Provider=SQLOLEDB;Data Source=MySQLServer;" _
& "Integrated Security=SSPI;Initial Catalog=pubs"
conn.Open
conn.Execute "create table testtable (dbkey int " & _
"primary key, field1 char(10))"
conn.Execute "insert into testtable values (1, 'string1')"
Set rst.ActiveConnection = conn
rst.CursorLocation = adUseClient
rst.Open "select * from testtable", conn, adOpenStatic, _
adLockBatchOptimistic
'Change the row on the client
rst!field1 = "NewValue"
'Save to a file--the .dat extension is an example; choose
'your own extension. The changes will be saved in the file
'as well as the original data.
MyFile = Dir("c:\temp\temptbl.dat")
If MyFile <> "" Then
Kill "c:\temp\temptbl.dat"
End If
rst.Save "c:\temp\temptbl.dat", adPersistADTG
Set rst = Nothing
'Now reload the data from the file
Set rst = New ADODB.Recordset
rst.Open "c:\temp\temptbl.dat", , adOpenStatic, _
adLockBatchOptimistic, adCmdFile
Debug.Print "After Loading the file from disk"
Debug.Print " Current Edited Value: " & rst!field1.Value
Debug.Print " Value Before Editing: " & rst!field1.OriginalValue
'Note that you can reconnect to a connection and
'submit the changes to the data source
Set rst.ActiveConnection = conn
rst.UpdateBatch
'EndPersist
Bemerkungen
In diesem Abschnitt werden die folgenden Themen behandelt: