Recordset: Hinzufügen, Aktualisieren und Löschen von Datensätzen (ODBC)
Aktualisiert: November 2007
Dieses Thema bezieht sich auf die MFC-ODBC-Klassen.
Hinweis: |
---|
Sie können jetzt Datensätze in einer Sammeloperation effizienter hinzufügen. Weitere Informationen finden Sie unter Recordset: Hinzufügen von Datensätzen in einer Sammeloperation (ODBC). |
Hinweis: |
---|
Dieses Thema bezieht sich auf von CRecordset abgeleitete Objekte, in denen das gesammelte Abrufen von Zeilen nicht implementiert wurde. Weitere Informationen über das gesammelte Abrufen von Zeilen finden Sie unter Recordset: Abrufen von Datensätzen in einer Sammeloperation (ODBC). |
Mit aktualisierbaren Snapshots und Dynasets können Sie Datensätze hinzufügen, bearbeiten (aktualisieren) und löschen. In diesem Thema wird Folgendes erläutert:
Wie Sie entscheiden, ob ein Recordset aktualisierbar ist.
Wie Sie einen neuen Datensatz hinzufügen.
Wie Sie einen vorhandenen Datensatz bearbeiten.
Wie Sie einen Datensatz löschen.
Weitere Informationen darüber, wie Aktualisierungen durchgeführt werden und auf welche Weise die vorgenommenen Aktualisierungen bei anderen Benutzern angezeigt werden, finden Sie unter Recordset: Datensatzaktualisierung durch Recordsets (ODBC). Wenn Sie einen Datensatz hinzufügen, ändern oder löschen, ändert das Recordset die Datenquelle normalerweise sofort. Alternativ können Sie Gruppen zusammengehöriger Aktualisierungen zu Transaktionen zusammenfassen. Während einer Transaktion werden die Aktualisierungen nicht vor Bestätigung der Transaktion endgültig. So können Sie die Änderungen zurücksetzen. Informationen über Transaktionen finden Sie unter Transaktion (ODBC).
In der folgenden Tabelle ist zusammengefasst, welche Optionen für Recordsets zur Verfügung stehen mit den jeweiligen Aktualisierungsmerkmalen.
Lese- und Aktualisierungsoptionen von Recordsets
Typ |
Lesen |
Datensatz bearbeiten |
Datensatz löschen |
Neue hinzufügen (anhängen) |
---|---|---|---|---|
Schreibgeschützt |
J |
N |
N |
N |
Nur erweiterbar |
J |
N |
N |
J |
Ohne Einschränkungen aktualisierbar |
J |
J |
J |
J |
Ermitteln, ob das Recordset aktualisierbar ist
Ein Recordset-Objekt ist aktualisierbar, wenn die Datenquelle aktualisierbar ist und Sie das Recordset als aktualisierbar geöffnet haben. Außerdem hängt die Aktualisierbarkeit von der verwendeten SQL-Anweisung ab, von den Fähigkeiten des ODBC-Treibers und davon, ob die ODBC-Cursorbibliothek geladen ist. Sie können ein schreibgeschütztes Recordset oder eine schreibgeschützte Datenquelle nicht aktualisieren.
So stellen Sie fest, ob das Recordset aktualisierbar ist
Rufen Sie die CanUpdate-Memberfunktion des Recordset-Objekts auf.
CanUpdate gibt einen Wert ungleich 0 (null) zurück, falls das Recordset aktualisierbar ist.
Standardmäßig sind Recordsets ohne Einschränkungen aktualisierbar (Sie können die Operationen AddNew, Edit und Delete ausführen). Sie können aktualisierbare Recordsets aber auch mit der appendOnly-Option öffnen. Zu einem auf diese Weise geöffneten Recordset können Sie lediglich mit AddNew neue Datensätze hinzufügen. Sie können keine vorhandenen Datensätze bearbeiten oder löschen. Sie können testen, ob ein Recordset nur zum Anhängen geöffnet ist, indem Sie die CanAppend-Memberfunktion aufrufen. CanAppend gibt einen Wert ungleich 0 (null) zurück, wenn das Recordset vollständig aktualisierbar ist oder nur zum Anhängen geöffnet ist.
Der folgende Codeausschnitt zeigt, wie Sie CanUpdate in einem Recordset-Objekt mit dem Namen rsStudentSet aufrufen können:
if( !rsStudentSet.Open( ) )
return FALSE;
if( !rsStudentSet.CanUpdate( ) )
{
AfxMessageBox( "Unable to update the Student recordset." );
return;
}
Vorsicht: |
---|
Wenn Sie durch Aufruf von Update die Aktualisierung eines Recordsets vorbereiten, müssen Sie sicherstellen, dass das Recordset alle Spalten umfasst, aus denen sich der Primärschlüssel der Tabelle zusammensetzt (oder sämtliche Spalten eines beliebigen, eindeutigen Index für die Tabelle). In einigen Fällen kann das Framework zur Identifizierung des Datensatzes, der in der Tabelle aktualisiert werden soll, nur die Spalten verwenden, die im Recordset ausgewählt sind. Wenn nicht sämtliche benötigten Spalten zur Verfügung stehen, werden möglicherweise mehrere Datensätze in der Tabelle aktualisiert. Hierdurch kann die referenzielle Integrität der Tabelle beschädigt werden. In diesem Fall löst das Framework beim Aufruf von Update eine Ausnahme aus. |
Hinzufügen eines Datensatzes zu einem Recordset
Sie können neue Datensätze zu einem Recordset hinzufügen, falls die CanAppend-Memberfunktion des Recordsets einen Wert ungleich 0 (null) zurückgibt.
So fügen Sie einem Recordset einen neuen Datensatz hinzu
Stellen Sie sicher, dass das Recordset erweiterbar ist.
Rufen Sie die AddNew-Memberfunktion des Recordset-Objekts auf.
AddNew bereitet das Recordset so vor, dass dieses als Bearbeitungspuffer fungieren kann. Alle Felddatenmember werden auf den Spezialwert NULL gesetzt und als nicht geändert markiert. So werden beim Aufruf von Update ausschließlich geänderte Werte in die Datenquelle geschrieben.
Stellen Sie die Werte der Felddatenmember des neuen Datensatzes ein.
Weisen Sie den Felddatenmembern Werte zu. Felddatenelemente, denen Sie keinen Wert zugewiesen haben, werden nicht in die Datenquelle geschrieben.
Rufen Sie die Update-Memberfunktion des Recordset-Objekts auf.
Update schließt das Hinzufügen des neuen Datensatzes ab, indem es den Datensatz in die Datenquelle schreibt. Informationen darüber, was geschieht, wenn Sie Update nicht aufrufen, finden Sie unterRecordset: Datensatzaktualisierung durch Recordsets (ODBC).
Informationen darüber, wie das Hinzufügen von Datensätzen funktioniert und wann hinzugefügte Datensätze im Recordset angezeigt werden, finden Sie unter Recordset: Funktionsweise von AddNew, Edit und Delete (ODBC).
Das folgende Beispiel zeigt, wie Sie einen neuen Datensatz hinzufügen:
if( !rsStudent.Open( ) )
return FALSE;
if( !rsStudent.CanAppend( ) )
return FALSE; // no field values were set
rsStudent.AddNew( );
rsStudent.m_strName = strName;
rsStudent.m_strCity = strCity;
rsStudent.m_strStreet = strStreet;
if( !rsStudent.Update( ) )
{
AfxMessageBox( "Record not added; no field values were set." );
return FALSE;
}
Tipp: |
---|
Um einen AddNew-Aufruf oder Edit-Aufruf abzubrechen, rufen Sie AddNew oder Edit bzw. Move mit dem AFX_MOVE_REFRESH-Parameter erneut auf. Die Datenmember werden auf ihren vorherigen Wert zurückgesetzt, befinden sich aber weiterhin im Edit-Modus oder Add-Modus. |
Editieren eines Datensatzes in einem Recordset
Sie können vorhandene Datensätze des Recordsets bearbeiten, falls die Memberfunktion CanUpdate des Recordsets einen Wert ungleich 0 (null) zurückgibt.
So bearbeiten Sie einen vorhandenen Datensatz in einem Recordset
Stellen Sie sicher, dass das Recordset aktualisierbar ist.
Wechseln Sie zu dem Datensatz, den Sie aktualisieren möchten.
Rufen Sie die Edit-Memberfunktion des Recordset-Objekts auf.
Edit bereitet das Recordset so vor, dass es als Bearbeitungspuffer fungieren kann. Alle Felddatenmember werden so markiert, dass das Recordset später feststellen kann, ob sie geändert wurden. Die neuen Werte der geänderten Felddatenmember werden in die Datenquelle geschrieben, wenn Sie Update aufrufen.
Stellen Sie die Werte der Felddatenmember des neuen Datensatzes ein.
Weisen Sie den Felddatenmembern Werte zu. Felddatenmember, denen Sie keine Werte zuweisen, bleiben unverändert.
Rufen Sie die Update-Memberfunktion des Recordset-Objekts auf.
Update schließt das Bearbeiten des Datensatzes ab, indem es den geänderten Datensatz in die Datenquelle schreibt. Informationen darüber, was geschieht, wenn Sie Update nicht aufrufen, finden Sie unterRecordset: Datensatzaktualisierung durch Recordsets (ODBC).
Nachdem Sie einen Datensatz bearbeitet haben, bleibt er der aktuelle Datensatz.
Das folgende Beispiel zeigt eine Edit-Operation. Dabei wird vorausgesetzt, dass der Benutzer zu einem Datensatz gewechselt hat, den er bearbeiten möchte.
rsStudent.Edit( );
rsStudent.m_strStreet = strNewStreet;
rsStudent.m_strCity = strNewCity;
rsStudent.m_strState = strNewState;
rsStudent.m_strPostalCode = strNewPostalCode;
if( !rsStudent.Update( ) )
{
AfxMessageBox( "Record not updated; no field values were set." );
return FALSE;
}
Tipp: |
---|
Um einen AddNew-Aufruf oder Edit-Aufruf abzubrechen, rufen Sie AddNew oder Edit bzw. Move mit dem AFX_MOVE_REFRESH-Parameter erneut auf. Die Datenmember werden auf ihren vorherigen Wert zurückgesetzt, befinden sich aber weiterhin im Edit-Modus oder Add-Modus. |
Löschen eines Datensatzes aus einem Recordset
Sie können Datensätze löschen, falls die CanUpdate-Memberfunktion des Recordsets einen Wert ungleich 0 (null) zurückgibt.
So löschen Sie einen Datensatz
Stellen Sie sicher, dass das Recordset aktualisierbar ist.
Wechseln Sie zu dem Datensatz, den Sie aktualisieren möchten.
Rufen Sie die Delete-Memberfunktion des Recordset-Objekts auf.
Delete markiert den Datensatz sofort als gelöscht, und zwar sowohl im Recordset als auch in der Datenquelle.
Im Unterschied zu AddNew und Edit gibt es keinen zu Delete gehörigen Update-Aufruf.
Wechseln Sie zu einem anderen Datensatz.
Hinweis: Beim Scrollen durch das Recordset werden gelöschte Datensätze unter Umständen nicht übersprungen. Weitere Informationen hierzu finden Sie unter dem Thema IsDeleted-Memberfunktion.
Das folgende Beispiel zeigt eine Delete-Operation. Dabei wird vorausgesetzt, dass der Benutzer zu einem zu löschenden Datensatz gewechselt ist. Nach dem Aufruf von Delete müssen Sie zu einem neuen Datensatz wechseln.
rsStudent.Delete( );
rsStudent.MoveNext( );
Weitere Informationen über die Auswirkungen der AddNew-Memberfunktion, der Edit-Memberfunktion und der Delete-Memberfunktion finden Sie unter Recordset: Datensatzaktualisierung durch Recordsets (ODBC).