Udostępnij za pośrednictwem


Zestaw rekordów: Jak AddNew, edytowanie i usuwanie pracy (ODBC)

Ten temat dotyczy klas MFC ODBC.

W tym temacie wyjaśniono sposób AddNew, Edytuj, i usunąć funkcje składowe klasy CRecordset pracy.Omówione tematy obejmują:

  • Jak działa dodawania rekordów

  • Widoczność dodanych rekordów

  • Jak działa edycji rekordów

  • Jak działa usuwanie rekordów

[!UWAGA]

Ten temat dotyczy obiekty pochodzące z CRecordset w którym wiersz luzem pobieranie nie została zaimplementowana.Jeśli używasz pobieranie wiersza luzem, zobacz zestaw rekordów: pobieranie rekordów luzem (ODBC).

Jako uzupełnienie, warto przeczytać wymiany pola rekordu: jak działa RFX, który opisuje odpowiadające im rolę RFX w operacji aktualizacji.

Dodawanie rekordu

Dodawanie nowego rekordu w zestawie rekordów obejmuje wywoływania zestawu rekordów AddNew funkcji składowej, ustawienie wartości elementów członkowskich nowy rekord pola danych i wywoływania Aktualizacja funkcji składowej do zapisu rekordu źródła danych.

Jako warunek wstępny dla wywołania AddNew, zestawu rekordów musi nie został otwarty tylko do odczytu.CanUpdate i CanAppend funkcji elementów członkowskich pozwalają określić te warunki.

Po wywołaniu AddNew:

  • Rekord buforu Edycja jest przechowywany, więc jego zawartość można przywrócić, jeśli operacja została anulowana.

  • Członkowie pola danych są oznaczone flagą, dlatego jest możliwe wykrycie zmian w nich później.Dane pole członków są również oznaczone czyszczenia (bez zmian) i ustaw wartość Null.

Po wywołaniu AddNew, bufor Edycja reprezentuje nowy, pusty rekord, gotowe, aby została wypełniona wartościami.Aby to zrobić, należy ręcznie ustawić wartości przypisując do nich.Zamiast określania wartości rzeczywistych danych dla pola, można wywołać SetFieldNull , aby określić wartość Null.

Aby zatwierdzić wprowadzone zmiany, należy wywołać Aktualizacja.Po wywołaniu Aktualizacja dla nowego rekordu:

  • Jeśli sterownik ODBC obsługuje :: SQLSetPos funkcji interfejsu API ODBC, MFC używa funkcji w celu dodawania rekordu w źródle danych.Z :: SQLSetPos, MFC rekord można dodać bardziej efektywnie, ponieważ nie ma do skonstruowania przetwarzanie instrukcji SQL.

  • Jeśli :: SQLSetPos nie może być używany, MFC wykonuje następujące czynności:

    1. Jeśli żadne zmiany nie zostaną wykryte, Aktualizacja nic nie robi i zwraca wartość 0.

    2. Jeśli istnieją zmiany, Aktualizacja konstrukcji SQL WSTAWIĆ instrukcji.Kolumny, reprezentowane przez wszystkich członków danych dirty pola są wymienione w WSTAWIĆ instrukcji.Aby wymusić kolumny zostanie uwzględniona, należy zadzwonić SetFieldDirty Członkowskich funkcji:

      SetFieldDirty( &m_dataMember, TRUE );
      
    3. Aktualizacja przydziela nowy rekord — WSTAWIĆ instrukcji i rekord jest zaangażowana w tabeli na źródła danych (i zestaw rekordów, jeśli nie migawki), chyba że transakcja jest w toku.

    4. Przechowywane rekord zostanie przywrócona do buforu Edycja.Rekord, który był bieżącego przed AddNew wywołanie jest bieżącym ponownie niezależnie od czy WSTAWIĆ pomyślnie wykonano instrukcję.

    PoradaPorada

    Dla pełnej kontroli nad nowy rekord, należy podjąć następujące podejście: Ustawianie wartości dowolnego pola, które będą wartości i jawnie ustawić żadnych pól, które pozostaną Null, wywołując SetFieldNull z wskaźnik do pola, a parametr TRUE (domyślnie).Aby zapewnić pole nie jest zapisywany do źródła danych, wywołanie SetFieldDirty wskaźnik do pola, a parametr FALSEi nie należy modyfikować wartości tego pola.Aby ustalić, czy pole może być Null, call IsFieldNullable.

    PoradaPorada

    Aby wykryć, kiedy rekordów danych członków zmienić wartość, używa MFC PSEUDO_NULL wartości odpowiednie dla każdego typu danych, który można przechowywać w zestawie rekordów.Jeśli należy jawnie ustawić pole PSEUDO_NULL się wartości i pole stanie już być oznaczone Null, należy także wywołać SetFieldNull, przekazując adres pola w pierwszym parametrze i FALSE w drugim parametrze.

Widoczność dodanych rekordów

Kiedy dodano rekord jest widoczne w twoim zestawie rekordów?Rekordy dodano niekiedy wyświetlane i czasami nie są widoczne, w zależności od dwie rzeczy:

  • Jakiego sterownika jest zdolny do.

  • Jakie ramy można korzystać z.

Jeśli sterownik ODBC obsługuje :: SQLSetPos funkcji interfejsu API ODBC, MFC używa funkcji w celu dodawania rekordów.Z :: SQLSetPos, dodaje rekordów są widoczne dla żadnych rekordów aktualizowalna MFC.Bez obsługi funkcji dodane rekordy nie są widoczne i musi wywołać Requery ich wyświetlenia.Za pomocą :: SQLSetPos jest również bardziej efektywne.

Edytowanie istniejącego rekordu

Edytowania istniejącego rekordu w zestawie rekordów wiąże się przewijanie do rekordu, wywołanie w zestawie rekordów Edytuj funkcji składowej, ustawienie wartości elementów członkowskich nowy rekord pola danych i wywoływania Aktualizacja funkcji składowej zapisać zmienionego rekordu źródła danych.

Jako warunek wstępny dla wywołania Edytuj, zestawu rekordów musi być aktualizowalna i rekordu.CanUpdate i IsDeleted funkcji elementów członkowskich pozwalają określić te warunki.Bieżący rekord również musi nie już usunięto i musi być rekordów w zestawie rekordów (zarówno IsBOF i IsEOF na 0).

Po wywołaniu Edytuj, rekord buforu Edycja (bieżący rekord) jest przechowywany.Wartości rekordów przechowywanych później są używane do wykrywania, czy zmieniły się żadnych pól.

Po wywołaniu Edytuj, bufor Edycja nadal reprezentuje bieżącego rekordu, ale jest gotowy do przyjęcia zmian członków pola danych.Aby zmienić rekordu, ręcznie ustawić wartości wszystkich członków danych pole, które chcesz edytować.Zamiast określania wartości rzeczywistych danych dla pola, można wywołać SetFieldNull , aby określić wartość Null.Aby zatwierdzić wprowadzone zmiany, należy wywołać Aktualizacja.

PoradaPorada

Aby uzyskać z AddNew lub Edytuj trybu, wywołanie przenieść z parametrem AFX_MOVE_REFRESH.

Jako warunek wstępny dla wywołania Aktualizacja, zestaw rekordów nie może być pusta i bieżący rekord musi nie został usunięty.IsBOF, IsEOF, i IsDeleted wszystkie zwraca 0.

Po wywołaniu Aktualizacja dla edytowanego rekordu:

  • Jeśli sterownik ODBC obsługuje :: SQLSetPos funkcji interfejsu API ODBC, MFC funkcja aktualizacji rekordu w źródle danych.Z :: SQLSetPos, sterownik porównuje naszego bufora Edycja z odpowiadającego mu rekordu na serwerze, uaktualnianie rekordu na serwerze, jeśli są różne.Z :: SQLSetPos, MFC można zaktualizować rekordu wydajniej, ponieważ nie ma do skonstruowania przetwarzanie instrukcji SQL.

    - lub -

  • Jeśli :: SQLSetPos nie może być używany, MFC wykonuje następujące czynności:

    1. Jeżeli nie dokonano żadnych zmian, Aktualizacja nic nie robi i zwraca wartość 0.

    2. Jeśli istnieją zmiany, Aktualizacja konstrukcji SQL Aktualizacja instrukcji.Kolumny wyświetlane w Aktualizacja instrukcji oparte są na członków danych pole, które uległy zmianie.

    3. Aktualizacja zatwierdza zmiany — wykonuje aktualizacji instrukcji — rekordu w źródle danych zostanie zmieniona, a jeśli transakcja nie zaangażowana jest w toku (zobacz transakcji: wykonywania transakcji w zestawie rekordów (ODBC) uzyskać informacje jak transakcja wpływa na aktualizację).ODBC zachowuje kopię rekord, który również się zmienia.

    4. W przeciwieństwie do procesu dla AddNew, Edytuj proces przywracania nie rekordu przechowywane.Edytowany rekord pozostaje na miejscu w bieżącym rekordzie.

    Informacje dotyczące przestrogiPrzestroga

    Podczas przygotowania do aktualizacji zestawu rekordów, wywołując Aktualizacja, zadbać, że Twój zestaw rekordów zawiera wszystkich kolumn tworzących klucz podstawowy tabeli (lub wszystkie kolumny wszelkich unikatowego indeksu na tabeli lub za mało kolumn) do identyfikowania wiersza.W niektórych przypadkach ramach można użyć tylko kolumny wybrane w twoim zestawie rekordów, aby zidentyfikować rekordy w tabeli, aby zaktualizować.Nie wszystkie kolumny niezbędne wielu rekordów może być zaktualizowane w tabeli.W tym przypadku ramach generuje wyjątki podczas wywołania Aktualizacja.

    PoradaPorada

    Rozmowy AddNew lub Edytuj po nazwie albo funkcji, wcześniej, ale przed call Aktualizacja, bufor Edycja jest odświeżany z rekordu przechowywane, zastępując nowej lub edytowanej rekordu w toku.To zachowanie umożliwia przerwanie AddNew lub Edytuj i rozpocząć nową: Jeśli okaże się, że rekord na w toku jest uszkodzony, po prostu wywołać Edytuj lub AddNew ponownie.

Usunięcie rekordu

Usunięcie rekordu z zestawu rekordów wiąże się przewijanie do rekordu i wywoływanie rekordów usunąć funkcji składowej.W odróżnieniu od AddNew i Edytuj, usunąć nie wymaga dopasowania wywołania Aktualizacja.

Jako warunek wstępny dla wywołania usunąć, zestawu rekordów musi być aktualizowalna i muszą być do rekordu.CanUpdate, IsBOF, IsEOF, I IsDeleted funkcji elementów członkowskich pozwalają określić te warunki.

Po wywołaniu 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:

    1. Bieżący rekord w buforze Edycja nie ma kopii w AddNew i Edytuj.

    2. Usuwanie konstrukcji SQL usunąć instrukcji, która usuwa rekord.

      Bieżący rekord w buforze Edycja nie znajduje się w AddNew i Edytuj.

    3. Usuwanie popełnia usunięcia — wykonuje usunąć instrukcji.Rekord jest oznaczony usuniętych źródła danych i, jeśli rekord jest migawkę w ODBC.

    4. Usunięty rekord wartości są nadal w pole danych członków zestawu rekordów, ale członkowie pola danych są oznaczone Null i w zestawie rekordów IsDeleted Członkowskie, funkcja zwraca wartość niezerową.

    [!UWAGA]

    Po usunięciu rekordu, należy przewinąć do innego rekordu Uzupełnianie buforu Edycja z nowego rekordu danych.Występuje błąd wywołać usunąć ponownie lub Edytuj.

Informacje na temat instrukcji SQL, w operacjach aktualizacji, zobacz SQL.

Zobacz też

Koncepcje

Zestaw rekordów (ODBC)

Zestaw rekordów: Więcej informacji na temat aktualizacji (ODBC)

Wymiany pola rekordu (RFX)