Zestaw rekordów: jak działają funkcje AddNew, Edit i Delete (ODBC)
Ten temat dotyczy klas MFC ODBC.
W tym temacie wyjaśniono sposób, w jaki AddNew, edytować, i usunąć funkcje składowe klasy CRecordset pracy.Omówione tematy obejmują:
Działa jak dodanie rekordów
Widoczność dodanych rekordów
Jak działa edycji rekordów
Działa jak usuwanie rekordów
[!UWAGA]
Ten temat dotyczy obiekty pochodzące z CRecordset w wiersz, który luzem pobieranie nie została zaimplementowana.Jeśli używasz pobieranie wierszy bulk, zobacz zestaw rekordów: pobieranie rekordów luzem (ODBC).
Jako uzupełnienie, warto przeczytać wymiany pól rekordu: jak działa RFX, która opisuje odpowiedniej roli RFX w operacji aktualizacji.
Dodawanie rekordu
Dodanie nowego rekordu do zestawu rekordów polega na wywołanie zestawu rekordów AddNew funkcji składowej, ustawienie wartości elementów danych pola nowy rekord i telefonicznej aktualizacji funkcji składowej do zapisu rekordu w źródle danych.
Jako warunek wstępny do nawiązywania połączeń z AddNew, zestaw rekordów musi nie został otwarty tylko do odczytu.CanUpdate i CanAppend funkcji elementów członkowskich pozwalają określić te warunki.
Jeśli zadzwonisz pod AddNew:
Rekord w buforze Edycja jest przechowywany, więc jego zawartość mogą zostać przywrócone, jeśli operacja została anulowana.
Pole danych członków są oznaczane, dzięki czemu jest możliwe wykrycie zmian w nich później.Dane pola członkowie są również oznaczone czyste (bez zmian) i ustawić na wartość Null.
Po wywołaniu AddNew, bufor Edycja reprezentuje nowy, pusty rekord, gotowy do wypełnienia z wartości.W tym celu należy ręcznie ustawić poprzez przypisanie do nich wartości.Zamiast określania wartości rzeczywiste dane dla pola, można wywołać SetFieldNull do określenia wartości Null.
Aby zatwierdzić wprowadzone zmiany, należy wywołać Aktualizacja.Gdy wywołanie Aktualizacja dla nowego rekordu:
Jeśli sterownik ODBC obsługuje :: SQLSetPos funkcji interfejsu API ODBC, MFC funkcja do dodawania rekordu w źródle danych.Z :: SQLSetPos, MFC rekord można dodać bardziej wydajne, ponieważ nie ma do konstruowania i przetwarzania instrukcji SQL.
Jeśli :: SQLSetPos nie może być używany, MFC wykonuje następujące czynności:
Jeśli nie wykryto żadnych zmian, Aktualizacja nic nie robi i zwraca wartość 0.
W przypadku zmian, Aktualizacja konstrukcji SQL Wstaw instrukcji.Kolumny reprezentowane przez wszystkich członków dane pole brudne są wymienione w Wstaw instrukcji.Aby wymusić kolumna zostanie uwzględniona, call SetFieldDirty funkcji składowej:
SetFieldDirty( &m_dataMember, TRUE );
Aktualizacja popełnia nowy rekord — Wstaw jest wykonywana instrukcja, a rekord zostanie przekazany do tabeli w źródle danych (i zestaw rekordów, jeśli nie migawki), chyba że transakcja jest w toku.
Przechowywana rekord zostanie przywrócona do buforu edycji.Rekord, które były aktualne przed AddNew wywołanie jest bieżącym ponownie niezależnie od tego, czy Wstaw pomyślnie wykonano instrukcję.
Porada Aby uzyskać pełną kontrolę nad nowego rekordu, należy podjąć następujące podejście: zestaw wartości wszystkich pól, które będą mieć wartości i jawnie zestaw wszystkich pól, które pozostanie wartość Null, wywołując SetFieldNull ze wskaźnikiem do pola i parametr TRUE (wartość domyślna).Jeśli trzeba się upewnić, że pole nie jest zapisywany w źródle danych, wywołanie SetFieldDirty ze wskaźnikiem do pola i parametr FALSE, a nie należy modyfikować wartości w polu.Aby określić, czy pole może mieć wartość Null, wywołanie IsFieldNullable.
Porada Aby wykryć, kiedy wartość zmienić zestaw rekordów danych członków, używa MFC PSEUDO_NULL wartości odpowiednie dla każdego typu danych, który można przechowywać w zestawie rekordów.Jeśli pole musi jawnie ustawiona na PSEUDO_NULL wartości i pole dzieje się już być oznaczone wartość Null, należy także wywołać SetFieldNull, adresu pola w pierwszym parametrze i FALSE w drugim parametrze.
Widoczność dodanych rekordów
Kiedy dodanego rekordu jest widoczny do zestawu rekordów?Dodanych rekordów czasami pojawiają się i czasami nie są widoczne, w zależności od dwie rzeczy:
Jakiego sterownika jest w stanie.
Co ramach można skorzystać z.
Jeśli sterownik ODBC obsługuje :: SQLSetPos funkcji interfejsu API ODBC, MFC Dodawanie rekordów za pomocą funkcji.Z :: SQLSetPos, dodane rekordy są widoczne dla żadnych rekordów można aktualizować MFC.Bez obsługi funkcji dodane rekordy nie są widoczne i można wywołać Requery je zobaczyć.Za pomocą :: SQLSetPos jest również bardziej efektywne.
Edytowanie istniejącego rekordu
Edytowanie istniejącego rekordu w zestawie rekordów polega na przewijanie do rekordu, wywołanie zestawu rekordów edytować funkcji członka, ustawienie wartości elementów danych pola nowy rekord i telefonicznej Aktualizacja funkcji składowej zapisać zmienionego rekordu w źródle danych.
Jako warunek wstępny do nawiązywania połączeń z edytować, zestaw rekordów musi być aktualizowalny i do rekordu.CanUpdate i IsDeleted funkcji elementów członkowskich pozwalają określić te warunki.Bieżący rekord również musi już zostały błędnie usunięte i musi być rekordów w zestawie rekordów (zarówno IsBOF i IsEOF zwraca 0).
Pod numerem edytować, przechowywane rekordu w buforze Edycja (bieżącego rekordu).Wartości rekordów przechowywanych później są używane do wykrywania, czy wszystkie pola zostały zmienione.
Po wywołaniu edytować, bufor Edycja nadal reprezentuje bieżący rekord, ale jest gotowy do przyjęcia zmian pola danych członków.Aby zmienić rekord, ręcznie ustawić wartości elementów danych pola, które chcesz edytować.Zamiast określania wartości rzeczywiste dane dla pola, można wywołać SetFieldNull do określenia wartości Null.Aby zatwierdzić wprowadzone zmiany, wywołanie Aktualizacja.
Porada |
---|
Wyjść z AddNew lub edytować tryb, call przenieść z parametrem AFX_MOVE_REFRESH. |
Jako warunek wstępny do nawiązywania połączeń z Aktualizacja, zestaw rekordów nie może być pusta i bieżący rekord może nie zostać usunięte.IsBOF, IsEOF, i IsDeleted powinien powrócić 0.
Gdy wywołanie Aktualizacja dla edytowany rekord:
Jeśli sterownik ODBC obsługuje :: SQLSetPos funkcji interfejsu API ODBC, MFC używa funkcji w celu aktualizacji rekordu w źródle danych.Z :: SQLSetPos, sterownik porównuje swój bufor Edycja z odpowiadającego mu rekordu na serwerze, aktualizowanie rekordu na serwerze, jeśli są różne.Z :: SQLSetPos, MFC można zaktualizować rekord wydajniej, ponieważ nie ma do konstruowania i przetwarzania instrukcji SQL.
-lub-
Jeśli :: SQLSetPos nie może być używany, MFC wykonuje następujące czynności:
Jeżeli nie dokonano żadnych zmian, Aktualizacja nic nie robi i zwraca wartość 0.
W przypadku zmian, Aktualizacja konstrukcji SQL Aktualizacja instrukcji.Kolumn na liście Aktualizacja instrukcja opierają się na danych członków pola, które zostały zmienione.
Aktualizacja zatwierdza zmiany — wykonuje aktualizacji instrukcja — i zmiany rekordu w źródle danych, ale nie zatwierdzone Jeśli transakcja jest w toku (zobacz transakcji: wykonywanie transakcji w zestawie rekordów (ODBC) Aby uzyskać informacje o tym jak transakcja wpływa na aktualizację).ODBC przechowuje kopię rekord, który również się zmienia.
W odróżnieniu od procesu dla AddNew, edytować proces nie powoduje przywrócenia przechowywanych rekordu.Edytowany rekord pozostaje na miejscu bieżącego rekordu.
Przestroga Przygotowując zaktualizować zestaw rekordów przez wywołanie aktualizacji, zwrócić uwagę, że Twój zestaw rekordów zawiera wszystkie kolumny tworzące klucz podstawowy tabeli (lub wszystkie kolumny jakikolwiek indeks unikatowy w tabeli lub za mało kolumn do jednoznacznego identyfikowania wiersza).W niektórych przypadkach ramach służy tylko kolumny wybrane w twoim zestawie rekordów do identyfikowania rekordu w tabeli, aby zaktualizować.Bez wszystkich kolumn niezbędne wielu rekordów może być zaktualizowana w tabeli.W takim przypadku w ramach generuje wyjątki podczas wywoływania Aktualizacja.
Porada Jeśli zadzwonisz do AddNew lub edytować po po zaproszeniu albo funkcja wcześniej, ale przed można wywołać aktualizacji, bufor Edycja jest odświeżany z rekordem przechowywanych, zastępując rekordu nowe lub zmodyfikowane w toku.To zachowanie umożliwia przerwanie AddNew lub edytować i rozpocząć nowy: Jeśli okaże się, że rekord postępu jest uszkodzony, wystarczy zadzwonić edytować lub AddNew ponownie.
Usunięcie rekordu
Usuwanie rekordu z zestawu rekordów polega na przewijanie do rekordu i wywoływania zestawu rekordów usunąć funkcji składowej.W przeciwieństwie do AddNew i edytować, usunąć nie wymaga dopasowania wywołania Aktualizacja.
Jako warunek wstępny do nawiązywania połączeń z usunąć, zestaw rekordów musi być aktualizowalny i musi być do rekordu.CanUpdate, IsBOF, IsEOF, I IsDeleted funkcji elementów członkowskich pozwalają określić te warunki.
Gdy wywołanie usunąć:
Jeśli sterownik ODBC obsługuje :: SQLSetPos funkcji interfejsu API ODBC, MFC używa funkcji w celu usunięcia rekordu w źródle danych.Za pomocą :: SQLSetPos jest zazwyczaj bardziej efektywne niż przy użyciu programu SQL.
-lub-
Jeśli :: SQLSetPos nie może być używany, MFC wykonuje następujące czynności:
Bieżący rekord w buforze edycji nie jest poparte jak w AddNew i edytować.
Usuwanie konstrukcji SQL usunąć instrukcji, która usuwa rekord.
Bieżący rekord w buforze edycji nie jest przechowywana jako w AddNew i edytować.
Usuwanie popełnia usunięcia — wykonuje usunąć instrukcji.Rekord jest oznaczony usuniętych w źródle danych i, jeśli rekord jest migawka, ODBC.
Usunięty rekord wartości są nadal w pole danych członków zestawu rekordów, ale zaznaczono pole danych członków, Null i zestawu rekordów IsDeleted Członkowskie, funkcja zwraca wartość różną od zera.
[!UWAGA]
Po usunięciu rekordu, należy przewinąć do innego rekordu do uzupełniania buforu Edycja z nowego rekordu danych.Jest to błąd, aby zadzwonić do usunąć ponownie lub wywołać edytować.
Aby uzyskać informacje na temat instrukcji SQL, używane w operacji aktualizacji, zobacz SQL.