Recordset: Hinzufügen, Aktualisieren und Löschen von Datensätzen (ODBC)
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 Massen (ODBC).For more information, see Recordset: Adding Records in Bulk (ODBC).
Hinweis
Dieses Thema bezieht sich auf von CRecordset
abgeleitete Objekte, in denen das gesammelte Abrufen von Zeilen nicht implementiert wurde. Wenn Sie massenweises Abrufen von Zeilen verwenden, lesen Sie "Recordset: Fetching Records in Bulk (ODBC)".
Mit aktualisierbaren Momentaufnahmen und Dynasets können Sie Datensätze hinzufügen, bearbeiten (aktualisieren) und löschen. In diesem Thema wird Folgendes erläutert:
Weitere Informationen dazu, wie Updates ausgeführt werden und wie Ihre Updates für andere Benutzer angezeigt werden, finden Sie unter Recordset: How Recordsets Update Records (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 zu Transaktionen finden Sie unter Transaction (ODBC).For information about transactions, see Transaction (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 |
Append-Only | J | N | N | J |
Ohne Einschränkungen aktualisierbar | J | J | J | J |
Bestimmen, ob das Recordset-Objekt aktualisiert werden kann
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.
Recordsets sind standardmäßig vollständig aktualisierbar (Sie können Vorgänge ausführen AddNew
, Edit
und Delete
vorgänge). Sie können aber auch die Option appendOnly verwenden, um aktualisierbare Recordsets zu ö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 Anfügen 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;
}
Achtung
Wenn Sie sich darauf vorbereiten, ein Recordset durch Aufrufen Update
zu aktualisieren, achten Sie darauf, dass das Recordset alle Spalten enthält, die den Primärschlüssel der Tabelle bilden (oder alle Spalten eines eindeutigen Indexes in der 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 Ausnahmen aus, wenn Sie aufrufen Update
.
Hinzufügen eines Datensatzes zu einem Recordset
Sie können einem Recordset neue Datensätze hinzufügen, wenn seine CanAppend-Memberfunktion einen Wert ungleich 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 Felddatenmber werden auf den Sonderwert Null festgelegt und als unverändert gekennzeichnet, sodass nur geänderte (modifiziert) Werte beim Aufrufen von Update in die Datenquelle geschrieben werden.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 Memberfunktion des
Update
Recordset-Objekts auf.Update
schließt das Hinzufügen ab, indem der neue Datensatz in die Datenquelle geschrieben wird. Weitere Informationen dazu finden SieUpdate
unter "Recordset:How Recordsets Update Records (ODBC)".
Informationen dazu, wie das Hinzufügen von Datensätzen funktioniert und wann hinzugefügte Datensätze in Ihrem Recordset sichtbar sind, finden Sie unter Recordset: How AddNew, Edit, and Delete Work (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
Anruf Edit
abzubrechen, tätigen Sie einfach einen anderen Aufruf AddNew
oder Edit
einen anderen Aufruf Move
mit dem parameter AFX_MOVE_REFRESH . Datenmber werden auf ihre vorherigen Werte zurückgesetzt, und Sie befinden sich noch im Edit
Oder Add
Modus.
Bearbeiten eines Datensatzes in einem Recordset
Sie können vorhandene Datensätze bearbeiten, wenn die CanUpdate-Memberfunktion ihres Recordsets einen Wert ungleich 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 dieses als Bearbeitungspuffer fungieren kann. Alle Felddatenmember werden so markiert, dass das Recordset später feststellen kann, ob sie geändert wurden. Die neuen Werte für geänderte Felddatenmber werden beim Aufrufen von Update in die Datenquelle geschrieben.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 Memberfunktion des
Update
Recordset-Objekts auf.Update
schließt die Bearbeitung ab, indem der geänderte Datensatz in die Datenquelle geschrieben wird. Weitere Informationen dazu finden SieUpdate
unter "Recordset:How Recordsets Update Records (ODBC)".
Nachdem Sie einen Datensatz bearbeitet haben, bleibt er der aktuelle Datensatz.
Das folgende Beispiel zeigt einen Edit
Vorgang. 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
Anruf Edit
abzubrechen, tätigen Sie einfach einen anderen Aufruf AddNew
oder Edit
einen anderen Aufruf Move
mit dem parameter AFX_MOVE_REFRESH . Datenmber werden auf ihre vorherigen Werte zurückgesetzt, und Sie befinden sich noch im Edit
Oder Add
Modus.
Löschen eines Datensatzes aus einem Recordset
Sie können Datensätze löschen, wenn die CanUpdate-Memberfunktion des Recordsets einen Wert ungleich 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, sowohl im Recordset als auch in der Datenquelle.Im Gegensatz zu
AddNew
undEdit
,Delete
hat keinen entsprechendenUpdate
Anruf.Wechseln Sie zu einem anderen Datensatz.
Hinweis
Beim Scrollen durch das Recordset werden gelöschte Datensätze unter Umständen nicht übersprungen. Weitere Informationen finden Sie in der IsDeleted-Memberfunktion .
Das folgende Beispiel zeigt einen Delete
Vorgang. Dabei wird vorausgesetzt, dass der Benutzer zu einem zu löschenden Datensatz gewechselt ist. Nach Delete
dem Aufruf ist es wichtig, zu einem neuen Datensatz zu wechseln.
rsStudent.Delete( );
rsStudent.MoveNext( );
Weitere Informationen zu den Auswirkungen der AddNew
Funktionen , Edit
und Delete
Memberfunktionen finden Sie unter Recordset: How Recordsets Update Records (ODBC).