Freigeben über


Speichern von Daten

Gilt für: Access 2013, Office 2013

Tragbare Computer (z. B. Laptops) haben Anwendungen erforderlich gemacht, die online und offline ausgeführt werden können. ADO unterstützt dies nun, indem der Entwickler ein Clientcursor-Recordset auf einem Datenträger speichern und später erneut laden kann.

Für dieses Feature gibt es verschiedene Einsatzmöglichkeiten:

  • Unterwegs: Wenn Sie mit der Anwendung unterwegs sind, müssen unbedingt Änderungen vorgenommen und neue Datensätze hinzugefügt werden können, die dann später erneut mit der Datenbank verbunden werden können und für die ein Commit ausgeführt werden kann.

  • Selten aktualisierte Lookups: In einer Anwendung werden Tabellen häufig als Nachschlagevorgänge verwendet, z. B. Zustandssteuertabellen. Sie werden selten aktualisiert und sind schreibgeschützt. Anstatt diese Daten bei jedem Start der Anwendung erneut vom Server einzulesen, kann die Anwendung die Daten einfach von einem lokal gespeicherten Recordset-Objekt laden.

Verwenden Sie in ADO zum Speichern und Laden von Recordset -Objekten die Methoden Recordset.Save und Recordset.Open(,,,,adCmdFile) im Recordset -Objekt von ADO.

Sie können die RecordsetSave-Methode verwenden, um Ihr ADO-Recordset in einer Datei auf einem Datenträger beizubehalten. (Sie können ein Recordset auch in einem ADO Stream-Objekt speichern. Streamobjekte 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 bereit sind, es zu verwenden. Standardmäßig speichert ADO das Recordset -Objekt im systemeigenen Microsoft Advanced Data TableGram-Format (ADTG). Dieses Binärformat wird mithilfe des AdPersistADTGPersistFormatEnum-Werts angegeben. Alternativ können Sie das Recordset -Objekt stattdessen mithilfe von adPersistXML im XML-Format speichern. Weitere Informationen zum Speichern von Datensätzen im XML-Format finden Sie unter Speichern von Datensätzen im XML-Format.

Die Save -Methode weist die folgende Syntax auf:

recordset.Save Destination, PersistFormat

Wenn Sie das Recordset-Objekt das erste Mal speichern, können Sie optional das Ziel angeben. Wenn Sie das Ziel auslassen, wird eine neue Datei erstellt, deren Namen auf den Wert der Source-Eigenschaft des Recordset-Objekts festgelegt ist.

Lassen Sie das Ziel aus, wenn Sie anschließend Save nach dem ersten Speichern aufrufen, da ansonsten ein Laufzeitfehler generiert wird. Wenn Sie danach Save mit einem neuen Ziel aufrufen, wird das Recordset-Objekt im neuen Ziel gespeichert. Das neue und das ursprüngliche Ziel sind jedoch beide offen.

Speichern schließt das Recordset oder Das Ziel nicht, sodass Sie weiterhin mit dem Recordset arbeiten und Ihre letzten Änderungen speichern können. Das Ziel bleibt geöffnet, bis das Recordset geschlossen wird. Während dieser Zeit können andere Anwendungen das Ziel lesen, aber nicht schreiben.

For reasons of security, the Save method permits only the use of low and custom security settings from a script executed by Microsoft Internet Explorer. Ausführlichere Erläuterungen zu Sicherheitsproblemen finden Sie unter "ADO- und RDS-Sicherheitsprobleme in Microsoft Internet Explorer" (in englischer Sprache) im Abschnitt "ActiveX Data Objects (ADO) Technical Articles in Microsoft Data Access Technical Articles".

Wenn die Save -Methode während eines asynchronen Abruf-, Ausführungs- oder Aktualisierungsvorgangs des Recordset -Objekts aufgerufen wird, wartet die Save -Methode, bis der asynchrone Vorgang abgeschlossen ist.

Datensätze werden ab der ersten Zeile des Recordset -Objekts gespeichert. Wenn die Save -Methode abgeschlossen ist, wird die aktuelle Zeilenposition an die erste Zeile des Recordset -Objekts verschoben.

Legen Sie die CursorLocation-Eigenschaft mithilfe von Save auf adUseClient fest, um optimale Ergebnisse zu erzielen. Wenn Ihr Anbieter nicht die gesamte zum Speichern von Recordset -Objekten erforderliche Funktionalität unterstützt, bietet der Cursordienst diese Funktionalität.

Wenn ein Recordset -Objekt gespeichert wird, während die CursorLocation -Eigenschaft auf adUseServer festgelegt ist, sind die Aktualisierungsmöglichkeiten für das Recordset -Objekt eingeschränkt. Normalerweise ist nur das Aktualisieren, Einfügen und Löschen für eine einzelne Tabelle zulässig (in Abhängig von der Providerfunktionalität). Die Resync-Methode ist in dieser Konfiguration ebenfalls nicht verfügbar.

Für den Ziel-Parameter ist jedes Objekt zulässig, das die OLE DB-Schnittstelle IStream unterstützt. Deshalb können Sie ein Recordset-Objekt direkt im Response-Objekt von ASP speichern.

Im folgenden Beispiel wird mit den Methoden Save und Open ein Recordset-Objekt gespeichert und später erneut geöffnet:

 
'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 
 rst.Close 
 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 

Dieser Abschnitt enthält die folgenden Themen: