CRecordset klass

Representerar en uppsättning poster som valts från en datakälla.

Syntax

class CRecordset : public CObject

Medlemmar

Offentliga konstruktorer

Namn Beskrivning
CRecordset::CRecordset Konstruerar ett CRecordset objekt. Din härledda klass måste tillhandahålla en konstruktor som anropar den här.

Offentliga metoder

Namn Beskrivning
CRecordset::AddNew Förbereder för att lägga till en ny post. Anropa Update för att slutföra tillägget.
CRecordset::CanAppend Returnerar nonzero om nya poster kan läggas till i postuppsättningen AddNew via medlemsfunktionen.
CRecordset::CanBookmark Returnerar nonzero om postuppsättningen stöder bokmärken.
CRecordset::Cancel Avbryter en asynkron åtgärd eller en process från en andra tråd.
CRecordset::CancelUpdate Avbryter eventuella väntande uppdateringar på grund av en AddNew eller Edit åtgärd.
CRecordset::CanRestart Returnerar nonzero om Requery kan anropas för att köra postuppsättningens fråga igen.
CRecordset::CanScroll Returnerar nonzero om du kan bläddra igenom posterna.
CRecordset::CanTransact Returnerar nonzero om datakällan stöder transaktioner.
CRecordset::CanUpdate Returnerar nonzero om postuppsättningen kan uppdateras (du kan lägga till, uppdatera eller ta bort poster).
CRecordset::CheckRowsetError Anropas för att hantera fel som genererats under posthämtning.
CRecordset::Close Stänger postuppsättningen och den ODBC HSTMT som är associerad med den.
CRecordset::Delete Tar bort den aktuella posten från postuppsättningen. Du måste uttryckligen rulla till en annan post efter borttagningen.
CRecordset::DoBulkFieldExchange Anropas för att utbyta massrader med data från datakällan till postuppsättningen. Implementerar masspostfältutbyte (Bulk RFX).
CRecordset::DoFieldExchange Anropas för att utbyta data (i båda riktningarna) mellan fältdatamedlemmarna i postuppsättningen och motsvarande post i datakällan. Implementerar postfältutbyte (RFX).
CRecordset::Edit Förbereder för ändringar i den aktuella posten. Anropa Update för att slutföra redigeringen.
CRecordset::FlushResultSet Returnerar nonzero om det finns en annan resultatuppsättning som ska hämtas när du använder en fördefinierad fråga.
CRecordset::GetBookmark Tilldelar bokmärkesvärdet för en post till parameterobjektet.
CRecordset::GetDefaultConnect Anropad för att hämta standardanslutningssträngen.
CRecordset::GetDefaultSQL Anropas för att hämta sql-standardsträngen som ska köras.
CRecordset::GetFieldValue Returnerar värdet för ett fält i en postuppsättning.
CRecordset::GetODBCFieldCount Returnerar antalet fält i postuppsättningen.
CRecordset::GetODBCFieldInfo Returnerar specifika typer av information om fälten i en postuppsättning.
CRecordset::GetRecordCount Returnerar antalet poster i postuppsättningen.
CRecordset::GetRowsetSize Returnerar antalet poster som du vill hämta under en enda hämtning.
CRecordset::GetRowsFetched Returnerar det faktiska antalet rader som hämtats under en hämtning.
CRecordset::GetRowStatus Returnerar status för raden efter en hämtning.
CRecordset::GetSQL Hämtar SQL-strängen som används för att välja poster för postuppsättningen.
CRecordset::GetStatus Hämtar status för postuppsättningen: indexet för den aktuella posten och om ett slutligt antal poster har hämtats.
CRecordset::GetTableName Hämtar namnet på den tabell som postuppsättningen baseras på.
CRecordset::IsBOF Returnerar nonzero om postuppsättningen har placerats före den första posten. Det finns ingen aktuell post.
CRecordset::IsDeleted Returnerar nonzero om postuppsättningen är placerad på en borttagen post.
CRecordset::IsEOF Returnerar nonzero om postuppsättningen har placerats efter den senaste posten. Det finns ingen aktuell post.
CRecordset::IsFieldDirty Returnerar nonzero om det angivna fältet i den aktuella posten har ändrats.
CRecordset::IsFieldNull Returnerar nonzero om det angivna fältet i den aktuella posten är null (har inget värde).
CRecordset::IsFieldNullable Returnerar nonzero om det angivna fältet i den aktuella posten kan anges till null (utan värde).
CRecordset::IsOpen Returnerar nonzero om Open har anropats tidigare.
CRecordset::Move Placerar postuppsättningen till ett angivet antal poster från den aktuella posten i båda riktningarna.
CRecordset::MoveFirst Placerar den aktuella posten på den första posten i postuppsättningen. Testa först IsBOF .
CRecordset::MoveLast Placerar den aktuella posten på den sista posten eller på den sista raduppsättningen. Testa först IsEOF .
CRecordset::MoveNext Placerar den aktuella posten på nästa post eller på nästa raduppsättning. Testa först IsEOF .
CRecordset::MovePrev Placerar den aktuella posten på föregående post eller på den tidigare raduppsättningen. Testa först IsBOF .
CRecordset::OnSetOptions Anropad för att ange alternativ (används vid markering) för den angivna ODBC-instruktionen.
CRecordset::OnSetUpdateOptions Anropas för att ange alternativ (används vid uppdatering) för den angivna ODBC-instruktionen.
CRecordset::Open Öppnar postuppsättningen genom att hämta tabellen eller utföra frågan som postuppsättningen representerar.
CRecordset::RefreshRowset Uppdaterar data och status för de angivna raderna.
CRecordset::Requery Kör postuppsättningens fråga igen för att uppdatera de valda posterna.
CRecordset::SetAbsolutePosition Placerar postuppsättningen på posten som motsvarar det angivna postnumret.
CRecordset::SetBookmark Placerar postuppsättningen på posten som anges av bokmärket.
CRecordset::SetFieldDirty Markerar det angivna fältet i den aktuella posten som ändrat.
CRecordset::SetFieldNull Anger värdet för det angivna fältet i den aktuella posten till null (utan värde).
CRecordset::SetLockingMode Anger låsningsläget till "optimistisk" låsning (standard) eller "pessimistisk" låsning. Avgör hur poster låses för uppdateringar.
CRecordset::SetParamNull Anger den angivna parametern till null (utan värde).
CRecordset::SetRowsetCursorPosition Placerar markören på den angivna raden i raduppsättningen.
CRecordset::SetRowsetSize Anger antalet poster som du vill hämta under en hämtning.
CRecordset::Update Slutför en AddNew eller Edit åtgärd genom att spara nya eller redigerade data i datakällan.

Medlemmar i offentliga data

Namn Beskrivning
CRecordset::m_hstmt Innehåller ODBC-instruktionshandtaget för postuppsättningen. Skriv HSTMT.
CRecordset::m_nFields Innehåller antalet fältdatamedlemmar i postuppsättningen. Skriv UINT.
CRecordset::m_nParams Innehåller antalet parameterdatamedlemmar i postuppsättningen. Skriv UINT.
CRecordset::m_pDatabase Innehåller en pekare till det CDatabase objekt genom vilket postuppsättningen är ansluten till en datakälla.
CRecordset::m_strFilter Innehåller en CString som anger en SQL-sats (Structured Query Language). WHERE Används som ett filter för att endast välja de poster som uppfyller vissa villkor.
CRecordset::m_strSort Innehåller en CString som anger en SQL-sats ORDER BY . Används för att styra hur posterna sorteras.

Anmärkningar

Objekt kallas för "postuppsättningar" CRecordset och används vanligtvis i två former: dynasets och ögonblicksbilder. En dynaset förblir synkroniserad med datauppdateringar som görs av andra användare. En ögonblicksbild är en statisk vy av data. Varje formulär representerar en uppsättning poster som har åtgärdats när postuppsättningen öppnas. När du bläddrar till en post i en dynaset återspeglar den ändringar som gjorts i posten, antingen av andra användare eller av andra postuppsättningar i ditt program.

Anmärkning

Om du arbetar med DAO-klasserna (Data Access Objects) i stället för ODBC-klasserna (Open Database Connectivity) använder du klassen CDaoRecordset i stället. Mer information finns i Översikt: Databasprogrammering.

Om du vill arbeta med någon av postuppsättningarna härleder du vanligtvis en programspecifik postuppsättningsklass från CRecordset. Postuppsättningar väljer poster från en datakälla och du kan sedan:

  • Bläddra igenom posterna.

  • Uppdatera posterna och ange ett låsningsläge.

  • Filtrera postuppsättningen för att begränsa vilka poster den väljer från de som är tillgängliga i datakällan.

  • Sortera postuppsättningen.

  • Parametrisera postuppsättningen för att anpassa dess val med information som inte är känd förrän körningstiden.

Om du vill använda klassen öppnar du en databas och skapar ett postuppsättningsobjekt och skickar konstruktorn en pekare till objektet CDatabase . Anropa sedan postuppsättningens Open medlemsfunktion, där du kan ange om objektet är en dynaset eller en ögonblicksbild. Anrop Open väljer data från datakällan. När postuppsättningsobjektet har öppnats använder du dess medlemsfunktioner och datamedlemmar för att bläddra igenom posterna och använda dem. Vilka åtgärder som är tillgängliga beror på om objektet är en dynaset eller en ögonblicksbild, om det är uppdaterbart eller skrivskyddat (detta beror på funktionen för ODBC-datakällan (Open Database Connectivity) och om du har implementerat massradshämtning. Om du vill uppdatera poster som kan ha ändrats eller lagts till sedan anropet Open anropar du objektets Requery medlemsfunktion. Anropa objektets Close medlemsfunktion och förstör objektet när du är klar med det.

I en härledd CRecordset klass används postfältutbyte (RFX) eller masspostfältutbyte (Bulk RFX) för att stödja läsning och uppdatering av postfält.

Mer information om postuppsättningar och utbyte av postfält finns i artiklarna Overview: Database Programming, Recordset (ODBC), Recordset: Fetching Records in Bulk (ODBC), and Record Field Exchange (RFX). Fokus på dynasets och ögonblicksbilder finns i artiklarna Dynaset och Snapshot.

Arvshierarki

CObject

CRecordset

Kravspecifikation

rubrik:afxdb.h

CRecordset::AddNew

Förbereder för att lägga till en ny post i tabellen.

virtual void AddNew();

Anmärkningar

Du måste anropa Requery medlemsfunktionen för att se den nyligen tillagda posten. Postens fält är ursprungligen Null. (I databasterminologi betyder Null att "inte ha något värde" och inte är detsamma som NULL i C++.) För att slutföra åtgärden måste du anropa Update medlemsfunktionen. Update sparar ändringarna i datakällan.

Anmärkning

Om du har implementerat massradhämtning kan du inte anropa AddNew. Detta resulterar i ett misslyckat påstående. Även om klassen CRecordset inte tillhandahåller någon mekanism för att uppdatera massrader med data kan du skriva egna funktioner med hjälp av ODBC API-funktionen SQLSetPos. Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

AddNew förbereder en ny, tom post med hjälp av postuppsättningens fältdatamedlemmar. När du har anropat AddNewanger du de värden som du vill använda i postuppsättningens fältdatamedlemmar. (Du behöver inte anropa funktionen Redigera medlem för det här ändamålet. Använd Edit endast för befintliga poster.) När du anropar Updatesparas ändrade värden i fältdatamedlemmarna i datakällan.

Försiktighet

Om du bläddrar till en ny post innan du anropar Updategår den nya posten förlorad och ingen varning ges.

Om datakällan stöder transaktioner kan du göra din AddNew anropsdel av en transaktion. Mer information om transaktioner finns i klassen CDatabase. Ring CDatabase::BeginTrans innan du ringer AddNew.

Anmärkning

För dynasets läggs nya poster till i postuppsättningen som den sista posten. Tillagda poster läggs inte till i ögonblicksbilder. du måste anropa Requery för att uppdatera postuppsättningen.

Det är inte tillåtet att anropa AddNew en postuppsättning vars Open medlemsfunktion inte har anropats. En CDBException utlöses om du anropar AddNew en postuppsättning som inte kan läggas till. Du kan avgöra om postuppsättningen är uppdaterad genom att anropa CanAppend.

Mer information finns i följande artiklar: Recordset: How Recordsets Update Records (ODBC), Recordset: Adding, Update, and Ta bort Records (ODBC), and Transaction (ODBC).

Exempel

se Transaktion: Utföra en transaktion i en postuppsättning (ODBC).

CRecordset::CanAppend

Avgör om den tidigare öppnade postuppsättningen låter dig lägga till nya poster.

BOOL CanAppend() const;

Returvärde

Nonzero om postuppsättningen tillåter att nya poster läggs till. annars 0. CanAppend returnerar 0 om du öppnade postuppsättningen som skrivskyddad.

CRecordset::CanBookmark

Avgör om postuppsättningen tillåter att du markerar poster med hjälp av bokmärken.

BOOL CanBookmark() const;

Returvärde

Nonzero om postuppsättningen stöder bokmärken; annars 0.

Anmärkningar

Den här funktionen är oberoende av alternativet CRecordset::useBookmarks i parametern dwOptions för Open medlemsfunktionen. CanBookmark anger om den angivna ODBC-drivrutinen och markören har stöd för bokmärken. CRecordset::useBookmarks anger om bokmärken kommer att vara tillgängliga, förutsatt att de stöds.

Anmärkning

Bokmärken stöds inte på postuppsättningar med endast vidarebefordran.

Mer information om bokmärken och postmängdsnavigering finns i artiklarna Postuppsättning: Bokmärken och absoluta positioner (ODBC) och Postuppsättning: Rullning (ODBC).

CRecordset::Cancel

Begär att datakällan avbryter antingen en asynkron åtgärd som pågår eller en process från en andra tråd.

void Cancel();

Anmärkningar

MFC ODBC-klasserna använder inte längre asynkron bearbetning. för att utföra en asynkron åtgärd måste du anropa ODBC API-funktionen SQLSetConnectOptiondirekt. Mer information finns i "Kör funktioner asynkront" i ODBC SDK Programmer's Guide.

CRecordset::CancelUpdate

Avbryter eventuella väntande uppdateringar som orsakas av en Edit eller AddNew åtgärd innan Update anropas.

void CancelUpdate();

Anmärkningar

Anmärkning

Den här medlemsfunktionen gäller inte för postuppsättningar som använder massradhämtning, eftersom sådana postuppsättningar inte kan anropa Edit, AddNeweller Update. Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

Om automatisk kontroll av felaktiga fält är aktiverad CancelUpdate återställs medlemsvariablerna till de värden som de hade tidigare Edit eller AddNew anropades. Annars blir alla värdeändringar kvar. Som standard aktiveras automatisk fältkontroll när postuppsättningen öppnas. Om du vill inaktivera den måste du ange CRecordset::noDirtyFieldCheck parametern dwOptions i funktionen Öppna medlem.

Mer information om hur du uppdaterar data finns i Postuppsättning: Lägga till, uppdatera och ta bort poster (ODBC).

CRecordset::CanRestart

Avgör om postuppsättningen tillåter omstart av frågan (för att uppdatera dess poster) genom att anropa Requery medlemsfunktionen.

BOOL CanRestart() const;

Returvärde

Nonzero om requery tillåts; annars 0.

CRecordset::CanScroll

Avgör om postuppsättningen tillåter rullning.

BOOL CanScroll() const;

Returvärde

Nonzero om postuppsättningen tillåter rullning; annars 0.

Anmärkningar

Mer information om rullning finns i Recordset: Scrolling (ODBC).

CRecordset::CanTransact

Avgör om postuppsättningen tillåter transaktioner.

BOOL CanTransact() const;

Returvärde

Nonzero om postuppsättningen tillåter transaktioner; annars 0.

Anmärkningar

Mer information finns i Transaktion (ODBC).

CRecordset::CanUpdate

Avgör om postuppsättningen kan uppdateras.

BOOL CanUpdate() const;

Returvärde

Nonzero om postuppsättningen kan uppdateras; annars 0.

Anmärkningar

En postuppsättning kan vara skrivskyddad om den underliggande datakällan är skrivskyddad eller om du angav CRecordset::readOnly i parametern dwOptions när du öppnade postuppsättningen.

CRecordset::CheckRowsetError

Anropas för att hantera fel som genererats under posthämtning.

virtual void CheckRowsetError(RETCODE nRetCode);

Parameterar

nRetCode
En ODBC API-funktion returnerar kod. Mer information finns i Kommentarer.

Anmärkningar

Den här virtuella medlemsfunktionen hanterar fel som uppstår när poster hämtas och är användbar vid masshämtning av rader. Du kanske vill överväga att åsidosätta CheckRowsetError för att implementera din egen felhantering.

CheckRowsetError anropas automatiskt i en markörnavigeringsåtgärd, till exempel Open, Requeryeller någon Move åtgärd. Det har skickat returvärdet för ODBC API-funktionen SQLExtendedFetch. I följande tabell visas möjliga värden för parametern nRetCode .

nRetCode Beskrivning
SQL_SUCCESS Funktionen har slutförts. ingen ytterligare information är tillgänglig.
SQL_SUCCESS_WITH_INFO Funktionen har slutförts, eventuellt med ett icke-fatalt fel. Ytterligare information kan hämtas genom att anropa SQLError.
SQL_NO_DATA_FOUND Alla rader från resultatuppsättningen har hämtats.
SQL_ERROR Funktionen misslyckades. Ytterligare information kan hämtas genom att anropa SQLError.
SQL_INVALID_HANDLE Funktionen misslyckades på grund av ett ogiltigt miljöhandtag, anslutningshandtag eller instruktionshandtag. Detta indikerar ett programmeringsfel. Ingen ytterligare information är tillgänglig från SQLError.
SQL_STILL_EXECUTING En funktion som startades asynkront körs fortfarande. Som standard skickar MFC aldrig det här värdet till CheckRowsetError; MFC fortsätter att anropa SQLExtendedFetch tills det inte längre returnerar SQL_STILL_EXECUTING.

Mer information om SQLErrorfinns i Windows SDK. Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

CRecordset::Close

Stänger postuppsättningen.

virtual void Close();

Anmärkningar

ODBC HSTMT och allt minne som ramverket allokeras för postuppsättningen frigörs. Vanligtvis när du har anropat Closetar du bort C++-postuppsättningsobjektet om det allokerades med new.

Du kan ringa Open igen efter att du har ringt Close. På så sätt kan du återanvända postuppsättningsobjektet. Alternativet är att anropa Requery.

Exempel

// Construct a snapshot object
CCustomer rsCustSet(NULL);

if (!rsCustSet.Open())
return;

// Use the snapshot ...

// Close the snapshot
rsCustSet.Close();

// Destructor is called when the function exits

CRecordset::CRecordset

Konstruerar ett CRecordset objekt.

CRecordset(CDatabase* pDatabase = NULL);

Parameterar

pDatabase
Innehåller en pekare till ett CDatabase objekt eller värdet NULL. Om inte NULL och CDatabase objektets medlemsfunktion inte har anropats Open för att ansluta den till datakällan, försöker postuppsättningen öppna den åt dig under sitt eget Open anrop. Om du skickar NULLskapas och ansluts ett CDatabase objekt åt dig med den datakällsinformation som du angav när du härledde postmängdsklassen med ClassWizard.

Anmärkningar

Du kan antingen använda CRecordset direkt eller härleda en programspecifik klass från CRecordset. Du kan använda ClassWizard för att härleda dina postmängdsklasser.

Anmärkning

En härledd klass måste ange en egen konstruktor. I konstruktorn för din härledda klass anropar du konstruktorn CRecordset::CRecordsetoch skickar lämpliga parametrar till den.

Skicka NULL till postuppsättningskonstruktorn för att ha ett CDatabase objekt konstruerat och anslutet åt dig automatiskt. Det här är en användbar förkortning som inte kräver att du skapar och ansluter ett CDatabase objekt innan du skapar postuppsättningen.

Exempel

Mer information finns i Arkivhandlingar: Deklarera en klass för en tabell (ODBC).

CRecordset::Delete

Tar bort den aktuella posten.

virtual void Delete();

Anmärkningar

Efter en lyckad borttagning anges postuppsättningens fältdatamedlemmar till ett Null-värde och du måste uttryckligen anropa en av Move funktionerna för att kunna flytta bort den borttagna posten. När du har flyttat bort den borttagna posten går det inte att återgå till den. Om datakällan stöder transaktioner kan du göra anropsdelen Delete av en transaktion. Mer information finns i Transaktion (ODBC).

Anmärkning

Om du har implementerat massradhämtning kan du inte anropa Delete. Detta resulterar i ett misslyckat påstående. Även om klassen CRecordset inte tillhandahåller någon mekanism för att uppdatera massrader med data kan du skriva egna funktioner med hjälp av ODBC API-funktionen SQLSetPos. Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

Försiktighet

Postuppsättningen måste vara uppdaterad och det måste finnas en giltig post som är aktuell i postuppsättningen när du anropar Delete. Annars uppstår ett fel. Om du till exempel tar bort en post men inte bläddrar till en ny post innan du anropar Delete igen, Delete genererar en CDBException.

Till skillnad från AddNew och Editföljs inte ett anrop till Delete av ett anrop till Update. Om ett Delete anrop misslyckas lämnas fältdatamedlemmarna oförändrade.

Exempel

Det här exemplet visar en postuppsättning som skapats i ramen för en funktion. Exemplet förutsätter att det finns m_dbCusten medlemsvariabel av typen CDatabase som redan är ansluten till datakällan.

// Create a derived CRecordset object
CCustomer rsCustSet(&m_dbCust);
rsCustSet.Open();

if (rsCustSet.IsEOF() || !rsCustSet.CanUpdate() ||
   !rsCustSet.CanTransact())
{
   return;
}

m_dbCust.BeginTrans();

// Perhaps scroll to a new record...
// Delete the current record
rsCustSet.Delete();

// Finished commands for this transaction
if (IDYES == AfxMessageBox(_T("Commit transaction?"), MB_YESNO))
m_dbCust.CommitTrans();
else // User changed mind
m_dbCust.Rollback();

CRecordset::DoBulkFieldExchange

Anropas för att utbyta massrader med data från datakällan till postuppsättningen. Implementerar masspostfältutbyte (Bulk RFX).

virtual void DoBulkFieldExchange(CFieldExchange* pFX);

Parameterar

pFX
En pekare till ett CFieldExchange objekt. Ramverket har redan konfigurerat det här objektet för att ange en kontext för fältutbytesåtgärden.

Anmärkningar

När masshämtning av rader implementeras anropar ramverket den här medlemsfunktionen för att automatiskt överföra data från datakällan till postuppsättningsobjektet. DoBulkFieldExchange binder även eventuella parameterdatamedlemmar till parameterplatshållare i SQL-instruktionssträngen för postuppsättningens val.

Om masshämtning av rader inte implementeras anropar DoFieldExchangeramverket . Om du vill implementera massuthämtning av rader måste du ange CRecordset::useMultiRowFetch alternativet för parametern dwOptions i Open medlemsfunktionen.

Anmärkning

DoBulkFieldExchange är endast tillgängligt om du använder en klass som härletts från CRecordset. Om du har skapat ett postuppsättningsobjekt direkt från CRecordsetmåste du anropa GetFieldValue medlemsfunktionen för att hämta data.

Bulk record field exchange (Bulk RFX) liknar postfältutbyte (RFX). Data överförs automatiskt från datakällan till postuppsättningsobjektet. Du kan dock inte anropa AddNew, Edit, Deleteeller Update överföra ändringar tillbaka till datakällan. Klassen CRecordset tillhandahåller för närvarande ingen mekanism för att uppdatera massrader med data. Du kan dock skriva egna funktioner med hjälp av ODBC API-funktionen SQLSetPos.

ClassWizard stöder inte masspostfältutbyte. Därför måste du åsidosätta DoBulkFieldExchange manuellt genom att skriva anrop till Mass-RFX-funktionerna. Mer information om dessa funktioner finns i Record Field Exchange Functions.

Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC). Relaterad information finns i Record Field Exchange (RFX).

CRecordset::DoFieldExchange

Anropas för att utbyta data (i båda riktningarna) mellan fältdatamedlemmarna i postuppsättningen och motsvarande post i datakällan. Implementerar postfältutbyte (RFX).

virtual void DoFieldExchange(CFieldExchange* pFX);

Parameterar

pFX
En pekare till ett CFieldExchange objekt. Ramverket har redan konfigurerat det här objektet för att ange en kontext för fältutbytesåtgärden.

Anmärkningar

När masshämtning av rader inte implementeras anropar ramverket den här medlemsfunktionen för att automatiskt utbyta data mellan fältdatamedlemmarna i postuppsättningsobjektet och motsvarande kolumner i den aktuella posten i datakällan. DoFieldExchange binder även eventuella parameterdatamedlemmar till parameterplatshållare i SQL-instruktionssträngen för postuppsättningens val.

Om masshämtning av rader implementeras anropar DoBulkFieldExchangeramverket . Om du vill implementera massuthämtning av rader måste du ange CRecordset::useMultiRowFetch alternativet för parametern dwOptions i Open medlemsfunktionen.

Anmärkning

DoFieldExchange är endast tillgängligt om du använder en klass som härletts från CRecordset. Om du har skapat ett postuppsättningsobjekt direkt från CRecordsetmåste du anropa medlemsfunktionen GetFieldValue för att hämta data.

Utbytet av fältdata, som kallas RFX (Record Field Exchange), fungerar i båda riktningarna: från postuppsättningsobjektets fältdatamedlemmar till postfälten i datakällan och från posten i datakällan till postuppsättningsobjektet.

Den enda åtgärd som du normalt måste vidta för att implementera DoFieldExchange för din härledda postuppsättningsklass är att skapa klassen med ClassWizard och ange namn och datatyper för fältdatamedlemmar. Du kan också lägga till kod i vad ClassWizard skriver för att ange parameterdatamedlemmar eller hantera eventuella kolumner som du binder dynamiskt. Mer information finns i Recordset: Dynamically Binding Data Columns (ODBC).

När du deklarerar din härledda postuppsättningsklass med ClassWizard skriver guiden en åsidosättning av DoFieldExchange åt dig, vilket liknar följande exempel:

void CCustomer::DoFieldExchange(CFieldExchange* pFX)
{
   pFX->SetFieldType(CFieldExchange::outputColumn);
   // Macros such as RFX_Text() and RFX_Int() are dependent on the
   // type of the member variable, not the type of the field in the database.
   // ODBC will try to automatically convert the column value to the requested type
   RFX_Long(pFX, _T("[CustomerID]"), m_CustomerID);
   RFX_Text(pFX, _T("[ContactFirstName]"), m_ContactFirstName);
   RFX_Text(pFX, _T("[PostalCode]"), m_PostalCode);
   RFX_Text(pFX, _T("[L_Name]"), m_L_Name);
   RFX_Long(pFX, _T("[BillingID]"), m_BillingID);

   pFX->SetFieldType(CFieldExchange::inputParam);
   RFX_Text(pFX, _T("Param"), m_strParam);
}

Mer information om RFX-funktionerna finns i Record Field Exchange Functions.

Ytterligare exempel och information om DoFieldExchangefinns i Record Field Exchange: How RFX Works. Allmän information om RFX finns i Record Field Exchange.

CRecordset::Edit

Tillåter ändringar i den aktuella posten.

virtual void Edit();

Anmärkningar

När du har anropat Editkan du ändra fältdatamedlemmarna genom att återställa deras värden direkt. Åtgärden slutförs när du anropar Update medlemsfunktionen för att spara ändringarna i datakällan.

Anmärkning

Om du har implementerat massradhämtning kan du inte anropa Edit. Detta resulterar i ett misslyckat påstående. Även om klassen CRecordset inte tillhandahåller någon mekanism för att uppdatera massrader med data kan du skriva egna funktioner med hjälp av ODBC API-funktionen SQLSetPos. Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

Edit sparar värdena för postuppsättningens datamedlemmar. Om du anropar Edit, gör ändringar och sedan anropar Edit igen återställs postens värden till vad de var före det första Edit anropet.

I vissa fall kanske du vill uppdatera en kolumn genom att göra den till Null (innehåller inga data). Det gör du genom att anropa SetFieldNull med en parameter av TRUE för att markera fältet Null. Detta gör också att kolumnen uppdateras. Om du vill att ett fält ska skrivas till datakällan trots att dess värde inte har ändrats anropar du SetFieldDirty med parametern TRUE. Detta fungerar även om fältet hade värdet Null.

Om datakällan stöder transaktioner kan du göra anropsdelen Edit av en transaktion. Anropa CDatabase::BeginTrans innan du anropar Edit och efter att postuppsättningen har öppnats. Dessutom är anrop CDatabase::CommitTrans inte en ersättning för att anropa Update för att slutföra Edit åtgärden. Mer information om transaktioner finns i klassen CDatabase.

Beroende på det aktuella låsningsläget kan posten som uppdateras låsas av Edit tills du anropar Update eller rullar till en annan post, eller så kan den endast låsas under anropet Edit . Du kan ändra låsningsläget med SetLockingMode.

Det tidigare värdet för den aktuella posten återställs om du bläddrar till en ny post innan du anropar Update. En CDBException utlöses om du anropar Edit en postuppsättning som inte kan uppdateras eller om det inte finns någon aktuell post.

Mer information finns i artiklarna Transaction (ODBC) and Recordset: Locking Records (ODBC).

Exempel

// To edit a record, first set up the edit buffer
rsCustSet.Edit();

// Then edit field data members for the record
rsCustSet.m_BillingID = 2795;
rsCustSet.m_ContactFirstName = _T("Jones Mfg");

// Finally, complete the operation
if (!rsCustSet.Update())
{
   // Handle the failure to update
   AfxMessageBox(_T("Couldn't update record!"));
}

CRecordset::FlushResultSet

Hämtar nästa resultatuppsättning för en fördefinierad fråga (lagrad procedur) om det finns flera resultatuppsättningar.

BOOL FlushResultSet();

Returvärde

Nonzero om det finns fler resultatuppsättningar som ska hämtas; annars 0.

Anmärkningar

Du bör bara anropa FlushResultSet när du är klar med markören på den aktuella resultatuppsättningen. När du hämtar nästa resultatuppsättning genom att anropa FlushResultSetär markören inte giltig för den resultatuppsättningen MoveNext . Du bör anropa medlemsfunktionen efter att ha anropat FlushResultSet.

Om en fördefinierad fråga använder en utdataparameter eller indata-/utdataparametrar måste du anropa FlushResultSet tills den returnerar FALSE(värdet 0) för att kunna hämta dessa parametervärden.

FlushResultSet anropar ODBC API-funktionen SQLMoreResults. Om SQLMoreResults returnerar SQL_ERROR eller SQL_INVALID_HANDLEgenereras FlushResultSet ett undantag. Mer information om SQLMoreResultsfinns i Windows SDK.

Den lagrade proceduren måste ha bundna fält om du vill anropa FlushResultSet.

Exempel

Följande kod förutsätter att det COutParamRecordset är ett CRecordset-derived-objekt baserat på en fördefinierad fråga med en indataparameter och en utdataparameter och har flera resultatuppsättningar. Observera strukturen för åsidosättningen DoFieldExchange .

// DoFieldExchange override
//
// Only necessary to handle parameter bindings.
// Don't use CRecordset-derived class with bound
// fields unless all result sets have same schema
// OR there is conditional binding code.
void CCourses::DoFieldExchange(CFieldExchange* pFX)
{
   pFX->SetFieldType(CFieldExchange::outputParam);
   RFX_Long(pFX, _T("Param1"), m_nCountParam);
   // The "Param1" name here is a dummy name 
   // that is never used

   pFX->SetFieldType(CFieldExchange::inputParam);
   RFX_Text(pFX, _T("Param2"), m_strNameParam);
   // The "Param2" name here is a dummy name 
   // that is never used
}

 

// Assume db is an already open CDatabase object
CCourses rs(&m_dbCust);
rs.m_strNameParam = _T("History");

// Get the first result set
// NOTE: SQL Server requires forwardOnly cursor 
//       type for multiple rowset returning stored 
//       procedures
rs.Open(CRecordset::forwardOnly,
   _T("{? = CALL GetCourses( ? )}"),
   CRecordset::readOnly);

// Loop through all the data in the first result set
while (!rs.IsEOF())
{
   CString strFieldValue;
   for (short nIndex = 0; nIndex < rs.GetODBCFieldCount(); nIndex++)
   {
      rs.GetFieldValue(nIndex, strFieldValue);

      // TO DO: Use field value string.
   }
   rs.MoveNext();
}

// Retrieve other result sets...
while (rs.FlushResultSet())
{
   // must call MoveNext because cursor is invalid
   rs.MoveNext();

   while (!rs.IsEOF())
   {
      CString strFieldValue;
      for (short nIndex = 0; nIndex < rs.GetODBCFieldCount(); nIndex++)
      {
         rs.GetFieldValue(nIndex, strFieldValue);

         // TO DO: Use field value string.
      }
      rs.MoveNext();
   }
}


// All result sets have been flushed. Cannot
// use the cursor, but the output parameter,
// m_nCountParam, has now been written.
// Note that m_nCountParam is not valid until
// CRecordset::FlushResultSet has returned FALSE,
// indicating no more result sets will be returned.

// TO DO: Use m_nCountParam

// Cleanup
rs.Close();

CRecordset::GetBookmark

Hämtar bokmärkesvärdet för den aktuella posten.

void GetBookmark(CDBVariant& varBookmark);

Parameterar

varBookmark
En referens till ett CDBVariant objekt som representerar bokmärket på den aktuella posten.

Anmärkningar

Om du vill ta reda på om bokmärken stöds på postuppsättningen anropar du CanBookmark. Om du vill göra bokmärken tillgängliga om de stöds måste du ange CRecordset::useBookmarks alternativet i parametern dwOptions för Open medlemsfunktionen.

Anmärkning

Om bokmärken inte stöds eller inte är tillgängliga resulterar anrop GetBookmark i att ett undantag utlöses. Bokmärken stöds inte på postuppsättningar med endast vidarebefordran.

GetBookmark tilldelar värdet för bokmärket för den aktuella posten till ett CDBVariant objekt. Om du vill återgå till posten när som helst efter att du har flyttat till en annan post anropar SetBookmark du med motsvarande CDBVariant objekt.

Anmärkning

Efter vissa postuppsättningsåtgärder kanske bokmärkena inte längre är giltiga. Om du till exempel anropar GetBookmark följt av Requerykanske du inte kan återgå till posten med SetBookmark. Ring CDatabase::GetBookmarkPersistence för att kontrollera om du kan ringa SetBookmarkpå ett säkert sätt.

Mer information om bokmärken och postmängdsnavigering finns i artiklarna Postuppsättning: Bokmärken och absoluta positioner (ODBC) och Postuppsättning: Rullning (ODBC).

CRecordset::GetDefaultConnect

Anropad för att hämta standardanslutningssträngen.

virtual CString GetDefaultConnect();

Returvärde

En CString som innehåller standardanslutningssträngen.

Anmärkningar

Ramverket anropar den här medlemsfunktionen för att hämta standardanslutningssträngen för datakällan som postuppsättningen baseras på. ClassWizard implementerar den här funktionen åt dig genom att identifiera samma datakälla som du använder i ClassWizard för att få information om tabeller och kolumner. Det är förmodligen praktiskt att förlita sig på den här standardanslutningen när du utvecklar programmet. Men standardanslutningen kanske inte är lämplig för användare av ditt program. Om så är fallet bör du omimplementera den här funktionen och ignorera ClassWizard's version. Mer information om anslutningssträngar finns i Datakälla (ODBC).

CRecordset::GetDefaultSQL

Anropas för att hämta sql-standardsträngen som ska köras.

virtual CString GetDefaultSQL();

Returvärde

En CString som innehåller SQL-standardsatsen.

Anmärkningar

Ramverket anropar den här medlemsfunktionen för att hämta standard-SQL-instruktionen som postuppsättningen baseras på. Det kan vara ett tabellnamn eller en SQL-instruktion SELECT .

Du definierar indirekt SQL-standardsatsen genom att deklarera din postuppsättningsklass med ClassWizardoch ClassWizard utför den här uppgiften åt dig.

Om du behöver SQL-instruktionssträngen för egen användning anropar du GetSQL, som returnerar SQL-instruktionen som används för att välja postuppsättningens poster när den öppnades. Du kan redigera SQL-standardsträngen i klassens åsidosättning av GetDefaultSQL. Du kan till exempel ange ett anrop till en fördefinierad fråga med hjälp av en CALL -instruktion. (Observera dock att om du redigerar GetDefaultSQLmåste du också ändra m_nFields för att matcha antalet kolumner i datakällan.)

Mer information finns i Arkivhandlingar: Deklarera en klass för en tabell (ODBC).

Försiktighet

Tabellnamnet är tomt om ramverket inte kunde identifiera ett tabellnamn, om flera tabellnamn angavs eller om en CALL instruktion inte kunde tolkas. När du använder en CALL instruktion ska du inte infoga blanksteg mellan klammerparentesen och nyckelordet CALL , inte heller före klammerparentesen eller före nyckelordet SELECT i en SELECT instruktion.

CRecordset::GetFieldValue

Hämtar fältdata i den aktuella posten.

void GetFieldValue(
    LPCTSTR lpszName,
    CDBVariant& varValue,
    short nFieldType = DEFAULT_FIELD_TYPE);

void GetFieldValue(
    LPCTSTR lpszName,
    CStringA& strValue
);

void GetFieldValue(
    LPCTSTR lpszName,
    CStringW& strValue
);

void GetFieldValue(
    short nIndex,
    CDBVariant& varValue,
    short nFieldType = DEFAULT_FIELD_TYPE);

void GetFieldValue(
    short nIndex,
    CStringA& strValue);

void GetFieldValue(
    short nIndex,
    CStringW& strValue);

Parameterar

lpszName
Namnet på ett fält.

varValue En referens till ett CDBVariant objekt som lagrar fältets värde.

nFieldType
ODBC C-datatypen för fältet. Med standardvärdet DEFAULT_FIELD_TYPEtvingar , fram till GetFieldValue att fastställa C-datatypen från SQL-datatypen, baserat på följande tabell. Annars kan du ange datatypen direkt eller välja en kompatibel datatyp. Du kan till exempel lagra alla datatyper i SQL_C_CHAR.

C-datatyp SQL-datatyp
SQL_C_BIT SQL_BIT
SQL_C_UTINYINT SQL_TINYINT
SQL_C_SSHORT SQL_SMALLINT
SQL_C_SLONG SQL_INTEGER
SQL_C_FLOAT SQL_REAL
SQL_C_DOUBLE SQL_FLOATSQL_DOUBLE
SQL_C_TIMESTAMP SQL_DATESQL_TIMESQL_TIMESTAMP
SQL_C_CHAR SQL_NUMERICSQL_DECIMALSQL_BIGINTSQL_CHARSQL_VARCHARSQL_LONGVARCHAR
SQL_C_BINARY SQL_BINARYSQL_VARBINARYSQL_LONGVARBINARY

Mer information om ODBC-datatyper finns i avsnitten "SQL Data Types" och "C Data Types" i Bilaga D i Windows SDK.

nIndex
Fältets nollbaserade index.

strValue
En referens till ett CString objekt som lagrar fältets värde konverterat till text, oavsett fältets datatyp.

Anmärkningar

Du kan söka efter ett fält antingen efter namn eller index. Du kan lagra fältvärdet i antingen ett CDBVariant objekt eller ett CString objekt.

Om du har implementerat massradhämtning placeras den aktuella posten alltid på den första posten i en raduppsättning. Om du vill använda GetFieldValue på en post inom en viss raduppsättning måste du först anropa SetRowsetCursorPosition medlemsfunktionen för att flytta markören till önskad rad i raduppsättningen. Anropa GetFieldValue sedan för den raden. Om du vill implementera massuthämtning av rader måste du ange CRecordset::useMultiRowFetch alternativet för parametern dwOptions i Open medlemsfunktionen.

Du kan använda GetFieldValue för att dynamiskt hämta fält vid körning i stället för att statiskt binda dem vid designtillfället. Om du till exempel har deklarerat ett postuppsättningsobjekt direkt från CRecordsetmåste du använda GetFieldValue för att hämta fältdata, postfältutbyte (RFX) eller massinmatningsfältutbyte (Bulk RFX) inte implementeras.

Anmärkning

Om du deklarerar ett postuppsättningsobjekt utan att härleda från CRecordsetska du inte läsa in ODBC-markörbiblioteket. Markörbiblioteket kräver att postuppsättningen har minst en bunden kolumn. Men när du använder CRecordset direkt är ingen av kolumnerna bundna. Medlemsfunktionerna CDatabase::OpenEx och CDatabase::Open styr om markörbiblioteket ska läsas in.

GetFieldValue anropar ODBC API-funktionen SQLGetData. Om drivrutinen matar ut värdet SQL_NO_TOTAL för fältvärdets faktiska längd utlöser GetFieldValue ett undantag. Mer information om SQLGetDatafinns i Windows SDK.

Exempel

Följande exempelkod illustrerar anrop till GetFieldValue för ett postuppsättningsobjekt som deklarerats direkt från CRecordset.

// Create and open a database object;
// do not load the cursor library
CDatabase db;
db.OpenEx(NULL, CDatabase::forceOdbcDialog);

// Create and open a recordset object
// directly from CRecordset. Note that a
// table must exist in a connected database.
// Use forwardOnly type recordset for best
// performance, since only MoveNext is required
CRecordset rs(&db);
rs.Open(CRecordset::forwardOnly, _T("SELECT * FROM Customer"));

// Create a CDBVariant object to
// store field data
CDBVariant varValue;

// Loop through the recordset,
// using GetFieldValue and
// GetODBCFieldCount to retrieve
// data in all columns
short nFields = rs.GetODBCFieldCount();
while (!rs.IsEOF())
{
   for (short index = 0; index < nFields; index++)
   {
      rs.GetFieldValue(index, varValue);
      // do something with varValue
   }
   rs.MoveNext();
}

rs.Close();
db.Close();

Anmärkning

Till skillnad från DAO-klassen CDaoRecordsethar inte CRecordset någon SetFieldValue medlemsfunktion. Om du skapar ett objekt direkt från CRecordsetär det i praktiken skrivskyddat.

Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

CRecordset::GetODBCFieldCount

Hämtar det totala antalet fält i postuppsättningsobjektet.

short GetODBCFieldCount() const;

Returvärde

Antalet fält i postuppsättningen.

Anmärkningar

Mer information om hur du skapar postuppsättningar finns i Recordset: Creating and Closing Recordsets (ODBC).

CRecordset::GetODBCFieldInfo

Hämtar information om fälten i postuppsättningen.

void GetODBCFieldInfo(
    LPCTSTR lpszName,
    CODBCFieldInfo& fieldinfo);

void GetODBCFieldInfo(
    short nIndex,
    CODBCFieldInfo& fieldinfo);

Parameterar

lpszName
Namnet på ett fält.

fieldinfo
En referens till en CODBCFieldInfo struktur.

nIndex
Fältets nollbaserade index.

Anmärkningar

Med en version av funktionen kan du söka efter ett fält efter namn. Med den andra versionen kan du söka efter ett fält efter index.

En beskrivning av den information som returneras finns i CODBCFieldInfo strukturen.

Mer information om hur du skapar postuppsättningar finns i Recordset: Creating and Closing Recordsets (ODBC).

CRecordset::GetRecordCount

Avgör storleken på postuppsättningen.

long GetRecordCount() const;

Returvärde

Antalet poster i postuppsättningen. 0 om postuppsättningen inte innehåller några poster; eller -1 om postantalet inte kan fastställas.

Anmärkningar

Försiktighet

Postantalet underhålls som ett "högvattenmärke", den högst numrerade posten som hittills setts när användaren rör sig genom posterna. Det totala antalet poster är bara känt efter att användaren har flyttat bortom den senaste posten. Av prestandaskäl uppdateras inte antalet när du anropar MoveLast. Om du vill räkna posterna själv anropar MoveNext du upprepade gånger tills IsEOF returnerar nonzero. Om du lägger till en post via CRecordset::AddNew och Update ökar antalet, minskar antalet om du tar bort en post via CRecordset::Delete .

CRecordset::GetRowsetSize

Hämtar den aktuella inställningen för det antal rader som du vill hämta under en viss hämtning.

DWORD GetRowsetSize() const;

Returvärde

Antalet rader som ska hämtas under en viss hämtning.

Anmärkningar

Om du använder massradhämtning är standardstorleken för raduppsättningar när postuppsättningen öppnas 25. annars är det 1.

Om du vill implementera massuthämtning av rader måste du ange CRecordset::useMultiRowFetch alternativet i parametern dwOptions för Open medlemsfunktionen. Om du vill ändra inställningen för raduppsättningens storlek anropar du SetRowsetSize.

Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

CRecordset::GetRowsFetched

Avgör hur många poster som hämtades efter en hämtning.

DWORD GetRowsFetched() const;

Returvärde

Antalet rader som hämtats från datakällan efter en viss hämtning.

Anmärkningar

Detta är användbart när du har implementerat massradhämtning. Storleken på raduppsättningen anger normalt hur många rader som ska hämtas från en hämtning. Men det totala antalet rader i postuppsättningen påverkar också hur många rader som ska hämtas i en raduppsättning. Om postuppsättningen till exempel har 10 poster med en raduppsättningsstorleksinställning på fyra, resulterar loopning genom postuppsättningen genom anrop MoveNext i den sista raduppsättningen med endast två poster.

Om du vill implementera massuthämtning av rader måste du ange CRecordset::useMultiRowFetch alternativet i parametern dwOptions för Open medlemsfunktionen. Om du vill ange raduppsättningens storlek anropar du SetRowsetSize.

Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

Exempel

CMultiCustomer rs(&m_dbCust);

// Set the rowset size
rs.SetRowsetSize(5);

// Open the recordset
rs.Open(CRecordset::dynaset, NULL, CRecordset::useMultiRowFetch);

// loop through the recordset by rowsets
while (!rs.IsEOF())
{
   for (int rowCount = 0; rowCount < (int)rs.GetRowsFetched(); rowCount++)
   {
      // do something
   }

   rs.MoveNext();
}

rs.Close();

CRecordset::GetRowStatus

Hämtar status för en rad i den aktuella raduppsättningen.

WORD GetRowStatus(WORD wRow) const;

Parameterar

wRow
En rads enbaserade position i den aktuella raduppsättningen. Det här värdet kan variera från 1 till storleken på raduppsättningen.

Returvärde

Ett statusvärde för raden. Mer information finns i Kommentarer.

Anmärkningar

GetRowStatus returnerar ett värde som antingen anger en ändring i status till raden sedan den senast hämtades från datakällan eller att ingen rad som motsvarar wRow hämtades. I följande tabell visas möjliga returvärden.

Statusvärde Beskrivning
SQL_ROW_SUCCESS Raden är oförändrad.
SQL_ROW_UPDATED Raden har uppdaterats.
SQL_ROW_DELETED Raden har tagits bort.
SQL_ROW_ADDED Raden har lagts till.
SQL_ROW_ERROR Raden är oåterkallelig på grund av ett fel.
SQL_ROW_NOROW Ingen rad motsvarar wRow.

Mer information finns i funktionen SQLExtendedFetch ODBC API i Windows SDK.

CRecordset::GetStatus

Avgör indexet för den aktuella posten i postuppsättningen och om den senaste posten har setts.

void GetStatus(CRecordsetStatus& rStatus) const;

Parameterar

rStatus
En referens till ett CRecordsetStatus objekt. Mer information finns i Kommentarer.

Anmärkningar

CRecordset försöker spåra indexet, men under vissa omständigheter är detta kanske inte möjligt. Se GetRecordCount för en förklaring.

Strukturen CRecordsetStatus har följande formulär:

struct CRecordsetStatus
{
    long m_lCurrentRecord;
    BOOL m_bRecordCountFinal;
};

De två medlemmarna CRecordsetStatus i har följande betydelser:

  • m_lCurrentRecord Innehåller det nollbaserade indexet för den aktuella posten i postuppsättningen, om det är känt. Om indexet inte kan fastställas innehåller AFX_CURRENT_RECORD_UNDEFINED den här medlemmen (-2). Om IsBOF är TRUE (tom postuppsättning eller försök att rulla före den första posten) anges sedan m_lCurrentRecord till AFX_CURRENT_RECORD_BOF (-1). Om den första posten är inställd på 0, andra posten 1 och så vidare.

  • m_bRecordCountFinal Nonzero om det totala antalet poster i postuppsättningen har fastställts. Vanligtvis måste detta utföras genom att starta i början av postuppsättningen och anropa MoveNext tills IsEOF returnerar nonzero. Om den här medlemmen är noll är postantalet som returneras av GetRecordCount, om inte -1, bara ett "högvattenmärke" för posterna.

CRecordset::GetSQL

Anropa den här medlemsfunktionen för att hämta SQL-instruktionen som användes för att välja postuppsättningens poster när den öppnades.

const CString& GetSQL() const;

Returvärde

En const referens till en CString som innehåller SQL-instruktionen.

Anmärkningar

Detta är vanligtvis en SQL-instruktion SELECT . Strängen som returneras av GetSQL är skrivskyddad.

Strängen som returneras av GetSQL skiljer sig vanligtvis från alla strängar som du kan ha skickat till postuppsättningen i parametern lpszSQL till Open medlemsfunktionen. Det beror på att postuppsättningen konstruerar en fullständig SQL-instruktion baserat på vad du har skickat till Open, vad du angav med ClassWizard, vad du kan ha angett i m_strFilter datamedlemmarna och m_strSort eventuella parametrar som du har angett. Mer information om hur postuppsättningen konstruerar den här SQL-instruktionen finns i Recordset: How Recordsets Select Records (ODBC).

Anmärkning

Anropa endast den här medlemsfunktionen efter att ha anropat Open.

CRecordset::GetTableName

Hämtar namnet på den SQL-tabell som postuppsättningens fråga baseras på.

const CString& GetTableName() const;

Returvärde

En const referens till en CString som innehåller tabellnamnet, om postuppsättningen baseras på en tabell, annars en tom sträng.

Anmärkningar

GetTableName är endast giltig om postuppsättningen baseras på en tabell, inte en koppling av flera tabeller eller en fördefinierad fråga (lagrad procedur). Namnet är skrivskyddat.

Anmärkning

Anropa endast den här medlemsfunktionen efter att ha anropat Open.

CRecordset::IsBOF

Returnerar nonzero om postuppsättningen har placerats före den första posten. Det finns ingen aktuell post.

BOOL IsBOF() const;

Returvärde

Nonzero om postuppsättningen inte innehåller några poster eller om du har rullat bakåt före den första posten. annars 0.

Anmärkningar

Anropa den här medlemsfunktionen innan du bläddrar från post till post för att lära dig om du har gått före den första posten i postuppsättningen. Du kan också använda IsBOF tillsammans med IsEOF för att avgöra om postuppsättningen innehåller några poster eller är tom. Omedelbart efter att du anropat Open, om postuppsättningen inte innehåller några poster, IsBOF returnerar nonzero. När du öppnar en postuppsättning som har minst en post är den första posten den aktuella posten och IsBOF returnerar 0.

Om den första posten är den aktuella posten och du anropar MovePrevreturnerar IsBOF du nonzero. Om IsBOF returnerar nonzero och du anropar MovePrevinträffar ett fel. Om IsBOF returnerar nonzero är den aktuella posten odefinierad och alla åtgärder som kräver en aktuell post resulterar i ett fel.

Exempel

Det här exemplet använder IsBOF och IsEOF för att identifiera gränserna för en postuppsättning när koden bläddrar igenom postuppsättningen i båda riktningarna.

// Open a recordset; first record is current
// Open a recordset; first record is current
CCustomer rsCustSet(&m_dbCust);
rsCustSet.Open();

if(rsCustSet.IsBOF())
   return;
   // The recordset is empty

// Scroll to the end of the recordset, past
// the last record, so no record is current
while (!rsCustSet.IsEOF())
   rsCustSet.MoveNext();

// Move to the last record
rsCustSet.MoveLast();

// Scroll to beginning of the recordset, before
// the first record, so no record is current
while(!rsCustSet.IsBOF())
   rsCustSet.MovePrev();

// First record is current again
rsCustSet.MoveFirst();

CRecordset::IsDeleted

Avgör om den aktuella posten har tagits bort.

BOOL IsDeleted() const;

Returvärde

Nonzero om postuppsättningen är placerad på en borttagen post; annars 0.

Anmärkningar

Om du bläddrar till en post och IsDeleted returnerar TRUE (nonzero) måste du rulla till en annan post innan du kan utföra andra postuppsättningsåtgärder.

Resultatet av IsDeleted beror på många faktorer, till exempel postuppsättningstypen, om postuppsättningen CRecordset::skipDeletedRecords är uppdaterad, om du angav alternativet när du öppnade postuppsättningen, om drivrutinspaketet tog bort poster och om det finns flera användare.

Mer information om CRecordset::skipDeletedRecords och drivrutinspackning finns i funktionen Öppna medlem.

Anmärkning

Om du har implementerat massradshämtning bör du inte anropa IsDeleted. Anropa i stället medlemsfunktionen GetRowStatus . Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

CRecordset::IsEOF

Returnerar nonzero om postuppsättningen har placerats efter den senaste posten. Det finns ingen aktuell post.

BOOL IsEOF() const;

Returvärde

Nonzero om postuppsättningen inte innehåller några poster eller om du har rullat bortom den senaste posten. annars 0.

Anmärkningar

Anropa den här medlemsfunktionen när du bläddrar från post till post för att lära dig om du har gått längre än den sista posten i postuppsättningen. Du kan också använda IsEOF för att avgöra om postuppsättningen innehåller några poster eller är tom. Omedelbart efter att du anropat Open, om postuppsättningen inte innehåller några poster, IsEOF returnerar nonzero. När du öppnar en postuppsättning som har minst en post är den första posten den aktuella posten och IsEOF returnerar 0.

Om den sista posten är den aktuella posten när du anropar MoveNextIsEOF returneras nonzero. Om IsEOF returnerar nonzero och du anropar MoveNextinträffar ett fel. Om IsEOF returnerar nonzero är den aktuella posten odefinierad och alla åtgärder som kräver en aktuell post resulterar i ett fel.

Exempel

Se exemplet för IsBOF.

CRecordset::IsFieldDirty

Avgör om den angivna fältdatamedlemmen har ändrats sedan Edit eller AddNew anropades.

BOOL IsFieldDirty(void* pv);

Parameterar

pv
En pekare till den fältdatamedlem vars status du vill kontrollera, eller NULL för att avgöra om något av fälten är smutsigt.

Returvärde

Nonzero om den angivna fältdatamedlemmen har ändrats sedan anropet AddNew eller Edit; annars 0.

Anmärkningar

Data i alla smutsiga fältdatamedlemmar överförs till posten i datakällan när den aktuella posten uppdateras av ett anrop till Update medlemsfunktionen CRecordset i (efter ett anrop till Edit eller AddNew).

Anmärkning

Den här medlemsfunktionen gäller inte för postuppsättningar som använder massradhämtning. Om du har implementerat massradhämtning returnerar du IsFieldDirty alltid FALSE och resulterar i ett misslyckat påstående. Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

Anropet IsFieldDirty återställer effekterna av föregående anrop till SetFieldDirty eftersom fältets smutsiga status omvärderas. Om det AddNew aktuella fältvärdet skiljer sig från pseudo-null-värdet anges fältstatusen smutsig. Edit Om fältvärdet i så fall skiljer sig från det cachelagrade värdet anges fältstatusen som felaktig.

IsFieldDirty implementeras via DoFieldExchange.

Mer information om den smutsiga flaggan finns i Recordset: How Recordsets Select Records (ODBC).

CRecordset::IsFieldNull

Returnerar nonzero om det angivna fältet i den aktuella posten är Null (har inget värde).

BOOL IsFieldNull(void* pv);

Parameterar

pv
En pekare till den fältdatamedlem vars status du vill kontrollera, eller NULL för att avgöra om något av fälten är Null.

Returvärde

Nonzero om den angivna fältdatamedlemmen flaggas som Null; annars 0.

Anmärkningar

Anropa den här medlemsfunktionen för att avgöra om den angivna fältdatamedlemmen i en postuppsättning har flaggats som Null. (I databasterminologi betyder Null att "inte ha något värde" och inte är detsamma som NULL i C++.) Om en fältdatamedlem flaggas som Null tolkas den som en kolumn i den aktuella posten som det inte finns något värde för.

Anmärkning

Den här medlemsfunktionen gäller inte för postuppsättningar som använder massradhämtning. Om du har implementerat massradhämtning IsFieldNull returneras FALSE alltid och resulterar i ett misslyckat påstående. Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

IsFieldNull implementeras via DoFieldExchange.

CRecordset::IsFieldNullable

Returnerar nonzero om det angivna fältet i den aktuella posten kan anges till Null (utan värde).

BOOL IsFieldNullable(void* pv);

Parameterar

pv
En pekare till den fältdatamedlem vars status du vill kontrollera, eller NULL för att avgöra om något av fälten kan anges till ett Null-värde.

Anmärkningar

Anropa den här medlemsfunktionen för att avgöra om den angivna fältdatamedlemmen är "nullable" (kan anges till ett Null-värde; C++ NULL är inte detsamma som Null, vilket i databasterminologin betyder "har inget värde").

Anmärkning

Om du har implementerat massradhämtning kan du inte anropa IsFieldNullable. Anropa GetODBCFieldInfo i stället medlemsfunktionen för att avgöra om ett fält kan anges till ett Null-värde. Du kan alltid anropa GetODBCFieldInfo, oavsett om du har implementerat massradhämtning. Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

Ett fält som inte kan vara Null måste ha ett värde. Om du försöker ange ett sådant fält till Null när du lägger till eller uppdaterar en post avvisar datakällan tillägget eller uppdateringen och Update utlöser ett undantag. Undantaget inträffar när du anropar Update, inte när du anropar SetFieldNull.

Om du använder NULL för det första argumentet i funktionen tillämpas funktionen endast på outputColumn fält, inte param fält. Till exempel anropet

SetFieldNull(NULL);

anger endast outputColumn fält till NULL; param fält påverkas inte.

Om du vill arbeta med param fält måste du ange den faktiska adressen för den person param som du vill arbeta med, till exempel:

SetFieldNull(&m_strParam);

Det innebär att du inte kan ange alla param fält till NULL, som du kan med outputColumn fält.

IsFieldNullable implementeras via DoFieldExchange.

CRecordset::IsOpen

Avgör om postuppsättningen redan är öppen.

BOOL IsOpen() const;

Returvärde

Nonzero om postuppsättningsobjektets eller Open medlemsfunktionen tidigare har anropats Requery och postuppsättningen inte har stängts, annars 0.

CRecordset::m_hstmt

Innehåller en referens till ODBC-instruktionens datastruktur, av typen HSTMT, som är associerad med postuppsättningen.

Anmärkningar

Varje fråga till en ODBC-datakälla är associerad med en HSTMT.

Försiktighet

Använd inte m_hstmt tidigare Open har anropats.

Normalt behöver du inte komma åt direkt HSTMT , men du kan behöva det för direkt körning av SQL-instruktioner. Medlemsfunktionen ExecuteSQL i klassen CDatabase är ett exempel på hur du använder m_hstmt.

CRecordset::m_nFields

Innehåller antalet fältdatamedlemmar i postmängdsklassen. det vill:s antal kolumner som valts av postuppsättningen från datakällan.

Anmärkningar

Konstruktorn för postuppsättningsklassen måste initieras m_nFields med rätt tal. Om du inte har implementerat massradhämtning ClassWizard skriver du den här initieringen åt dig när du använder den för att deklarera din postuppsättningsklass. Du kan också skriva den manuellt.

Ramverket använder det här numret för att hantera interaktionen mellan fältdatamedlemmarna och motsvarande kolumner i den aktuella posten i datakällan.

Försiktighet

Det här talet måste motsvara antalet "utdatakolumner" som registrerats i DoFieldExchange eller DoBulkFieldExchange efter ett anrop till SetFieldType med parametern CFieldExchange::outputColumn.

Du kan binda kolumner dynamiskt, enligt beskrivningen i artikeln "Recordset: Dynamically Binding Data Columns". Om du gör det måste du öka antalet i m_nFields för att återspegla antalet RFX- eller Bulk RFX-funktionsanrop i din DoFieldExchange eller DoBulkFieldExchange medlemsfunktionen för de dynamiskt bundna kolumnerna.

Mer information finns i artiklarna Recordset: Dynamically Binding Data Columns (ODBC) and Recordset: Fetching Records in Bulk (ODBC).

Exempel

se Postfältutbyte: Använda RFX.

CRecordset::m_nParams

Innehåller antalet parameterdatamedlemmar i postmängdsklassen. det vill: antalet parametrar som skickas med postmängdens fråga.

Anmärkningar

Om din postuppsättningsklass har några parameterdatamedlemmar måste konstruktorn för klassen initiera m_nParams med rätt tal. Värdet för m_nParams standardvärdet är 0. Om du lägger till parameterdatamedlemmar (vilket du måste göra manuellt) måste du också manuellt lägga till en initiering i klasskonstruktorn för att återspegla antalet parametrar (som måste vara minst lika stort som antalet platshållare i din m_strFilter eller m_strSort strängen).

Ramverket använder det här talet när det parameteriserar postuppsättningens fråga.

Försiktighet

Det här talet måste motsvara antalet "params" som registrerats i DoFieldExchange eller DoBulkFieldExchange efter ett anrop till SetFieldType med parametervärdet CFieldExchange::inputParam, CFieldExchange::param, CFieldExchange::outputParameller CFieldExchange::inoutParam.

Exempel

Se artiklarna Recordset: Parameterizing a Recordset (ODBC) and Record Field Exchange: Using RFX.

CRecordset::m_pDatabase

Innehåller en pekare till det CDatabase objekt genom vilket postuppsättningen är ansluten till en datakälla.

Anmärkningar

Den här variabeln anges på två sätt. Vanligtvis skickar du en pekare till ett redan anslutet CDatabase objekt när du skapar postuppsättningsobjektet. Om du skickar NULL i stället CRecordset skapar du ett CDatabase objekt åt dig och ansluter det. I båda fallen CRecordset lagrar pekaren i den här variabeln.

Normalt behöver du inte direkt använda pekaren som lagras i m_pDatabase. Om du skriver egna tillägg till CRecordsetkan du dock behöva använda pekaren. Du kan till exempel behöva pekaren om du kastar egna CDBExceptions. Eller så kan du behöva det om du behöver göra något med samma CDatabase objekt, till exempel köra transaktioner, ange tidsgränser eller anropa ExecuteSQL medlemsfunktionen i klassen CDatabase för att köra SQL-instruktioner direkt.

CRecordset::m_strFilter

När du har konstruerat postuppsättningsobjektet, men innan du anropar dess Open medlemsfunktion, använder du den här datamedlemmen för att lagra en CString som innehåller en SQL-sats WHERE .

Anmärkningar

Postuppsättningen använder den här strängen för att begränsa (eller filtrera) de poster som den väljer under anropet Open eller Requery . Detta är användbart för att välja en delmängd av poster, till exempel "alla säljare baserade i Kalifornien" ("state = CA"). ODBC SQL-syntaxen för en WHERE sats är

WHERE search-condition

Inkludera inte nyckelordet i strängen WHERE . Ramverket tillhandahåller det.

Du kan också parametrisera filtersträngen genom att placera platshållare i den, deklarera en parameterdatamedlem i klassen för varje platshållare och skicka parametrar till postuppsättningen vid körning. På så sätt kan du konstruera filtret vid körning. Mer information finns i Recordset: Parameterizing a Recordset (ODBC).

Mer information om SQL-satser WHERE finns i SQL. Mer information om hur du väljer och filtrerar poster finns i Recordset: Filtering Records (ODBC).

Exempel

CCustomer rsCustSet(&m_dbCust);

// Set the filter
rsCustSet.m_strFilter = _T("L_Name = 'Flanders'");

// Run the filtered query
rsCustSet.Open(CRecordset::snapshot, _T("Customer"));

CRecordset::m_strSort

När du har konstruerat postuppsättningsobjektet, men innan du anropar dess Open medlemsfunktion, använder du den här datamedlemmen för att lagra en CString som innehåller en SQL-sats ORDER BY .

Anmärkningar

Postuppsättningen använder den här strängen för att sortera de poster som den väljer under eller Open -anropetRequery. Du kan använda den här funktionen för att sortera en postuppsättning på en eller flera kolumner. ODBC SQL-syntaxen för en ORDER BY sats är

ORDER BY sort-specification [, sort-specification]...

där en sorteringsspecifikation är ett heltal eller ett kolumnnamn. Du kan också ange stigande eller fallande ordning (ordningen är stigande som standard) genom att lägga till "ASC" eller "DESC" i kolumnlistan i sorteringssträngen. De markerade posterna sorteras först efter den första kolumnen i listan, sedan efter den andra och så vidare. Du kan till exempel beställa en "Kunder"-postuppsättning efter efternamn och sedan förnamn. Antalet kolumner som du kan lista beror på datakällan. Mer information finns i Windows SDK.

Inkludera inte nyckelordet i strängen ORDER BY . Ramverket tillhandahåller det.

Mer information om SQL-satser finns i SQL. Mer information om sortering av poster finns i Recordset: Sorting Records (ODBC).

Exempel

CCustomer rsCustSet(&m_dbCust);

// Set the sort string
rsCustSet.m_strSort = _T("L_Name, ContactFirstName");

// Run the sorted query
rsCustSet.Open(CRecordset::snapshot, _T("Customer"));

CRecordset::Move

Flyttar den aktuella postpekaren i postuppsättningen, antingen framåt eller bakåt.

virtual void Move(
    long nRows,
    WORD wFetchType = SQL_FETCH_RELATIVE);

Parameterar

nRows
Antalet rader som ska flyttas framåt eller bakåt. Positiva värden går framåt, mot slutet av postuppsättningen. Negativa värden flyttas bakåt, mot början.

wFetchType
Avgör vilken raduppsättning som Move ska hämtas. Mer information finns i Kommentarer.

Anmärkningar

Om du skickar värdet 0 för nRowsMove uppdaterar du den aktuella posten, Move avslutar alla aktuella AddNew eller Edit lägen och återställer den aktuella postens värde före AddNew eller Edit anropades.

Anmärkning

När du går igenom en postuppsättning kan du inte hoppa över borttagna poster. Mer information finns i CRecordset::IsDeleted. När du öppnar en CRecordset med alternativuppsättningen skipDeletedRecordsMove anger du om parametern nRows är 0. Det här beteendet förhindrar uppdatering av rader som tas bort av andra klientprogram med samma data. Se parametern dwOption i Open för en beskrivning av skipDeletedRecords.

Move flyttar postuppsättningen efter raduppsättningar. Baserat på värdena för nRows och wFetchTypeMove hämtar lämplig raduppsättning och gör sedan den första posten i raduppsättningen till den aktuella posten. Om du inte har implementerat massradhämtning är raduppsättningens storlek alltid 1. När du hämtar en raduppsättning Move anropas CheckRowsetError medlemsfunktionen direkt för att hantera eventuella fel som uppstår vid hämtningen.

Beroende på vilka värden du skickar Move motsvarar det andra CRecordset medlemsfunktioner. I synnerhet kan värdet för wFetchType indikera en medlemsfunktion som är mer intuitiv och ofta den föredragna metoden för att flytta den aktuella posten.

I följande tabell visas möjliga värden för wFetchType, raduppsättningen som Move hämtas baserat på wFetchType och nRows, och motsvarande medlemsfunktion som motsvarar wFetchType.

wFetchType Hämtad raduppsättning Motsvarande medlemsfunktion
SQL_FETCH_RELATIVE (standardvärdet) Raduppsättningens startrader nRows från den första raden i den aktuella raduppsättningen.
SQL_FETCH_NEXT Nästa raduppsättning; nRows ignoreras. MoveNext
SQL_FETCH_PRIOR Föregående raduppsättning; nRows ignoreras. MovePrev
SQL_FETCH_FIRST Den första raduppsättningen i postuppsättningen. nRows ignoreras. MoveFirst
SQL_FETCH_LAST Den sista fullständiga raduppsättningen i postuppsättningen. nRows ignoreras. MoveLast
SQL_FETCH_ABSOLUTE Om nRows> 0 börjar raduppsättningen med raderna nRows från början av postuppsättningen. Om nRows< det är 0 börjar nRows raderna från slutet av postuppsättningen. Om nRows = 0 returneras ett villkor för början av filen (BOF). SetAbsolutePosition
SQL_FETCH_BOOKMARK Raduppsättningen börjar på raden vars bokmärkesvärde nRowsmotsvarar . SetBookmark

Anmärkning

För endast framåtriktade postuppsättningar Move är det bara giltigt med värdet SQL_FETCH_NEXT för för wFetchType.

Försiktighet

Anrop Move utlöser ett undantag om postuppsättningen inte har några poster. För att avgöra om postuppsättningen har några poster anropar IsBOF du och IsEOF.

Anmärkning

Om du har rullat förbi början eller slutet av postuppsättningen (IsBOF eller IsEOF returnerar nonzero) kommer anrop av en Move funktion eventuellt att generera en CDBException. Om IsEOF till exempel returnerar icke-zero och IsBOF inte gör det, utlöser ett MoveNext undantag, men MovePrev kommer inte att göra det.

Anmärkning

Om du anropar Move medan den aktuella posten uppdateras eller läggs till går uppdateringarna förlorade utan förvarning.

Mer information om postmängdsnavigering finns i artiklarna Recordset: Scrolling (ODBC) och Recordset: Bookmarks and Absolute Positions (ODBC). Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC). Relaterad information finns i funktionen SQLExtendedFetch ODBC API i Windows SDK.

Exempel

// rs is a CRecordset or a CRecordset-derived object

// Change the rowset size to 5
rs.SetRowsetSize(5);

// Open the recordset
rs.Open(CRecordset::dynaset, NULL, CRecordset::useMultiRowFetch);

// Move to the first record in the recordset
rs.MoveFirst();

// Move to the sixth record
rs.Move(5);
// Other equivalent ways to move to the sixth record:
rs.Move(6, SQL_FETCH_ABSOLUTE);
rs.SetAbsolutePosition(6);
// In this case, the sixth record is the first record in the next rowset,
// so the following are also equivalent:
rs.MoveFirst();
rs.Move(1, SQL_FETCH_NEXT);

rs.MoveFirst();
rs.MoveNext();

CRecordset::MoveFirst

Gör den första posten i den första raduppsättningen till den aktuella posten.

void MoveFirst();

Anmärkningar

Oavsett om massradhämtning har implementerats är detta alltid den första posten i postuppsättningen.

Du behöver inte anropa MoveFirst direkt när du har öppnat postuppsättningen. Vid den tidpunkten är den första posten (om någon) automatiskt den aktuella posten.

Anmärkning

Den här medlemsfunktionen är inte giltig för postuppsättningar med endast vidarebefordran.

Anmärkning

När du går igenom en postuppsättning kan du inte hoppa över borttagna poster. Mer information finns i IsDeleted medlemsfunktionen.

Försiktighet

Att anropa någon av Move funktionerna utlöser ett undantag om postuppsättningen inte har några poster. För att avgöra om postuppsättningen har några poster anropar IsBOF du och IsEOF.

Anmärkning

Om du anropar någon av Move funktionerna när den aktuella posten uppdateras eller läggs till går uppdateringarna förlorade utan förvarning.

Mer information om postmängdsnavigering finns i artiklarna Recordset: Scrolling (ODBC) och Recordset: Bookmarks and Absolute Positions (ODBC). Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

Exempel

Se exemplet för IsBOF.

CRecordset::MoveLast

Gör den första posten i den sista fullständiga raduppsättningen till den aktuella posten.

void MoveLast();

Anmärkningar

Om du inte har implementerat massradhämtning har postuppsättningen en raduppsättningsstorlek på 1, så MoveLast den flyttas till den sista posten i postuppsättningen.

Anmärkning

Den här medlemsfunktionen är inte giltig för postuppsättningar med endast vidarebefordran.

Anmärkning

När du går igenom en postuppsättning kan du inte hoppa över borttagna poster. Mer information finns i IsDeleted medlemsfunktionen.

Försiktighet

Att anropa någon av Move funktionerna utlöser ett undantag om postuppsättningen inte har några poster. För att avgöra om postuppsättningen har några poster anropar IsBOF du och IsEOF.

Anmärkning

Om du anropar någon av Move funktionerna när den aktuella posten uppdateras eller läggs till går uppdateringarna förlorade utan förvarning.

Mer information om postmängdsnavigering finns i artiklarna Recordset: Scrolling (ODBC) och Recordset: Bookmarks and Absolute Positions (ODBC). Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

Exempel

Se exemplet för IsBOF.

CRecordset::MoveNext

Gör den första posten i nästa raduppsättning till den aktuella posten.

void MoveNext();

Anmärkningar

Om du inte har implementerat massradhämtning har postuppsättningen en raduppsättningsstorlek på 1, så MoveNext den flyttas till nästa post.

Anmärkning

När du går igenom en postuppsättning kan du inte hoppa över borttagna poster. Mer information finns i IsDeleted medlemsfunktionen.

Försiktighet

Att anropa någon av Move funktionerna utlöser ett undantag om postuppsättningen inte har några poster. För att avgöra om postuppsättningen har några poster anropar IsBOF du och IsEOF.

Anmärkning

Vi rekommenderar också att du anropar IsEOF innan du anropar MoveNext. Om du till exempel har rullat förbi slutet av postuppsättningen IsEOF returnerar du nonzero. Ett efterföljande anrop till MoveNext skulle utlösa ett undantag.

Anmärkning

Om du anropar någon av Move funktionerna när den aktuella posten uppdateras eller läggs till går uppdateringarna förlorade utan förvarning.

Mer information om postmängdsnavigering finns i artiklarna Recordset: Scrolling (ODBC) och Recordset: Bookmarks and Absolute Positions (ODBC). Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

Exempel

Se exemplet för IsBOF.

CRecordset::MovePrev

Gör den första posten i föregående rader till den aktuella posten.

void MovePrev();

Anmärkningar

Om du inte har implementerat massradhämtning har postuppsättningen en raduppsättningsstorlek på 1, så MovePrev den flyttas till föregående post.

Anmärkning

Den här medlemsfunktionen är inte giltig för postuppsättningar med endast vidarebefordran.

Anmärkning

När du går igenom en postuppsättning kan du inte hoppa över borttagna poster. Mer information finns i IsDeleted medlemsfunktionen.

Försiktighet

Att anropa någon av Move funktionerna utlöser ett undantag om postuppsättningen inte har några poster. För att avgöra om postuppsättningen har några poster anropar IsBOF du och IsEOF.

Anmärkning

Vi rekommenderar också att du anropar IsBOF innan du anropar MovePrev. Om du till exempel har rullat före början av postuppsättningen IsBOF returnerar du nonzero. Ett efterföljande anrop till MovePrev skulle utlösa ett undantag.

Anmärkning

Om du anropar någon av Move funktionerna när den aktuella posten uppdateras eller läggs till går uppdateringarna förlorade utan förvarning.

Mer information om postmängdsnavigering finns i artiklarna Recordset: Scrolling (ODBC) och Recordset: Bookmarks and Absolute Positions (ODBC). Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

Exempel

Se exemplet för IsBOF.

CRecordset::OnSetOptions

Anropad för att ange alternativ (används vid markering) för den angivna ODBC-instruktionen.

virtual void OnSetOptions(HSTMT hstmt);

Parameterar

hstmt
För HSTMT ODBC-instruktionen vars alternativ ska anges.

Anmärkningar

Anropa OnSetOptions för att ange alternativ (används vid markering) för den angivna ODBC-instruktionen. Ramverket anropar den här medlemsfunktionen för att ange initiala alternativ för postuppsättningen. OnSetOptions avgör datakällans stöd för rullningsbara markörer och för samtidig markör och anger postuppsättningens alternativ i enlighet med detta. (Används OnSetOptions för urvalsåtgärder, OnSetUpdateOptions men används för uppdateringsåtgärder.)

Åsidosätt OnSetOptions för att ange alternativ som är specifika för drivrutinen eller datakällan. Om din datakälla till exempel har stöd för att öppna för exklusiv åtkomst kan du åsidosätta OnSetOptions för att dra nytta av den möjligheten.

Mer information om markörer finns i ODBC.

CRecordset::OnSetUpdateOptions

Anropas för att ange alternativ (används vid uppdatering) för den angivna ODBC-instruktionen.

virtual void OnSetUpdateOptions(HSTMT hstmt);

Parameterar

hstmt
För HSTMT ODBC-instruktionen vars alternativ ska anges.

Anmärkningar

Anropa OnSetUpdateOptions för att ange alternativ (används vid uppdatering) för den angivna ODBC-instruktionen. Ramverket anropar den här medlemsfunktionen när den har skapat en HSTMT för att uppdatera poster i en postuppsättning. (Medan OnSetOptions används för markeringsåtgärder, OnSetUpdateOptions används för uppdateringsåtgärder.) OnSetUpdateOptions avgör datakällans stöd för rullningsbara markörer och för markörens samtidighet och anger postuppsättningens alternativ i enlighet därmed.

Åsidosätt OnSetUpdateOptions för att ange alternativ för en ODBC-instruktion innan instruktionen används för att komma åt en databas.

Mer information om markörer finns i ODBC.

CRecordset::Open

Öppnar postuppsättningen genom att hämta tabellen eller utföra frågan som postuppsättningen representerar.

virtual BOOL Open(
    UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE,
    LPCTSTR lpszSQL = NULL,
    DWORD dwOptions = none);

Parameterar

nOpenType
Acceptera standardvärdet , AFX_DB_USE_DEFAULT_TYPEeller använd något av följande värden från enum OpenType:

  • CRecordset::dynaset En postuppsättning med dubbelriktad rullning. När postuppsättningen öppnas avgörs posternas medlemskap och ordning, men ändringar som görs av andra användare i datavärdena visas efter en hämtningsåtgärd. Dynasets kallas även för nyckeluppsättningsdrivna postuppsättningar.

  • CRecordset::snapshot En statisk postuppsättning med dubbelriktad rullning. När postuppsättningen öppnas avgörs posternas medlemskap och ordning. Hämtning av en post avgör datavärdena. Ändringar som gjorts av andra användare visas inte förrän postuppsättningen har stängts och sedan öppnats igen.

  • CRecordset::dynamic En postuppsättning med dubbelriktad rullning. Ändringar som gjorts av andra användare i medlemskaps-, beställnings- och datavärdena visas efter en hämtningsåtgärd. Många ODBC-drivrutiner stöder inte den här typen av postuppsättning.

  • CRecordset::forwardOnly En skrivskyddad postuppsättning med endast framåtrullning.

    För CRecordsetär CRecordset::snapshotstandardvärdet . Med standardvärdemekanismen kan visualiseringsguiderna för C++ interagera med både ODBC CRecordset och DAO CDaoRecordset, som har olika standardvärden.

Mer information om dessa postuppsättningstyper finns i Recordset (ODBC). Relaterad information finns i "Använda block- och rullningsbara markörer" i Windows SDK.

Försiktighet

Om den begärda typen inte stöds utlöser ramverket ett undantag.

lpszSQL
En strängpekare som innehåller något av följande:

  • En NULL pekare.

  • Namnet på en tabell.

  • En SQL-instruktion SELECT (valfritt med en SQL WHERE - eller ORDER BY -sats).

  • En CALL instruktion som anger namnet på en fördefinierad fråga (lagrad procedur). Var noga med att inte infoga blanksteg mellan klammerparentesen och nyckelordet CALL .

Mer information om den här strängen finns i tabellen och diskussionen om ClassWizards roll under avsnittet Kommentarer .

Anmärkning

Ordningen på kolumnerna i resultatuppsättningen måste matcha ordningen på RFX- eller Bulk RFX-funktionsanropen i din DoFieldExchange eller DoBulkFieldExchange funktionens åsidosättning.

dwOptions
En bitmask som kan ange en kombination av de värden som anges nedan. Vissa av dessa är ömsesidigt uteslutande. Standardvärdet är none.

  • CRecordset::none Inga alternativ har angetts. Det här parametervärdet är ömsesidigt uteslutande med alla andra värden. Som standard kan postuppsättningen uppdateras med Edit eller Delete och tillåter att nya poster läggs till med AddNew. Updatability beror på datakällan och det nOpenType alternativ som du anger. Optimering för masstillägg är inte tillgängligt. Masshämtning av rader implementeras inte. Borttagna poster hoppas inte över under postuppsättningsnavigeringen. Bokmärken är inte tillgängliga. Automatisk kontroll av felaktiga fält implementeras.

  • CRecordset::appendOnly Tillåt inte Edit eller Delete på postuppsättningen. Tillåt AddNew endast. Det här alternativet är ömsesidigt uteslutande med CRecordset::readOnly.

  • CRecordset::readOnly Öppna postuppsättningen som skrivskyddad. Det här alternativet är ömsesidigt uteslutande med CRecordset::appendOnly.

  • CRecordset::optimizeBulkAdd Använd en förberedd SQL-instruktion för att optimera tillägg av många poster samtidigt. Gäller endast om du inte använder ODBC API-funktionen SQLSetPos för att uppdatera postuppsättningen. Den första uppdateringen avgör vilka fält som är markerade som smutsiga. Det här alternativet är ömsesidigt uteslutande med CRecordset::useMultiRowFetch.

  • CRecordset::useMultiRowFetch Implementera massradhämtning för att tillåta att flera rader hämtas i en enda hämtningsåtgärd. Det här är en avancerad funktion som är utformad för att förbättra prestandan. Masspostfältutbyte stöds dock inte av ClassWizard. Det här alternativet är ömsesidigt uteslutande med CRecordset::optimizeBulkAdd. Om du anger CRecordset::useMultiRowFetchaktiveras alternativet CRecordset::noDirtyFieldCheck automatiskt (dubbel buffring är inte tillgängligt). Alternativet aktiveras automatiskt på endast framåtriktade postuppsättningar CRecordset::useExtendedFetch . Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

  • CRecordset::skipDeletedRecords Hoppa över alla borttagna poster när du navigerar genom postuppsättningen. Detta försämrar prestanda i vissa relativa hämtningar. Det här alternativet är inte giltigt för postuppsättningar med endast vidarebefordran. Om du anropar Move med parametern nRows inställd på 0, och alternativuppsättningen CRecordset::skipDeletedRecords , Move kommer att hävda. CRecordset::skipDeletedRecords liknar drivrutinsförpackningen, vilket innebär att borttagna rader tas bort från postuppsättningen. Men om drivrutinspaketen registrerar hoppar det bara över de poster som du tar bort. Den hoppar inte över poster som tagits bort av andra användare när postuppsättningen är öppen. CRecordset::skipDeletedRecords hoppar över rader som tagits bort av andra användare.

  • CRecordset::useBookmarks Kan använda bokmärken i postuppsättningen om det stöds. Bokmärken saktar ned datahämtningen men förbättrar prestandan för datanavigering. Inte giltig för postuppsättningar med endast vidarebefordran. Mer information finns i Postuppsättning: Bokmärken och absoluta positioner (ODBC).

  • CRecordset::noDirtyFieldCheck Inaktivera automatisk kontroll av smutsiga fält (dubbel buffring). Detta förbättrar prestandan. Du måste dock manuellt markera fält som smutsiga genom att anropa medlemsfunktionerna SetFieldDirty och SetFieldNull . Dubbel buffring i klassen CRecordset liknar dubbel buffring i klassen CDaoRecordset. I kan du dock CRecordsetinte aktivera dubbel buffring för enskilda fält. Du kan antingen aktivera den för alla fält eller inaktivera den för alla fält. Om du anger alternativet CRecordset::useMultiRowFetchaktiveras sedan CRecordset::noDirtyFieldCheck automatiskt, men SetFieldDirtySetFieldNull kan inte användas på postuppsättningar som implementerar massradhämtning.

  • CRecordset::executeDirect Använd inte en förberedd SQL-instruktion. För bättre prestanda anger du det här alternativet om Requery medlemsfunktionen aldrig kommer att anropas.

  • CRecordset::useExtendedFetch Implementera SQLExtendedFetch i stället för SQLFetch. Detta är utformat för att implementera massrader som hämtar endast framåtriktade postuppsättningar. Om du anger alternativet CRecordset::useMultiRowFetch för en postuppsättning med endast vidarebefordran aktiveras sedan CRecordset::useExtendedFetch automatiskt.

  • CRecordset::userAllocMultiRowBuffers Användaren allokerar lagringsbuffertar för data. Använd det här alternativet med CRecordset::useMultiRowFetch om du vill allokera din egen lagring. Annars allokerar ramverket automatiskt nödvändig lagring. Mer information finns i Recordset: Fetching Records in Bulk (ODBC). Om du CRecordset::userAllocMultiRowBuffers anger utan att CRecordset::useMultiRowFetch ange resulterar det i en misslyckad försäkran.

Returvärde

Nonzero om objektet CRecordset har öppnats, annars 0 om CDatabase::Open (om det anropas) returnerar 0.

Anmärkningar

Du måste anropa den här medlemsfunktionen för att köra frågan som definierats av postuppsättningen. Innan du anropar Openmåste du konstruera postuppsättningsobjektet.

Den här postuppsättningens anslutning till datakällan beror på hur du skapar postuppsättningen innan du anropar Open. Om du skickar ett CDatabase objekt till konstruktorn för postuppsättningen som inte har anslutits till datakällan, använder GetDefaultConnect den här medlemsfunktionen för att försöka öppna databasobjektet. Om du skickar NULL till konstruktorn för postuppsättningen skapar konstruktorn ett CDatabase objekt åt dig och Open försöker ansluta databasobjektet. Mer information om hur du stänger postuppsättningen och anslutningen under dessa varierande omständigheter Closefinns i .

Anmärkning

Åtkomst till en datakälla via ett CRecordset objekt delas alltid. CDaoRecordset Till skillnad från klassen kan du inte använda ett CRecordset objekt för att öppna en datakälla med exklusiv åtkomst.

När du anropar Open, väljer en fråga, vanligtvis en SQL-instruktion SELECT , poster baserat på kriterier som visas i följande tabell.

Parameterns lpszSQL värde Markerade poster bestäms av Exempel
NULL Strängen som returneras av GetDefaultSQL.
SQL-tabellnamn Alla kolumner i tabelllistan i DoFieldExchange eller DoBulkFieldExchange. "Customer"
Fördefinierade frågenamn (lagrad procedur) De kolumner som frågan definieras att returnera. "{call OverDueAccts}"
SELECT kolumn-lista FROM tabell-lista De angivna kolumnerna från de angivna tabellerna. "SELECT CustId, CustName FROM

Customer"

Försiktighet

Infoga inte extra blanksteg i SQL-strängen. Om du till exempel infogar blanksteg mellan klammerparentesen och nyckelordet CALL misstolkar MFC SQL-strängen som ett tabellnamn och införlivar den i en SELECT instruktion, vilket resulterar i att ett undantag genereras. På samma sätt ska du inte infoga blanksteg mellan klammerparentesen och symbolen om den fördefinierade frågan använder en utdataparameter. Slutligen får du inte infoga blanksteg före klammerparentesen i en CALL instruktion eller före nyckelordet SELECT i en SELECT -instruktion.

Den vanliga proceduren är att skicka NULL till Open. I det här fallet Open anropas GetDefaultSQL. Om du använder en härledd CRecordset klass anger GetDefaultSQL du tabellnamnen som du angav i ClassWizard. Du kan i stället ange annan information i parametern lpszSQL .

Oavsett vad du skickar Open skapar du en slutlig SQL-sträng för frågan (strängen kan ha SQL WHERE och ORDER BY satser som läggs till i strängen lpszSQL som du har skickat) och kör sedan frågan. Du kan undersöka den konstruerade strängen genom att anropa GetSQL efter att ha anropat Open. Mer information om hur postuppsättningen konstruerar en SQL-instruktion och väljer poster finns i Recordset: How Recordsets Select Records (ODBC).

Fältdatamedlemmarna i din postuppsättningsklass är bundna till kolumnerna i de data som valts. Om några poster returneras blir den första posten den aktuella posten.

Om du vill ange alternativ för postuppsättningen, till exempel ett filter eller en sortering, anger du dessa när du har skapat postuppsättningsobjektet men innan du anropar Open. Om du vill uppdatera posterna i postuppsättningen när postuppsättningen redan är öppen anropar du Requery.

Mer information, inklusive fler exempel, finns i Recordset (ODBC), Recordset: How Recordsets Select Records (ODBC), and Recordset: Creating and Closing Recordsets (ODBC).

Exempel

Följande kodexempel visar olika former av anropet Open .

// rsSnap, rsLName, and rsDefault are CRecordset or CRecordset-derived 
// objects

// Open rs using the default SQL statement, implement bookmarks, and turn 
// off automatic dirty field checking
rsSnap.Open(CRecordset::snapshot, NULL, CRecordset::useBookmarks |
   CRecordset::noDirtyFieldCheck);

// Pass a complete SELECT statement and open as a dynaset
rsLName.Open(CRecordset::dynaset, _T("Select L_Name from Customer"));

// Accept all defaults
rsDefault.Open();

CRecordset::RefreshRowset

Uppdaterar data och status för en rad i den aktuella raduppsättningen.

void RefreshRowset(
    WORD wRow,
    WORD wLockType = SQL_LOCK_NO_CHANGE);

Parameterar

wRow
En rads enbaserade position i den aktuella raduppsättningen. Det här värdet kan variera från noll till storleken på raduppsättningen.

wLockType
Ett värde som anger hur raden ska låsas när den har uppdaterats. Mer information finns i Kommentarer.

Anmärkningar

Om du skickar värdet noll för wRowuppdateras varje rad i raduppsättningen.

Om du vill använda RefreshRowsetmåste du ha implementerat massradhämtning genom att CRecordset::useMulitRowFetch ange alternativet i Open medlemsfunktionen.

RefreshRowset anropar ODBC API-funktionen SQLSetPos. Parametern wLockType anger låstillståndet för raden när SQLSetPos den har körts. I följande tabell beskrivs möjliga värden för wLockType.

wLockType (på engelska) Beskrivning
SQL_LOCK_NO_CHANGE (standardvärdet) Drivrutinen eller datakällan ser till att raden är i samma låsta eller olåst tillstånd som den var innan RefreshRowset anropades.
SQL_LOCK_EXCLUSIVE Drivrutinen eller datakällan låser raden exklusivt. Alla datakällor stöder inte den här typen av lås.
SQL_LOCK_UNLOCK Drivrutinen eller datakällan låser upp raden. Alla datakällor stöder inte den här typen av lås.

Mer information om SQLSetPosfinns i Windows SDK. Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

CRecordset::Requery

Återskapar (uppdaterar) en postuppsättning.

virtual BOOL Requery();

Returvärde

Nonzero om postuppsättningen har återskapats. annars 0.

Anmärkningar

Om några poster returneras blir den första posten den aktuella posten.

För att postuppsättningen ska återspegla de tillägg och borttagningar som du eller andra användare gör i datakällan måste du återskapa postuppsättningen genom att anropa Requery. Om postuppsättningen är en dynaset återspeglar den automatiskt uppdateringar som du eller andra användare gör i sina befintliga poster (men inte tillägg). Om postuppsättningen är en ögonblicksbild måste du anropa Requery för att återspegla ändringar av andra användare och tillägg och borttagningar.

För antingen en dynaset eller en ögonblicksbild anropar Requery du när du vill återskapa postuppsättningen med hjälp av ett nytt filter eller en ny sortering eller nya parametervärden. Ange den nya filter- eller sorteringsegenskapen genom att tilldela nya värden till m_strFilter och m_strSort innan du anropar Requery. Ange nya parametrar genom att tilldela nya värden till parameterdatamedlemmar innan du anropar Requery. Om filter- och sorteringssträngarna är oförändrade kan du återanvända frågan, vilket förbättrar prestandan.

Om försöket att återskapa postuppsättningen misslyckas stängs postuppsättningen. Innan du anropar Requerykan du avgöra om postuppsättningen kan ställas in igen genom att anropa CanRestart medlemsfunktionen. CanRestart garanterar inte att det kommer att Requery lyckas.

Försiktighet

Ring Requery bara efter att du har ringt Open.

Exempel

Det här exemplet återskapar en postuppsättning för att tillämpa en annan sorteringsordning.

CCustomer rsCustSet(&m_dbCust);

// Open the recordset
rsCustSet.Open();

// Use the recordset ...

// Set the sort order and Requery the recordset
rsCustSet.m_strSort = _T("L_Name, ContactFirstName");
if (!rsCustSet.CanRestart())
return;    // Unable to requery

if (!rsCustSet.Requery())
// Requery failed, so take action
AfxMessageBox(_T("Requery failed!"));

CRecordset::SetAbsolutePosition

Placerar postuppsättningen på posten som motsvarar det angivna postnumret.

void SetAbsolutePosition(long nRows);

Parameterar

nRows
Den enbaserade ordningspositionen för den aktuella posten i postuppsättningen.

Anmärkningar

SetAbsolutePosition flyttar den aktuella postpekaren baserat på den här ordningstalspositionen.

Anmärkning

Den här medlemsfunktionen är inte giltig för postuppsättningar med endast vidarebefordran.

För ODBC-postuppsättningar refererar en absolut positionsinställning på 1 till den första posten i postuppsättningen. en inställning på 0 refererar till bof-positionen (beginning-of-file).

Du kan också skicka negativa värden till SetAbsolutePosition. I det här fallet utvärderas postuppsättningens position från slutet av postuppsättningen. Flyttar till exempel SetAbsolutePosition( -1 ) den aktuella postpekaren till den sista posten i postuppsättningen.

Anmärkning

Absolut position är inte avsedd att användas som surrogatpostnummer. Bokmärken är fortfarande det rekommenderade sättet att behålla och återgå till en viss position, eftersom en posts position ändras när föregående poster tas bort. Dessutom kan du inte vara säker på att en viss post har samma absoluta position om postuppsättningen återskapas igen eftersom ordningen på enskilda poster i en postuppsättning inte garanteras om den inte skapas med en SQL-instruktion med hjälp av en ORDER BY -sats.

Mer information om postmängdsnavigering och bokmärken finns i artiklarna Recordset: Scrolling (ODBC) och Recordset: Bookmarks and Absolute Positions (ODBC).

CRecordset::SetBookmark

Placerar postuppsättningen på posten som innehåller det angivna bokmärket.

void SetBookmark(const CDBVariant& varBookmark);

Parameterar

varBookmark
En referens till ett CDBVariant objekt som innehåller bokmärkesvärdet för en specifik post.

Anmärkningar

Om du vill ta reda på om bokmärken stöds på postuppsättningen anropar du CanBookmark. Om du vill göra bokmärken tillgängliga om de stöds måste du ange CRecordset::useBookmarks alternativet i parametern dwOptions för Open medlemsfunktionen.

Anmärkning

Om bokmärken inte stöds eller inte är tillgängliga resulterar anrop SetBookmark i att ett undantag utlöses. Bokmärken stöds inte på postuppsättningar med endast vidarebefordran.

Om du först vill hämta bokmärket för den aktuella posten anropar du GetBookmark, vilket sparar bokmärkesvärdet till ett CDBVariant objekt. Senare kan du återgå till posten genom att anropa SetBookmark med det sparade bokmärkesvärdet.

Anmärkning

Efter vissa postuppsättningsåtgärder bör du kontrollera bokmärkets beständighet innan du anropar SetBookmark. Om du till exempel hämtar ett bokmärke med GetBookmark och sedan anropar Requerykanske bokmärket inte längre är giltigt. Ring CDatabase::GetBookmarkPersistence för att kontrollera om du kan ringa SetBookmarkpå ett säkert sätt.

Mer information om bokmärken och postmängdsnavigering finns i artiklarna Postuppsättning: Bokmärken och absoluta positioner (ODBC) och Postuppsättning: Rullning (ODBC).

CRecordset::SetFieldDirty

Flaggar en fältdatamedlem i postuppsättningen som ändrad eller oförändrad.

void SetFieldDirty(void* pv, BOOL bDirty = TRUE);

Parameterar

pv
Innehåller adressen till en fältdatamedlem i postuppsättningen eller NULL. Om NULLflaggas alla fältdatamedlemmar i postuppsättningen. (C++ NULL är inte samma sak som Null i databasterminologin, vilket innebär att "inte har något värde".

bDirty
TRUE om fältdatamedlemmen ska flaggas som "smutsig" (ändrad). Annars FALSE om fältdatamedlemmen ska flaggas som "ren" (oförändrad).

Anmärkningar

Om fält markeras som oförändrade ser du till att fältet inte uppdateras och resulterar i mindre SQL-trafik.

Anmärkning

Den här medlemsfunktionen gäller inte för postuppsättningar som använder massradhämtning. Om du har implementerat massradhämtning resulterar det SetFieldDirty i ett misslyckat påstående. Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

Ramverket markerar ändrade fältdatamedlemmar för att säkerställa att de skrivs till posten i datakällan av rfx-mekanismen (record field exchange). Om du ändrar värdet för ett fält blir fältet vanligtvis smutsigt automatiskt, så du behöver sällan anropa SetFieldDirty dig själv, men du kanske ibland vill se till att kolumnerna uttryckligen uppdateras eller infogas oavsett vilket värde som finns i fältdatamedlemmen.

Försiktighet

Anropa endast den här medlemsfunktionen när du har anropat Edit eller AddNew.

Om du använder NULL för det första argumentet i funktionen tillämpas funktionen endast på outputColumn fält, inte param fält. Till exempel anropet

SetFieldNull(NULL);

anger endast outputColumn fält till NULL; param fält påverkas inte.

Om du vill arbeta med param fält måste du ange den faktiska adressen för den person param som du vill arbeta med, till exempel:

SetFieldNull(&m_strParam);

Det innebär att du inte kan ange alla param fält till NULL, som du kan med outputColumn fält.

CRecordset::SetFieldNull

Flaggar en fältdatamedlem i postuppsättningen som Null (specifikt utan värde) eller som icke-Null.

void SetFieldNull(void* pv, BOOL bNull = TRUE);

Parameterar

pv
Innehåller adressen till en fältdatamedlem i postuppsättningen eller NULL. Om NULLflaggas alla fältdatamedlemmar i postuppsättningen. (C++ NULL är inte samma sak som Null i databasterminologin, vilket innebär att "inte har något värde".

bNull
Nonzero om fältdatamedlemmen ska flaggas som utan värde (Null). Annars 0 om fältdatamedlemmen ska flaggas som icke-Null.

Anmärkningar

När du lägger till en ny post i en postuppsättning, är alla fältdatamedlemmar ursprungligen inställda på ett Null-värde och flaggas som "smutsiga" (ändrade). När du hämtar en post från en datakälla har dess kolumner antingen redan värden eller null.

Anmärkning

Anropa inte den här medlemsfunktionen på postuppsättningar som använder massradhämtning. Om du har implementerat massradhämtning resulterar anropet SetFieldNull i ett misslyckat påstående. Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

Om du specifikt vill ange ett fält för den aktuella posten som inte har ett värde anropar du SetFieldNull med bNull inställt på för att TRUE flagga det som Null. Om ett fält tidigare har markerats som Null och du nu vill ge det ett värde anger du dess nya värde. Du behöver inte ta bort Null-flaggan med SetFieldNull. Om du vill avgöra om fältet tillåts vara Null anropar du IsFieldNullable.

Försiktighet

Anropa endast den här medlemsfunktionen när du har anropat Edit eller AddNew.

Om du använder NULL för det första argumentet i funktionen tillämpas funktionen endast på outputColumn fält, inte param fält. Till exempel anropet

SetFieldNull(NULL);

anger endast outputColumn fält till NULL; param fält påverkas inte.

Om du vill arbeta med param fält måste du ange den faktiska adressen för den person param som du vill arbeta med, till exempel:

SetFieldNull(&m_strParam);

Det innebär att du inte kan ange alla param fält till NULL, som du kan med outputColumn fält.

Anmärkning

När du anger parametrar till Null resulterar ett anrop till SetFieldNull innan postuppsättningen öppnas i ett intyg. I det här fallet anropar du SetParamNull.

SetFieldNull implementeras via DoFieldExchange.

CRecordset::SetLockingMode

Anger låsningsläget till "optimistisk" låsning (standard) eller "pessimistisk" låsning. Avgör hur poster låses för uppdateringar.

void SetLockingMode(UINT nMode);

Parameterar

nMode
Innehåller något av följande värden från enum LockMode:

  • optimistic Optimistisk låsning låser posten som uppdateras endast under anropet till Update.

  • pessimistic Pessimistisk låsning låser posten så snart den Edit anropas och håller den låst tills anropet Update har slutförts eller du flyttar till en ny post.

Anmärkningar

Anropa den här medlemsfunktionen om du behöver ange vilken av två postlåsningsstrategier som postuppsättningen använder för uppdateringar. Som standard är optimisticlåsläget för en postuppsättning . Du kan ändra det till en mer försiktig pessimistic låsningsstrategi. Anropa SetLockingMode när du har skapat och öppna postuppsättningsobjektet men innan du anropar Edit.

CRecordset::SetParamNull

Flaggar en parameter som Null (specifikt utan värde) eller som icke-Null.

void SetParamNull(
    int nIndex,
    BOOL bNull = TRUE);

Parameterar

nIndex
Parameterns nollbaserade index.

bNull
Om TRUE (standardvärdet) flaggas parametern som Null. Annars flaggas parametern som icke-Null.

Anmärkningar

Till skillnad från SetFieldNullkan du anropa SetParamNull innan du har öppnat postuppsättningen.

SetParamNull används vanligtvis med fördefinierade frågor (lagrade procedurer).

CRecordset::SetRowsetCursorPosition

Flyttar markören till en rad i den aktuella raduppsättningen.

void SetRowsetCursorPosition(WORD wRow, WORD wLockType = SQL_LOCK_NO_CHANGE);

Parameterar

wRow
En rads enbaserade position i den aktuella raduppsättningen. Det här värdet kan variera från 1 till storleken på raduppsättningen.

wLockType
Värde som anger hur du låser raden när den har uppdaterats. Mer information finns i Kommentarer.

Anmärkningar

När massrader hämtas hämtas poster av raduppsättningar, där den första posten i den hämtade raduppsättningen är den aktuella posten. Om du vill göra en annan post i raduppsättningen till den aktuella posten anropar du SetRowsetCursorPosition. Du kan till exempel kombinera SetRowsetCursorPosition med GetFieldValue medlemsfunktionen för att dynamiskt hämta data från alla poster i postuppsättningen.

Om du vill använda SetRowsetCursorPositionmåste du ha implementerat massradhämtning genom att CRecordset::useMultiRowFetch ange alternativet för parametern dwOptions i Open medlemsfunktionen.

SetRowsetCursorPosition anropar ODBC API-funktionen SQLSetPos. Parametern wLockType anger låstillståndet för raden när SQLSetPos den har körts. I följande tabell beskrivs möjliga värden för wLockType.

wLockType Beskrivning
SQL_LOCK_NO_CHANGE (standardvärdet) Drivrutinen eller datakällan ser till att raden är i samma låsta eller olåst tillstånd som den var innan SetRowsetCursorPosition anropades.
SQL_LOCK_EXCLUSIVE Drivrutinen eller datakällan låser raden exklusivt. Alla datakällor stöder inte den här typen av lås.
SQL_LOCK_UNLOCK Drivrutinen eller datakällan låser upp raden. Alla datakällor stöder inte den här typen av lås.

Mer information om SQLSetPosfinns i Windows SDK. Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

CRecordset::SetRowsetSize

Anger antalet poster som du vill hämta under en hämtning.

virtual void SetRowsetSize(DWORD dwNewRowsetSize);

Parameterar

dwNewRowsetSize
Antalet rader som ska hämtas under en viss hämtning.

Anmärkningar

Den här virtuella medlemsfunktionen anger hur många rader du vill hämta under en enda hämtning när du använder massradhämtning. Om du vill implementera massuthämtning av rader måste du ange CRecordset::useMultiRowFetch alternativet i parametern dwOptions för Open medlemsfunktionen.

Anmärkning

Om du anropar SetRowsetSize utan att implementera massuthämtning av rad resulterar det i en misslyckad försäkran.

Anropa SetRowsetSize innan du anropar Open för att först ange raduppsättningens storlek för postuppsättningen. Standardstorleken för raduppsättningar vid implementering av massradhämtning är 25.

Anmärkning

Var försiktig när du anropar SetRowsetSize. Om du manuellt allokerar lagring för data (enligt CRecordset::userAllocMultiRowBuffers alternativet för parametern dwOptions i Open) bör du kontrollera om du behöver omallokera dessa lagringsbuffertar när du anropar SetRowsetSize, men innan du utför någon markörnavigeringsåtgärd.

Om du vill hämta den aktuella inställningen för raduppsättningens storlek anropar du GetRowsetSize.

Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

CRecordset::Update

Slutför en AddNew eller Edit åtgärd genom att spara nya eller redigerade data i datakällan.

virtual BOOL Update();

Returvärde

Nonzero om en post har uppdaterats. annars 0 om inga kolumner har ändrats. Om inga poster uppdaterades eller om fler än en post uppdaterades genereras ett undantag. Ett undantag utlöses också för andra fel i datakällan.

Anmärkningar

Anropa den här medlemsfunktionen efter ett anrop till AddNew funktionen eller Edit medlemsfunktionen. Det här anropet AddNew krävs för att slutföra åtgärden eller Edit .

Anmärkning

Om du har implementerat massradhämtning kan du inte anropa Update. Detta resulterar i ett misslyckat påstående. Även om klassen CRecordset inte tillhandahåller någon mekanism för att uppdatera massrader med data kan du skriva egna funktioner med hjälp av ODBC API-funktionen SQLSetPos. Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).

Både AddNew och Edit förbereder en redigeringsbuffert där de tillagda eller redigerade data placeras för att spara till datakällan. Update sparar data. Endast de fält som har markerats eller identifierats som ändrade uppdateras.

Om datakällan stöder transaktioner kan du göra anropet Update (och dess motsvarande AddNew eller Edit anrop) del av en transaktion. Mer information om transaktioner finns i Transaktion (ODBC).

Försiktighet

Om du anropar Update utan att först anropa antingen AddNew eller Edit, Update genererar en CDBException. Om du anropar AddNew eller Editmåste du anropa Update innan du anropar en Move åtgärd eller innan du stänger postuppsättningen eller datakällans anslutning. Annars går dina ändringar förlorade utan avisering.

Mer information om hur du hanterar Update fel finns i Recordset: How Recordsets Update Records (ODBC).

Exempel

se Transaktion: Utföra en transaktion i en postuppsättning (ODBC).

Se även

Klassen CObject
Hierarkidiagram
Klassen CDatabase
Klassen CRecordView