Udostępnij za pośrednictwem


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

Ten temat dotyczy klas MFC ODBC.

W tym temacie wyjaśniono:

  • Jak wpływają na inne operacje, takie jak transakcje, aktualizacje.

  • Aktualizacje i tych innych użytkowników.

  • Więcej informacji na temat funkcji Członkowskich Update i Delete.

[!UWAGA]

Ten temat dotyczy obiekty pochodzące z CRecordset w którym wiersz luzem pobieranie nie została zaimplementowana.Jeśli wprowadziły pobieranie wiersza luzem, niektóre informacje nie ma zastosowania.Na przykład, nie można wywołać AddNew, Edytuj, usunąć, i Aktualizacja funkcji elementów członkowskich; można jednak wykonywać transakcje.Aby uzyskać więcej informacji na temat Pobieranie wiersza luzem, zobacz Zestaw rekordów: Pobieranie rekordów luzem (ODBC).

Jak wpływają na inne operacje aktualizacji

Aktualizacje są zagrożone transakcji w mocy w czasie aktualizacji, zamykając zestaw rekordów przed wykonaniem transakcji i przewijając przed wykonaniem transakcji.

ecc2bf09.collapse_all(pl-pl,VS.110).gifW jaki sposób oddziaływać na aktualizacje

Poza zrozumienie jak AddNew, Edytuj, i usunąć pracy, ważne jest zrozumienie jak BeginTrans, CommitTrans, i wycofywania funkcji elementów członkowskich z CDatabase pracy z funkcji aktualizacji CRecordset.

Domyślnie, wzywa do AddNew i Edytuj wpływają na źródło danych natychmiast po wywołaniu Aktualizacja.Usuwanie wywołania zaczynają obowiązywać natychmiast.Ale może ustanowić transakcji i wykonać partii takich połączeń.Aktualizacje nie są trwałe, dopóki ich przekazanie.Jeśli zmienisz zdanie, można wycofać transakcji, zamiast go.

Aby uzyskać więcej informacji na temat transakcji, zobacz Transakcja (ODBC).

ecc2bf09.collapse_all(pl-pl,VS.110).gifJak zamknąć zestaw rekordów wpływa na aktualizacje

Po zamknięciu zestawu rekordów lub jego skojarzony CDatabase obiekt z transakcją w toku (nie wywołano CDatabase::CommitTrans lub CDatabase::Rollback), transakcja jest wycofywany z powrotem automatycznie (chyba że sieci wewnętrznej bazy danych jest aparat bazy danych Microsoft Jet).

Informacje dotyczące przestrogiPrzestroga

Jeśli używasz aparatu bazy danych Microsoft Jet zamknięcia rekordów wewnątrz transakcji jawnej nie powoduje zwalnianie wiersze, które zostały zmodyfikowane lub blokad, które zostały wprowadzone, dopóki transakcja jawna jest przekazana lub wycofana.Zaleca się tym możesz zawsze zarówno otwarcie i zamknięcie rekordów wewnątrz lub na zewnątrz transakcji jawnej Jet.

ecc2bf09.collapse_all(pl-pl,VS.110).gifJak przewijanie wpływa na aktualizacje

Gdy użytkownik Zestaw rekordów: Przewijanie (ODBC) w zestawie rekordów buforu Edycja jest wypełniona każdego nowego rekordu bieżącego (poprzedni rekord nie jest najpierw przechowywane).Przewijanie pomija nad wcześniej usuniętych rekordów.Podczas przewijania po AddNew lub Edytuj połączenia bez wywołania Aktualizacja, CommitTrans, lub wycofywania najpierw, wszelkie zmiany zostaną utracone (z bez ostrzeżenia dla użytkownika) jako nowy rekord jest dostosowane do buforu Edycja.Buforu Edycja jest wypełniona rekordu do rekordu przechowywane jest zwolniona i występuje żadna zmiana w źródle danych.Dotyczy to zarówno AddNew i Edytuj.

Aktualizacje i aktualizacje innych użytkowników

Użycie zestawu rekordów do aktualizacji danych, aktualizacje wpływają na innych użytkowników.Podobnie aktualizacje innych użytkowników w czasie użytkowania swój zestaw rekordów dotyczy.

W orodowisku wielodostępnym innych użytkowników można otworzyć zestawy rekordów, które zawierają niektóre z tego samego rekordów wybranych w twoim zestawie rekordów.Zmiany w rekordzie, zanim je odzyskać są odzwierciedlane w twoim zestawie rekordów.Ponieważ zestawy dynamiczne pobrać rekord po każdym przewiń do niego, zestawy dynamiczne odzwierciedlają zmiany po każdym przejdź do rekordu.Migawki pobrać rekord przewijania, więc migawek odzwierciedlają tylko te zmiany, występujące przed początkowo przejdź do rekordu po raz pierwszy.

Rekordy dodawane przez innych użytkowników, po otwarciu zestawu rekordów nie są wyświetlane w twoim zestawie rekordów, chyba że użytkownik requery.Jeśli Twoim zestawie rekordów, dynamiczny zestaw wyników, edycję istniejących rekordów przez innych użytkowników są wyświetlane w dynamiczny użytkownika podczas przewijania do dotkniętych rekordu.Jeżeli Twój zestaw rekordów jest migawką, edycji nie są wyświetlane, dopóki requery migawki.Jeśli chcesz Zobacz rekordy dodane lub usunięte przez innych użytkowników w migawki lub dodanych przez innych użytkowników w sieci pobierany rekordów wywołania CRecordset::Requery odbudować zestawu rekordów.(Należy zauważyć, że usunięcia innych użytkowników pojawiają się w sieci dynamiczny). Może również wywołać Requery wyświetlić rekordy dodasz, ale nie do Zobacz wprowadzone usunięcia.

PoradaPorada

Wymusić buforowanie cały migawkę na raz, call MoveLast bezpośrednio po otwarciu migawki.Następnie należy wywołać MoveFirst , aby rozpocząć pracę z rekordów.MoveLastjest odpowiednikiem przewijania nad wszystkie rekordy, ale pobiera je wszystkie naraz.Należy jednak zauważyć, to może obniżyć wydajność i nie mogą być wymagane dla niektórych sterowników.

Skutki aktualizacji dla innych użytkowników są podobne do ich wpływu na użytkownik.

Więcej informacji na temat Update i Delete

Ta sekcja zawiera dodatkowe informacje pomocne w pracy z Aktualizacja i usunąć.

ecc2bf09.collapse_all(pl-pl,VS.110).gifAktualizacja sukcesów i niepowodzeń

Jeśli Aktualizacja się powiedzie, AddNew lub Edytuj kończy się w trybie.Aby rozpocząć AddNew lub Edytuj ponownie w trybie, wywołanie AddNew lub edytować.

Jeśli Aktualizacja nie powiedzie się (zwraca FALSE lub zgłasza wyjątek), pozostają w AddNew lub Edytuj tryb, w zależności od tego, która funkcja zostanie wywołana ostatnio.Można następnie wykonaj jedną z następujących czynności:

  • Zmodyfikuj członek pola danych i spróbuj Aktualizacja ponownie.

  • Wywołanie AddNew zresetować członków danych pola wartość NULL, ustaw wartości elementów danych pola, a następnie wywołać Aktualizacja ponownie.

  • Wywołanie Edytuj ponownie załadować wartości, które były w zestawie rekordów przed pierwszym wywołaniem AddNew lub Edytuj, ustaw wartości elementów danych pola, a następnie wywołać aktualizacji ponownie.Po pomyślnym Aktualizacja call (z wyjątkiem po AddNew call), członkowie danych pola zachowują swoje nowe wartości.

  • Wywołanie przenieść (łącznie z przenieść z parametrem z AFX_MOVE_REFRESH, lub 0), która opróżnia dowolne zmiany i kończy się żadnego AddNew lub Edytuj tryb efektu.

ecc2bf09.collapse_all(pl-pl,VS.110).gifUpdate i Delete

Ta sekcja dotyczy zarówno Aktualizacja i usunąć.

Na Aktualizacja lub usunąć operacji, należy uaktualnić tylko jeden rekord.Ten rekord jest bieżący rekord, który odpowiada wartości danych w polach zestawu rekordów.Jeśli z jakiegoś powodu żadne rekordy nie są naruszone lub dotyczy więcej niż jeden rekord, wyjątek jest generowany, zawierający jedną z następujących RETCODE wartości:

  • AFX_SQL_ERROR_NO_ROWS_AFFECTED

  • AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED

Gdy te wyjątki są generowane, użytkownik pozostanie w AddNew lub Edytuj wywołana zostanie były w stanie Aktualizacja lub usunąć.Poniżej przedstawiono najbardziej typowe scenariusze, w których widoczna będzie tych wyjątków.Jesteś najprawdopodobniej zobacz:

  • AFX_SQL_ERROR_NO_ROWS_AFFECTED gdy przy użyciu trybu blokowania optymistycznego i inny użytkownik zmodyfikował rekord w sposób uniemożliwiający ramach identyfikacji poprawny rekord, aby zaktualizować lub usunąć.

  • AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED po tabeli aktualizujesz ma bez klucza podstawowego lub indeks unikatowy, a użytkownik nie ma wystarczającej liczby kolumn w zestawie rekordów do unikatowego identyfikowania wiersza tabeli.

Zobacz też

Koncepcje

Zestaw rekordów (ODBC)

Zestaw rekordów: Jak zestawy rekordów wybierz rekordy (ODBC)

Wymiany pola rekordu (RFX)

SQL

Wyjątki: Wyjątki bazy danych