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

  1. 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, Editund 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 Updatezu 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

  1. Stellen Sie sicher, dass das Recordset erweiterbar ist.

  2. 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.

  3. 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.

  4. 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 Sie Updateunter "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

  1. Stellen Sie sicher, dass das Recordset aktualisierbar ist.

  2. Wechseln Sie zu dem Datensatz, den Sie aktualisieren möchten.

  3. 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.

  4. 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.

  5. 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 Sie Updateunter "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

  1. Stellen Sie sicher, dass das Recordset aktualisierbar ist.

  2. Wechseln Sie zu dem Datensatz, den Sie aktualisieren möchten.

  3. 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 und Edit, Delete hat keinen entsprechenden Update Anruf.

  4. 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 AddNewFunktionen , Editund Delete Memberfunktionen finden Sie unter Recordset: How Recordsets Update Records (ODBC).

Siehe auch

Recordset (ODBC)
Recordset: Sperren von Datensätzen (ODBC)