Sdílet prostřednictvím


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;
}
Poznámka k upozornění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ů

  1. Ujistěte se, zda je možno do sady záznamů přidávat

  2. 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.

  3. 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.

  4. 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ů

  1. Ujistěte se, zda je sada záznamů aktualizovatelná

  2. Posuňte se na záznam, který chcete aktualizovat.

  3. 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.

  4. 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.

  5. 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

  1. Ujistěte se, zda je sada záznamů aktualizovatelná

  2. Posuňte se na záznam, který chcete aktualizovat.

  3. 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.

  4. 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).

Viz také

Koncepty

Sada záznamů (ODBC)

Sada záznamů: Uzamčení záznamů (ODBC)