Sdílet prostřednictvím


Výměna polí záznamu: Jak funkce RFX pracuje

Toto téma vysvětluje proces RFX. Toto je rozšířené téma, které se zabývá:

Poznámka:

Toto téma se týká tříd odvozených z toho, ze CRecordset kterých hromadné načítání řádků nebylo implementováno. Pokud používáte hromadné načítání řádků, je implementována výměna polí hromadného záznamu (Bulk RFX). Hromadný formát RFX je podobný formátu RFX. Informace o rozdílech najdete v tématu Sada záznamů: Hromadné načítání záznamů (ODBC).

RFX a sada záznamů

Datové členy objektu sady záznamů tvoří vyrovnávací paměť pro úpravy, která obsahuje vybrané sloupce jednoho záznamu. Při prvním otevření sady záznamů a chystá se přečíst první záznam, vytvoří vazby RFX (přidruží) každý vybraný sloupec k adrese příslušného datového člena pole. Když sada záznamů aktualizuje záznam, RFX volá funkce rozhraní ODBC API k odeslání příkazu SQL UPDATE nebo INSERT ovladači. RFX používá své znalosti datových členů pole k určení sloupců k zápisu.

Architektura zálohuje vyrovnávací paměť úprav v určitých fázích, aby v případě potřeby mohl obnovit jeho obsah. RFX zálohuje vyrovnávací paměť úprav před přidáním nového záznamu a před úpravou existujícího záznamu. Obnoví vyrovnávací paměť úprav v některých případech, například po Update volání následující AddNew. Vyrovnávací paměť pro úpravy se neobnoví, pokud před voláním Updateopustíte nově změněnou vyrovnávací paměť, například přesunutím na jiný záznam .

Kromě výměny dat mezi zdrojem dat a datovými členy sady záznamů spravuje RFX parametry vazby. Při otevření sady záznamů jsou všechny datové členy parametrů vázány v pořadí zástupných symbolů "?" v příkazu SQL, který CRecordset::Open vytváří. Další informace naleznete v tématu Sada záznamů: Parametrizace sady záznamů (ODBC).

Přepsání DoFieldExchange třídy sady záznamů dělá veškerou práci a přesouvá data v obou směrech. Podobně jako výměna dat dialogového okna (DDX) potřebuje RFX informace o datových členech třídy. Průvodce poskytuje potřebné informace napsáním implementace DoFieldExchange sady záznamů pro vás na základě názvů datových členů pole a datových typů, které zadáte pomocí průvodce.

Proces výměny polí záznamu

Tato část popisuje posloupnost událostí RFX jako objekt sady záznamů je otevřen a při přidávání, aktualizaci a odstraňování záznamů. Pořadí tabulek operací RFX Operations During Recordset Open a table Sequence of RFX Operations During Scrolling v tomto tématu ukazuje proces jako RFX zpracovává Move příkaz v sadě záznamů a jako RFX spravuje aktualizaci. Během těchto procesů se volá DoFieldExchange pro provádění mnoha různých operací. Datový m_nOperation člen CFieldExchange objekt určuje, která operace je požadována. Může být užitečné číst sadu záznamů: Jak sady záznamů vybírají záznamy (ODBC) a sada záznamů: Jak sady záznamů aktualizují záznamy (ODBC) před čtením tohoto materiálu.

RFX: Počáteční vazba sloupců a parametrů

Při volání funkce Open člena objektu sady záznamů dochází v uvedeném pořadí k následujícím aktivitám RFX:

  • Pokud sada záznamů obsahuje datové členy parametrů, volání DoFieldExchange rozhraní pro vazbu parametrů na zástupné symboly parametrů v řetězci příkazu SQL sady záznamů. Pro každý zástupný symbol nalezený v příkazu SELECT se používá reprezentace datového typu závislého na hodnotě parametru. K tomu dochází po přípravě příkazu SQL, ale před jeho spuštěním. Informace o přípravě příkazů naleznete ve ::SQLPrepare funkci v odkazech programátora ODBC.

  • Architektura volá DoFieldExchange druhý čas pro vytvoření vazby hodnot vybraných sloupců s odpovídajícími datovými členy pole v sadě záznamů. Tím se vytvoří objekt sady záznamů jako vyrovnávací paměť pro úpravy obsahující sloupce prvního záznamu.

  • Sada záznamů spustí příkaz SQL a zdroj dat vybere první záznam. Sloupce záznamu se načtou do datových členů sady záznamů.

Následující tabulka ukazuje posloupnost operací RFX při otevření sady záznamů.

Posloupnost operací RFX během otevření sady záznamů

Vaše operace Operace DoFieldExchange Operace databáze nebo SQL
1. Otevřete sadu záznamů.
2. Sestavení příkazu SQL
3. Odešlete SQL.
4. Vytvoření vazby datových členů parametrů
5. Svázání datových členů polí se sloupci.
6. ROZHRANÍ ODBC provede přesun a vyplní data.
7. Opravte data pro jazyk C++.

Sady záznamů používají připravené spuštění rozhraní ODBC, které umožňuje rychlé opětovné dotazování pomocí stejného příkazu SQL. Další informace o připraveném spuštění najdete v referenčních informacích programátora ODBC.

RFX: Posouvání

Když se posunete z jednoho záznamu do druhého, volání DoFieldExchange architektury, která nahradí hodnoty dříve uložené v datových členech polí hodnotami nového záznamu.

Následující tabulka ukazuje posloupnost operací RFX, když se uživatel přesune ze záznamu na záznam.

Posloupnost operací RFX během posouvání

Vaše operace Operace DoFieldExchange Operace databáze nebo SQL
1. Volejte MoveNext nebo jednu z ostatních funkcí Move.
2. ROZHRANÍ ODBC provede přesun a vyplní data.
3. Opravte data pro jazyk C++.

RFX: Přidání nových záznamů a úprava existujících záznamů

Pokud přidáte nový záznam, sada záznamů funguje jako vyrovnávací paměť pro úpravy pro vytvoření obsahu nového záznamu. Stejně jako při přidávání záznamů se při úpravách záznamů mění hodnoty datových členů sady záznamů. Z pohledu RFX je sekvence následující:

  1. Vaše volání sady záznamů AddNew nebo Edit členské funkce způsobí, že RFX uloží aktuální vyrovnávací paměť pro úpravy, aby ji bylo možné později obnovit.

  2. AddNew nebo Edit připraví pole v vyrovnávací paměti pro úpravy, aby rfX mohl rozpoznat změněné datové členy pole.

    Vzhledem k tomu, že nový záznam nemá žádné předchozí hodnoty pro porovnání nových záznamů, AddNew nastaví hodnotu každého datového členu pole na hodnotu PSEUDO_NULL. Při pozdějším volání Updatefunkce RFX porovná hodnotu každého datového člena s hodnotou PSEUDO_NULL. Pokud existuje rozdíl, datový člen byl nastaven. (PSEUDO_NULL není stejný jako sloupec záznamu s hodnotou true Null, ani není ani jeden z těchto hodnot stejný jako hodnota C++NULL.)

    Update Na rozdíl od volání AddNewvolání Update porovnává Edit aktualizované hodnoty s dříve uloženými hodnotami místo použití PSEUDO_NULL. Rozdíl spočívá v tom, že AddNew pro porovnání neexistují žádné dříve uložené hodnoty.

  3. Přímo nastavíte hodnoty datových členů polí, jejichž hodnoty chcete upravit nebo které chcete vyplnit pro nový záznam. To může zahrnovat volání SetFieldNull.

  4. Vaše volání aktualizace kontroluje změněné datové členy polí, jak je popsáno v kroku 2 (viz pořadí operací RFX během posouvání). Pokud se žádná nezměnila, Update vrátí hodnotu 0. Pokud se některé datové členy polí změnily, Update připraví a spustí příkaz SQL INSERT , který obsahuje hodnoty pro všechna aktualizovaná pole v záznamu.

  5. V AddNewpřípadě , Update končí obnovením dříve uložených hodnot záznamu, který byl aktuální před voláním AddNew . Nové Edit, upravené hodnoty zůstanou na místě.

Následující tabulka ukazuje posloupnost operací RFX při přidání nového záznamu nebo úpravě existujícího záznamu.

Posloupnost operací RFX během operace AddNew a Edit

Vaše operace Operace DoFieldExchange Operace databáze nebo SQL
1. Zavolejte AddNew nebo Edit.
2. Zálohujte vyrovnávací paměť pro úpravy.
3. Označte AddNewdatové členy pole jako "čisté" a Null.
4. Přiřaďte hodnoty datovým členům pole sady záznamů.
5. Zavolejte Update.
6. Zkontrolujte změněná pole.
7. Sestavení příkazu SQL INSERT pro AddNew příkaz NEBO UPDATE pro Edit.
8. Odešlete SQL.
9. Obnovte AddNewvyrovnávací paměť úprav do zálohovaného obsahu. Pro Editodstranění zálohy.

RFX: Odstranění existujících záznamů

Když odstraníte záznam, rfX nastaví všechna pole na hodnotu NULL jako připomenutí, že se záznam odstraní a musíte ho přesunout. Nepotřebujete žádné další informace o sekvenci RFX.

Viz také

Výměna polí záznamu (Record Field Exchange – RFX)
MFC – využívání rozhraní ODBC
Makra, globální funkce a globální proměnné
CFieldExchange – třída
CRecordset::D oFieldExchange