Sdílet prostřednictvím


TN043: Rutiny RFX

[!POZNÁMKA]

Následující technické poznámce nebyly aktualizovány od byla poprvé zahrnuta v dokumentaci online.Proto některé postupy a témata mohou být nesprávné nebo zastaralé.Nejnovější informace je vhodné vyhledat téma zájmu v dokumentaci online index.

Tato poznámka popisuje architekturu pole záznamu exchange (RFX).Také popisuje, jak píšete RFX_ postup.

Přehled Exchange pole záznamu

Funkce pole všech záznamů jsou v kódu jazyka C++.Neexistují žádné zvláštní prostředky nebo magic makra.Srdce mechanismus je virtuální funkci, která musí být v každé třídy odvozené recordset přepsána.Vždy nachází v tomto formuláři:

void CMySet::DoFieldExchange(CFieldExchange* pFX)
{
  //{{AFX_FIELD_MAP(CMySet)
  <recordset exchange field type call>
  <recordset exchange function call>
  //}}AFX_FIELD_MAP
}

Zvláštní formát komentáře AFX umožňují vyhledat a upravit kód v této funkci ClassWizard.Kód, který není kompatibilní s ClassWizard by umístěna mimo zvláštní formát komentáře.

V tomto příkladu <recordset_exchange_field_type_call> je ve formě:

pFX->SetFieldType(CFieldExchange::outputColumn);

a <recordset_exchange_function_call> je ve formě:

RFX_Custom(pFX, "Col2", m_Col2);

Většina RFX_ funkce (například mít tři argumenty uvedené výše, ale některéRFX_Texta RFX_Binary) další volitelné argumenty.

Více RFX_ mohou být zahrnuty v každé DoDataExchange funkce.

Viz 'afxdb.h' seznam všech záznamů pole exchange rutiny s MFC.

Recordset pole volání jsou způsob registrace paměťových míst (obvykle data členů) k ukládání dat pole CMySet třídy.

Poznámky

Recordset pole funkce jsou navrženy pro práci s pouze CRecordset tříd.Nejsou obecně použitelné podle jiných tříd MFC.

Počáteční hodnoty dat jsou nastaveny v konstruktoru standard C++, obvykle v bloku s //{{AFX_FIELD_INIT(CMylSet) a //}}AFX_FIELD_INIT komentáře.

Každý RFX_ funkce musí podporovat různé operace od archivace pole v přípravě pro úpravy pole vrácení dirty stav pole.

Volání funkce DoFieldExchange (například SetFieldNull, IsFieldDirty), nemá vlastní inicializace kolem volání DoFieldExchange.

Jak funguje?

Není potřeba znát následující pole záznamu exchange použít.Vysvětlení, jak to funguje na pozadí můžete zapsat však exchange procedury.

DoFieldExchange Členské funkce je podobně jako Serialize členské funkce – je odpovědný za získání nebo nastavení dat do/z/do data členů třídy z externí formuláře (v tomto případu sloupce z výsledku dotazu ODBC).pFX Parametr kontextu postupu výměny dat a je podobná CArchive parametr CObject::Serialize.pFX ( CFieldExchange Objektu) má ukazatel operace, které je podobné, ale generalizace z CArchive příznak směru.Funkce aplikace RFX pravděpodobně podporovat následující operace:

  • BindParam – uveďte, kde by parametr data načíst ODBC

  • BindFieldToColumn – uveďte kde ODBC musí načíst nebo uložení dat outputColumn

  • Oprava – nastavení CString/CByteArray délky, nastavit stav NULL bit

  • MarkForAddNew – značka dirty, pokud hodnota změnila volat metodu AddNew

  • MarkForUpdate – značka dirty, pokud hodnota změnila úpravy volání

  • Název – přidat názvy polí pro pole označen za nečistý.

  • NameValue – Append "< název sloupce > =?" pro pole označen za nečistý.

  • Hodnota – Append "?" za oddělovač, například "," nebo ""

  • SetFieldDirty– Stav nastavení bitu dirty (tj.změněné) pole

  • SetFieldNull– Nastavit stav bit určující hodnotu null pro pole

  • IsFieldDirty– Vrácená hodnota stav nevyřízeného bitu.

  • IsFieldNull— Vrátit hodnotu null stav bit

  • IsFieldNullable– Vrací hodnotu TRUE, pokud je pole může obsahovat hodnoty NULL

  • StoreField – archivovat hodnoty pole

  • LoadField – archivovány znovu načíst hodnotu pole

  • GetFieldInfoValue — vrátit pole Obecné informace

  • GetFieldInfoOrdinal — vrátit pole Obecné informace

Rozšíření

Rozšířit výchozím mechanismem RFX několika způsoby.Můžete

  • Přidáte nové datové typy.Příklad:

    CBookmark
    
  • Přidáte nové postupy výměny (RFX_???).

    void AFXAPI RFX_Bigint(CFieldExchange* pFX, const char *szName,
        BIGINT& value);
    
  • Jste DoFieldExchange členské funkce podmíněně zahrnout další volání RFX nebo jiné platné příkazy jazyka C++.

    while (posExtraFields != NULL)
    {
        RFX_Text(pFX, m_listName.GetNext(posExtraFields), 
            m_listValue.GetNext(posExtraValues));
    }
    

[!POZNÁMKA]

Tento kód nelze upravit pomocí ClassWizard a by měly být použity pouze mimo zvláštní formát komentáře.

Psaní vlastního RFX

Chcete-li zapsat vlastní RFX funkce je navrženo, že zkopírovat existující funkce RFX a upravit pro vlastní účely.Doprava RFX zkopírujte výběr provádět úlohy mnohem snadnější.Některé funkce RFX mají některé jedinečné vlastnosti, které je měly vzít v úvahu při rozhodování, který chcete kopírovat.

  • RFX_Long a RFX_Int:
    Jedná se o nejjednodušší funkce RFX.Hodnota dat není nutné zvláštní výklad a velikost dat je pevná.

  • RFX_Single a RFX_Double:
    Jako RFX_Long a RFX_Int nad tyto funkce jsou jednoduché a lze použít výchozí provádění rozsáhlé.Jsou uloženy v dbflt.cpp namísto dbrfx.cpp, však povolit načítání runtime plovoucí bod knihovny, pouze pokud jsou výslovně odkaz.

  • RFX_Text a RFX_Binary:
    Tyto dvě funkce předem přidělit statickou vyrovnávací paměti pro uložení řetězce nebo binární informace a zaregistrujte vyrovnávací paměti s ODBC SQLBindCol namísto registrace & hodnota.Z tohoto důvodu tyto dvě funkce máte zvláštní případ kódu.

  • RFX_Date:
    Vlastní datové struktury TIMESTAMP_STRUCT ODBC vrátí informace o datu a času.Tato funkce dynamicky přiděluje TIMESTAMP_STRUCT jako "proxy" pro odesílání a přijímání dat Datum čas.Různé operace musí přenášet informace o datu a času mezi C++ CTime TIMESTAMP_STRUCT serveru proxy a objektu.Tato funkce značně komplikuje, ale je dobrým příkladem použití serveru proxy pro přenos dat.

  • RFX_LongBinary:
    Toto je pouze knihovna tříd RFX funkce, která nepoužívá vazbu sloupce přijímat a odesílat data.Tato funkce ignoruje operaci BindFieldToColumn a místo toho během operace opravy alokuje prostor pro uložení příchozích dat SQL_LONGVARCHAR nebo SQL_LONGVARBINARY, pak provede voláním funkce SQLGetData do úložiště přidělenou načíst hodnotu.Při přípravě odeslat hodnoty data zpět do zdroje dat (například NameValue a hodnota operace), tato funkce využívá funkce ODBC a DATA_AT_EXEC.Viz Technická poznámka 45 Další informace o práci s SQL_LONGVARBINARY a SQL_LONGVARCHARs.

Při psaní vlastního RFX_ funkce, často bude možné použít CFieldExchange::Default k provedení dané operace.Podívejte se na provádění výchozí pro dotyčné operace.Pokud provádí operace by psaní v vaše RFX_ funkce můžete delegovat CFieldExchange::Default. Možné příklady volací CFieldExchange::Default v dbrfx.cpp

Je důležité volání IsFieldType na začátku funkce RFX a návrat okamžitě, pokud vrátí hodnotu FALSE.Tento mechanismus zajišťuje parametr operace prováděny na outputColumnsa naopak (podobně jako volací BindParam na outputColumn).Kromě toho IsFieldType automaticky udržuje přehled o počtu outputColumns (m_nFields) a parametry (m_nParams).

Viz také

Další zdroje

Technické poznámky podle čísla

Technické poznámky podle kategorie