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
Typ | 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
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ć AddNew
operacje , Edit
i 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
Upewnij się, że zestaw rekordów jest dołączany.
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.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.
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ćUpdate
metody , 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
Upewnij się, że zestaw rekordów jest aktualizowalny.
Przewiń do rekordu, który chcesz zaktualizować.
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.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.
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ćUpdate
metody , 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
Upewnij się, że zestaw rekordów jest aktualizowalny.
Przewiń do rekordu, który chcesz zaktualizować.
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 iEdit
nieDelete
ma odpowiedniegoUpdate
wywołania.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
, Edit
iDelete
, zobacz Zestaw rekordów: Jak zestawy rekordów aktualizują rekordy (ODBC).
Zobacz też
Zestaw rekordów (ODBC)
Zestaw rekordów: blokowanie rekordów (ODBC)