Sdílet prostřednictvím


TN053: Vlastní DFX rutiny pro třídy DAO databáze

[!POZNÁMKA]

Tak jako jazyk Visual C++ .NET, tak taky prostředí a průvodci jazyka Visual C++ nepodporují rozhraní DAO (přestože třídy rozhraní DAO jsou zahrnuty a lze je stále použít).Společnost Microsoft doporučuje použít OLE DB šablony nebo ODBC a MFC pro nové projekty.Měli by jste používat pouze rozhraní DAO pro údržbu existujících aplikací.

Tato technická Poznámka popisuje mechanismus výměny (DFX) pole záznamu DAO.Porozumět, co se děje v rutiny DFX DFX_Text funkce budou vysvětleny podrobně jako příklad.Jako další zdroj informací o této technické poznámky můžete zkontrolovat kód pro ostatní funkce jednotlivých DFX.Pravděpodobně nebudete potřebovat vlastní rutina DFX často může být nutné vlastní rutina RFX (používat s třídami databází ODBC).

Tato technická poznámka obsahuje:

  • Přehled DFX

  • Příklady výměnu záznamů DAO a dynamická vazba

  • Podstata práce DFX

  • Nemá své vlastní rutina DFX

  • Podrobnosti o DFX_Text

Přehled DFX

Mechanismus výměny pole záznamu DAO (DFX) slouží ke zjednodušení načítání a aktualizaci dat při použití postupu CDaoRecordset třídy.Proces je zjednodušeno členové data CDaoRecordset třídy.Podle vyplývající z CDaoRecordset, přidáte členy data odvozená třída představující každé pole v tabulce nebo dotazu.Tento mechanismus "statická vazba" je jednoduchý, ale nemusí být metoda fetch nebo aktualizace dat výběru pro všechny aplikace.DFX načítá pokaždé, když se změní aktuální záznam všech vázané pole.Pokud vyvíjíte citlivé na výkon aplikace, která nevyžaduje načítání všech polí při změně měny "dynamická vazba" via CDaoRecordset::GetFieldValue a CDaoRecordset::SetFieldValue může být metoda výběru data aplikace access.

[!POZNÁMKA]

DFX a dynamická vazba se vzájemně nevylučují, tak lze používat hybridní statické a dynamické vazby.

Příklad 1 – Použití DAO záznam výměnu pouze

(předpokládá CDaoRecordset – odvozené třídy CMySet již otevřen)

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

Příklad 2 – Dynamická vazba pouze použití

(předpokládá použití CDaoRecordset třídy, rs, a je již otevřen)

// 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();

Například 3 – Použití aplikace DAO záznamu pole Exchange a dynamická vazba

(předpokládá procházení dat zaměstnanců s CDaoRecordset-odvozené třídy 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);

Podstata práce DFX

DFX mechanismus pracuje podobným způsobem jako mechanismus výměny (RFX) pole záznamu používaný tříd MFC ODBC.Zásady DFX a RFX jsou stejné, ale existují četné vnitřní rozdíly.Návrh funkce DFX byl takový, že prakticky veškerý kód sdílí jednotlivých DFX rutiny.Na nejvyšší úrovni DFX pouze nemá několik věcí.

  • DFX konstrukce SQL Vyberte klauzule a SQL Parametry klauzule potřeby.

  • Konstrukce DFX vazby struktura používaná v DAO GetRows funkce (o tom více později).

  • Vyrovnávací paměť dat slouží k detekci dirty pole (pokud používá dvojité ukládání do vyrovnávací paměti) spravuje DFX

  • Spravuje DFX NULL a DIRTY stav maticových a nastaví hodnoty v případě potřeby aktualizace.

Srdcem DFX mechanismus je CDaoRecordset odvozené třídy DoFieldExchange funkce.Tato funkce odešle volání jednotlivých funkcí DFX typu příslušné operace.Před voláním DoFieldExchange vnitřní funkce MFC nastavit typ operace.Následující seznam obsahuje různé typy operací a stručný popis.

Operace

Description

AddToParameterList

Vytvoří klauzuli parametry

AddToSelectList

Klauzule SELECT sestavení

BindField

Nastavuje strukturu vazby

BindParam

Nastaví hodnoty parametru

Opravu

Nastaví stav NULL

AllocCache

Přiděluje mezipaměti pro kontrolu dirty

StoreField

Uloží aktuální záznam do mezipaměti

LoadField

Obnovení mezipaměti pro hodnoty člena

FreeCache

Uvolnění mezipaměti

SetFieldNull

Nastaví pole Stav & hodnota NULL

MarkForAddNew

Dirty značky polí není PSEUDO NULL-

MarkForEdit

Dirty Pokud značky polí neodpovídají mezipaměti

SetDirtyField

Nastaví pole hodnot, které jsou označeny jako nečisté

V další části každé operace budou vysvětleny podrobněji pro DFX_Text.

Nejdůležitější funkce pochopit proces výměny DAO pole záznamu je, že používá GetRows funkce CDaoRecordset objektu.DAO GetRows funkce pracovat v několika způsoby.Tato technická Poznámka bude pouze Krátce popište GetRows je mimo rozsah této technické poznámky.

DAO GetRows pracovat v několika způsoby.

  • Je možné načíst více záznamů a více polí dat současně.To umožňuje rychlejší přístup k datům s complication vyřizování velké datové struktury a příslušná pořadová čísla pro každé pole a pro každý záznam dat ve struktuře.MFC nesmí využívat více záznam mechanismus pro načítání.

  • Dalším způsobem GetRows lze práce je umožnit programátorům určit adresy vazby pro načtená data pro jeden záznam dat každého pole.

  • DAO, budou také "zpětného volání" do volajícího pro proměnné délky sloupce Pokud chcete povolit volajícímu přidělit paměť.Tato druhá funkce má výhodu minimalizace počtu kopií dat a také umožňuje přímé ukládání dat do členy třídy ( CDaoRecordset odvozené třídy).Tento druhý mechanismus je metoda MFC používá svázat datové členy v CDaoRecordset odvozené třídy.

Nemá své vlastní rutina DFX

Je zřejmé z této diskuse, nejdůležitější operace prováděny v jakékoli funkci DFX musí být možnost nastavit požadované datové struktury úspěšně volání GetRows.Počet dalších operací, které DFX funkce musí podporovat také, ale žádná jako důležité nebo složitý jako správně Příprava GetRows volání.

Použití DFX je popsána v dokumentaci online.Jsou v podstatě dva požadavky.Členové musí být nejprve přidán do CDaoRecordset odvozené třídy pro každý vázané pole a parametr.Následující CDaoRecordset::DoFieldExchange by měla být přepsána.Poznámka: typ dat člena je důležité.Je odpovídající data z pole v databázi nebo být alespoň konvertibilní typu.Například číselné pole v databázi, například dlouhé celé číslo vždy můžete převést na text a vázané na CString členských, ale textové pole v databázi může nemusí být převedena na číselná, například dlouhé celé číslo a vázána na člena dlouhé celé číslo.DAO a databázový stroj Microsoft Jet jsou odpovědné za převod (nikoli MFC).

Podrobnosti o DFX_Text

Jak bylo uvedeno dříve, je nejlépe vysvětlit Princip DFX práce příkladu.Pro tento účel prostřednictvím interní položky DFX_Text by umožňují alespoň základní znalosti DFX poměrně dobře pracovat.

  • AddToParameterList
    Tato operace se vytvoří SQL Parametry klauzule ("Parameters <param name>, <param type> ... ;") vyžadované Jet.Každý parametr s názvem a zadali (podle RFX volání).Funkce CDaoFieldExchange::AppendParamType funkce Zobrazit názvy jednotlivých typů.U DFX_Text, je použit typ text.

  • AddToSelectList
    SQL vytvoří Vyberte klauzule.To jsi přímým voláním DFX zadaný název sloupce je jednoduše připojeny ("SELECT <column name>, ...").

  • BindField
    Nejvíce komplexní operací.Jak bylo uvedeno dříve je kde používá strukturu vazby DAO GetRows nastaven.Jak je vidět z kódu v DFX_Text zahrnují typy informací ve struktuře použitý typ DAO (DAO_CHAR nebo DAO_WCHAR u DFX_Text).Navíc typ vazby se používá také nastaven.V předchozí části GetRows byl pouze stručně popsán, ale byl dostatečně popisují typ vazby se používá MFC je vždy vazbu adresy přímé (DAOBINDING_DIRECT).Navíc pro vazbu sloupce s proměnnou délkou (stejně jako DFX_Text) zpětné vazby se používá tak, že lze řídit přidělování paměti a určit adresu správnou délku MFC.To znamená že MFC vždy poznáte DAO "kde" dat, takže vazby přímo do proměnné členů.Zbytek struktury vazbu vyplněn jako adresu funkce zpětného volání přidělení paměti a typ sloupce vazby (vazba název sloupce).

  • BindParam
    Jedná se o jednoduché operace, která volá SetParamValue s hodnotou parametru určenou v svůj parametr člen.

  • Opravu
    Vyplní NULL stav každého pole.

  • SetFieldNull
    Tato operace pouze označí stav každého pole jako NULL a nastaví hodnotu proměnné členů na PSEUDO_NULL.

  • SetDirtyField
    Volání SetFieldValue pro každé pole označen za nečistý.

Zbývajících operací zabývat pouze použití mezipaměti data.Mezipaměť dat je navíc vyrovnávací paměti dat v aktuální záznam, který slouží k určité věci jednodušší.Například "dirty" polí lze automaticky zjistit.Jak je popsáno v dokumentaci online jej lze vypnout úplně, nebo na úrovni pole.Provádění vyrovnávací paměť využívá mapy.Mapa používá při párování až dynamicky přiřazené kopie dat s adresou "vázaná" pole (nebo CDaoRecordset odvozené datový člen).

  • AllocCache
    Přidá do mapy a dynamicky přiděluje mezipaměti pole hodnota.

  • FreeCache
    Odstraní hodnotu pole v mezipaměti a odebere z mapy.

  • StoreField
    Aktuální hodnota pole se zkopíruje do mezipaměti data.

  • LoadField
    Hodnota uložená v mezipaměti se zkopíruje do pole členské.

  • MarkForAddNew
    Kontroluje, pokud je aktuální hodnota pole bez-NULL a označí dirty, pokud je to nutné.

  • MarkForEdit
    Porovná aktuální hodnoty pole s mezipaměť dat a označí dirty, pokud je to nutné.

Tip

Vaše vlastní rutiny DFX model na existující DFX rutiny pro standardní datové typy.

Viz také

Další zdroje

Technické poznámky podle čísla

Technické poznámky podle kategorie