Zestaw rekordów: dynamiczne wiązanie kolumn danych (ODBC)
Ten temat dotyczy klas MFC ODBC.
Zestawy rekordów zarządzać powiązania tabeli kolumn, które można określić podczas projektowania, ale istnieją przypadki, kiedy chcesz powiązać kolumny, które nie były znane Ci w czasie projektowania.Ten temat tłumaczy:
Kiedy można powiązać kolumny dynamicznie z zestawem rekordów.
Jak powiązać kolumny dynamicznie w czasie wykonywania.
[!UWAGA]
Ten temat dotyczy obiekty pochodzące z CRecordset w wiersz, który luzem pobieranie nie została zaimplementowana.Techniki opisane w ogólnie nie są zalecane, jeśli używasz pobieranie wiersza zbiorczego.Aby uzyskać więcej informacji dotyczących pobierania wierszy bulk, zobacz zestaw rekordów: pobieranie rekordów luzem (ODBC).
Kiedy może powiązać kolumny dynamicznie
W czasie projektowania, Kreator aplikacji MFC lub Kreatora konsumenta ODBC MFC (z Add Class) tworzy zestaw rekordów zajęć na podstawie znanych tabel i kolumn w źródle danych.Baz danych można przełączać między podczas projektowania je i później, gdy aplikacja używa tych tabel i kolumn w czasie wykonywania.Bieżącego lub innego użytkownika może dodać lub upuocić tabelę lub dodawanie lub usuwanie kolumn z tabeli, która zależy od aplikacji zestaw rekordów.Prawdopodobnie nie jest istotny dla wszystkich aplikacji dostępu do danych, ale jeśli jest to dla Ciebie, jak można radzić sobie z zmian w schemacie bazy danych, innych niż przebudowy i ponownej kompilacji?Celem tego tematu jest odpowiedzieć na to pytanie.
W tym temacie opisano najczęściej przypadek, w którym może powiązać kolumny dynamicznie — po rozpoczęciu z zestawem rekordów na podstawie schematu bazy danych znanych, chcesz obsługiwać dodatkowe kolumny w czasie wykonywania.Dalsze temacie założono, że dodatkowe kolumny mapować do CString w polu elementów członkowskich danych, najczęściej, chociaż sugestie są dostarczane w celu zarządzania innych typów danych.
Z niewielką ilość dodatkowego kodu możesz:
Określić, które kolumny są dostępne w czasie wykonywania.
BIND dodatkowe kolumny do zestawu rekordów dynamicznie, w czasie wykonywania.
Twój zestaw rekordów zawiera jeszcze danych elementów członkowskich dla kolumn, które wiedziały o podczas projektowania.Ponadto zawiera niewielką ilość dodatkowego kodu, który dynamicznie Określa, czy zostały dodane nowe kolumny do tabeli docelowej i, jeśli tak, wiąże te nowe kolumny do magazynu przydzielany dynamicznie (a nie do zestawu rekordów danych członków).
W tym temacie nie obejmuje innych przypadkach wiązanie dynamiczne, takie jak tabele z porzuconych lub kolumny.W tych przypadkach należy użyć bardziej bezpośrednio wywołania interfejsu API ODBC.Aby uzyskać informacje, zobacz zestaw SDK ODBC Programmer's Reference na dysku CD z biblioteki MSDN.
Jak powiązać kolumny dynamicznie
Aby powiązać kolumny dynamicznie, musisz znać (lub można wykryć) nazwy dodatkowych kolumn.Należy także przydzielić pamięci masowej dla dodatkowego pola danych członków, określić ich nazwy oraz ich typy i określić liczbę kolumn, które dodajesz.
Dyskusja o dwóch różnych zestawów rekordów.Pierwszy to główny zestaw rekordów, który wybiera te rekordy z tabeli docelowej.Druga jest zestaw rekordów specjalnej kolumny używany do uzyskiwania informacji na temat kolumn w tabeli docelowej.
Proces ogólne
Na najbardziej ogólnym poziomie, wykonaj następujące kroki:
Konstruowania obiektu głównego zestawu rekordów.
Opcjonalnie można przekazać wskaźnik do otwartego CDatabase obiektu lub być w stanie dostarczyć informacji o połączeniu do kolumny zestawu rekordów w inny sposób.
Podjąć kroki w celu dodania kolumn dynamicznie.
Zobacz procesu opisanego w Dodawanie kolumn poniżej.
Otwórz swój główny zestaw rekordów.
Zestaw rekordów wybiera rekordy i używa pole rekordu programu exchange (RFX) do powiązania zarówno statycznych kolumn (tych mapowane do elementów członkowskich danych pola rekordów), jak i dynamiczne kolumny (przypisane do dodatkowej pamięci, jaką można przydzielić).
Dodawanie kolumn
Wiązanie dynamiczne dodane kolumn w czasie wykonywania wymaga wykonania następujących czynności:
W czasie wykonywania określają, jakie są kolumny w tabeli docelowej.Wyciąg z tych informacji listę kolumn, które zostały dodane do tabeli, ponieważ klasa recordset został zaprojektowany.
Dobre podejście jest użycie klasy recordset kolumny przeznaczone do kwerendy źródła danych, aby uzyskać informacje o kolumnach dla tabeli docelowej (takie jak typ danych i nazwę kolumny).
Zapewnienia magazynu dla nowych członków dane pole.Ponieważ klasa główny zestaw rekordów nie ma pola dane elementów członkowskich dla kolumn nieznany, musisz podać miejsce do przechowywania nazwy, wartości wyników i ewentualnie typu danych (jeżeli są różne typy danych kolumn).
Jeden z nich jest zbudowanie jednej lub kilku list dynamiczne, jedną dla nazw nowych kolumn, inny dla ich wartości wyników, a trzeci na ich typy danych (Jeśli to konieczne).Tych list, szczególnie na liście wartości, podaj informacje i przechowywania niezbędnych dla wiązania.Następujący rysunek ilustruje tworzenie list.
Dynamiczne budowanie list kolumny do powiązania
Dodać wywołanie funkcji RFX w głównym zestawie rekordów DoFieldExchange działać dla poszczególnych dodanych kolumny.Te wywołania RFX pracę pobierania rekordu, w tym dodatkowe kolumny oraz powiązanie kolumn zestawu rekordów danych członków lub pamięć masową dynamicznie podany dla nich.
Jeden z nich jest dodanie pętlę głównym zestawem rekordów DoFieldExchange funkcja, która w pętli przegląda listę nowych kolumn, wywołanie odpowiedniej funkcji RFX dla każdej kolumny na liście.Dla każdego wywołania RFX przekazać nazwę kolumny z listy Nazwa kolumn i miejsce przechowywania w odpowiednich członkiem listy wartości wyników.
Listy kolumn
W poniższej tabeli przedstawiono cztery list, które są potrzebne do pracy z.
Bieżąca tabela kolumny (lista 1 na ilustracji)
Lista kolumn obecnie w tabeli w źródle danych.Ta lista może odpowiadać na liście kolumn obecnie powiązane w twoim zestawie rekordów.Powiązany zestaw rekordów kolumny (lista 2 na rysunku)
Lista kolumn powiązane w twoim zestawie rekordów.Te kolumny już instrukcji RFX w swojej DoFieldExchange funkcji.Kolumny-do-Bind-dynamicznie (Lista 3 na rysunku)
Lista kolumn w tabeli, ale nie w twoim zestawie rekordów.Są to kolumny, które chcesz powiązać dynamicznie.Dynamiczne kolumna wartości (Lista 4 na rysunku)
Wykaz zawierający magazyn dla wartości źródło kolumny, który powiąże się dynamicznie.Elementy tej listy odpowiadają w kolumnach do Bind-dynamicznie, jeden do jednego.
Budowania list
Z ogólną strategię pamiętać mogą zwrócić się do szczegółów.Procedury opisane w dalszej części tego tematu pokazują sposoby tworzenia list w Wyświetla listę kolumn.Procedury prowadzą użytkownika przez:
Określanie nazwy kolumn nie w twoim zestawie rekordów.
Dostarczanie pamięci dynamicznej dla nowo dodane do tabeli kolumn.
Dynamiczne dodawanie RFX wywołuje dla nowej kolumny.
Określanie kolumn tabeli są nie w twoim zestawie rekordów
Utworzenie listy (granica-kolumny zestawu rekordów-, jak lista 2 w ilustracja) zawierający listę kolumn już powiązany w Twoim głównym zestawie rekordów.Następnie zbudować listy (kolumny do Bind-dynamicznie, pochodząca z bieżących tabeli kolumn i kolumnach powiązanych-zestaw rekordów), która zawiera nazwy kolumn, które są w tabeli, w źródle danych, ale nie w twoim zestawie rekordów głównych.
Aby określić nazwy kolumn nie w zestawie rekordów (kolumny do Bind-dynamicznie)
Utworzyć listę już powiązane w twoim zestawie rekordów głównej kolumny (ruch kolumnach powiązanych z danymi zestawu rekordów).
Jeden z nich jest utworzenie kolumnach powiązanych-zestaw rekordów w czasie projektowania.Wywołania funkcji RFX w zestawie rekordów można sprawdzić wizualnie DoFieldExchange funkcji, aby uzyskać te nazwy.Następnie w skonfigurowaniu listy jako tablica zainicjowany z nazwami.
Na przykład ilustracja pokazuje Bound Recordset kolumny (lista 2) z trzech elementów.Kolumny-BOUND-rekordów brak kolumna telefonu wskazany w bieżącej tabeli kolumnach (lista 1).
Porównanie bieżącej tabeli kolumn i kolumnach powiązanych-Recordset utworzyć listę (kolumny do Bind-dynamicznie) nie jest jeszcze powiązane w twoim zestawie rekordów głównej kolumny.
Jeden z nich jest pętli w czasie wykonywania (ruch kolumny bieżącej tabeli) i listy kolumn już powiązany w twoim zestawie rekordów (ruch kolumnach powiązanych z danymi zestawu rekordów) równolegle listę kolumn w tabeli.Do kolumny do Bind-dynamicznie umieścić wszystkie nazwy w prąd-Tabela-kolumny, które nie są wyświetlane w kolumnach powiązanych-zestaw rekordów.
Na przykład ilustracja pokazuje kolumny do Bind-dynamicznie (Lista 3) z jednego elementu: kolumna telefonu można odnaleźć w bieżącej tabeli kolumn (lista 1), ale nie w Bound Recordset kolumny (lista 2).
Utworzyć listę wartości Dynamic-kolumna (jak w 3.4 listy w ilustracja) do przechowywania wartości danych odpowiadających nazwy każdej kolumny przechowywany na liście kolumny do powiązania dynamicznie (kolumny do Bind-dynamiczna).
Elementy tej listy odgrywają rolę nowego zestawu rekordów pole danych członków.Są one miejsc przechowywania danych, do których są powiązane kolumny dynamiczne.Aby uzyskać opisy list, zobacz Wyświetla listę kolumn.
Przeznaczone do przechowywania nowych kolumn
Następnie należy skonfigurować lokalizację dla kolumn, które mają być powiązane dynamicznie.Idea jest zapewnienie element listy, w którym będą przechowywane wartości każdej kolumny.Te lokalizacje przechowywania równolegle zmienne składowe zestawu rekordów, które przechowują kolumny normalnie związane.
Aby zapewnić magazyn dynamiczny dla nowej kolumny (Dynamic-kolumna wartości)
Tworzenie dynamicznych--wartości kolumn, równolegle do kolumny do Bind-dynamicznie, wartości danych w każdej kolumnie.
Na przykład ilustracja pokazuje dynamicznie kolumna wartości (Lista 4) z jednego elementu: CString obiekt zawierający numer telefonu dla bieżącego rekordu: "555-1212".
W przypadku typowych, dynamiczne kolumny wartości ma elementy typu CString.Jeśli masz do czynienia z kolumn o różnych typach danych, musisz listę, która może zawierać elementy różnych typów.
W wyniku powyższych procedurach jest dwie listy główne: kolumny do Bind-dynamicznie zawierające nazwy kolumn i dynamiczne--wartości kolumn zawierających wartości w kolumnach dla bieżącego rekordu.
Porada |
---|
Nowe kolumny nie są wszystkie tego samego typu danych, można się dodatkowe równolegle listy zawierające elementy, które jakoś określają rodzaj każdy odpowiedni element na liście kolumn. (Można użyć wartości AFX_RFX_BOOL, AFX_RFX_BYTE, i tak dalej, to jeśli chcesz.Te stałe są zdefiniowane w AFXDB.H.) Wybierz typ listy oparte na sposób reprezentowania typów danych kolumn. |
Dodawanie połączeń RFX powiązać kolumn
Wreszcie, organizuje wiązanie dynamiczne nastąpić poprzez umieszczenie RFX wywołuje dla nowej kolumny w swojej DoFieldExchange funkcji.
Do dynamicznego dodawania wywołań RFX dla nowej kolumny
- W głównym zestawie rekordów DoFieldExchange Członkowskich funkcji, należy dodać kod, który pętli listy nowych kolumn (kolumny do Bind-dynamiczna).W każdej pętli należy wyodrębnić nazwę kolumny z kolumny do Bind-dynamicznie i wartość wyniku dla kolumny z dynamicznie kolumna wartości.Te elementy do przekazać wywołanie funkcji RFX odpowiednie do typu danych kolumny.Aby uzyskać opisy list, zobacz Wyświetla listę kolumn.
W przypadku wspólnego w swoje RFX_Text wyodrębnieniu wywołania funkcji CString obiektów z list, jak w następujących wierszach kodu, gdzie kolumny do Bind-dynamicznie jest CStringList o nazwie m_listName i jest dynamicznie kolumna wartości CStringList o nazwie m_listValue:
RFX_Text( pFX,
m_listName.GetNext( posName ),
m_listValue.GetNext( posValue ));
Aby uzyskać więcej informacji na temat funkcji RFX, zobacz makra i Globals w Informacje dotyczące biblioteki klas.
Porada |
---|
Jeśli nowe kolumny są różne typy danych, należy użyć instrukcji switch w pętli wywołanie odpowiedniej funkcji RFX dla każdego typu. |
Kiedy wywołuje ramach DoFieldExchange podczas Otwórz proces, aby powiązać kolumny zestawu rekordów, wywołania RFX dla kolumny statyczne powiązania tych kolumn.Następnie pętli wielokrotnie wywołuje funkcje RFX dla kolumny dynamiczne.