Sdílet prostřednictvím


Sada záznamů: Funkce operací AddNew, Edit a Delete (ODBC)

Toto téma se vztahuje na třídy MFC ODBC.

Toto téma vysvětluje, jak AddNew, Edita Delete členské funkce práce třídy CRecordset . Probíraná témata zahrnují:

Poznámka:

Toto téma se vztahuje na objekty odvozené z toho, ze CRecordset kterých hromadné načítání řádků nebylo implementováno. Pokud používáte hromadné načítání řádků, přečtěte si téma Sada záznamů: Hromadné načítání záznamů (ODBC).

Jako doplněk můžete chtít přečíst výměnu polí záznamu: Jak RFX funguje, což popisuje odpovídající roli RFX v operacích aktualizace.

Přidání záznamu

Přidání nového záznamu do sady záznamů zahrnuje volání členské funkce AddNew sady záznamů, nastavení hodnot datových členů pole nového záznamu a volání funkce aktualizační člena k zápisu záznamu do zdroje dat.

Jako předpoklad pro volání AddNewnesmí být sada záznamů otevřena jako jen pro čtení. CanAppend Členské CanUpdate funkce umožňují určit tyto podmínky.

Při volání AddNew:

  • Záznam v vyrovnávací paměti pro úpravy je uložen, takže jeho obsah lze obnovit, pokud je operace zrušena.

  • Datové členy pole jsou označeny příznakem, takže je možné později zjistit změny v nich. Datové členy pole jsou také označeny jako čisté (beze změny) a nastaveny na hodnotu Null.

Po volání AddNewpředstavuje vyrovnávací paměť pro úpravy nový prázdný záznam připravený k vyplnění hodnotami. Uděláte to tak, že hodnoty nastavíte ručně tak, že je přiřadíte. Místo zadání skutečné hodnoty dat pro pole můžete zavolat SetFieldNull hodnotu Null.

Chcete-li potvrdit změny, zavoláte Update. Při volání Update nového záznamu:

  • Pokud ovladač ODBC podporuje ::SQLSetPos funkci rozhraní ODBC API, mfc použije funkci k přidání záznamu do zdroje dat. S ::SQLSetPos, MFC může přidat záznam efektivněji, protože nemusí vytvářet a zpracovávat příkaz SQL.

  • Pokud ::SQLSetPos nelze použít, mfc provede následující kroky:

    1. Pokud se nezjistí žádné změny, Update nic nevrátí a vrátí hodnotu 0.

    2. Pokud dojde ke změnám, Update vytvoří příkaz SQL INSERT . Sloupce reprezentované všemi datovými členy špinavého pole jsou uvedeny v příkazu INSERT . Pokud chcete vynutit zahrnutí sloupce, zavolejte členovou funkci SetFieldDirty :

      SetFieldDirty( &m_dataMember, TRUE );
      
    3. Update potvrdí nový záznam – příkaz INSERT se spustí a záznam se potvrdí do tabulky ve zdroji dat (a sadě záznamů, pokud není snímek), pokud transakce neprobíhá.

    4. Uložený záznam se obnoví do vyrovnávací paměti pro úpravy. Záznam, který byl aktuální před voláním AddNew , je znovu aktuální bez ohledu na to, zda příkaz INSERT byl úspěšně proveden.

    Tip

    Pro úplné řízení nového záznamu použijte následující přístup: nastavte hodnoty všech polí, která budou mít hodnoty, a pak explicitně nastavte všechna pole, která zůstanou null voláním SetFieldNull ukazatele na pole a parametrEM PRAVDA (výchozí). Pokud chcete zajistit, aby pole nebylo zapsáno do zdroje dat, zavolejte SetFieldDirty ukazatel na pole a parametr NEPRAVDA a neupravujte hodnotu pole. Chcete-li zjistit, zda pole může být Null, volání IsFieldNullable.

    Tip

    Pokud chcete zjistit, kdy datové členy sady záznamů mění hodnotu, mfc používá PSEUDO_NULL hodnotu odpovídající každému datovému typu, který můžete uložit v sadě záznamů. Pokud je nutné explicitně nastavit pole na hodnotu PSEUDO_NULL a pole již bude označeno null, musíte také volat SetFieldNull, předat adresu pole v prvním parametru a NEPRAVDA ve druhém parametru.

Viditelnost přidaných záznamů

Kdy je přidaný záznam viditelný pro vaši sadu záznamů? Přidané záznamy se někdy zobrazují a někdy se nezobrazují v závislosti na dvou věcech:

  • Co váš řidič dokáže.

  • Co může architektura využívat.

Pokud ovladač ODBC podporuje ::SQLSetPos funkci rozhraní ODBC API, mfc tuto funkci použije k přidání záznamů. Při ::SQLSetPospřidání záznamů jsou přidané záznamy viditelné pro libovolnou aktualizovatelnou sadu záznamů MFC. Bez podpory funkce nejsou přidané záznamy viditelné a musíte je zavolat Requery , abyste je viděli. Použití ::SQLSetPos je také efektivnější.

Úprava existujícího záznamu

Úprava existujícího záznamu v sadě záznamů zahrnuje posouvání záznamu, volání členské funkce Edit sady záznamů, nastavení hodnot datových členů pole nového záznamu a volání funkce Aktualizovat člena zapsat změněný záznam do zdroje dat.

Jako předpoklad pro volání Editmusí být sada záznamů aktualizovatelná a na záznamu. IsDeleted Členské CanUpdate funkce umožňují určit tyto podmínky. Aktuální záznam také nesmí být odstraněn a musí existovat záznamy v sadě záznamů (a IsBOF IsEOF vracet hodnotu 0).

Při volání Editse uloží záznam v vyrovnávací paměti pro úpravy (aktuální záznam). Hodnoty uloženého záznamu se později použijí ke zjištění, jestli se některá pole změnila.

Po volání Editpředstavuje vyrovnávací paměť úprav aktuální záznam, ale teď je připravena přijmout změny datových členů pole. Pokud chcete záznam změnit, ručně nastavíte hodnoty všech datových členů polí, které chcete upravit. Místo zadání skutečné hodnoty dat pro pole můžete zavolat SetFieldNull hodnotu Null. Chcete-li potvrdit změny, zavolejte Update.

Tip

Pokud chcete přejít z AddNew režimu nebo Edit z režimu, zavolejte Move pomocí parametru AFX_MOVE_REFRESH.

Jako předpoklad pro volání Updatenesmí být sada záznamů prázdná a aktuální záznam nesmí být odstraněn. IsBOF, IsEOFa IsDeleted všechny by měly vrátit hodnotu 0.

Při volání Update upraveného záznamu:

  • Pokud ovladač ODBC podporuje ::SQLSetPos funkci rozhraní ODBC API, mfc použije funkci k aktualizaci záznamu ve zdroji dat. Ovladač ::SQLSetPosporovná vyrovnávací paměť pro úpravy s odpovídajícím záznamem na serveru a aktualizuje záznam na serveru, pokud se oba liší. S ::SQLSetPos, MFC může aktualizovat záznam efektivněji, protože nemusí vytvářet a zpracovávat příkaz SQL.

    - nebo -

  • Pokud ::SQLSetPos nelze použít, mfc provede následující kroky:

    1. Pokud nedošlo k žádným změnám, Update nic neprovádí a vrátí hodnotu 0.

    2. Pokud dojde ke změnám, Update vytvoří příkaz SQL UPDATE . Sloupce uvedené v příkazu UPDATE jsou založené na změněných datových členů polí.

    3. Update potvrdí změny – spustí příkaz UPDATE a záznam se změní ve zdroji dat, ale není potvrzen, pokud probíhá transakce (viz Transakce: Provádění transakce v sadě záznamů (ODBC) informace o tom, jak transakce ovlivňuje aktualizaci). Rozhraní ODBC uchovává kopii záznamu, která se také změní.

    4. Na rozdíl od procesu procesu AddNewEdit proces neobnoví uložený záznam. Upravený záznam zůstane na místě jako aktuální záznam.

    Upozornění

    Při přípravě na aktualizaci sady záznamů voláním Updatedbejte na to, aby sada záznamů obsahovala všechny sloupce, které tvoří primární klíč tabulky (nebo všechny sloupce libovolného jedinečného indexu v tabulce nebo dostatek sloupců k jednoznačné identifikaci řádku). V některých případech může architektura použít pouze sloupce vybrané v sadě záznamů k identifikaci záznamu v tabulce, který se má aktualizovat. Bez všech potřebných sloupců může být v tabulce aktualizováno více záznamů. V tomto případě architektura vyvolá výjimky při volání Update.

    Tip

    Pokud voláte AddNew nebo Edit po volání některé z funkcí dříve, ale před voláním Update, vyrovnávací paměť pro úpravy se aktualizuje uloženým záznamem, nahradí se nový nebo upravený záznam probíhající. Toto chování vám dává způsob, jak přerušit nebo Edit zahájit AddNew nový: pokud zjistíte, že probíhající záznam je chybný, jednoduše zavolejte Edit nebo AddNew znovu.

Odstranění záznamu

Odstranění záznamu ze sady záznamů zahrnuje posouvání záznamu a volání členské funkce delete sady záznamů. Na rozdíl od AddNew a Edit, Delete nevyžaduje odpovídající volání Update.

Jako předpoklad pro volání Deletemusí být sada záznamů aktualizovatelná a musí být na záznamu. Tyto CanUpdatepodmínky umožňují určit funkce , IsBOFIsEOFa IsDeleted členské funkce.

Při volání Delete:

  • Pokud ovladač ODBC podporuje ::SQLSetPos funkci rozhraní ODBC API, mfc použije funkci k odstranění záznamu ve zdroji dat. Použití ::SQLSetPos je obvykle efektivnější než použití SQL.

    - nebo -

  • Pokud ::SQLSetPos nelze použít, mfc provede následující kroky:

    1. Aktuální záznam v vyrovnávací paměti pro úpravy není zálohován jako in AddNew a Edit.

    2. Delete vytvoří příkaz SQL DELETE , který odebere záznam.

      Aktuální záznam v vyrovnávací paměti pro úpravy není uložen jako v AddNew a Edit.

    3. Delete potvrdí odstranění – spustí příkaz DELETE . Záznam se označí jako odstraněný ve zdroji dat a pokud je záznam snímek, v rozhraní ODBC.

    4. Hodnoty odstraněného záznamu jsou stále v datových členech pole sady záznamů, ale datové členy pole jsou označené null a členská IsDeleted funkce sady záznamů vrátí nenulovou hodnotu.

    Poznámka:

    Po odstranění záznamu byste se měli posouvat k jinému záznamu, aby se do vyrovnávací paměti pro úpravy vyplnila data nového záznamu. Jedná se o chybu zavolat Delete znovu nebo zavolat Edit.

Informace opříkazch

Viz také

Sada záznamů (ODBC)
Sada záznamů: Další informace o aktualizacích (ODBC)
Výměna polí záznamu (Record Field Exchange – RFX)