Datenpersistenz
Portable Computing (z. B. Mithilfe von Laptops) hat die Notwendigkeit von Anwendungen generiert, die sowohl in einem verbundenen als auch getrennten Zustand ausgeführt werden können. ADO hat hierfür Unterstützung hinzugefügt, indem er dem Entwickler die Möglichkeit gibt, einen Clientcursor Recordset- auf den 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:
Reisen: Wenn Sie die Anwendung unterwegs verwenden, ist es wichtig, die Möglichkeit zu bieten, Änderungen vorzunehmen und neue Datensätze hinzuzufügen, die dann später erneut mit der Datenbank verbunden und übertragen werden können.
Selten aktualisierte Nachschlagetabellen: In einer Anwendung werden häufig Tabellen als Nachschlagetabellen verwendet, z. B. Steuertabellen der Bundesstaaten. Sie werden selten aktualisiert und sind schreibgeschützt. Anstatt diese Daten bei jedem Start der Anwendung vom Server neu zu lesen, kann die Anwendung die Daten einfach aus einem lokal gespeicherten Recordset-laden.
Verwenden Sie in ADO zum Speichern und Laden Recordsetsdie Methoden Recordset.Save und Recordset.Open(,,,,adCmdFile) Methoden für das ADO Recordset-Objekt.
Sie können die Recordset Save-Methode verwenden, um das ADO-Recordset- auf einem Datenträger zu speichern. (Sie können auch ein Recordset- in einem ADO-Stream-Objekt speichern. Stream-Objekte werden weiter unten in der Anleitung erläutert.) Später können Sie die Open-Methode verwenden, um das Recordset- erneut zu öffnen, wenn Sie es verwenden möchten. Standardmäßig speichert ADO das Recordset- im proprietären Microsoft Advanced Data TableGram (ADTG)-Format. Dieses Binärformat wird mit dem wert adPersistADTG PersistFormatEnum angegeben. Alternativ können Sie das Recordset als XML speichern, anstatt adPersistXMLzu verwenden. Weitere Informationen zum Speichern von Recordsets als XML finden Sie unter Speichern von Datensätzen im XML-Format.
Die Syntax der Save-Methode lautet wie folgt:
recordset.
Save
Destination, PersistFormat
Wenn Sie das Recordset-zum ersten Mal speichern, ist es optional, Ziel-anzugeben. Wenn Sie Destinationweglassen, wird eine neue Datei mit einem Namen erstellt, der auf den Wert der eigenschaft Source des Recordsetfestgelegt ist.
Lassen Sie Ziel- aus, wenn Sie anschließend Save aufrufen, nachdem das erste Speichern oder ein Laufzeitfehler aufgetreten ist. Wenn Sie anschließend Save mit einem neuen Zielaufrufen, wird das Recordset am neuen Ziel gespeichert. Das neue Ziel und das ursprüngliche Ziel sind jedoch geöffnet.
Speichern schließt das Recordset oder das Zielnicht, sodass Sie weiterhin mit dem Recordset arbeiten und die neuesten Änderungen speichern können. Ziel bleibt geöffnet, bis das Recordset geschlossen wird. Während dieser Zeit können andere Anwendungen in Ziellesen, aber nicht schreiben.
Aus Sicherheitsgründen erlaubt die Save-Methode nur die Verwendung von niedrigen und benutzerdefinierten Sicherheitseinstellungen aus einem Skript, das von Microsoft Internet Explorer ausgeführt wird.
Wenn die Save-Methode aufgerufen wird, während ein asynchroner Recordset-Abruf-, -Ausführungs- oder -Aktualisierungsvorgang ausgeführt wird, wartet Save, bis der asynchrone Vorgang abgeschlossen ist.
Datensätze werden beginnend mit der ersten Zeile des Recordset-gespeichert. Wenn die Save-Methode abgeschlossen ist, wird die aktuelle Zeilenposition in die erste Zeile des Recordsetverschoben.
Legen Sie für optimale Ergebnisse die eigenschaft CursorLocation auf adUseClient- mit Savefest. Wenn Ihr Anbieter nicht alle funktionen unterstützt, die zum Speichern Recordset-Objekte erforderlich sind, stellt der Cursordienst diese Funktionalität bereit.
Wenn ein Recordset- mit der CursorLocation-Eigenschaft beibehalten wird, die auf adUseServer-festgelegt ist, ist die Updatefunktion für das Recordset- eingeschränkt. In der Regel sind nur Aktualisierungen, Einfügungen und Löschungen (abhängig von der Anbieterfunktionalität) zulässig. Die Resync--Methode ist in dieser Konfiguration ebenfalls nicht verfügbar.
Da der parameter Destination 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- zu speichern 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
Dieser Abschnitt enthält die folgenden Themen.