Udostępnij za pośrednictwem


Zestaw dynamiczny

W tym temacie opisano dynasety i omówiono ich dostępność.

Uwaga

Ten temat dotyczy klas MFC ODBC, w tym CRecordset. Aby uzyskać informacje o dynamicznych zestawach w klasach DAO, zobacz CDaoRecordset. Za pomocą daO można otwierać zestawy rekordów typu dynaset.

Zestaw dynamiczny to zestaw rekordów z właściwościami dynamicznymi. W okresie istnienia obiekt zestawu rekordów w trybie dynamicznym (zwykle nazywanym zestawem dynamicznym) pozostaje zsynchronizowany ze źródłem danych w następujący sposób. W środowisku wieloużytkowników inni użytkownicy mogą edytować lub usuwać rekordy, które znajdują się w zestawie dynamicznym lub dodawać rekordy do tabeli reprezentowanej przez zestaw dynamiczny. Rejestruje, że aplikacja dodaje do zestawu rekordów lub usuwa je z zestawu rekordów, są odzwierciedlane w zestawie dynamicznym. Rekordy dodane przez innych użytkowników do tabeli nie zostaną odzwierciedlone w zestawie dynamicznym do momentu ponownego skompilowania zestawu dynamicznych przez wywołanie funkcji składowej Requery . Gdy inni użytkownicy usuwają rekordy, kod MFC pomija usunięcia w zestawie rekordów. Zmiany edycji istniejących rekordów innych użytkowników są odzwierciedlane w dynamicznym zestawie, gdy tylko przewiniesz do rekordu, którego dotyczy problem.

Podobnie zmiany w rekordach w dynamicznym zestawie są odzwierciedlane w dynamicznych zestawach używanych przez innych użytkowników. Dodane rekordy nie zostaną odzwierciedlone w dynamicznych zestawach innych użytkowników do momentu ponownego uwzględnienia ich dynamicznych zestawów. Usunięte rekordy są oznaczone jako "usunięte" w zestawach rekordów innych użytkowników. Jeśli masz wiele połączeń z tą samą bazą danych (wiele CDatabase obiektów), zestawy rekordów skojarzone z tymi połączeniami mają taki sam stan jak zestawy rekordów innych użytkowników.

Dynasets są najbardziej cenne, gdy dane muszą być dynamiczne, jak (na przykład) w systemie rezerwacji linii lotniczych.

Uwaga

Aby korzystać z dynamicznych zestawów, musisz mieć sterownik ODBC dla źródła danych, który obsługuje dynamiczne zestawy, a biblioteka kursorów ODBC nie może być załadowana. Aby uzyskać więcej informacji, zobacz Dostępność dynamicznych zestawów.

Aby określić, że zestaw rekordów jest zestawem dynamicznym, przekaż CRecordset::dynaset jako pierwszy parametr do Open funkcji składowej obiektu zestawu rekordów.

Uwaga

W przypadku aktualizowalnych zestawów dynamicznych sterownik ODBC musi obsługiwać instrukcje aktualizacji umieszczone lub funkcję interfejsu ::SQLSetPos API ODBC. Jeśli oba te elementy są obsługiwane, MFC używa ich ::SQLSetPos do wydajności.

Dostępność zestawów dynaset

Klasy baz danych MFC obsługują dynamiczne zestawy, jeśli spełnione są następujące wymagania:

  • Biblioteka DLL biblioteki kursorów ODBC nie może być używana dla tego źródła danych.

    Jeśli biblioteka kursorów jest używana, maskuje niektóre funkcje bazowego sterownika ODBC, który jest niezbędny do obsługi dynamicznych zestawów. Jeśli chcesz użyć dynamicznych zestawów (a sterownik ODBC ma funkcjonalność wymaganą dla dynamicznych zestawów, zgodnie z opisem w pozostałej części tej sekcji), możesz spowodować, że biblioteka MFC nie załaduje biblioteki kursorów podczas tworzenia CDatabase obiektu. Aby uzyskać więcej informacji, zobacz ODBC i Funkcja składowa OpenEx lub Open klasy CDatabase.

    W terminologii ODBC dynamiczne zestawy i migawki są określane jako kursory. Kursor jest mechanizmem służącym do śledzenia swojej pozycji w zestawie rekordów.

  • Sterownik ODBC dla źródła danych musi obsługiwać kursory sterowane kluczami.

    Kursory oparte na zestawie kluczy zarządzają danymi z tabeli, uzyskując i przechowując zestaw kluczy. Klucze są używane do uzyskiwania bieżących danych z tabeli, gdy użytkownik przewija określony rekord. Aby określić, czy sterownik zapewnia tę obsługę, wywołaj funkcję interfejsu ::SQLGetInfo API ODBC przy użyciu parametru SQL_SCROLL_OPTIONS .

    Jeśli spróbujesz otworzyć zestaw dynamiczny bez obsługi zestawu kluczy, otrzymasz wartość CDBException z zwracaną wartością kodu AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED.

  • Sterownik ODBC dla źródła danych musi obsługiwać rozszerzone pobieranie.

    Rozszerzone pobieranie to możliwość przewijania do tyłu, a także do przodu na wynikowych rekordach zapytania SQL. Aby określić, czy sterownik obsługuje tę możliwość, wywołaj funkcję interfejsu ::SQLGetFunctions API ODBC przy użyciu parametru SQL_API_SQLEXTENDEDFETCH .

Jeśli chcesz zaktualizować dynamiczne zestawy (lub migawki, w tym przypadku), sterownik ODBC musi również obsługiwać funkcję interfejsu ::SQLSetPos API ODBC lub aktualizacje umieszczone. Funkcja ::SQLSetPos umożliwia MFC aktualizowanie źródła danych bez wysyłania instrukcji SQL. Jeśli ta obsługa jest dostępna, MFC używa go w preferencjach do wprowadzania aktualizacji przy użyciu języka SQL. Aby określić, czy sterownik obsługuje ::SQLSetPosmetodę , wywołaj ::SQLGetInfo parametr SQL_POS_OPERATIONS .

Aktualizacje umieszczone używają składni SQL (formularza WHERE CURRENT OF<cursorname>) w celu zidentyfikowania określonego wiersza w tabeli w źródle danych. Aby określić, czy sterownik obsługuje aktualizacje umieszczone, wywołaj polecenie ::SQLGetInfo za pomocą parametru SQL_POSITIONED_STATEMENTS .

Ogólnie rzecz biorąc, zestawy dynamicznych MFC (ale nie zestawy rekordów tylko do przekazywania) wymagają sterownika ODBC z zgodnością interfejsu API poziomu 2. Jeśli sterownik źródła danych jest zgodny z zestawem interfejsu API poziomu 1, nadal można używać migawek z możliwością aktualizacji i tylko do odczytu oraz zestawów rekordów tylko do odczytu, ale nie dynamicznych. Jednak sterownik poziomu 1 może obsługiwać dynamiczne zestawy, jeśli obsługuje rozszerzone pobieranie i kursory sterowane zestawem kluczy. Aby uzyskać więcej informacji na temat poziomów zgodności ODBC, zobacz ODBC.

Uwaga

Jeśli chcesz użyć zarówno migawek, jak i dynamicznych, musisz opierać je na dwóch różnych obiektach (dwóch różnych CDatabase połączeniach).

W przeciwieństwie do migawek, które używają magazynu pośredniego obsługiwanego przez bibliotekę kursorów ODBC, zestawy dynaset pobierają rekord bezpośrednio ze źródła danych, gdy tylko przewiniesz go do niego. Dzięki temu rekordy są pierwotnie wybierane przez zestaw dynamiczny zsynchronizowany ze źródłem danych.

Aby uzyskać listę sterowników ODBC uwzględnionych w tej wersji programu Visual C++ i uzyskać informacje na temat uzyskiwania dodatkowych sterowników, zobacz lista sterowników ODBC.

Zobacz też

Open Database Connectivity (ODBC)