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 Update
opustí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í:
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.
AddNew
neboEdit
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íUpdate
funkce 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íAddNew
volá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, žeAddNew
pro porovnání neexistují žádné dříve uložené hodnoty.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
.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.V
AddNew
případě ,Update
končí obnovením dříve uložených hodnot záznamu, který byl aktuální před volánímAddNew
. 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 AddNew datové č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 AddNew vyrovnávací paměť úprav do zálohovaného obsahu. Pro Edit odstraně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