Zestaw rekordów: dodawanie, aktualizowanie i usuwanie rekordów (ODBC)

Ten temat dotyczy klas MFC ODBC.

Uwaga

Teraz można zbiorczo dodawać rekordy w bardziej wydajny sposób. Aby uzyskać więcej informacji, zobacz Zestaw rekordów: dodawanie rekordów zbiorczo (ODBC).

Uwaga

Ten temat dotyczy obiektów pochodnych, CRecordset z których pobieranie wierszy zbiorczych nie zostało zaimplementowane. Jeśli używasz zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).

Migawki z możliwością aktualizacji i dynamiczne zestawy umożliwiają dodawanie, edytowanie (aktualizowanie) i usuwanie rekordów. W tym temacie opisano:

Aby uzyskać więcej informacji o sposobie przeprowadzania aktualizacji i wyświetlaniu aktualizacji innym użytkownikom, zobacz Zestaw rekordów: Jak zestawy rekordów aktualizują rekordy (ODBC). Zwykle podczas dodawania, edytowania lub usuwania rekordu zestaw rekordów natychmiast zmienia źródło danych. Zamiast tego można wsadować grupy powiązanych aktualizacji do transakcji. Jeśli transakcja jest w toku, aktualizacja nie stanie się ostateczna do momentu zatwierdzenia transakcji. Dzięki temu można wycofać lub wycofać zmiany. Aby uzyskać informacje o transakcjach, zobacz Transaction (ODBC).

Poniższa tabela zawiera podsumowanie opcji dostępnych dla zestawów rekordów o różnych cechach aktualizacji.

Opcje odczytu/aktualizacji zestawu rekordów

Type Przeczytaj Edytuj rekord Usuń rekord Dodawanie nowego (dołączanie)
Tylko do odczytu Y N N N
Tylko dołączanie Y N N Y
W pełni aktualizowalny Y Y Y Y

Określanie, czy zestaw rekordów jest aktualizowalny

Obiekt zestawu rekordów można aktualizować, jeśli źródło danych można zaktualizować i otwarto zestaw rekordów jako możliwy do zaktualizowania. Jego możliwość aktualizacji zależy również od używanej instrukcji SQL, możliwości sterownika ODBC i tego, czy biblioteka kursorów ODBC jest w pamięci. Nie można zaktualizować zestawu rekordów tylko do odczytu ani źródła danych.

Aby określić, czy zestaw rekordów jest aktualizowalny

  1. Wywołaj funkcję składową CanUpdate obiektu zestawu rekordów.

    CanUpdate Zwraca wartość niezerową, jeśli zestaw rekordów jest aktualizowalny.

Domyślnie zestawy rekordów można w pełni aktualizować (można wykonywać AddNewoperacje , Editi Delete ). Można jednak również użyć opcji appendOnly , aby otworzyć zestawy rekordów z możliwością aktualizacji. Otwarty w ten sposób zestaw rekordów umożliwia dodanie tylko nowych rekordów za pomocą polecenia AddNew. Nie można edytować ani usuwać istniejących rekordów. Możesz sprawdzić, czy zestaw rekordów jest otwarty tylko do dołączania, wywołując funkcję składową CanAppend . CanAppend Zwraca wartość niezerową, jeśli zestaw rekordów jest w pełni aktualizowalny lub otwarty tylko do dołączania.

Poniższy kod pokazuje, jak można użyć CanUpdate obiektu zestawu rekordów o nazwie rsStudentSet:

if( !rsStudentSet.Open( ) )
    return FALSE;
if( !rsStudentSet.CanUpdate( ) )
{
    AfxMessageBox( "Unable to update the Student recordset." );
    return;
}

Uwaga

Gdy przygotowujesz się do aktualizacji zestawu rekordów przez wywołanie metody Update, upewnij się, że zestaw rekordów zawiera wszystkie kolumny tworzące klucz podstawowy tabeli (lub wszystkie kolumny dowolnego unikatowego indeksu w tabeli). W niektórych przypadkach struktura może używać tylko kolumn wybranych w zestawie rekordów, aby zidentyfikować rekord w tabeli do zaktualizowania. Bez wszystkich niezbędnych kolumn wiele rekordów może zostać zaktualizowanych w tabeli, co może spowodować uszkodzenie więzów integralności tabeli. W takim przypadku struktura zgłasza wyjątki podczas wywoływania metody Update.

Dodawanie rekordu do zestawu rekordów

Możesz dodać nowe rekordy do zestawu rekordów, jeśli funkcja składowa CanAppend zwraca wartość niezerową.

Aby dodać nowy rekord do zestawu rekordów

  1. Upewnij się, że zestaw rekordów jest dołączany.

  2. Wywołaj funkcję AddNew member obiektu zestawu rekordów.

    AddNew Przygotowuje zestaw rekordów do działania jako bufor edycji. Wszystkie elementy członkowskie danych pól są ustawione na wartość specjalną o wartości Null i oznaczone jako niezmienione, więc podczas wywoływania funkcji Update są zapisywane tylko zmienione (brudne) wartości.

  3. Ustaw wartości elementów członkowskich danych pola nowego rekordu.

    Przypisz wartości do elementów członkowskich danych pól. Te, które nie przypisujesz, nie są zapisywane w źródle danych.

  4. Wywołaj funkcję składową obiektu zestawu rekordów Update .

    Update kończy dodawanie, zapisując nowy rekord w źródle danych. Aby uzyskać informacje o tym, czy nie można wywołać Updatemetody , zobacz Zestaw rekordów: Jak zestawy rekordów aktualizują rekordy (ODBC).

Aby uzyskać informacje o sposobie działania dodawania rekordów i o tym, kiedy dodane rekordy są widoczne w zestawie rekordów, zobacz Zestaw rekordów: How AddNew, Edit, and Delete Work (ODBC).

W poniższym przykładzie pokazano, jak dodać nowy rekord:

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;
}

Napiwek

Aby anulować AddNew wywołanie lub Edit , po prostu wykonaj inne wywołanie AddNew lub Edit wywołaj Move za pomocą parametru AFX_MOVE_REFRESH . Członkowie danych są resetowane do ich poprzednich wartości i nadal jesteś w Edit trybie lub Add .

Edytowanie rekordu w zestawie rekordów

Istniejące rekordy można edytować, jeśli funkcja składowa CanUpdate zestawu rekordów zwraca wartość niezerową.

Aby edytować istniejący rekord w zestawie rekordów

  1. Upewnij się, że zestaw rekordów jest aktualizowalny.

  2. Przewiń do rekordu, który chcesz zaktualizować.

  3. Wywołaj funkcję elementu członkowskiego Edit obiektu zestawu rekordów.

    Edit Przygotowuje zestaw rekordów do działania jako bufor edycji. Wszystkie składowe danych pól są oznaczone, aby zestaw rekordów mógł później określić, czy zostały zmienione. Nowe wartości zmienionych składowych danych pól są zapisywane w źródle danych podczas wywoływania aktualizacji.

  4. Ustaw wartości elementów członkowskich danych pola nowego rekordu.

    Przypisz wartości do elementów członkowskich danych pól. Te, które nie przypisujesz wartości, pozostają niezmienione.

  5. Wywołaj funkcję składową obiektu zestawu rekordów Update .

    Update kończy edycję, zapisując zmieniony rekord w źródle danych. Aby uzyskać informacje o tym, czy nie można wywołać Updatemetody , zobacz Zestaw rekordów: Jak zestawy rekordów aktualizują rekordy (ODBC).

Po edycji rekordu edytowany rekord pozostaje bieżącym rekordem.

Poniższy przykład przedstawia operację Edit . Zakłada się, że użytkownik przeniósł się do rekordu, który chce edytować.

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;
}

Napiwek

Aby anulować AddNew wywołanie lub Edit , po prostu wykonaj inne wywołanie AddNew lub Edit wywołaj Move za pomocą parametru AFX_MOVE_REFRESH . Członkowie danych są resetowane do ich poprzednich wartości i nadal jesteś w Edit trybie lub Add .

Usuwanie rekordu z zestawu rekordów

Rekordy można usunąć, jeśli funkcja składowa CanUpdate zestawu rekordów zwraca wartość niezerową.

Aby usunąć rekord

  1. Upewnij się, że zestaw rekordów jest aktualizowalny.

  2. Przewiń do rekordu, który chcesz zaktualizować.

  3. Wywołaj funkcję elementu członkowskiego Delete obiektu zestawu rekordów.

    Delete natychmiast oznacza rekord jako usunięty, zarówno w zestawie rekordów, jak i w źródle danych.

    W przeciwieństwie do AddNew parametrów i Editnie Delete ma odpowiedniego Update wywołania.

  4. Przewiń do innego rekordu.

    Uwaga

    Podczas przechodzenia przez zestaw rekordów usunięte rekordy mogą nie zostać pominięte. Aby uzyskać więcej informacji, zobacz funkcję składową IsDeleted .

W poniższym przykładzie pokazano operację Delete . Przyjęto założenie, że użytkownik przeniósł się do rekordu, który użytkownik chce usunąć. Po Delete wywołaniu należy przejść do nowego rekordu.

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

Aby uzyskać więcej informacji na temat efektów funkcji składowych AddNew, EditiDelete, zobacz Zestaw rekordów: Jak zestawy rekordów aktualizują rekordy (ODBC).

Zobacz też

Zestaw rekordów (ODBC)
Zestaw rekordów: blokowanie rekordów (ODBC)