Udostępnij za pośrednictwem


TN053: Procedury DFX niestandardowe klasy bazy danych DAO

[!UWAGA]

W Visual C++.NET, środowiska Visual C++ i kreatorzy już obsługiwać DAO (chociaż klasy DAO są włączone i nadal można ich użyć).Firma Microsoft zaleca użycie Szablonów OLE DB lub ODBC i MFC dla nowych projektów.Utrzymania istniejących aplikacji, należy używać tylko obiektów DAO.

To Uwaga techniczna opisano mechanizm wymiany (DFX) w polu rekordu DAO.Aby pomóc zrozumieć, co się dzieje w procedurach DFX DFX_Text funkcji zostaną wyjaśnione szczegółowo, na przykład.Jako dodatkowe źródło informacji do niniejszej uwagi techniczne można sprawdzić kod dla innych poszczególnych funkcji DFX.Prawdopodobnie nie będzie konieczne niestandardowe rutynowych DFX często może być konieczne niestandardowe rutynowych RFX (używana z klasami baz danych ODBC).

Ten Uwaga techniczna zawiera:

  • Omówienie DFX

  • Przykłady za pomocą wymiany pól rekordów DAO i dynamiczne wiązanie

  • Jak działa DFX

  • Do czego rutynowych DFX swoje niestandardowe

  • Szczegóły DFX_Text

Omówienie DFX

Mechanizm wymiany pola rekordów DAO (DFX) jest używany do uproszczenia procedury pobierania i aktualizowania danych, korzystając z CDaoRecordset klasy.Upraszcza proces przy użyciu danych członków CDaoRecordset klasy.Przez wynikających z CDaoRecordset, można dodawać członków danych w klasie pochodnej, reprezentujące każde pole tabeli lub kwerendy.Ten mechanizm "wiązanie statyczne" jest proste, ale nie może metody pobrania/Aktualizuj dane wyboru dla wszystkich aplikacji.DFX pobiera każdego pola związanego przy każdej zmianie bieżącego rekordu.W wypadku opracowywania aplikacji wrażliwych wydajności, które nie wymagają pobierania wszystkich pól po zmianie waluty "dynamiczne wiązanie" via CDaoRecordset::GetFieldValue i CDaoRecordset::SetFieldValue może być wybór metody dostępu danych.

[!UWAGA]

DFX i dynamiczne wiązanie nie wykluczają, więc hybrydowe powiązania statycznych i dynamicznych można używać.

Przykład 1 — Użycie tylko wymiany pól rekordów DAO

(zakłada CDaoRecordset — klasy CMySet już otwarty)

// Add a new record to the customers table
myset.AddNew();
myset.m_strCustID = _T("MSFT");
myset.m_strCustName = _T("Microsoft");
myset.Update();

Przykład 2 — Użycie tylko dynamiczne wiązanie

(zakłada się przy użyciu CDaoRecordset klasy rs, i jest już otwarty)

// Add a new record to the customers table
COleVariant  varFieldValue1 ( _T("MSFT"), VT_BSTRT );
//Note: VT_BSTRT flags string type as ANSI, instead of UNICODE default
COleVariant  varFieldValue2  (_T("Microsoft"), VT_BSTRT );
rs.AddNew();
rs.SetFieldValue(_T("Customer_ID"), varFieldValue1);
rs.SetFieldValue(_T("Customer_Name"), varFieldValue2);
rs.Update();

Przykład 3 — Użyj z DAO rekord pola wymiany i wiązanie dynamiczne

(zakłada przeglądania danych pracowników z CDaoRecordset-klasy emp)

// Get the employee's data so that it can be displayed
emp.MoveNext();

// If user wants to see employee's photograph,
// fetch it
COleVariant varPhoto;
if (bSeePicture)
   emp.GetFieldValue(_T("photo"), varPhoto);

// Display the data
PopUpEmployeeData(emp.m_strFirstName,
    emp.m_strLastName, varPhoto);

Jak działa DFX

Mechanizm DFX działa w sposób podobny do mechanizmu wymiany (RFX) w polu rekordu używane przez klas MFC ODBC.Zasady DFX i RFX są takie same, ale istnieją liczne różnice wewnętrznego.Projekt funkcji DFX był taki, że praktycznie cały kod jest udostępniony przez poszczególne procedury DFX.Na najwyższym poziomie DFX tylko wykonuje kilka czynności.

  • DFX konstrukcji SQL Zaznacz klauzuli i SQL Parametry klauzuli, jeśli to konieczne.

  • DFX konstrukcje struktury powiązanie używane przez DAO's GetRows funkcji (więcej informacji na ten później).

  • DFX zarządza bufor danych używane do wykrywania pól dirty (jeśli jest używane buforowanie podwójne)

  • Zarządza DFX NULL i DIRTY stanu tablic i ustawia wartości, w razie potrzeby, aktualizacji.

Mechanizm jest istotą DFX CDaoRecordset 's klasy DoFieldExchange funkcji.Funkcja ta wywołuje wywołania poszczególnych funkcji DFX typu odpowiedniej czynności.Przed wywoływaniem DoFieldExchange funkcji wewnętrznych MFC ustawić typ operacji.Na poniższej liście przedstawiono różne rodzaje operacji i krótki opis.

Operacja

Opis

AddToParameterList

Buduje klauzuli parametrów

AddToSelectList

Klauzula SELECT kompilacje

BindField

Konfiguruje powiązania struktury

BindParam

Ustawia wartości parametrów

Korekty

Ustawia stan NULL

AllocCache

Przydziela pamięć podręczną dla wyboru dirty

StoreField

Zapisuje bieżący rekord w pamięci podręcznej

LoadField

Przywraca pamięci podręcznej, aby wartości elementów członkowskich

FreeCache

Zwalnia pamięć podręczna

SetFieldNull

Zestawy pól Stan & wartość NULL

MarkForAddNew

Znaków pól dirty Jeśli nie PSEUDO NULL

MarkForEdit

Jeżeli dirty pola Znaczniki nie odpowiadają pamięci podręcznej

SetDirtyField

Zestawy pól wartości oznaczony jako zanieczyszczony

W następnej sekcji, każda operacja zostaną wyjaśnione bardziej szczegółowo do DFX_Text.

Najważniejszych funkcji zrozumieć dotyczących procesu wymiany pola rekordów DAO jest, że używa GetRows funkcji CDaoRecordset obiektu.DAO GetRows funkcji można pracować na kilka sposobów.Uwaga techniczna, to będzie tylko krótko opisz GetRows jako jest poza zakresem niniejszej noty techniczne.

DAO GetRows można pracować na kilka sposobów.

  • Go można pobrać wiele rekordów i wiele pól danych jednocześnie.To umożliwia szybszy dostęp do danych z trudność dotyczącej struktury danych duże i odpowiednie przesunięcia do każdego pola i dla każdego rekordu danych w strukturze.MFC nie korzystać z tego rekordu wielu mechanizm pobierania.

  • Innym sposobem GetRows można pracy jest umożliwienie programistów określić adresy wiązania dla każdego pola, dla jednego rekordu danych pobrane dane.

  • DAO będą również "Oddzwonić" do rozmówcy dla zmiennej długości kolumn w celu umożliwienia rozmówcy przydzielić pamięci.Funkcja ta druga ma korzyści minimalizację liczby kopii danych, jak również umożliwiające bezpośrednie przechowywanie danych do elementy klasy ( CDaoRecordset klasy).Mechanizm ten drugi jest metoda MFC używa powiązać dane członkom w CDaoRecordset klasy pochodne.

Do czego rutynowych DFX swoje niestandardowe

Z tej dyskusji, które najważniejszych operacji w dowolnej funkcji DFX musi być możliwość ustawiania struktury danych wymagane do pomyślnego wywołania GetRows.Liczba innych operacji, które funkcja DFX musi obsługiwać również, ale nie jako ważne lub złożone jako poprawnie przygotowywania do GetRows wywołania.

Wykorzystanie DFX jest opisane w dokumentacji online.Zasadniczo są dwa wymogi.Po pierwsze, należy dodać członków do CDaoRecordset klasy dla każdego pola związanego i parametr.Po tym CDaoRecordset::DoFieldExchange powinny zostać zastąpione.Uwaga ważne jest typ danych elementu członkowskiego.Powinien on niezgodne z danymi z pola bazy danych lub przynajmniej być konwertowany na tego typu.Na przykład pola liczbowego w bazie danych, takich jak liczba całkowita długa, można zawsze konwertowane na tekst i powiązane z CString Członkowskie, ale pole tekstowe w bazie danych niekoniecznie mogą być konwertowane na numeryczną reprezentację, takich jak liczba całkowita długa i powiązane z członkiem długa.DAO i aparat bazy danych Microsoft Jet są odpowiedzialne za konwersji (zamiast MFC).

Szczegóły DFX_Text

Jak już wspomniano, najlepszym sposobem wyjaśniają, jak działa DFX jest do pracy przez przykładowy.W tym celu pośrednictwa NETGEAR DFX_Text powinien działać dość dobrze zapewnia co najmniej podstawową wiedzę DFX.

  • AddToParameterList
    Ta operacja buduje SQL Parametry klauzuli ("Parameters <param name>, <param type> ... ;") wymaganego przez aparat Jet.Każdy parametr jest o nazwie i wpisana (określone w wywołaniu RFX).Zobacz opis funkcji CDaoFieldExchange::AppendParamType funkcji, aby wyświetlić nazwy poszczególnych typów.W odniesieniu do DFX_Text, typ, używany jest text.

  • AddToSelectList
    Buduje SQL Zaznacz klauzuli.Jest to całkiem proste przodu określona przez wywołanie DFX nazwa kolumny jest po prostu dołączany ("SELECT <column name>, ...").

  • BindField
    Najbardziej złożone operacje.Jak wspomniano wcześniej, to jest, gdy struktura wiązania DAO używane przez GetRows konfiguracji.Jak widać z kodu w DFX_Text typu DAO używane następujące typy informacji w strukturze (DAO_CHAR lub DAO_WCHAR z DFX_Text).Dodatkowo typ powiązania używany jest także ustawić.W starszych sekcji GetRows została opisana, tylko na krótko, ale było wystarczające do wyjaśnienia, że typ powiązanie używane przez MFC jest zawsze adres bezpośredniego powiązania (DAOBINDING_DIRECT).Dodatkowo dla powiązań kolumn o zmiennej długości (takich jak DFX_Text) wiązania wywołania zwrotnego jest używany tak, aby MFC można kontrolować alokacji pamięci i określić adres właściwą długość.Oznacza to, że MFC zawsze powiedzieć DAO "gdzie" umieszczanie danych, umożliwiając powiązanie bezpośrednio do zmiennych.Pozostałe struktury powiązanie jest wypełniane elementy, takie jak adres funkcji zwrotnej alokacji pamięci i typ powiązań kolumn (wiążące przez nazwę kolumny).

  • BindParam
    Jest to prostą, która wywołuje SetParamValue z wartością parametru określoną w Członkowskich parametru.

  • Korekty
    Wypełnia NULL stanu dla każdego pola.

  • SetFieldNull
    Ta operacja tylko znaki stan każdego pola jako NULL i ustawia wartość zmiennej członka PSEUDO_NULL.

  • SetDirtyField
    Wywołania SetFieldValue dla każdego pola, oznaczony jako zanieczyszczony.

Wszystkie pozostałe operacje zajmuje tylko przy użyciu pamięci podręcznej danych.Pamięć podręczna danych jest dodatkowego buforu danych w bieżącym rekordzie, które jest używane do tworzenia niektóre rzeczy prostsze.Na przykład pola "dirty" można automatycznie wykryć.Jak opisano w dokumentacji online można również całkowicie wyłączyć całkowicie lub na poziomie pola.Wdrożenie buforu wykorzystuje mapy.Ta mapa jest używany do dopasowywania up przydzielany dynamicznie kopie danych z adresem pole "związane" (lub CDaoRecordset pochodzące z elementu danych).

  • AllocCache
    Dynamicznie przydziela wartość pola buforowany i dodaje go do mapy.

  • FreeCache
    Usuwa wartość pola buforowany i usuwa go z mapy.

  • StoreField
    Skopiowanie bieżącej wartości pola do pamięci podręcznej danych.

  • LoadField
    Kopiuje wartość buforowana do członka pola.

  • MarkForAddNew
    Kontrole, jeżeli bieżąca wartość pola jest nie-NULL i oznacza dirty, jeśli to konieczne.

  • MarkForEdit
    Porównuje bieżące wartości pola z danych w pamięci podręcznej i oznacza dirty, jeśli to konieczne.

PoradaPorada

Model sieci niestandardowych procedur DFX, w istniejących procedur DFX dla typów danych standardowych.

Zobacz też

Inne zasoby

Uwagi techniczne przez liczbę

Uwagi techniczne według kategorii