Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här avsnittet gäller för MFC ODBC-klasserna.
I det här avsnittet beskrivs hur AddNew, Edit och Delete medlemsfunktionerna i klassen CRecordset fungerar. Ämnen som tas upp är:
Anmärkning
Det här avsnittet gäller för objekt som härleds från CRecordset där massradhämtning inte har implementerats. Om du använder massradhämtning läser du Arkivhandling: Hämtar poster i bulk (ODBC).
Som ett tillägg kanske du vill läsa Record Field Exchange: How RFX Works, som beskriver motsvarande roll för RFX i uppdateringsåtgärder.
Lägga till en post
Lägga till en ny post i en postuppsättning innebär att anropa postuppsättningens AddNew-medlemsfunktion, ange värdena för den nya postens fältvärden och anropa Uppdatera-medlemsfunktionen för att skriva posten till datakällan.
Som en förutsättning för att anropa AddNewfår postuppsättningen inte ha öppnats som skrivskyddad. Med medlemsfunktionerna CanUpdate och CanAppend kan du fastställa dessa villkor.
När du ringer AddNew:
Posten i redigeringsbufferten lagras, så dess innehåll kan återställas om åtgärden avbryts.
Fältdatamedlemmarna flaggas så det går att identifiera ändringar i dem senare. Fältdatamedlemmarna är också markerade som rena (oförändrade) och inställda på null.
När du har anropat AddNewrepresenterar redigeringsbufferten en ny, tom post som är redo att fyllas i med värden. För att göra detta anger du värdena manuellt genom att tilldela dem. I stället för att ange ett verkligt datavärde för ett fält kan du anropa SetFieldNull för att ange värdet Null.
Om du vill checka in ändringarna, kallar du Update. När du anropar Update för den nya posten:
Om ODBC-drivrutinen stöder
::SQLSetPosODBC API-funktionen använder MFC funktionen för att lägga till en ny post i datakällan. Med::SQLSetPoskan MFC lägga till en post mer effektivt eftersom den inte behöver konstruera och bearbeta en SQL-instruktion.Om
::SQLSetPosinte går att använda, gör MFC följande:Om inga ändringar identifieras, gör
Updateingenting och returnerar 0.Om det finns ändringar
Updatekonstrueras en SQL INSERT-instruktion. Kolumnerna som representeras av alla medlemmar i smutsiga fältdata visas i INSERT-instruktionen . Om du vill tvinga en kolumn att inkluderas anropar du medlemsfunktionen SetFieldDirty :SetFieldDirty( &m_dataMember, TRUE );Updatebekräftar den nya posten – INSERT-instruktionen körs och posten bekräftas i tabellen på datakällan (och postuppsättningen, om det inte är en snapshot), såvida inte en transaktion pågår.Den lagrade posten återställs till redigeringsbufferten. Den post som var aktuell innan
AddNew-anropet är aktuell igen oavsett om INSERT-satsen har körts framgångsrikt eller inte.
Tips/Råd
För fullständig kontroll av en ny post använder du följande metod: ange värdena för alla fält som ska ha värden och ange sedan uttryckligen alla fält som förblir Null genom att anropa
SetFieldNullmed en pekare till fältet och parametern TRUE (standard). Om du vill se till att ett fält inte skrivs till datakällan anroparSetFieldDirtydu med en pekare till fältet och parametern FALSE och ändrar inte fältets värde. Om du vill avgöra om ett fält tillåts vara Null anropar duIsFieldNullable.Tips/Råd
För att identifiera när postmängdsdatamedlemmar ändrar värde använder MFC ett lämpligt PSEUDO_NULL värde för varje datatyp som du kan lagra i en postmängd. Om du uttryckligen måste ange ett fält till värdet PSEUDO_NULL och fältet redan är markerat som Null, måste du även anropa
SetFieldNulloch skicka fältets adress i den första parametern och FALSE i den andra parametern.
Synlighet för tillagda poster
När visas en tillagd post i postuppsättningen? Tillagda poster visas ibland och är ibland inte synliga, beroende på två saker:
Vad din förare är kapabel till.
Vad ramverket kan dra nytta av.
Om din ODBC-drivrutin stöder ODBC API-funktionen ::SQLSetPos, använder MFC funktionen för att lägga till poster. Med ::SQLSetPosär tillagda poster synliga för alla uppdaterbara MFC-postuppsättningar. Utan stöd för funktionen visas inte tillagda poster och du måste anropa Requery för att se dem. Att använda ::SQLSetPos är också mer effektivt.
Redigera en befintlig post
Redigering av en befintlig post i en postuppsättning innebär att bläddra till posten, anropa funktionen Redigera för postuppsättningen, ange värdena för fältdata-medlemmarna i den nya posten och anropa funktionen Uppdatera för att skriva den ändrade posten till datakällan.
Som en förutsättning för att anropa Edit måste postmängden vara uppdaterbar och på en post. Med medlemsfunktionerna CanUpdate och IsDeleted kan du fastställa dessa villkor. Den aktuella posten får inte heller redan ha tagits bort, och det måste finnas poster i postuppsättningen (både IsBOF och IsEOF returnerar 0).
När du anropar Editlagras posten i redigeringsbufferten (den aktuella posten). Den lagrade postens värden används senare för att identifiera om några fält har ändrats.
När du har anropat Editrepresenterar redigeringsbufferten fortfarande den aktuella posten, men är nu redo att acceptera ändringar i fältdatamedlemmarna. Om du vill ändra posten anger du manuellt värdena för de fältdatamedlemmar som du vill redigera. I stället för att ange ett verkligt datavärde för ett fält kan du anropa SetFieldNull för att ange värdet Null. Om du vill kontrollera in ändringarna anropar du Update.
Tips/Råd
För att komma ur AddNew eller Edit läge anropar du Move med parametern AFX_MOVE_REFRESH.
För att kunna anropa Update får postmängden inte vara tom och den aktuella posten får inte ha tagits bort.
IsBOF, IsEOF, och IsDeleted bör alla returnera 0.
När du anropar Update den redigerade posten:
Om ODBC-drivrutinen stöder
::SQLSetPosODBC API-funktionen använder MFC funktionen för att uppdatera posten på datakällan. Med::SQLSetPosjämför drivrutinen din redigeringsbuffert med motsvarande post på servern och uppdaterar posten på servern om de två är olika. Med::SQLSetPoskan MFC uppdatera en post mer effektivt eftersom den inte behöver konstruera och bearbeta en SQL-instruktion.-eller-
Om
::SQLSetPosinte går att använda, gör MFC följande:Om det inte har gjorts några ändringar,
Updategör ingenting och returnerar 0.Om det finns ändringar kommer
Updateatt konstruera en SQL UPDATE-instruktion. Kolumnerna som anges i UPDATE-instruktionen baseras på de fältdatamedlemmar som har ändrats.Updategenomför ändringarna – kör UPDATE-instruktionen – och posten ändras på datakällan, men bekräftas inte om en transaktion pågår (se Transaktion: Utföra en transaktion i en postuppsättning (ODBC) för information om hur transaktionen påverkar uppdateringen). ODBC behåller en kopia av posten, vilken också förändras.Till skillnad från processen för
AddNewEditåterställer processen inte den lagrade posten. Den redigerade posten finns kvar som aktuell post.
Försiktighet
När du förbereder för att uppdatera en postuppsättning genom att anropa
Updatebör du se till att postuppsättningen innehåller alla kolumner som utgör den primära nyckeln i tabellen (eller alla kolumner i ett unikt index i tabellen eller tillräckligt med kolumner för att unikt identifiera raden). I vissa fall kan ramverket använda endast de valda kolumnerna i din postuppsättning för att identifiera vilken post i tabellen som ska uppdateras. Utan alla nödvändiga kolumner riskerar flera poster att uppdateras i tabellen. I det här fallet utlöser ramverket undantag när du anroparUpdate.Tips/Råd
Om du anropar
AddNewellerEditefter att ha anropat någon av funktionerna tidigare men innan du anroparUpdateuppdateras redigeringsbufferten med den lagrade posten och ersätter den nya eller redigerade posten som pågår. Det här beteendet ger dig ett sätt att avbryta enAddNewellerEditoch påbörja en ny: om du bedömer att den pågående registreringen är felaktig, anropar du helt enkeltEditellerAddNewigen.
Ta bort en post
Att ta bort en post från en postuppsättning innebär att rulla till posten och anropa postuppsättningens Ta bort-medlemsfunktion. Till skillnad från AddNew och Editkräver Delete inte ett matchande anrop till Update.
Som en förutsättning för att anropa Delete måste postuppsättningen vara uppdaterbar och den måste vara på en post. Med medlemsfunktionerna CanUpdate, IsBOF, IsEOFoch IsDeleted kan du fastställa dessa villkor.
När du ringer Delete:
Om ODBC-drivrutinen stöder
::SQLSetPosODBC API-funktionen använder MFC funktionen för att ta bort posten från datakällan. Det är vanligtvis effektivare att använda::SQLSetPosän att använda SQL.-eller-
Om
::SQLSetPosinte går att använda, gör MFC följande:Den aktuella posten i redigeringsbufferten säkerhetskopieras inte som i
AddNewochEdit.Deletekonstruerar en SQL DELETE-instruktion som tar bort posten.Den aktuella posten i redigeringsbufferten är inte lagrad som i
AddNewochEdit.Deletegenomför borttagningen – kör DELETE-instruktionen. Posten markeras som borttagen i datakällan och, om posten är en ögonblicksbild, i ODBC.Den borttagna postens värden finns fortfarande i fältdatamedlemmarna i postuppsättningen, men fältdatamedlemmarna har markerats som Null och postuppsättningens
IsDeletedmedlemsfunktion returnerar ett värde som inte är noll.
Anmärkning
När du har raderat en post bör du rulla till en annan post för att fylla på redigeringsbufferten med den nya postens data. Det är ett fel att anropa
Deleteigen eller att anropaEdit.
Information om SQL-uttryck som används i uppdateringsåtgärder finns i SQL.
Se även
Postuppsättning (ODBC)
Postuppsättning: Utförligare om uppdateringar (ODBC)
Postfältutbyte (RFX)