Sada záznamů: Přidání, aktualizace a odstranění záznamů (ODBC)
Toto téma platí pro třídy knihovny MFC rozhraní ODBC.
Poznámka
Nyní můžete přidávat záznamy hromadně a efektivněji. Pro více informací si prohlédněte Sada záznamů: Hromadné přidávání záznamů (ODBC).
Poznámka
Toto téma se týká objektů odvozených ze třídy CRecordset, ve které nebylo implementováno hromadné načítání řádku. Používáte-li hromadné načítání řádku, viz Sada záznamů: Hromadné načítání záznamů (ODBC).
Aktualizovatelné sady záznamů a dynamické sady umožňují přidat, upravit (aktualizovat) a odstranit záznamy. Toto téma vysvětluje:
Jak určit, zda je vaše sada záznamů aktualizovatelná.
Jak přidat nový záznam.
Jak upravit existující záznam.
Jak odstranit záznam.
Pro další informace o způsobu zpracování aktualizací a o tom, jak budou aktualizace zobrazeny ostatním uživatelům si prohlédněte Sada záznamů: Jak sady záznamů aktualizují záznamy (ODBC). Obvykle když přidáte, upravíte nebo odstraníte záznam, sada záznamů okamžitě změní zdroj dat. Místo toho můžete dávkovat skupiny souvisejících aktualizací do transakcí. Pokud transakce probíhá, aktualizace se nestane dokončenou, dokud transakci nepotvrdíte. To vám umožňuje vzít zpět nebo vrátit zpět změny. Pro informace o transakcích si prohlédněte Transakce (ODBC).
Následující tabulka shrnuje dostupné možnosti pro sady záznamů s různými vlastnostmi aktualizace.
Možnosti Čtení/Aktualizace sady záznamů
Typ |
Čtení |
Úprava záznamu |
Odstranění záznamu |
Přidání nového (připojení) |
---|---|---|---|---|
Jen pro čtení |
Y |
N |
N |
N |
Pouze připojení |
Y |
N |
N |
Y |
Plně aktualizovatelný |
Y |
Y |
Y |
Y |
Určení zda je vaše sada záznamů je aktualizovatelná
Objekt sady záznamů je aktualizovatelný, pokud je aktualizovatelný zdroj dat a pokud jste otevřeli sadu záznamů jako aktualizovatelnou. Její aktualizovatelnost také závisí na příkazu SQL, který používáte, možnostech ovladače rozhraní ODBC a tom, zda je knihovna kurzorů rozhraní ODBC v paměti. Nemůžete aktualizovat sadu záznamů nebo zdroj dat jen pro čtení.
Pro určení, zda je vaše sada záznamů aktualizovatelná
Zavolejte metodu CanUpdate objektu sady záznamů.
CanUpdate vrací nenulovou hodnotu, pokud je sada záznamů aktualizovatelná.
Ve výchozím nastavení jsou sady záznamů plně aktualizovatelné (lze provést operace AddNew, Edit a Delete). Můžete však také použít možnost appendOnly pro otevření aktualizovatelných sad záznamů. Sada záznamů otevřená tímto způsobem umožňuje pouze přidávání nových záznamů pomocí AddNew. Nemůžete upravovat nebo odstraňovat existující záznamy. Můžete otestovat, zda je sada záznamů otevřená pouze pro přidávání voláním členské funkce CanAppend. CanAppend vrací nenulovou hodnotu, pokud je sada záznamů buď plně aktualizovatelná nebo otevřená pouze pro přidávání.
Následující kód ukazuje, jak je možné použít CanUpdate pro objekt sady záznamů s názvem rsStudentSet:
if( !rsStudentSet.Open( ) )
return FALSE;
if( !rsStudentSet.CanUpdate( ) )
{
AfxMessageBox( "Unable to update the Student recordset." );
return;
}
Upozornění |
---|
Když připravujete sady záznamů pro aktualizaci voláním Update, ujistěte se, že vaše sada záznamů zahrnuje všechny sloupce, tvořící primární klíč tabulky (nebo všechny sloupce libovolných jedinečných indexů tabulky). V některých případech může architektura použít pouze vybrané sloupce ve vaší sadě záznamů k identifikaci, který záznam ve vaší tabulce má být aktualizován. Bez všech nezbytných sloupců může být aktualizováno více záznamů tabulky s případným poškozením referenční integrity tabulky. V tomto případě vyvolá architektura výjimky při volání Update. |
Přidání záznamu do sady záznamů
Můžete přidat nové záznamy do sady záznamů, pokud jeho členská funkce CanAppend vrací nenulovou hodnotu.
Pro přidání nového záznamu do sady záznamů
Ujistěte se, zda je možno do sady záznamů přidávat
Zavolejte členskou funkci AddNew objektu sady záznamů.
AddNew připraví sadu záznamů tak, aby pracovala jako vyrovnávací paměť úprav. Všechny datové členy položek jsou nastaveny na zvláštní hodnotu Null a označeny jako nezměněné, protože pouze změněné (špinavé) hodnoty jsou zapsány do zdroje dat při volání Update.
Nastavte hodnoty datových členů položek nového záznamu.
Přiřaďte hodnoty datovým členům položek. Ty, které nepřiřadíte, nejsou zapsány do zdroje dat.
Zavolejte členskou funkci Update objektu sady záznamů.
Update dokončí přidání zapsáním nového záznamu do zdroje dat. Pro informace o tom, co se stane, pokud nedodržíte volání Update si prohlédněte Sada záznamů: Jak sady záznamů aktualizují záznamy (ODBC).
Pro informace o tom, jak funguje přidávání záznamů a kdy jsou přidané záznamy viditelné ve vaší sadě záznamů si prohlédněte Sada záznamů: Jak pracují funkce AddNew, Edit a Delete (ODBC).
Následující příklad ukazuje, jak přidat nový záznam:
if( !rsStudent.Open( ) )
return FALSE;
if( !rsStudent.CanAppend( ) )
return FALSE; // no field values were set
rsStudent.AddNew( );
rsStudent.m_strName = strName;
rsStudent.m_strCity = strCity;
rsStudent.m_strStreet = strStreet;
if( !rsStudent.Update( ) )
{
AfxMessageBox( "Record not added; no field values were set." );
return FALSE;
}
Tip
Chcete-li zrušit volání AddNew nebo Edit, jednoduše proveďte jiné volání AddNew nebo Edit nebo volejte Move s parametrem AFX_MOVE_REFRESH. Datové členy jsou obnoveny na jejich předchozí hodnoty a jste stále v režimu Edit nebo Add.
Úprava záznamu v sadě záznamů
Můžete upravit existující záznamy, pokud členská funkce CanUpdate vaší sady záznamů vrací nenulovou hodnotu.
Pro úpravu existujícího záznamu v sadě záznamů
Ujistěte se, zda je sada záznamů aktualizovatelná
Posuňte se na záznam, který chcete aktualizovat.
Zavolejte členskou funkci Edit objektu sady záznamů.
Edit připraví sadu záznamů tak, aby pracovala jako vyrovnávací paměť úprav. Všechny datové členy položek jsou označeny tak, aby mohla později sada záznamů říct, zda byly změněny. Nové hodnoty pro změněné datové členy položek jsou zapsány do zdroje dat, když zavoláte Update.
Nastavte hodnoty datových členů položek nového záznamu.
Přiřaďte hodnoty datovým členům položek. Ty, kterým nepřiřadíte hodnoty, zůstanou nezměněny.
Zavolejte členskou funkci Update objektu sady záznamů.
Update dokončí úpravu zapsáním změněného záznamu do zdroje dat. Pro informace o tom, co se stane, pokud nedodržíte volání Update si prohlédněte Sada záznamů: Jak sady záznamů aktualizují záznamy (ODBC).
Po úpravě záznamu zůstane upravovaný záznam aktuálním záznamem.
Následující příklad ukazuje operaci Edit. Předpokládá, že se uživatel přesunul na záznam, který chce upravovat.
rsStudent.Edit( );
rsStudent.m_strStreet = strNewStreet;
rsStudent.m_strCity = strNewCity;
rsStudent.m_strState = strNewState;
rsStudent.m_strPostalCode = strNewPostalCode;
if( !rsStudent.Update( ) )
{
AfxMessageBox( "Record not updated; no field values were set." );
return FALSE;
}
Tip
Chcete-li zrušit volání AddNew nebo Edit, jednoduše proveďte jiné volání AddNew nebo Edit nebo volejte Move s parametrem AFX_MOVE_REFRESH. Datové členy jsou obnoveny na jejich předchozí hodnoty a jste stále v režimu Edit nebo Add.
Odstranění záznamu ze sady záznamů
Můžete odstranit záznamy, jestliže členská funkce CanUpdate vaší sady záznamů vrací nenulovou hodnotu.
Pro odstranění záznamu
Ujistěte se, zda je sada záznamů aktualizovatelná
Posuňte se na záznam, který chcete aktualizovat.
Zavolejte členskou funkci Delete objektu sady záznamů.
Delete okamžitě označí záznam jako odstraněný, jak v sadě záznamů, tak ve zdroji dat.
Na rozdíl od AddNew a Edit nemá Delete žádné volání odpovídající Update.
Přechod na jiný záznam.
Poznámka
Při procházení sadou záznamů nemusí být odstraněné záznamy přeskočeny. Pro další informace si prohlédněte členskou funkci IsDeleted.
Následující příklad ukazuje operaci Delete. Předpokládá, že se uživatel přesunul na záznam, který chce odstranit. Po volání Delete je důležité se přesunout na nový záznam.
rsStudent.Delete( );
rsStudent.MoveNext( );
Pro další informace o účincích členských funkcí AddNew, Edit a Delete si prohlédněte Sada záznamů: Jak sady záznamů aktualizují záznamy (ODBC).