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 das Abrufen von Zeilen in großen Mengen 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. Damit können Sie Änderungen rückgängig machen oder 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 Sie Datensatz bearbeiten Datensatz löschen Neue hinzufügen (anhängen)
Schreibgeschützt Ja N N N
Nur-Nachtrag Ja N N Ja
Ohne Einschränkungen aktualisierbar Ja Ja Ja Ja

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 AddNew, Edit und Delete Vorgänge ausführen). 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 Felddatenmitglieder werden auf den speziellen Wert Null festgelegt und als unverändert markiert, sodass beim Aufrufen von Update nur geänderte Werte in die Datenquelle geschrieben werden.

  3. Setzen Sie die Werte der Feld-Datenmitglieder des neuen Datensatzes.

    Weisen Sie den Felddatenmembern Werte zu. Die Elemente, die Sie nicht zuweisen, 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. Für Informationen darüber, was passiert, wenn Sie es versäumen, Update aufzurufen, siehe 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- oder Edit-Anruf abzubrechen, tätigen Sie einfach einen weiteren Aufruf bei AddNew oder Edit oder rufen Sie Move mit dem Parameter AFX_MOVE_REFRESH auf. Datenmitglieder 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. Scrollen 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 Felddatenmitglieder werden in die Datenquelle geschrieben, wenn Sie Update aufrufen.

  4. Stellen Sie die Werte der Datenfelder des neuen Datensatzes ein.

    Weisen Sie den Feld-Datenelementen Werte zu. Felder, 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. Was passiert, wenn Sie Update nicht aufrufen, erfahren Sie 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 zu AddNew oder Edit oder rufen Sie Move mit dem Parameter AFX_MOVE_REFRESH auf. Datenmitglieder 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. Scrollen 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 hat Delete keinen entsprechenden Update Aufruf.

  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 eine Delete Operation. Dabei wird vorausgesetzt, dass der Benutzer zu einem zu löschenden Datensatz gewechselt ist. Nachdem Delete aufgerufen wurde, ist es wichtig, zu einem neuen Datensatz zu wechseln.

rsStudent.Delete( );
rsStudent.MoveNext( );

Weitere Informationen zu den Auswirkungen der AddNew, Edit und Delete Memberfunktionen finden Sie unter Recordset: How Recordsets Update Records (ODBC).

Siehe auch

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