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
, Edit
a 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í AddNew
nesmí 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í AddNew
př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:Pokud se nezjistí žádné změny,
Update
nic nevrátí a vrátí hodnotu 0.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 );
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á.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, zavolejteSetFieldDirty
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 ::SQLSetPos
př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í Edit
musí 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í Edit
se 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í Edit
př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í Update
nesmí být sada záznamů prázdná a aktuální záznam nesmí být odstraněn. IsBOF
, IsEOF
a 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č::SQLSetPos
porovná 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:Pokud nedošlo k žádným změnám,
Update
nic neprovádí a vrátí hodnotu 0.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í.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í.Na rozdíl od procesu procesu
AddNew
Edit
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
Update
dbejte 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
neboEdit
po volání některé z funkcí dříve, ale před volánímUpdate
, 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 neboEdit
zahájitAddNew
nový: pokud zjistíte, že probíhající záznam je chybný, jednoduše zavolejteEdit
neboAddNew
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í Delete
musí být sada záznamů aktualizovatelná a musí být na záznamu. Tyto CanUpdate
podmínky umožňují určit funkce , IsBOF
IsEOF
a 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:Aktuální záznam v vyrovnávací paměti pro úpravy není zálohován jako in
AddNew
aEdit
.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
aEdit
.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.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 zavolatEdit
.
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)