Udostępnij za pośrednictwem


Zestaw rekordów: Powiązanie dynamicznie kolumn danych (ODBC)

Ten temat dotyczy klas MFC ODBC.

Zestawy rekordów zarządzać wiązania tabeli kolumn, które można określić w czasie projektowania, ale istnieją przypadki, gdy chcesz powiązać kolumn, które były znane użytkownikowi w czasie projektowania.W tym temacie wyjaśniono:

  • Kiedy należy powiązać dynamicznie kolumny zestawu rekordów.

  • Jak powiązać kolumn dynamicznie w czasie wykonywania.

[!UWAGA]

Ten temat dotyczy obiekty pochodzące z CRecordset w którym wiersz luzem pobieranie nie została zaimplementowana.Techniki opisane w ogólnie nie zaleca się używania pobieranie wiersza luzem.Aby uzyskać więcej informacji na temat Pobieranie wiersza luzem, zobacz zestaw rekordów: pobieranie rekordów luzem (ODBC).

Kiedy może dynamicznie powiązania kolumn

W czasie projektowania, Kreator aplikacji MFC lub Kreatora konsumenta ODBC MFC (z Add Class) tworzy klas rekordów na podstawie znanych tabel i kolumn w źródle danych.Bazy danych można zmienić między podczas projektowania je i później, gdy aplikacja używa tych tabel i kolumn w czasie wykonywania.Użytkownika może dodać upuocić tabelę lub dodać lub drop kolumn z tabeli, która zależy od aplikacji rekordów.Prawdopodobnie nie jest istotny dla wszystkich aplikacji dostępu do danych, ale jeśli jest dla Ciebie, jak można można sprostać zmian w schemacie bazy danych, innych niż przez ponowne zaprojektowanie i ponownie?Celem tego tematu jest odpowiedzi na to pytanie.

W tym temacie opisano najbardziej typowy przypadek, w którym może powiązać kolumn dynamicznie — posiadające rozpoczęty z zestawem rekordów na podstawie schematu bazy danych znane, chcesz obsługiwać dodatkowe kolumny w czasie wykonywania.Dalsze temat zakłada mapowania dla dodatkowych kolumn CString pól danych członków, najbardziej typowy przypadek, chociaż sugestie są dostarczane ułatwiające zarządzanie innych typów danych.

Z niewielką ilość dodatkowego kodu można:

  • 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 nadal członków danych dla kolumny, które wiedziały o w czasie projektowania.Ponadto zawiera niewielką ilość dodatkowego kodu, który dynamicznie Określa, czy zostały dodane wszelkie nowe kolumny do tabeli docelowej i, jeśli tak, powiąże te nowe kolumny do przechowywania przydzielany dynamicznie (zamiast do rekordów danych członków).

W tym temacie nie obejmuje innych przypadkach wiązanie dynamiczne, takich jak tabele porzucone lub kolumn.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ć dynamicznie kolumn

Aby powiązać dynamicznie kolumny, musisz znać (lub mieć możliwość określenia) nazwy dodatkowych kolumn.Musi także przydzielić pamięć dla członków dodatkowe pola danych, określ ich nazwy oraz ich typów i określić liczbę kolumn, które dodajesz.

Następujące dyskusji wymienia dwóch różnych zestawów rekordów.Pierwsza jest głównym rekordów, który wybiera rekordy z tabeli docelowej.Druga jest specjalnej kolumny zestawu rekordów, używany do uzyskiwania informacji na temat kolumn w tabeli docelowej.

wewhtz77.collapse_all(pl-pl,VS.110).gifProces ogólne

Najbardziej ogólnego poziomu, wykonaj następujące kroki:

  1. Konstruowanie 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 z kolumny zestawu rekordów w inny sposób.

  2. Należy podjąć kroki w celu dynamicznego dodawania kolumn.

    Zobacz procesu opisanego w Dodawanie kolumn poniżej.

  3. Otwórz swój główny zestaw rekordów.

    Zestaw rekordów wybiera rekordy i używa pola rekordu wymiany (RFX) powiązać statyczne kolumn, (te mapowane do elementów członkowskich zestawu rekordów pole danych) i dynamicznego kolumn (mapowane do przechowywania dodatkowych, można przydzielić).

wewhtz77.collapse_all(pl-pl,VS.110).gifDodawanie kolumn

Dynamicznie wiążące dodawane kolumny w czasie wykonywania wymaga następujących kroków:

  1. Ustalenia w czasie wykonywania, kolumny są w tabeli docelowej.Wyodrębnianie z informacji listy kolumn, które są dodawane do tabeli, ponieważ klasa zestawu rekordów została zaprojektowana.

    Dobrym sposobem jest użycie klasy rekordów kolumny, zaprojektowane aby kwerenda źródła danych dla kolumny informacji w tabeli docelowej (na przykład w kolumnie Nazwa i typ danych).

  2. Zapewnienia magazynu dla nowych członków dane pole.Ponieważ klasa głównego zestawu rekordów nie ma pola danych członków nieznany kolumn, należy podać miejsce do przechowywania nazw, wynik wartości i ewentualnie typu danych (Jeśli kolumny są różnych typów danych).

    Jeden z nich jest tworzenie jednej lub kilku list dynamiczne, jedną dla kolumn nowej nazwy, inny wynik wartości i trzeci na ich typy danych (Jeśli to konieczne).Wykazy te szczególnie listy wartości, dostarczyć informacji oraz niezbędne magazynu dla wiązania.Następujący rysunek ilustruje tworzenie list.

    Budowanie listy kolumn, aby powiązać dynamicznie

    Dynamiczne Budowanie powiązania kolumn list

  3. Dodać wywołanie funkcji RFX w rekordów głównych DoFieldExchange działać dla poszczególnych dodanych kolumny.Te wywołania RFX pracę Pobieranie rekordu, włączając dodatkowe kolumny i wiążące kolumny zestawu rekordów danych członków lub pamięć masową dynamicznie dostarczony dla nich.

    Jeden z nich jest dodanie pętlę do rekordów głównych DoFieldExchange funkcji, 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 nazwę kolumny i miejsce przechowywania w odpowiednich członek listy wartości wyników.

wewhtz77.collapse_all(pl-pl,VS.110).gifListy kolumn

Cztery list, jest potrzebne przedstawiono w poniższej tabeli.

  • Bieżący tabeli kolumn (Lista 1 na rysunku)
    Lista kolumn w tabeli w źródle danych.Tej listy może odpowiadać listy kolumn, które aktualnie powiązana w twoim zestawie rekordów.

  • BOUND rekordów kolumn (Lista 2 na rysunku)
    Lista kolumn powiązane w twoim zestawie rekordów.Te kolumny już posiadać deklaracje RFX sieci 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 kolumny wartości (Lista 4 na rysunku)
    Wykaz zawierający magazynu dla wartości źródło kolumny, które można powiązać dynamicznie.Elementy tej liście odpowiadają w kolumnach do Bind-dynamicznie, jeden do jednego.

wewhtz77.collapse_all(pl-pl,VS.110).gifTworzenie list

Z ogólnej strategii na uwadze można włączyć szczegóły.Procedury w pozostałej części tego tematu pokazują sposoby tworzenia list, przedstawione 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.

  • Dodawanie dynamicznie RFX wymaga nowych kolumn.

wewhtz77.collapse_all(pl-pl,VS.110).gifOkreślanie właściwości kolumn w tabeli nie są w twoim zestawie rekordów

Utworzenie listy (Bound--kolumny zestawu rekordów, jak w liście 2 w ilustracji) zawierający listę kolumn już związany swój główny zestaw rekordów.Następnie należy utworzyć listę (kolumny do Bind-dynamicznie, pochodzących z kolumny tabeli bieżących i kolumnach powiązanych rekordów), która zawiera nazwy kolumn, które są w tabeli w źródle danych, ale nie w swój główny zestaw rekordów.

Aby określić nazwy kolumn w zestawie rekordów (kolumny do Bind-dynamicznie)

  1. Utworzenie listy (Bound-rekordów kolumn) kolumn już związany swój główny zestaw rekordów.

    Jeden z nich jest utworzenie kolumnach powiązanych rekordów w czasie projektowania.Można sprawdzić wizualnie wywołania funkcji RFX w zestawie rekordów DoFieldExchange Aby uzyskać te nazwy funkcji.Następnie ustaw listy jako tablica zainicjowana z nazwami.

    Na przykład ilustracji pokazuje Bound rekordów kolumn (Lista 2) z trzech elementów.Kolumny zestawu rekordów BOUND Brak telefonu kolumny pokazane w bieżących tabeli kolumn (Lista 1).

  2. Porównaj do listy (kolumny do Bind-dynamicznie) kolumn, nie jest już powiązane w twoim zestawie rekordów z głównym kolumny tabeli bieżących i kolumnach powiązanych rekordów.

    Jedno podejście polega na liście kolumn w tabeli pętli w czasie wykonywania (prąd-tabeli kolumn) i listy kolumny już powiązane w twoim zestawie rekordów (Bound-rekordów kolumn) równolegle.W kolumnach do Bind-dynamicznie umieścić nazwy w bieżących--kolumn tabeli, które nie są wyświetlane w kolumnach powiązanych rekordów.

    Na przykład ilustracji zawiera kolumny do Bind-dynamicznie (Lista 3) z jednym elementem: kolumna telefonicznej znaleziono bieżących tabeli kolumn (Lista 1), ale nie w Bound rekordów kolumn (Lista 2).

  3. Utworzenie listy wartości kolumn dynamiczne (jak w 4 listy w ilustracji) do przechowywania wartości danych odpowiadających każdej nazwa kolumny przechowywanych na liście kolumny, aby powiązać dynamicznie (kolumny do Bind-dynamicznie).

    Elementy listy odgrywają rolę nowego zestawu rekordów, pola danych członków.Są one miejsc składowania, z którymi powiązane są dynamiczne kolumn.Opisy list, zobacz Wyświetla listę kolumn.

wewhtz77.collapse_all(pl-pl,VS.110).gifZapewnienie magazynu dla nowej kolumny

Następnie ustawiania lokalizacji magazynu dla kolumn na związanie się dynamicznie.Pomysł jest dostarczenie element listy do przechowywania wartości każdej kolumny.Te lokalizacje przechowywania równolegle zmiennych rekordów, których przechowywanie kolumn zwykle związanego.

Aby zapewnić magazyn dynamiczny dla nowej kolumny (Dynamic-kolumna wartości)

  • Budowanie dynamicznych-kolumna wartości, równolegle do kolumny do Bind-dynamicznie, zawierają wartości danych w każdej kolumnie.

    Na przykład ilustracji zawiera dynamiczne kolumny wartości (Lista 4) z jednym elementem: CString obiektu zawierającego numer telefonu rzeczywistych dla bieżącego rekordu: "555-1212".

    W przypadku najbardziej typowe wartości kolumn dynamiczny ma elementy typu CString.Jeśli mamy do czynienia z kolumn o różnych typach danych, musisz listy, który może zawierać elementy różnych typów.

Wyniki poprzedniego postępowania jest dwóch list 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.

PoradaPorada

Nowe kolumny nie wszystkie są tego samego typu danych, można się dodatkowe równolegle listy zawierające elementy, które jakoś zdefiniować typ każdego odpowiadającego im elementu na liście kolumn.(Można użyć wartości AFX_RFX_BOOL, AFX_RFX_BYTEi tak dalej do tego, jeżeli chcesz.Te stałe są zdefiniowane w AFXDB.H.) Wybierz typ listy na podstawie jak reprezentują typy danych kolumn.

wewhtz77.collapse_all(pl-pl,VS.110).gifDodanie wywołania RFX powiązać kolumn

Wreszcie, organizuje dynamiczne wiązanie nastąpić poprzez umieszczenie RFX wymaga nowych kolumn w sieci DoFieldExchange funkcji.

Do dynamicznego dodawania RFX wymaga nowych kolumn

  • W rekordów głównych DoFieldExchange Członkowskich działały, Dodaj kod, który w pętli przegląda listę nowych kolumn (kolumny do Bind-dynamicznie).W każdej pętli wyodrębnić nazwę kolumny z kolumny do Bind-dynamicznie i wartość wyniku dla kolumny z wartości kolumn dynamiczne.Przekazywać odpowiednie dla typu danych kolumny te elementy wywołanie funkcji RFX.Opisy list, zobacz Wyświetla listę kolumn.

W przypadku wspólnej w sieci RFX_Text działać wywołań wyodrębniania CString obiektów z listy, w następujące wiersze kodu, gdzie kolumny do Bind-dynamicznie jest CStringList o nazwie m_listName i wartości kolumn dynamiczny jest 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 makr i Globals w Odwołanie do biblioteki klas.

PoradaPorada

Nowe kolumny są różne typy danych, użyj instrukcji switch w pętli programu wywołanie odpowiedniej funkcji RFX dla każdego typu.

Gdy wywołuje ramach DoFieldExchange podczas Otwórz proces powiązać kolumny zestawu rekordów, wywołania RFX dla statycznych kolumn powiązania tych kolumn.Twoje pętli wielokrotnie wywołuje funkcje RFX dla dynamicznych kolumn.

Zobacz też

Koncepcje

Zestaw rekordów (ODBC)

Zestaw rekordów: Praca z bardzo duże elementy danych (ODBC)