Condividi tramite


Classe CDaoRecordset

Rappresenta un set di record selezionati da un'origine dati.

Nota

L'oggetto DAO (Data Access Object) è supportato tramite Office 2013. DAO 3.6 è la versione finale ed è obsoleta.

Sintassi

class CDaoRecordset : public CObject

Membri

Costruttori pubblici

Nome Descrizione
CDaoRecordset::CDaoRecordset Costruisce un oggetto CDaoRecordset.

Metodi pubblici

Nome Descrizione
CDaoRecordset::AddNew Prepara l'aggiunta di un nuovo record. Chiamare Update per completare l'aggiunta.
CDaoRecordset::CanAppend Restituisce un valore diverso da zero se è possibile aggiungere nuovi record al recordset tramite la funzione membro AddNew .
CDaoRecordset::CanBookmark Restituisce un valore diverso da zero se il recordset supporta i segnalibri.
CDaoRecordset::CancelUpdate Annulla gli aggiornamenti in sospeso a causa di un'operazione Modifica o AggiungiNuovo .
CDaoRecordset::CanRestart Restituisce un valore diverso da zero se è possibile chiamare Requery per eseguire nuovamente la query del recordset.
CDaoRecordset::CanScroll Restituisce un valore diverso da zero se è possibile scorrere i record.
CDaoRecordset::CanTransact Restituisce un valore diverso da zero se l'origine dati supporta le transazioni.
CDaoRecordset::CanUpdate Restituisce un valore diverso da zero se il recordset può essere aggiornato (è possibile aggiungere, aggiornare o eliminare record).
CDaoRecordset::Close Chiude il recordset.
CDaoRecordset::D elete Elimina il record corrente dal recordset. È necessario scorrere in modo esplicito fino a un altro record dopo l'eliminazione.
CDaoRecordset::D oFieldExchange Chiamato per scambiare dati (in entrambe le direzioni) tra i membri dati del campo del recordset e il record corrispondente nell'origine dati. Implementa lo scambio di campi dei record DAO (DFX).
CDaoRecordset::Edit Prepara le modifiche al record corrente. Chiamare Update per completare la modifica.
CDaoRecordset::FillCache Riempie tutti o una parte di una cache locale per un oggetto recordset che contiene dati da un'origine dati ODBC.
CDaoRecordset::Find Individua la prima, la posizione successiva, precedente o l'ultima di una determinata stringa in un recordset di tipo dynaset che soddisfa i criteri specificati e lo imposta come record corrente.
CDaoRecordset::FindFirst Individua il primo record in un recordset di tipo dynaset o snapshot che soddisfa i criteri specificati e lo rende il record corrente.
CDaoRecordset::FindLast Individua l'ultimo record in un recordset di tipo dynaset o snapshot che soddisfa i criteri specificati e lo rende il record corrente.
CDaoRecordset::FindNext Individua il record successivo in un recordset di tipo dynaset o snapshot che soddisfa i criteri specificati e lo rende il record corrente.
CDaoRecordset::FindPrev Individua il record precedente in un recordset di tipo dynaset o snapshot che soddisfa i criteri specificati e lo rende il record corrente.
CDaoRecordset::GetAbsolutePosition Restituisce il numero di record del record corrente di un oggetto recordset.
CDaoRecordset::GetBookmark Restituisce un valore che rappresenta il segnalibro in un record.
CDaoRecordset::GetCacheSize Restituisce un valore che specifica il numero di record in un recordset di tipo dynaset contenente i dati da memorizzare nella cache locale da un'origine dati ODBC.
CDaoRecordset::GetCacheStart Restituisce un valore che specifica il segnalibro del primo record nel recordset da memorizzare nella cache.
CDaoRecordset::GetCurrentIndex Restituisce un oggetto CString contenente il nome dell'indice utilizzato più di recente in un oggetto di tipo CDaoRecordsettabella indicizzato.
CDaoRecordset::GetDateCreated Restituisce la data e l'ora di creazione della tabella di base sottostante un CDaoRecordset oggetto
CDaoRecordset::GetDateLastUpdated Restituisce la data e l'ora della modifica più recente apportata alla progettazione di una tabella di base sottostante un CDaoRecordset oggetto .
CDaoRecordset::GetDefaultDBName Restituisce il nome dell'origine dati predefinita.
CDaoRecordset::GetDefaultSQL Chiamato per ottenere la stringa SQL predefinita da eseguire.
CDaoRecordset::GetEditMode Restituisce un valore che indica lo stato di modifica per il record corrente.
CDaoRecordset::GetFieldCount Restituisce un valore che rappresenta il numero di campi in un recordset.
CDaoRecordset::GetFieldInfo Restituisce tipi specifici di informazioni sui campi nel recordset.
CDaoRecordset::GetFieldValue Restituisce il valore di un campo in un recordset.
CDaoRecordset::GetIndexCount Recupera il numero di indici in una tabella sottostante un recordset.
CDaoRecordset::GetIndexInfo Restituisce vari tipi di informazioni su un indice.
CDaoRecordset::GetLastModifiedBookmark Utilizzato per determinare il record aggiunto o aggiornato più di recente.
CDaoRecordset::GetLockingMode Restituisce un valore che indica il tipo di blocco attivo durante la modifica.
CDaoRecordset::GetName Restituisce un oggetto CString contenente il nome del recordset.
CDaoRecordset::GetParamValue Recupera il valore corrente del parametro specificato archiviato nell'oggetto DAOParameter sottostante.
CDaoRecordset::GetPercentPosition Restituisce la posizione del record corrente come percentuale del numero totale di record.
CDaoRecordset::GetRecordCount Restituisce il numero di record a cui si accede in un oggetto recordset.
CDaoRecordset::GetSQL Ottiene la stringa SQL utilizzata per selezionare i record per il recordset.
CDaoRecordset::GetType Chiamato per determinare il tipo di recordset: table-type, dynaset-type o snapshot-type.
CDaoRecordset::GetValidationRule Restituisce un oggetto CString contenente il valore che convalida i dati durante l'immissione in un campo.
CDaoRecordset::GetValidationText Recupera il testo visualizzato quando una regola di convalida non è soddisfatta.
CDaoRecordset::IsBOF Restituisce un valore diverso da zero se il recordset è stato posizionato prima del primo record. Non esiste alcun record corrente.
CDaoRecordset::IsDeleted Restituisce un valore diverso da zero se il recordset è posizionato su un record eliminato.
CDaoRecordset::IsEOF Restituisce un valore diverso da zero se il recordset è stato posizionato dopo l'ultimo record. Non esiste alcun record corrente.
CDaoRecordset::IsFieldDirty Restituisce un valore diverso da zero se il campo specificato nel record corrente è stato modificato.
CDaoRecordset::IsFieldNull Restituisce un valore diverso da zero se il campo specificato nel record corrente è Null (senza alcun valore).
CDaoRecordset::IsFieldNullable Restituisce un valore diverso da zero se il campo specificato nel record corrente può essere impostato su Null (senza valore).
CDaoRecordset::IsOpen Restituisce un valore diverso da zero se Open è stato chiamato in precedenza.
CDaoRecordset::Move Posiziona il recordset su un numero specificato di record dal record corrente in entrambe le direzioni.
CDaoRecordset::MoveFirst Posiziona il record corrente sul primo record del recordset.
CDaoRecordset::MoveLast Posiziona il record corrente sull'ultimo record del recordset.
CDaoRecordset::MoveNext Posiziona il record corrente sul record successivo nell'oggetto recordset .
CDaoRecordset::MovePrev Posiziona il record corrente sul record precedente nel recordset.
CDaoRecordset::Open Crea un nuovo recordset da una tabella, un dynaset o uno snapshot.
CDaoRecordset::Requery Esegue di nuovo la query del recordset per aggiornare i record selezionati.
CDaoRecordset::Seek Individua il record in un oggetto recordset di tipo tabella indicizzato che soddisfa i criteri specificati per l'indice corrente e lo imposta come record corrente.
CDaoRecordset::SetAbsolutePosition Imposta il numero di record del record corrente di un oggetto recordset.
CDaoRecordset::SetBookmark Posiziona il recordset su un record contenente il segnalibro specificato.
CDaoRecordset::SetCacheSize Imposta un valore che specifica il numero di record in un recordset di tipo dynaset contenente i dati da memorizzare nella cache locale da un'origine dati ODBC.
CDaoRecordset::SetCacheStart Imposta un valore che specifica il segnalibro del primo record nel recordset da memorizzare nella cache.
CDaoRecordset::SetCurrentIndex Chiamato per impostare un indice su un recordset di tipo tabella.
CDaoRecordset::SetFieldDirty Contrassegna il campo specificato nel record corrente come modificato.
CDaoRecordset::SetFieldNull Imposta il valore del campo specificato nel record corrente su Null (senza alcun valore).
CDaoRecordset::SetFieldValue Imposta il valore di un campo in un recordset.
CDaoRecordset::SetFieldValueNull Imposta il valore di un campo in un recordset su Null. (senza valore).
CDaoRecordset::SetLockingMode Imposta un valore che indica il tipo di blocco da applicare durante la modifica.
CDaoRecordset::SetParamValue Imposta il valore corrente del parametro specificato archiviato nell'oggetto DAOParameter sottostante
CDaoRecordset::SetParamValueNull Imposta il valore corrente del parametro specificato su Null (senza valore).
CDaoRecordset::SetPercentPosition Imposta la posizione del record corrente su una posizione corrispondente a una percentuale del numero totale di record in un recordset.
CDaoRecordset::Update Completa un'operazione AddNew o Edit salvando i dati nuovi o modificati nell'origine dati.

Membri dati pubblici

Nome Descrizione
CDaoRecordset::m_bCheckCacheForDirtyFields Contiene un flag che indica se i campi vengono contrassegnati automaticamente come modificati.
CDaoRecordset::m_nFields Contiene il numero di membri dati del campo nella classe recordset e il numero di colonne selezionate dal recordset dall'origine dati.
CDaoRecordset::m_nParams Contiene il numero di membri dati dei parametri nella classe recordset, ovvero il numero di parametri passati con la query del recordset
CDaoRecordset::m_pDAORecordset Puntatore all'interfaccia DAO sottostante l'oggetto recordset.
CDaoRecordset::m_pDatabase Database di origine per questo set di risultati. Contiene un puntatore a un oggetto CDaoDatabase .
CDaoRecordset::m_strFilter Contiene una stringa usata per costruire un'istruzione SQL WHERE .
CDaoRecordset::m_strSort Contiene una stringa utilizzata per costruire un'istruzione SQL ORDER BY .

Osservazioni:

Gli oggetti "recordset", noti come "recordset", CDaoRecordset sono disponibili nelle tre forme seguenti:

  • I recordset di tipo tabella rappresentano una tabella di base che è possibile usare per esaminare, aggiungere, modificare o eliminare record da una singola tabella di database.

  • I recordset di tipo Dynaset sono il risultato di una query che può avere record aggiornabili. Questi recordset sono un set di record che è possibile usare per esaminare, aggiungere, modificare o eliminare record da una tabella o da tabelle di database sottostanti. I recordset di tipo Dynaset possono contenere campi da una o più tabelle di un database.

  • I recordset di tipo snapshot sono una copia statica di un set di record che è possibile usare per trovare dati o generare report. Questi recordset possono contenere campi di una o più tabelle in un database, ma non possono essere aggiornati.

Ogni forma di recordset rappresenta un set di record fissi al momento dell'apertura del recordset. Quando si scorre fino a un record in un recordset di tipo tabella o in un recordset di tipo dynaset, riflette le modifiche apportate al record dopo l'apertura del recordset, da altri utenti o da altri recordset nell'applicazione. Non è possibile aggiornare un recordset di tipo snapshot. È possibile usare CDaoRecordset direttamente o derivare una classe recordset specifica dell'applicazione da CDaoRecordset. È quindi possibile:

  • Scorrere i record.

  • Impostare un indice e cercare rapidamente i record usando Seek (solo recordset di tipo tabella).

  • Trovare record basati su un confronto tra stringhe: "<", "<=", "=", ">=" o ">" (recordset di tipo dynaset e set di record di tipo snapshot).

  • Aggiornare i record e specificare una modalità di blocco ,ad eccezione dei recordset di tipo snapshot.

  • Filtrare il recordset per vincolare i record selezionati da quelli disponibili nell'origine dati.

  • Ordinare il recordset.

  • Parametrizzare il recordset per personalizzarne la selezione con informazioni non note fino al runtime.

La classe CDaoRecordset fornisce un'interfaccia simile a quella della classe CRecordset. La differenza principale è che la classe CDaoRecordset accede ai dati tramite un oggetto DAO (Data Access Object) basato su OLE. La classe CRecordset accede a DBMS tramite ODBC (Open Database Connectivity) e un driver ODBC per tale DBMS.

Nota

Le classi di database DAO sono distinte dalle classi di database MFC basate su ODBC (Open Database Connectivity). Tutti i nomi delle classi di database DAO hanno il prefisso "CDao". È comunque possibile accedere alle origini dati ODBC con le classi DAO; Le classi DAO offrono in genere funzionalità superiori perché sono specifiche del motore di database Microsoft Jet.

È possibile usare CDaoRecordset direttamente o derivare una classe da CDaoRecordset. Per usare una classe recordset in entrambi i casi, aprire un database e costruire un oggetto recordset, passando il costruttore un puntatore all'oggetto CDaoDatabase . È anche possibile costruire un CDaoRecordset oggetto e consentire a MFC di creare automaticamente un oggetto temporaneo CDaoDatabase . Chiamare quindi la funzione membro Open del recordset, specificando se l'oggetto è un recordset di tipo tabella, un recordset di tipo dynaset o un recordset di tipo snapshot. La chiamata Open seleziona i dati dal database e recupera il primo record.

Utilizzare le funzioni membro dell'oggetto e i membri dati per scorrere i record e operare su di essi. Le operazioni disponibili dipendono dal fatto che l'oggetto sia un recordset di tipo tabella, un recordset di tipo dynaset o un recordset di tipo snapshot e se sia aggiornabile o di sola lettura. Ciò dipende dalla funzionalità del database o dell'origine dati ODBC (Open Database Connectivity). Per aggiornare i record che potrebbero essere stati modificati o aggiunti dopo la Open chiamata, chiamare la funzione membro Requery dell'oggetto. Chiamare la funzione membro dell'oggetto Close ed eliminare definitivamente l'oggetto al termine dell'operazione.

CDaoRecordset usa lo scambio di campi di record DAO (DFX) per supportare la lettura e l'aggiornamento dei campi di record tramite membri C++ indipendenti dai tipi della CDaoRecordset classe derivata o CDaoRecordset. È anche possibile implementare l'associazione dinamica delle colonne in un database senza usare il meccanismo DFX usando GetFieldValue e SetFieldValue.

Per informazioni correlate, vedere l'argomento "Oggetto Recordset" nella Guida di DAO.

Gerarchia di ereditarietà

CObject

CDaoRecordset

Requisiti

Intestazione: afxdao.h

CDaoRecordset::AddNew

Chiamare questa funzione membro per aggiungere un nuovo record a un recordset di tipo tabella o dynaset.

virtual void AddNew();

Osservazioni:

I campi del record sono inizialmente Null. Nella terminologia del database Null significa "senza valore" e non è uguale a NULL in C++. Per completare l'operazione, è necessario chiamare la funzione membro Update . Update salva le modifiche apportate all'origine dati.

Attenzione

Se si modifica un record e quindi si scorre fino a un altro record senza chiamare Update, le modifiche andranno perse senza alcun avviso.

Se si aggiunge un record a un recordset di tipo dynaset chiamando AddNew, il record è visibile nel recordset e incluso nella tabella sottostante in cui diventa visibile a tutti i nuovi CDaoRecordset oggetti.

La posizione del nuovo record dipende dal tipo di recordset:

  • In un recordset di tipo dynaset, in cui il nuovo record viene inserito non è garantito. Questo comportamento è stato modificato con Microsoft Jet 3.0 per motivi di prestazioni e concorrenza. Se l'obiettivo è quello di creare il record corrente appena aggiunto, ottenere il segnalibro dell'ultimo record modificato e passare al segnalibro:
rs.SetBookmark(rs.GetLastModifiedBookmark());
  • In un recordset di tipo tabella per il quale è stato specificato un indice, i record vengono restituiti nella posizione corretta nell'ordinamento. Se non è stato specificato alcun indice, i nuovi record vengono restituiti alla fine del recordset.

Il record corrente prima dell'utilizzo AddNew rimane corrente. Se si desidera rendere corrente il nuovo record e il recordset supporta i segnalibri, chiamare SetBookmark al segnalibro identificato dall'impostazione della proprietà LastModified dell'oggetto recordset DAO sottostante. Questa operazione è utile per determinare il valore per i campi contatore (incremento automatico) in un record aggiunto. Per altre informazioni, vedere GetLastModifiedBookmark.

Se il database supporta le transazioni, è possibile eseguire la AddNew chiamata come parte di una transazione. Per altre informazioni sulle transazioni, vedere classe CDaoWorkspace. È necessario chiamare CDaoWorkspace::BeginTrans prima di chiamare AddNew.

Non è possibile chiamare AddNew per un recordset la cui Open funzione membro non è stata chiamata. Viene CDaoException generata un'eccezione se si chiama AddNew per un recordset che non può essere aggiunto. È possibile determinare se il recordset è aggiornabile chiamando CanAppend.

Il framework contrassegna i membri dei dati dei campi modificati per assicurarsi che vengano scritti nel record nell'origine dati dal meccanismo DFX (DAO Record Field Exchange). La modifica del valore di un campo imposta in genere automaticamente il campo dirty, quindi raramente sarà necessario chiamare SetFieldDirty manualmente, ma a volte potrebbe essere necessario assicurarsi che le colonne vengano aggiornate o inserite in modo esplicito indipendentemente dal valore presente nel membro dati del campo. Il meccanismo DFX usa anche l'uso di PSEUDO NULL. Per altre informazioni, vedere CDaoFieldExchange::m_nOperation.

Se il meccanismo di doppio buffering non viene usato, la modifica del valore del campo non imposta automaticamente il campo come dirty. In questo caso, è necessario impostare in modo esplicito il campo dirty. Il flag contenuto in m_bCheckCacheForDirtyFields controlla questo controllo automatico dei campi.

Nota

Se i record vengono memorizzati nel doppio buffer ,ovvero il controllo automatico dei campi è abilitato, la chiamata CancelUpdate ripristina le variabili membro ai valori che aveva prima AddNew o Edit è stato chiamato.

Per informazioni correlate, vedere gli argomenti "AddNew Method", "CancelUpdate Method", "LastModified Property" e "EditMode Property" nella Guida di DAO.

CDaoRecordset::CanAppend

Chiamare questa funzione membro per determinare se il recordset aperto in precedenza consente di aggiungere nuovi record chiamando la funzione membro AddNew .

BOOL CanAppend() const;

Valore restituito

Diverso da zero se il recordset consente l'aggiunta di nuovi record; in caso contrario, 0. CanAppend restituisce 0 se l'oggetto recordset è stato aperto come di sola lettura.

Osservazioni:

Per informazioni correlate, vedere l'argomento "Append Method" nella Guida di DAO.

CDaoRecordset::CanBookmark

Chiamare questa funzione membro per determinare se il recordset aperto in precedenza consente di contrassegnare singolarmente i record usando i segnalibri.

BOOL CanBookmark();

Valore restituito

Diverso da zero se il recordset supporta i segnalibri; in caso contrario, 0.

Osservazioni:

Se si usano recordset basati interamente sulle tabelle del motore di database Microsoft Jet, i segnalibri possono essere usati ad eccezione dei recordset di tipo snapshot contrassegnati come recordset di scorrimento forward-only. Altri prodotti di database (origini dati ODBC esterne) potrebbero non supportare i segnalibri.

Per informazioni correlate, vedere l'argomento "Proprietà segnalibrabile" nella Guida di DAO.

CDaoRecordset::CancelUpdate

La CancelUpdate funzione membro annulla gli aggiornamenti in sospeso a causa di un'operazione Edit o AddNew .

virtual void CancelUpdate();

Osservazioni:

Ad esempio, se un'applicazione chiama la Edit funzione membro o AddNew e non ha chiamato Update, CancelUpdate annulla le modifiche apportate dopo Edit o AddNew è stato chiamato .

Nota

Se i record vengono memorizzati nel doppio buffer ,ovvero il controllo automatico dei campi è abilitato, la chiamata CancelUpdate ripristina le variabili membro ai valori che aveva prima AddNew o Edit è stato chiamato.

Se non è presente alcuna Edit operazione o AddNew in sospeso, CancelUpdate MFC genera un'eccezione. Chiamare la funzione membro GetEditMode per determinare se è presente un'operazione in sospeso che può essere annullata.

Per informazioni correlate, vedere l'argomento "CancelUpdate Method" nella Guida di DAO.

CDaoRecordset::CanRestart

Chiamare questa funzione membro per determinare se il recordset consente il riavvio della query (per aggiornarne i record) chiamando la Requery funzione membro.

BOOL CanRestart();

Valore restituito

Diverso da zero se Requery è possibile chiamare per eseguire di nuovo la query del recordset, in caso contrario 0.

Osservazioni:

I recordset di tipo tabella non supportano Requery.

Se Requery non è supportato, chiamare Chiudi e quindi Apri per aggiornare i dati. È possibile chiamare Requery per aggiornare la query del parametro sottostante di un oggetto recordset dopo la modifica dei valori dei parametri.

Per informazioni correlate, vedere l'argomento "Proprietà riavviabile" nella Guida di DAO.

CDaoRecordset::CanScroll

Chiamare questa funzione membro per determinare se il recordset consente lo scorrimento.

BOOL CanScroll() const;

Valore restituito

Diverso da zero se è possibile scorrere i record, altrimenti 0.

Osservazioni:

Se si chiama Open con dbForwardOnly, il recordset può scorrere solo in avanti.

Per informazioni correlate, vedere l'argomento "Posizionamento del puntatore al record corrente con DAO" nella Guida di DAO.

CDaoRecordset::CanTransact

Chiamare questa funzione membro per determinare se il recordset consente transazioni.

BOOL CanTransact();

Valore restituito

Diverso da zero se l'origine dati sottostante supporta le transazioni, in caso contrario 0.

Osservazioni:

Per informazioni correlate, vedere l'argomento "Transactions Property" nella Guida di DAO.

CDaoRecordset::CanUpdate

Chiamare questa funzione membro per determinare se è possibile aggiornare il recordset.

BOOL CanUpdate() const;

Valore restituito

Diverso da zero se il recordset può essere aggiornato (aggiungere, aggiornare ed eliminare record), in caso contrario 0.

Osservazioni:

Un recordset potrebbe essere di sola lettura se l'origine dati sottostante è di sola lettura o se è stata specificata dbReadOnly per nOptions quando si chiama Open per il recordset.

Per informazioni correlate, vedere gli argomenti "AddNew Method", "Edit Method", "Delete Method", "Update Method" e "Updatable Property" nella Guida di DAO.

CDaoRecordset::CDaoRecordset

Costruisce un oggetto CDaoRecordset.

CDaoRecordset(CDaoDatabase* pDatabase = NULL);

Parametri

pDatabase
Contiene un puntatore a un oggetto CDaoDatabase o al valore NULL. Se non è NULL e la CDaoDatabase funzione membro dell'oggetto Open non è stata chiamata per connetterla all'origine dati, il recordset tenta di aprirlo per l'utente durante la propria chiamata Open . Se si passa NULL, un CDaoDatabase oggetto viene costruito e connesso usando le informazioni sull'origine dati specificate se è stata derivata la classe recordset da CDaoRecordset.

Osservazioni:

È possibile usare CDaoRecordset direttamente o derivare una classe specifica dell'applicazione da CDaoRecordset. È possibile usare ClassWizard per derivare le classi recordset.

Nota

Se si deriva una CDaoRecordset classe, la classe derivata deve fornire il proprio costruttore. Nel costruttore della classe derivata chiamare il costruttore CDaoRecordset::CDaoRecordset, passando i parametri appropriati.

Passare NULL al costruttore del recordset per avere un CDaoDatabase oggetto costruito e connesso automaticamente. Si tratta di un collegamento utile che non richiede di costruire e connettere un CDaoDatabase oggetto prima di costruire il recordset. Se l'oggetto CDaoDatabase non è aperto, verrà creato anche un oggetto CDaoWorkspace che usa l'area di lavoro predefinita. Per altre informazioni, vedere CDaoDatabase::CDaoDatabase.

CDaoRecordset::Close

La chiusura di un CDaoRecordset oggetto lo rimuove dall'insieme di recordset aperti nel database associato.

virtual void Close();

Osservazioni:

Poiché Close non elimina definitivamente l'oggetto CDaoRecordset , è possibile riutilizzare l'oggetto chiamando Open sulla stessa origine dati o su un'origine dati diversa.

Tutte le istruzioni AddNew o Edit in sospeso vengono annullate e viene eseguito il rollback di tutte le transazioni in sospeso. Se si desidera mantenere aggiunte o modifiche in sospeso, chiamare Update prima di chiamare Close per ogni recordset.

È possibile chiamare di nuovo dopo aver chiamato Open Close. In questo modo è possibile riutilizzare l'oggetto recordset. Un'alternativa migliore consiste nel chiamare Requery, se possibile.

Per informazioni correlate, vedere l'argomento "Close Method" nella Guida di DAO.

CDaoRecordset::D elete

Chiamare questa funzione membro per eliminare il record corrente in un oggetto recordset di tipo dynaset aperto o di tipo tabella.

virtual void Delete();

Osservazioni:

Dopo l'eliminazione, i membri dati del campo del recordset vengono impostati su un valore Null ed è necessario chiamare in modo esplicito una delle funzioni membro di navigazione del recordset ( Move, Seek, SetBookmark e così via) per spostare il record eliminato. Quando si eliminano record da un recordset, è necessario che sia presente un record corrente nel recordset prima di chiamare Delete. In caso contrario, MFC genera un'eccezione.

Delete rimuove il record corrente e lo rende inaccessibile. Anche se non è possibile modificare o usare il record eliminato, rimane aggiornato. Una volta spostato in un altro record, tuttavia, non è possibile rendere nuovamente corrente il record eliminato.

Attenzione

Il recordset deve essere aggiornabile e deve essere presente un record valido nel recordset quando si chiama Delete. Ad esempio, se si elimina un record ma non si scorre verso un nuovo record prima di chiamare Delete di nuovo, Delete genera un'eccezione CDaoException.

È possibile annullare l'eliminazione di un record se si usano transazioni e si chiama la funzione membro CDaoWorkspace::Rollback . Se la tabella di base è la tabella primaria in una relazione di eliminazione a catena, l'eliminazione del record corrente può anche eliminare uno o più record in una tabella esterna. Per altre informazioni, vedere la definizione "eliminazione a catena" nella Guida di DAO.

A differenza di AddNew e Edit, una chiamata a Delete non è seguita da una chiamata a Update.

Per informazioni correlate, vedere gli argomenti "AddNew Method", "Edit Method", "Delete Method", "Update Method" e "Updatable Property" nella Guida di DAO.

CDaoRecordset::D oFieldExchange

Il framework chiama questa funzione membro per scambiare automaticamente i dati tra i membri dati del campo dell'oggetto recordset e le colonne corrispondenti del record corrente nell'origine dati.

virtual void DoFieldExchange(CDaoFieldExchange* pFX);

Parametri

pFX
Contiene un puntatore a un CDaoFieldExchange oggetto . Il framework avrà già configurato questo oggetto per specificare un contesto per l'operazione di scambio dei campi.

Osservazioni:

Associa inoltre i membri dei dati dei parametri, se presenti, ai segnaposto dei parametri nella stringa di istruzione SQL per la selezione del recordset. Lo scambio di dati di campo, denominato scambio di campi di record DAO (DFX), funziona in entrambe le direzioni: dai membri dati di campo dell'oggetto recordset ai campi del record nell'origine dati e dal record nell'origine dati all'oggetto recordset. Se si associano colonne in modo dinamico, non è necessario implementare DoFieldExchange.

L'unica azione da eseguire normalmente per implementare DoFieldExchange per la classe recordset derivata consiste nel creare la classe con ClassWizard e specificare i nomi e i tipi di dati dei membri dati del campo. È anche possibile aggiungere codice a ciò che ClassWizard scrive per specificare i membri dei dati dei parametri. Se tutti i campi devono essere associati in modo dinamico, questa funzione è inattiva a meno che non si specifichino i membri dati dei parametri.

Quando si dichiara la classe recordset derivata con ClassWizard, la procedura guidata scrive un override di DoFieldExchange , simile all'esempio seguente:

void CCustSet::DoFieldExchange(CDaoFieldExchange *pFX)
{
   pFX->SetFieldType(CDaoFieldExchange::param);
   DFX_Text(pFX, _T("Param"), m_strParam);
   pFX->SetFieldType(CDaoFieldExchange::outputColumn);
   DFX_Short(pFX, _T("EmployeeID"), m_EmployeeID);
   DFX_Text(pFX, _T("LastName"), m_LastName);
   DFX_Short(pFX, _T("Age"), m_Age);
   DFX_DateTime(pFX, _T("hire_date"), m_hire_date);
   DFX_DateTime(pFX, _T("termination_date"), m_termination_date);

   CDaoRecordset::DoFieldExchange(pFX);
}

CDaoRecordset::Edit

Chiamare questa funzione membro per consentire le modifiche apportate al record corrente.

virtual void Edit();

Osservazioni:

Dopo aver chiamato la Edit funzione membro, le modifiche apportate ai campi del record corrente vengono copiate nel buffer di copia. Dopo aver apportato le modifiche desiderate al record, chiamare Update per salvare le modifiche. Edit salva i valori dei membri dati del recordset. Se si chiama , apportare modifiche, chiamare EditEdit di nuovo i valori del record in base a ciò che erano prima della prima Edit chiamata.

Attenzione

Se si modifica un record e quindi si esegue un'operazione che passa a un altro record senza prima chiamare Update, le modifiche andranno perse senza alcun avviso. Inoltre, se si chiude il recordset o il database padre, il record modificato viene rimosso senza avviso.

In alcuni casi, è possibile aggiornare una colonna rendendola Null (che non contiene dati). A tale scopo, chiamare SetFieldNull con un parametro true per contrassegnare il campo Null. In questo modo la colonna verrà aggiornata. Se si vuole che un campo venga scritto nell'origine dati anche se il relativo valore non è stato modificato, chiamare SetFieldDirty con un parametro TRUE. Questa operazione funziona anche se il campo ha il valore Null.

Il framework contrassegna i membri dei dati dei campi modificati per assicurarsi che vengano scritti nel record nell'origine dati dal meccanismo DFX (DAO Record Field Exchange). La modifica del valore di un campo imposta in genere automaticamente il campo dirty, quindi raramente sarà necessario chiamare SetFieldDirty manualmente, ma a volte potrebbe essere necessario assicurarsi che le colonne vengano aggiornate o inserite in modo esplicito indipendentemente dal valore presente nel membro dati del campo. Il meccanismo DFX usa anche l'uso di PSEUDO NULL. Per altre informazioni, vedere CDaoFieldExchange::m_nOperation.

Se il meccanismo di doppio buffering non viene usato, la modifica del valore del campo non imposta automaticamente il campo come dirty. In questo caso, è necessario impostare in modo esplicito il campo dirty. Il flag contenuto in m_bCheckCacheForDirtyFields controlla questo controllo automatico dei campi.

Quando l'oggetto recordset è bloccato in modo pessimistico in un ambiente multiutente, il record rimane bloccato dal momento Edit in cui viene utilizzato fino al completamento dell'aggiornamento. Se il recordset è bloccato in modo ottimistico, il record viene bloccato e confrontato con il record pre-modificato subito prima che venga aggiornato nel database. Se il record è stato modificato dopo aver chiamato Edit, l'operazione Update ha esito negativo e MFC genera un'eccezione. È possibile modificare la modalità di blocco con SetLockingMode.

Nota

Il blocco ottimistico viene sempre usato in formati di database esterni, ad esempio ODBC e ISAM installabile.

Il record corrente rimane corrente dopo aver chiamato Edit. Per chiamare Edit, deve essere presente un record corrente. Se non è presente alcun record corrente o se il recordset non fa riferimento a un oggetto recordset di tipo tabella o dynaset di tipo dynaset, si verifica un'eccezione. La chiamata Edit fa sì che venga generata un'eccezione CDaoException nelle condizioni seguenti:

  • Non esiste alcun record corrente.

  • Il database o il recordset è di sola lettura.

  • Nessun campo nel record è aggiornabile.

  • Il database o il recordset è stato aperto per l'uso esclusivo da parte di un altro utente.

  • Un altro utente ha bloccato la pagina contenente il record.

Se l'origine dati supporta le transazioni, è possibile effettuare la Edit parte di chiamata di una transazione. È necessario chiamare prima di chiamare CDaoWorkspace::BeginTrans Edit e dopo l'apertura del recordset. La chiamata CDaoWorkspace::CommitTrans non sostituisce la chiamata Update per completare l'operazione Edit . Per altre informazioni sulle transazioni, vedere classe CDaoWorkspace.

Per informazioni correlate, vedere gli argomenti "AddNew Method", "Edit Method", "Delete Method", "Update Method" e "Updatable Property" nella Guida di DAO.

CDaoRecordset::FillCache

Chiamare questa funzione membro per memorizzare nella cache un numero specificato di record dal recordset.

void FillCache(
    long* pSize = NULL,
    COleVariant* pBookmark = NULL);

Parametri

pSize
Specifica il numero di righe da compilare nella cache. Se si omette questo parametro, il valore viene determinato dall'impostazione della proprietà CacheSize dell'oggetto DAO sottostante.

pBookmark
Oggetto COleVariant che specifica un segnalibro. La cache viene riempita a partire dal record indicato da questo segnalibro. Se si omette questo parametro, la cache viene riempita a partire dal record indicato dalla proprietà CacheStart dell'oggetto DAO sottostante.

Osservazioni:

La memorizzazione nella cache migliora le prestazioni di un'applicazione che recupera o recupera i dati da un server remoto. Una cache è uno spazio nella memoria locale che contiene i dati recuperati più di recente dal server presupponendo che i dati verranno probabilmente richiesti di nuovo mentre l'applicazione è in esecuzione. Quando vengono richiesti dati, il motore di database Microsoft Jet controlla prima la cache dei dati anziché recuperarli dal server, che richiede più tempo. L'uso della memorizzazione nella cache dei dati in origini dati non ODBC non ha alcun effetto perché i dati non vengono salvati nella cache.

Invece di attendere che la cache venga compilata con i record durante il recupero, è possibile riempire in modo esplicito la cache in qualsiasi momento chiamando la FillCache funzione membro. Si tratta di un modo più rapido per riempire la cache perché FillCache recupera più record contemporaneamente anziché uno alla volta. Ad esempio, mentre viene visualizzata ogni schermata di record, è possibile chiamare FillCache l'applicazione per recuperare la schermata successiva dei record.

Qualsiasi database ODBC a cui si accede con oggetti recordset può avere una cache locale. Per creare la cache, aprire un oggetto recordset dall'origine dati remota e quindi chiamare le SetCacheSize funzioni membro e SetCacheStart del recordset. Se lSize e lBookmark creano un intervallo parzialmente o completamente esterno all'intervallo specificato da SetCacheSize e SetCacheStart, la parte del recordset all'esterno di questo intervallo viene ignorata e non viene caricata nella cache. Se FillCache richiede più record che rimangono nell'origine dati remota, vengono recuperati solo i record rimanenti e non viene generata alcuna eccezione.

I record recuperati dalla cache non riflettono le modifiche apportate simultaneamente ai dati di origine da altri utenti.

FillCache recupera solo i record non già memorizzati nella cache. Per forzare un aggiornamento di tutti i dati memorizzati nella cache, chiamare la SetCacheSize funzione membro con un parametro lSize uguale a 0, chiamare SetCacheSize di nuovo con il parametro lSize uguale alle dimensioni della cache richiesta in origine e quindi chiamare FillCache.

Per informazioni correlate, vedere l'argomento "Metodo FillCache" nella Guida di DAO.

CDaoRecordset::Find

Chiamare questa funzione membro per individuare una determinata stringa in un recordset di tipo dynaset o snapshot usando un operatore di confronto.

virtual BOOL Find(
    long lFindType,
    LPCTSTR lpszFilter);

Parametri

lFindType
Valore che indica il tipo di operazione di ricerca desiderata. I valori possibili sono:

  • AFX_DAO_NEXT Trovare la posizione successiva di una stringa corrispondente.

  • AFX_DAO_PREV Trovare la posizione precedente di una stringa corrispondente.

  • AFX_DAO_FIRST Trovare la prima posizione di una stringa corrispondente.

  • AFX_DAO_LAST Trovare l'ultima posizione di una stringa corrispondente.

lpszFilter
Espressione stringa (ad esempio la clausola WHERE in un'istruzione SQL senza la parola WHERE) usata per individuare il record. Ad esempio:

rs.Find(AFX_DAO_FIRST, _T("EmployeeID = 7"));
rs.Find(AFX_DAO_NEXT, _T("LastName = 'Jones'"));

Valore restituito

Diverso da zero se vengono trovati record corrispondenti, in caso contrario 0.

Osservazioni:

È possibile trovare il primo, successivo, precedente o l'ultima istanza della stringa. Find è una funzione virtuale, quindi è possibile eseguirne l'override e aggiungere la propria implementazione. Le FindFirstfunzioni membro , FindLast, FindNexte FindPrev chiamano la Find funzione membro, quindi è possibile usare Find per controllare il comportamento di tutte le operazioni Find.

Per individuare un record in un recordset di tipo tabella, chiamare la funzione membro Seek .

Suggerimento

Più piccolo è il set di record disponibili, più efficace Find è. In generale, e soprattutto con i dati ODBC, è preferibile creare una nuova query che recupera solo i record desiderati.

Per informazioni correlate, vedere l'argomento "FindFirst, FindLast, FindNext, FindPrevious Methods" nella Guida di DAO.

CDaoRecordset::FindFirst

Chiamare questa funzione membro per trovare il primo record che corrisponde a una condizione specificata.

BOOL FindFirst(LPCTSTR lpszFilter);

Parametri

lpszFilter
Espressione stringa (ad esempio la clausola WHERE in un'istruzione SQL senza la parola WHERE) usata per individuare il record.

Valore restituito

Diverso da zero se vengono trovati record corrispondenti, in caso contrario 0.

Osservazioni:

La FindFirst funzione membro inizia la ricerca dall'inizio del recordset e cerca alla fine del recordset.

Se si desidera includere tutti i record nella ricerca (non solo quelli che soddisfano una condizione specifica) utilizzare una delle operazioni Di spostamento per passare dal record al record. Per individuare un record in un recordset di tipo tabella, chiamare la Seek funzione membro.

Se un record corrispondente ai criteri non viene individuato, il puntatore al record corrente non è determinato e FindFirst restituisce zero. Se il recordset contiene più record che soddisfano i criteri, FindFirst individua la prima occorrenza, FindNext individua l'occorrenza successiva e così via.

Attenzione

Se si modifica il record corrente, assicurarsi di salvare le modifiche chiamando la Update funzione membro prima di passare a un altro record. Se si passa a un altro record senza aggiornare, le modifiche andranno perse senza avvisi.

Le Find funzioni membro esequisino dalla posizione e nella direzione specificata nella tabella seguente:

Operazioni di ricerca Inizia Direzione di ricerca
FindFirst Inizio del recordset Fine del recordset
FindLast Fine del recordset Inizio del recordset
FindNext Record corrente Fine del recordset
FindPrevious Record corrente Inizio del recordset

Nota

Quando si chiama FindLast, il motore di database Microsoft Jet popola completamente il recordset prima di iniziare la ricerca, se non è già stato fatto. La prima ricerca potrebbe richiedere più tempo rispetto alle ricerche successive.

L'uso di una delle operazioni Di ricerca non equivale alla chiamata MoveFirst o MoveNext, tuttavia, che rende semplicemente corrente il primo o il record successivo senza specificare una condizione. È possibile seguire un'operazione Di ricerca con un'operazione di spostamento.

Quando si usano le operazioni di ricerca, tenere presente quanto segue:

  • Se Find restituisce un valore diverso da zero, il record corrente non è definito. In questo caso, è necessario posizionare nuovamente il puntatore del record corrente a un record valido.

  • Non è possibile usare un'operazione di ricerca con un recordset di tipo snapshot di tipo forward-only.

  • È consigliabile usare il formato di data degli Stati Uniti (mese-giorno-anno) quando si cercano campi contenenti date, anche se non si usa la versione statunitense del motore di database Microsoft Jet; in caso contrario, i record corrispondenti potrebbero non essere trovati.

  • Quando si usano database ODBC e dynaset di grandi dimensioni, è possibile che l'utilizzo delle operazioni Di ricerca sia lento, soprattutto quando si usano recordset di grandi dimensioni. È possibile migliorare le prestazioni usando query SQL con clausole ORDERBY o WHERE personalizzate, query di parametri o CDaoQuerydef oggetti che recuperano record indicizzati specifici.

Per informazioni correlate, vedere l'argomento "FindFirst, FindLast, FindNext, FindPrevious Methods" nella Guida di DAO.

CDaoRecordset::FindLast

Chiamare questa funzione membro per trovare l'ultimo record che corrisponde a una condizione specificata.

BOOL FindLast(LPCTSTR lpszFilter);

Parametri

lpszFilter
Espressione stringa (ad esempio la clausola WHERE in un'istruzione SQL senza la parola WHERE) usata per individuare il record.

Valore restituito

Diverso da zero se vengono trovati record corrispondenti, in caso contrario 0.

Osservazioni:

La FindLast funzione membro inizia la ricerca alla fine del recordset e cerca all'indietro verso l'inizio del recordset.

Se si desidera includere tutti i record nella ricerca (non solo quelli che soddisfano una condizione specifica) utilizzare una delle operazioni Di spostamento per passare dal record al record. Per individuare un record in un recordset di tipo tabella, chiamare la Seek funzione membro.

Se un record corrispondente ai criteri non viene individuato, il puntatore al record corrente non è determinato e FindLast restituisce zero. Se il recordset contiene più record che soddisfano i criteri, FindFirst individua la prima occorrenza, FindNext individua l'occorrenza successiva dopo la prima occorrenza e così via.

Attenzione

Se si modifica il record corrente, assicurarsi di salvare le modifiche chiamando la Update funzione membro prima di passare a un altro record. Se si passa a un altro record senza aggiornare, le modifiche andranno perse senza avvisi.

L'uso di una delle operazioni Di ricerca non equivale alla chiamata MoveFirst o MoveNext, tuttavia, che rende semplicemente corrente il primo o il record successivo senza specificare una condizione. È possibile seguire un'operazione Di ricerca con un'operazione di spostamento.

Quando si usano le operazioni di ricerca, tenere presente quanto segue:

  • Se Find restituisce un valore diverso da zero, il record corrente non è definito. In questo caso, è necessario posizionare nuovamente il puntatore del record corrente a un record valido.

  • Non è possibile usare un'operazione di ricerca con un recordset di tipo snapshot di tipo forward-only.

  • È consigliabile usare il formato di data degli Stati Uniti (mese-giorno-anno) quando si cercano campi contenenti date, anche se non si usa la versione statunitense del motore di database Microsoft Jet; in caso contrario, i record corrispondenti potrebbero non essere trovati.

  • Quando si usano database ODBC e dynaset di grandi dimensioni, è possibile che l'utilizzo delle operazioni Di ricerca sia lento, soprattutto quando si usano recordset di grandi dimensioni. È possibile migliorare le prestazioni usando query SQL con clausole ORDERBY o WHERE personalizzate, query di parametri o CDaoQuerydef oggetti che recuperano record indicizzati specifici.

Per informazioni correlate, vedere l'argomento "FindFirst, FindLast, FindNext, FindPrevious Methods" nella Guida di DAO.

CDaoRecordset::FindNext

Chiamare questa funzione membro per trovare il record successivo che corrisponde a una condizione specificata.

BOOL FindNext(LPCTSTR lpszFilter);

Parametri

lpszFilter
Espressione stringa (ad esempio la clausola WHERE in un'istruzione SQL senza la parola WHERE) usata per individuare il record.

Valore restituito

Diverso da zero se vengono trovati record corrispondenti, in caso contrario 0.

Osservazioni:

La FindNext funzione membro inizia la ricerca nel record corrente e cerca alla fine del recordset.

Se si desidera includere tutti i record nella ricerca (non solo quelli che soddisfano una condizione specifica) utilizzare una delle operazioni Di spostamento per passare dal record al record. Per individuare un record in un recordset di tipo tabella, chiamare la Seek funzione membro.

Se un record corrispondente ai criteri non viene individuato, il puntatore al record corrente non è determinato e FindNext restituisce zero. Se il recordset contiene più record che soddisfano i criteri, FindFirst individua la prima occorrenza, FindNext individua l'occorrenza successiva e così via.

Attenzione

Se si modifica il record corrente, assicurarsi di salvare le modifiche chiamando la Update funzione membro prima di passare a un altro record. Se si passa a un altro record senza aggiornare, le modifiche andranno perse senza avvisi.

L'uso di una delle operazioni Di ricerca non equivale alla chiamata MoveFirst o MoveNext, tuttavia, che rende semplicemente corrente il primo o il record successivo senza specificare una condizione. È possibile seguire un'operazione Di ricerca con un'operazione di spostamento.

Quando si usano le operazioni di ricerca, tenere presente quanto segue:

  • Se Find restituisce un valore diverso da zero, il record corrente non è definito. In questo caso, è necessario posizionare nuovamente il puntatore del record corrente a un record valido.

  • Non è possibile usare un'operazione di ricerca con un recordset di tipo snapshot di tipo forward-only.

  • È consigliabile usare il formato di data degli Stati Uniti (mese-giorno-anno) quando si cercano campi contenenti date, anche se non si usa la versione statunitense del motore di database Microsoft Jet; in caso contrario, i record corrispondenti potrebbero non essere trovati.

  • Quando si usano database ODBC e dynaset di grandi dimensioni, è possibile che l'utilizzo delle operazioni Di ricerca sia lento, soprattutto quando si usano recordset di grandi dimensioni. È possibile migliorare le prestazioni usando query SQL con clausole ORDERBY o WHERE personalizzate, query di parametri o CDaoQuerydef oggetti che recuperano record indicizzati specifici.

Per informazioni correlate, vedere l'argomento "FindFirst, FindLast, FindNext, FindPrevious Methods" nella Guida di DAO.

CDaoRecordset::FindPrev

Chiamare questa funzione membro per trovare il record precedente che corrisponde a una condizione specificata.

BOOL FindPrev(LPCTSTR lpszFilter);

Parametri

lpszFilter
Espressione stringa (ad esempio la clausola WHERE in un'istruzione SQL senza la parola WHERE) usata per individuare il record.

Valore restituito

Diverso da zero se vengono trovati record corrispondenti, in caso contrario 0.

Osservazioni:

La FindPrev funzione membro inizia la ricerca nel record corrente e cerca all'indietro verso l'inizio del recordset.

Se si desidera includere tutti i record nella ricerca (non solo quelli che soddisfano una condizione specifica) utilizzare una delle operazioni Di spostamento per passare dal record al record. Per individuare un record in un recordset di tipo tabella, chiamare la Seek funzione membro.

Se un record corrispondente ai criteri non viene individuato, il puntatore al record corrente non è determinato e FindPrev restituisce zero. Se il recordset contiene più record che soddisfano i criteri, FindFirst individua la prima occorrenza, FindNext individua l'occorrenza successiva e così via.

Attenzione

Se si modifica il record corrente, assicurarsi di salvare le modifiche chiamando la Update funzione membro prima di passare a un altro record. Se si passa a un altro record senza aggiornare, le modifiche andranno perse senza avvisi.

L'uso di una delle operazioni Di ricerca non equivale alla chiamata MoveFirst o MoveNext, tuttavia, che rende semplicemente corrente il primo o il record successivo senza specificare una condizione. È possibile seguire un'operazione Di ricerca con un'operazione di spostamento.

Quando si usano le operazioni di ricerca, tenere presente quanto segue:

  • Se Find restituisce un valore diverso da zero, il record corrente non è definito. In questo caso, è necessario posizionare nuovamente il puntatore del record corrente a un record valido.

  • Non è possibile usare un'operazione di ricerca con un recordset di tipo snapshot di tipo forward-only.

  • È consigliabile usare il formato di data degli Stati Uniti (mese-giorno-anno) quando si cercano campi contenenti date, anche se non si usa la versione statunitense del motore di database Microsoft Jet; in caso contrario, i record corrispondenti potrebbero non essere trovati.

  • Quando si usano database ODBC e dynaset di grandi dimensioni, è possibile che l'utilizzo delle operazioni Di ricerca sia lento, soprattutto quando si usano recordset di grandi dimensioni. È possibile migliorare le prestazioni usando query SQL con clausole ORDERBY o WHERE personalizzate, query di parametri o CDaoQuerydef oggetti che recuperano record indicizzati specifici.

Per informazioni correlate, vedere l'argomento "FindFirst, FindLast, FindNext, FindPrevious Methods" nella Guida di DAO.

CDaoRecordset::GetAbsolutePosition

Restituisce il numero di record del record corrente di un oggetto recordset.

long GetAbsolutePosition();

Valore restituito

Intero compreso tra 0 e il numero di record nel recordset. Corrisponde alla posizione ordinale del record corrente nel recordset.

Osservazioni:

Il valore della proprietà AbsolutePosition dell'oggetto DAO sottostante è in base zero; un'impostazione pari a 0 fa riferimento al primo record nel recordset. È possibile determinare il numero di record popolati nel recordset chiamando GetRecordCount. La chiamata GetRecordCount potrebbe richiedere del tempo perché deve accedere a tutti i record per determinare il conteggio.

Se non è presente alcun record corrente, come quando non sono presenti record nel recordset, viene restituito - 1. Se il record corrente viene eliminato, il valore della proprietà AbsolutePosition non è definito e MFC genera un'eccezione se viene fatto riferimento. Per i recordset di tipo dynaset, i nuovi record vengono aggiunti alla fine della sequenza.

Nota

Questa proprietà non deve essere usata come numero di record surrogato. I segnalibri sono ancora il modo consigliato per conservare e tornare a una determinata posizione e sono l'unico modo per posizionare il record corrente in tutti i tipi di oggetti recordset. In particolare, la posizione di un determinato record cambia quando vengono eliminati record precedenti. Non esiste inoltre alcuna garanzia che un determinato record avrà la stessa posizione assoluta se il recordset viene ricreato perché l'ordine dei singoli record all'interno di un recordset non è garantito a meno che non venga creato con un'istruzione SQL usando una clausola ORDERBY .

Nota

Questa funzione membro è valida solo per i recordset di tipo dynaset e snapshot.

Per informazioni correlate, vedere l'argomento "AbsolutePosition Property" nella Guida di DAO.

CDaoRecordset::GetBookmark

Chiamare questa funzione membro per ottenere il valore del segnalibro in un determinato record.

COleVariant GetBookmark();

Valore restituito

Restituisce un valore che rappresenta il segnalibro nel record corrente.

Osservazioni:

Quando un oggetto recordset viene creato o aperto, ognuno dei relativi record ha già un segnalibro univoco se li supporta. Chiamare CanBookmark per determinare se un recordset supporta i segnalibri.

È possibile salvare il segnalibro per il record corrente assegnando il valore del segnalibro a un COleVariant oggetto . Per tornare rapidamente a tale record dopo lo spostamento in un record diverso, chiamare SetBookmark con un parametro corrispondente al valore di tale COleVariant oggetto.

Nota

La chiamata a Requery modifica i segnalibri DAO.

Per informazioni correlate, vedere l'argomento "Proprietà segnalibro" nella Guida di DAO.

CDaoRecordset::GetCacheSize

Chiamare questa funzione membro per ottenere il numero di record memorizzati nella cache.

long GetCacheSize();

Valore restituito

Valore che specifica il numero di record in un recordset di tipo dynaset contenente i dati da memorizzare nella cache locale da un'origine dati ODBC.

Osservazioni:

La memorizzazione nella cache dei dati migliora le prestazioni di un'applicazione che recupera i dati da un server remoto tramite oggetti recordset di tipo dynaset. Una cache è uno spazio nella memoria locale che contiene i dati recuperati più di recente dal server nel caso in cui i dati vengano richiesti di nuovo mentre l'applicazione è in esecuzione. Quando vengono richiesti dati, il motore di database Microsoft Jet controlla prima la cache per i dati richiesti anziché recuperarli dal server, che richiede più tempo. I dati che non provengono da un'origine dati ODBC non vengono salvati nella cache.

Qualsiasi origine dati ODBC, ad esempio una tabella collegata, può avere una cache locale.

Per informazioni correlate, vedere l'argomento "CacheSize, CacheStart Properties" nella Guida di DAO.

CDaoRecordset::GetCacheStart

Chiamare questa funzione membro per ottenere il valore del segnalibro del primo record nel recordset da memorizzare nella cache.

COleVariant GetCacheStart();

Valore restituito

Oggetto COleVariant che specifica il segnalibro del primo record nel recordset da memorizzare nella cache.

Osservazioni:

Il motore di database Microsoft Jet richiede record all'interno dell'intervallo di cache dalla cache e richiede record al di fuori dell'intervallo di cache dal server.

Nota

I record recuperati dalla cache non riflettono le modifiche apportate simultaneamente ai dati di origine da altri utenti.

Per informazioni correlate, vedere l'argomento "CacheSize, CacheStart Properties" nella Guida di DAO.

CDaoRecordset::GetCurrentIndex

Chiamare questa funzione membro per determinare l'indice attualmente in uso in un oggetto di tipo CDaoRecordset tabella indicizzato.

CString GetCurrentIndex();

Valore restituito

Oggetto CString contenente il nome dell'indice attualmente in uso con un recordset di tipo tabella. Restituisce una stringa vuota se non è stato impostato alcun indice.

Osservazioni:

Questo indice è la base per ordinare i record in un recordset di tipo tabella e viene utilizzato dalla funzione membro Seek per individuare i record.

Un CDaoRecordset oggetto può avere più di un indice, ma può usare un solo indice alla volta (anche se un oggetto CDaoTableDef può avere diversi indici definiti su di esso).

Per informazioni correlate, vedere l'argomento "Index Object" e la definizione "indice corrente" nella Guida di DAO.

CDaoRecordset::GetDateCreated

Chiamare questa funzione membro per recuperare la data e l'ora di creazione di una tabella di base.

COleDateTime GetDateCreated();

Valore restituito

Oggetto COleDateTime contenente la data e l'ora di creazione della tabella di base.

Osservazioni:

Le impostazioni di data e ora derivano dal computer in cui è stata creata la tabella di base.

Per informazioni correlate, vedere l'argomento "DateCreated, LastUpdated Properties" nella Guida di DAO.

CDaoRecordset::GetDateLastUpdated

Chiamare questa funzione membro per recuperare la data e l'ora dell'ultimo aggiornamento dello schema.

COleDateTime GetDateLastUpdated();

Valore restituito

Oggetto COleDateTime contenente la data e l'ora dell'ultimo aggiornamento della struttura della tabella di base (schema).

Osservazioni:

Le impostazioni di data e ora derivano dal computer in cui è stata aggiornata la struttura della tabella di base (schema).

Per informazioni correlate, vedere l'argomento "DateCreated, LastUpdated Properties" nella Guida di DAO.

CDaoRecordset::GetDefaultDBName

Chiamare questa funzione membro per determinare il nome del database per questo recordset.

virtual CString GetDefaultDBName();

Valore restituito

Oggetto CString contenente il percorso e il nome del database da cui deriva questo recordset.

Osservazioni:

Se viene creato un recordset senza un puntatore a CDaoDatabase, questo percorso viene utilizzato dal recordset per aprire il database predefinito. Per impostazione predefinita, questa funzione restituisce una stringa vuota. Quando ClassWizard deriva un nuovo recordset da CDaoRecordset, verrà creata automaticamente questa funzione.

Nell'esempio seguente viene illustrato l'uso della doppia barra rovesciata (\\) nella stringa, perché è necessario che la stringa venga interpretata correttamente.

CString CCustSet::GetDefaultDBName()
{
   return _T("c:\\mydir\\datasrc.mdb");
}

CDaoRecordset::GetDefaultSQL

Il framework chiama questa funzione membro per ottenere l'istruzione SQL predefinita su cui si basa il recordset.

virtual CString GetDefaultSQL();

Valore restituito

Oggetto CString contenente l'istruzione SQL predefinita.

Osservazioni:

Potrebbe trattarsi di un nome di tabella o di un'istruzione SQL SELECT .

L'istruzione SQL predefinita viene definita indirettamente dichiarando la classe recordset con ClassWizard e ClassWizard esegue automaticamente questa attività.

Se si passa una stringa SQL null a Open, questa funzione viene chiamata per determinare il nome della tabella o SQL per il recordset.

CDaoRecordset::GetEditMode

Chiamare questa funzione membro per determinare lo stato di modifica, ovvero uno dei valori seguenti:

short GetEditMode();

Valore restituito

Restituisce un valore che indica lo stato di modifica per il record corrente.

Osservazioni:

valore Descrizione
dbEditNone Non è in corso alcuna operazione di modifica.
dbEditInProgress Edit è stato chiamato .
dbEditAdd AddNew è stato chiamato .

Per informazioni correlate, vedere l'argomento "EditMode Property" nella Guida di DAO.

CDaoRecordset::GetFieldCount

Chiamare questa funzione membro per recuperare il numero di campi (colonne) definiti nel recordset.

short GetFieldCount();

Valore restituito

Numero di campi nel recordset.

Osservazioni:

Per informazioni correlate, vedere l'argomento "Count Property" nella Guida di DAO.

CDaoRecordset::GetFieldInfo

Chiamare questa funzione membro per ottenere informazioni sui campi in un recordset.

void GetFieldInfo(
    int nIndex,
    CDaoFieldInfo& fieldinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetFieldInfo(
    LPCTSTR lpszName,
    CDaoFieldInfo& fieldinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

Parametri

nIndex
Indice in base zero del campo predefinito nell'insieme Fields del recordset, per la ricerca in base all'indice.

fieldinfo
Riferimento a una struttura CDaoFieldInfo .

dwInfoOptions
Opzioni che specificano le informazioni relative al recordset da recuperare. Le opzioni disponibili sono elencate qui insieme a ciò che causano la restituzione della funzione. Per ottenere prestazioni ottimali, recuperare solo il livello di informazioni necessarie:

  • AFX_DAO_PRIMARY_INFO (Impostazione predefinita) Name, Type, Size, Attributes

  • AFX_DAO_SECONDARY_INFO Informazioni principali, più: Posizione ordinale, Obbligatorio, Consenti lunghezza zero, Ordine di confronto, Nome esterno, Campo di origine, Tabella di origine

  • AFX_DAO_ALL_INFO Informazioni primarie e secondarie, oltre a: Valore predefinito, Regola di convalida, Testo di convalida

lpszName
Nome del campo.

Osservazioni:

Una versione della funzione consente di cercare un campo per indice. L'altra versione consente di cercare un campo in base al nome.

Per una descrizione delle informazioni restituite, vedere la struttura CDaoFieldInfo . Questa struttura ha membri che corrispondono agli elementi delle informazioni elencate in precedenza nella descrizione di dwInfoOptions. Quando si richiedono informazioni a un livello, si ottengono anche informazioni per i livelli precedenti.

Per informazioni correlate, vedere l'argomento "Proprietà attributi" nella Guida di DAO.

CDaoRecordset::GetFieldValue

Chiamare questa funzione membro per recuperare i dati in un recordset.

virtual void GetFieldValue(
    LPCTSTR lpszName,
    COleVariant& varValue);

virtual void GetFieldValue(
    int nIndex,
    COleVariant& varValue);

virtual COleVariant GetFieldValue(LPCTSTR lpszName);
virtual COleVariant GetFieldValue(int nIndex);

Parametri

lpszName
Puntatore a una stringa contenente il nome di un campo.

varValue
Riferimento a un COleVariant oggetto che archivierà il valore di un campo.

nIndex
Indice in base zero del campo nell'insieme Fields del recordset, per la ricerca in base all'indice.

Valore restituito

Le due versioni di GetFieldValue che restituiscono un valore restituiscono un oggetto COleVariant che contiene il valore di un campo.

Osservazioni:

È possibile cercare un campo in base al nome o alla posizione ordinale.

Nota

È più efficiente chiamare una delle versioni di questa funzione membro che accetta un riferimento a un COleVariant oggetto come parametro, anziché chiamare una versione che restituisce un COleVariant oggetto . Le ultime versioni di questa funzione vengono mantenute per garantire la compatibilità con le versioni precedenti.

Utilizzare GetFieldValue e SetFieldValue per associare in modo dinamico i campi in fase di esecuzione anziché associare in modo statico le colonne usando il meccanismo DoFieldExchange .

GetFieldValue e il DoFieldExchange meccanismo può essere combinato per migliorare le prestazioni. Ad esempio, usare GetFieldValue per recuperare un valore necessario solo su richiesta e assegnare tale chiamata a un pulsante "Altre informazioni" nell'interfaccia.

Per informazioni correlate, vedere gli argomenti "Field Object" e "Value Property" nella Guida di DAO.

CDaoRecordset::GetIndexCount

Chiamare questa funzione membro per determinare il numero di indici disponibili nel recordset di tipo tabella.

short GetIndexCount();

Valore restituito

Numero di indici nel recordset di tipo tabella.

Osservazioni:

GetIndexCount è utile per scorrere tutti gli indici nel recordset. A tale scopo, usare GetIndexCount con GetIndexInfo. Se si chiama questa funzione membro nei recordset di tipo dynaset o snapshot, MFC genera un'eccezione.

Per informazioni correlate, vedere l'argomento "Proprietà attributi" nella Guida di DAO.

CDaoRecordset::GetIndexInfo

Chiamare questa funzione membro per ottenere vari tipi di informazioni su un indice definito nella tabella di base sottostante un recordset.

void GetIndexInfo(
    int nIndex,
    CDaoIndexInfo& indexinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetIndexInfo(
    LPCTSTR lpszName,
    CDaoIndexInfo& indexinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

Parametri

nIndex
Indice in base zero nell'insieme Indexes della tabella, per la ricerca in base alla posizione numerica.

indexinfo
Riferimento a una struttura CDaoIndexInfo .

dwInfoOptions
Opzioni che specificano le informazioni sull'indice da recuperare. Le opzioni disponibili sono elencate qui insieme a ciò che causano la restituzione della funzione. Per ottenere prestazioni ottimali, recuperare solo il livello di informazioni necessarie:

  • AFX_DAO_PRIMARY_INFO (Impostazione predefinita) Nome, Informazioni campo, Campi

  • AFX_DAO_SECONDARY_INFO Informazioni primarie, più: Primario, Univoco, Clustered, IgnoreNulls, Required, Foreign

  • AFX_DAO_ALL_INFO Informazioni primarie e secondarie, più: Conteggio distinct

lpszName
Puntatore al nome dell'oggetto index, per la ricerca in base al nome.

Osservazioni:

Una versione della funzione consente di cercare un indice in base alla relativa posizione nella raccolta. L'altra versione consente di cercare un indice in base al nome.

Per una descrizione delle informazioni restituite, vedere la struttura CDaoIndexInfo . Questa struttura ha membri che corrispondono agli elementi delle informazioni elencate in precedenza nella descrizione di dwInfoOptions. Quando si richiedono informazioni a un livello, si ottengono anche informazioni per i livelli precedenti.

Per informazioni correlate, vedere l'argomento "Proprietà attributi" nella Guida di DAO.

CDaoRecordset::GetLastModifiedBookmark

Chiamare questa funzione membro per recuperare il segnalibro del record aggiunto o aggiornato più di recente.

COleVariant GetLastModifiedBookmark();

Valore restituito

Oggetto COleVariant contenente un segnalibro che indica l'ultimo record aggiunto o modificato.

Osservazioni:

Quando un oggetto recordset viene creato o aperto, ognuno dei relativi record ha già un segnalibro univoco se li supporta. Chiamare GetBookmark per determinare se il recordset supporta i segnalibri. Se il recordset non supporta i segnalibri, viene generata un'eccezione CDaoException .

Quando si aggiunge un record, viene visualizzato alla fine del recordset e non è il record corrente. Per rendere corrente il nuovo record, chiamare e quindi chiamare GetLastModifiedBookmark SetBookmark per tornare al record appena aggiunto.

Per informazioni correlate, vedere l'argomento "LastModified Property" nella Guida di DAO.

CDaoRecordset::GetLockingMode

Chiamare questa funzione membro per determinare il tipo di blocco effettivo per il recordset.

BOOL GetLockingMode();

Valore restituito

Diverso da zero se il tipo di blocco è pessimistico, altrimenti 0 per il blocco dei record ottimistici.

Osservazioni:

Quando il blocco pessimistico è attivo, la pagina dei dati contenente il record che si sta modificando viene bloccata non appena si chiama la funzione membro Edit . La pagina viene sbloccata quando si chiama la funzione membro Update o Close o una delle operazioni Sposta o Trova.

Quando il blocco ottimistico è attivo, la pagina di dati contenente il record viene bloccata solo quando il record viene aggiornato con la Update funzione membro.

Quando si utilizzano origini dati ODBC, la modalità di blocco è sempre ottimistica.

Per informazioni correlate, vedere gli argomenti "LockEdits Property" e "Locking Behavior in Multiuser Applications" (Comportamento di blocco nelle applicazioni multiutente) nella Guida di DAO.

CDaoRecordset::GetName

Chiamare questa funzione membro per recuperare il nome del recordset.

CString GetName();

Valore restituito

Oggetto CString contenente il nome del recordset.

Osservazioni:

Il nome del recordset deve iniziare con una lettera e può contenere un massimo di 40 caratteri. Può includere numeri e caratteri di sottolineatura, ma non può includere punteggiatura o spazi.

Per informazioni correlate, vedere l'argomento "Proprietà nome" nella Guida di DAO.

CDaoRecordset::GetParamValue

Chiamare questa funzione membro per recuperare il valore corrente del parametro specificato archiviato nell'oggetto DAOParameter sottostante.

virtual COleVariant GetParamValue(int nIndex);
virtual COleVariant GetParamValue(LPCTSTR lpszName);

Parametri

nIndex
Posizione numerica del parametro nell'oggetto DAOParameter sottostante.

lpszName
Nome del parametro di cui si desidera il valore.

Valore restituito

Oggetto della classe COleVariant che contiene il valore del parametro.

Osservazioni:

È possibile accedere al parametro in base al nome o alla relativa posizione numerica nella raccolta.

Per informazioni correlate, vedere l'argomento "Oggetto parametro" nella Guida di DAO.

CDaoRecordset::GetPercentPosition

Quando si utilizza un recordset di tipo dynaset o snapshot, se si chiama GetPercentPosition prima di popolare completamente il recordset, la quantità di spostamento è relativa al numero di record a cui si accede come indicato chiamando GetRecordCount.

float GetPercentPosition();

Valore restituito

Numero compreso tra 0 e 100 che indica la posizione approssimativa del record corrente nell'oggetto recordset in base a una percentuale dei record nel recordset.

Osservazioni:

È possibile passare all'ultimo record chiamando MoveLast per completare la popolazione di tutti i recordset, ma questo potrebbe richiedere molto tempo.

È possibile chiamare GetPercentPosition su tutti e tre i tipi di oggetti recordset, incluse le tabelle senza indici. Non è tuttavia possibile chiamare GetPercentPosition snapshot di scorrimento forward-only o su un recordset aperto da una query pass-through su un database esterno. Se non è presente alcun record corrente o se il record corrente è stato eliminato, viene generata un'eccezione CDaoException .

Per informazioni correlate, vedere l'argomento "Proprietà PercentPosition" nella Guida di DAO.

CDaoRecordset::GetRecordCount

Chiamare questa funzione membro per scoprire quanti record in un recordset sono stati accessibili.

long GetRecordCount();

Valore restituito

Restituisce il numero di record a cui si accede in un oggetto recordset.

Osservazioni:

GetRecordCount non indica il numero di record contenuti in un recordset di tipo dynaset o snapshot fino a quando non si accede a tutti i record. Il completamento di questa chiamata di funzione membro può richiedere una quantità significativa di tempo.

Dopo l'accesso all'ultimo record, il valore restituito indica il numero totale di record non recapitati nel recordset. Per forzare l'accesso all'ultimo record, chiamare la MoveLast funzione membro o FindLast per il recordset. È anche possibile usare un conteggio SQL per determinare il numero approssimativo di record restituiti dalla query.

Quando l'applicazione elimina i record in un recordset di tipo dynaset, il valore restituito di GetRecordCount diminuisce. Tuttavia, i record eliminati da altri utenti non vengono riflessi da GetRecordCount finché il record corrente non viene posizionato in un record eliminato. Se si esegue una transazione che influisce sul numero di record e successivamente si esegue il rollback della transazione, GetRecordCount non rifletterà il numero effettivo di record rimanenti.

Il valore di GetRecordCount da un recordset di tipo snapshot non è interessato dalle modifiche apportate alle tabelle sottostanti.

Il valore di GetRecordCount da un recordset di tipo tabella riflette il numero approssimativo di record nella tabella e viene interessato immediatamente quando i record di tabella vengono aggiunti ed eliminati.

Un recordset senza record restituisce un valore pari a 0. Quando si utilizzano tabelle collegate o database ODBC, GetRecordCount restituisce sempre - 1. La chiamata alla Requery funzione membro in un recordset reimposta il valore di GetRecordCount come se la query fosse stata eseguita nuovamente.

Per informazioni correlate, vedere l'argomento "Proprietà RecordCount" nella Guida di DAO.

CDaoRecordset::GetSQL

Chiamare questa funzione membro per ottenere l'istruzione SQL usata per selezionare i record del recordset all'apertura.

CString GetSQL() const;

Valore restituito

Oggetto CString contenente l'istruzione SQL.

Osservazioni:

In genere si tratta di un'istruzione SQL SELECT .

La stringa restituita da GetSQL è in genere diversa da qualsiasi stringa passata al recordset nel parametro lpszSQL alla funzione membro Open . Ciò è dovuto al fatto che il recordset costruisce un'istruzione SQL completa in base a ciò che è stato passato a Open, a quello specificato con ClassWizard e a ciò che è possibile specificare nei membri dati m_strFilter e m_strSort .

Nota

Chiamare questa funzione membro solo dopo aver chiamato Open.

Per informazioni correlate, vedere l'argomento "Proprietà SQL" nella Guida di DAO.

CDaoRecordset::GetType

Chiamare questa funzione membro dopo aver aperto il recordset per determinare il tipo dell'oggetto recordset.

short GetType();

Valore restituito

Uno dei valori seguenti che indica il tipo di un recordset:

  • dbOpenTable Recordset di tipo tabella

  • dbOpenDynaset Recordset di tipo Dynaset

  • dbOpenSnapshot Recordset di tipo snapshot

Osservazioni:

Per informazioni correlate, vedere l'argomento "Type Property" nella Guida di DAO.

CDaoRecordset::GetValidationRule

Chiamare questa funzione membro per determinare la regola usata per convalidare i dati.

CString GetValidationRule();

Valore restituito

Oggetto CString contenente un valore che convalida i dati in un record man mano che viene modificato o aggiunto a una tabella.

Osservazioni:

Questa regola è basata su testo e viene applicata ogni volta che viene modificata la tabella sottostante. Se i dati non sono validi, MFC genera un'eccezione. Il messaggio di errore restituito è il testo della proprietà ValidationText dell'oggetto campo sottostante, se specificato, o il testo dell'espressione specificata dalla proprietà ValidationRule dell'oggetto campo sottostante. È possibile chiamare GetValidationText per ottenere il testo del messaggio di errore.

Ad esempio, un campo in un record che richiede il giorno del mese potrebbe avere una regola di convalida, ad esempio "DAY BETWEEN 1 AND 31".

Per informazioni correlate, vedere l'argomento "ValidationRule Property" nella Guida di DAO.

CDaoRecordset::GetValidationText

Chiamare questa funzione membro per recuperare il testo della proprietà ValidationText dell'oggetto campo sottostante.

CString GetValidationText();

Valore restituito

Oggetto CString contenente il testo del messaggio visualizzato se il valore di un campo non soddisfa la regola di convalida dell'oggetto campo sottostante.

Osservazioni:

Per informazioni correlate, vedere l'argomento "Proprietà ValidationText" nella Guida di DAO.

CDaoRecordset::IsBOF

Chiamare questa funzione membro prima di scorrere dal record al record per sapere se si è passati prima del primo record dell'oggetto recordset.

BOOL IsBOF() const;

Valore restituito

Diverso da zero se il recordset non contiene record o se è stato eseguito lo scorrimento indietro prima del primo record; in caso contrario, 0.

Osservazioni:

È anche possibile chiamare IsBOF insieme IsEOF a per determinare se il recordset contiene record o è vuoto. Immediatamente dopo la chiamata Opena , se il recordset non contiene record, IsBOF restituisce un valore diverso da zero. Quando si apre un recordset con almeno un record, il primo record è il record corrente e IsBOF restituisce 0.

Se il primo record è il record corrente e si chiama MovePrev, IsBOF restituirà successivamente un valore diverso da zero. Se IsBOF restituisce un valore diverso da zero e si chiama MovePrev, viene generata un'eccezione. Se IsBOF restituisce un valore diverso da zero, il record corrente non è definito e qualsiasi azione che richiede un record corrente genererà un'eccezione.

Effetto di metodi specifici su IsBOF e IsEOF impostazioni:

  • La chiamata Open* internamente rende il primo record nel recordset il record corrente chiamando MoveFirst. Pertanto, la chiamata Open a un set vuoto di record causa IsBOF e IsEOF restituisce un valore diverso da zero. Per il comportamento di una chiamata o MoveLast non riuscitaMoveFirst, vedere la tabella seguente.

  • Tutte le operazioni di spostamento che individuano correttamente un record causano sia IsBOF IsEOF che restituiscono 0.

  • Una AddNew chiamata seguita da una Update chiamata che inserisce correttamente un nuovo record restituirà IsBOF 0, ma solo se IsEOF è già diverso da zero. Lo stato di IsEOF rimarrà sempre invariato. Come definito dal motore di database Microsoft Jet, il puntatore di record corrente di un recordset vuoto si trova alla fine di un file, quindi qualsiasi nuovo record viene inserito dopo il record corrente.

  • Qualsiasi Delete chiamata, anche se rimuove l'unico record rimanente da un recordset, non modifica il valore di IsBOF o IsEOF.

Questa tabella mostra le operazioni di spostamento consentite con combinazioni diverse di IsBOF/ IsEOF.

Provincia MoveFirst, MoveLast MovePrev,

Move < 0
Move 0 MoveNext,

Move > 0
IsBOF=diverso da zero,

IsEOF=0
Consentito Eccezione Eccezione Consentito
IsBOF=0,

IsEOF=diverso da zero
Consentito Consentito Eccezione Eccezione
Entrambi diversi da zero Eccezione Eccezione Eccezione Eccezione
Entrambi 0 Consentito Consentito Consentito Consentito

Se si consente un'operazione di spostamento, non si intende che l'operazione individua correttamente un record. Indica semplicemente che un tentativo di eseguire l'operazione di spostamento specificata è consentito e non genera un'eccezione. Il valore delle IsBOF funzioni membro e IsEOF può cambiare in seguito al tentativo di spostamento.

L'effetto delle operazioni di spostamento che non individuano un record sul valore di IsBOF e IsEOF le impostazioni è illustrato nella tabella seguente.

Operazioni IsBOF IsEOF
MoveFirst, MoveLast Diverso da zero Diverso da zero
Move 0 Nessuna modifica Nessuna modifica
MovePrev, Move< 0 Diverso da zero Nessuna modifica
MoveNext, Move> 0 Nessuna modifica Diverso da zero

Per informazioni correlate, vedere l'argomento "BOF, EOF Properties" nella Guida di DAO.

CDaoRecordset::IsDeleted

Chiamare questa funzione membro per determinare se il record corrente è stato eliminato.

BOOL IsDeleted() const;

Valore restituito

Diverso da zero se il recordset è posizionato su un record eliminato; in caso contrario, 0.

Osservazioni:

Se si scorre fino a un record e IsDeleted restituisce TRUE (diverso da zero), è necessario scorrere fino a un altro record prima di poter eseguire qualsiasi altra operazione del recordset.

Nota

Non è necessario controllare lo stato eliminato per i record in un recordset di snapshot o di tipo tabella. Poiché i record non possono essere eliminati da uno snapshot, non è necessario chiamare IsDeleted. Per i recordset di tipo tabella, i record eliminati vengono effettivamente rimossi dal recordset. Dopo l'eliminazione di un record, da parte dell'utente, di un altro utente o di un altro recordset, non è possibile tornare a tale record. Non è quindi necessario chiamare IsDeleted.

Quando si elimina un record da un dynaset, questo viene rimosso dal recordset e non è possibile scorrere di nuovo fino a tale record. Tuttavia, se un record in un dynaset viene eliminato da un altro utente o in un altro recordset basato sulla stessa tabella, IsDeleted restituisce TRUE quando si scorre successivamente fino a tale record.

Per informazioni correlate, vedere gli argomenti "Delete Method", "LastModified Property" e "EditMode Property" nella Guida di DAO.

CDaoRecordset::IsEOF

Chiamare questa funzione membro mentre si scorre dal record al record per sapere se si è superato l'ultimo record del recordset.

BOOL IsEOF() const;

Valore restituito

Diverso da zero se il recordset non contiene record o se è stato eseguito lo scorrimento oltre l'ultimo record; in caso contrario, 0.

Osservazioni:

È anche possibile chiamare IsEOF per determinare se il recordset contiene record o è vuoto. Immediatamente dopo la chiamata Opena , se il recordset non contiene record, IsEOF restituisce un valore diverso da zero. Quando si apre un recordset con almeno un record, il primo record è il record corrente e IsEOF restituisce 0.

Se l'ultimo record è il record corrente quando si chiama MoveNext, IsEOF restituirà successivamente un valore diverso da zero. Se IsEOF restituisce un valore diverso da zero e si chiama MoveNext, viene generata un'eccezione. Se IsEOF restituisce un valore diverso da zero, il record corrente non è definito e qualsiasi azione che richiede un record corrente genererà un'eccezione.

Effetto di metodi specifici su IsBOF e IsEOF impostazioni:

  • La chiamata Open internamente rende il primo record nel recordset il record corrente chiamando MoveFirst. Pertanto, la chiamata Open a un set vuoto di record causa IsBOF e IsEOF restituisce un valore diverso da zero. Per il comportamento di una chiamata non riuscita MoveFirst , vedere la tabella seguente.

  • Tutte le operazioni di spostamento che individuano correttamente un record causano sia IsBOF IsEOF che restituiscono 0.

  • Una AddNew chiamata seguita da una Update chiamata che inserisce correttamente un nuovo record restituirà IsBOF 0, ma solo se IsEOF è già diverso da zero. Lo stato di IsEOF rimarrà sempre invariato. Come definito dal motore di database Microsoft Jet, il puntatore di record corrente di un recordset vuoto si trova alla fine di un file, quindi qualsiasi nuovo record viene inserito dopo il record corrente.

  • Qualsiasi Delete chiamata, anche se rimuove l'unico record rimanente da un recordset, non modifica il valore di IsBOF o IsEOF.

Questa tabella mostra le operazioni di spostamento consentite con combinazioni diverse di IsBOF/ IsEOF.

Provincia MoveFirst, MoveLast MovePrev,

Move < 0
Move 0 MoveNext,

Move > 0
IsBOF=diverso da zero,

IsEOF=0
Consentito Eccezione Eccezione Consentito
IsBOF=0,

IsEOF=diverso da zero
Consentito Consentito Eccezione Eccezione
Entrambi diversi da zero Eccezione Eccezione Eccezione Eccezione
Entrambi 0 Consentito Consentito Consentito Consentito

Se si consente un'operazione di spostamento, non si intende che l'operazione individua correttamente un record. Indica semplicemente che un tentativo di eseguire l'operazione di spostamento specificata è consentito e non genera un'eccezione. Il valore delle IsBOF funzioni membro e IsEOF può cambiare in seguito al tentativo di spostamento.

L'effetto delle operazioni di spostamento che non individuano un record sul valore di IsBOF e IsEOF le impostazioni è illustrato nella tabella seguente.

Operazioni IsBOF IsEOF
MoveFirst, MoveLast Diverso da zero Diverso da zero
Move 0 Nessuna modifica Nessuna modifica
MovePrev, Move< 0 Diverso da zero Nessuna modifica
MoveNext, Move> 0 Nessuna modifica Diverso da zero

Per informazioni correlate, vedere l'argomento "BOF, EOF Properties" nella Guida di DAO.

CDaoRecordset::IsFieldDirty

Chiamare questa funzione membro per determinare se il membro dati del campo specificato di un dynaset è stato contrassegnato come "dirty" (modificato).

BOOL IsFieldDirty(void* pv);

Parametri

Pv
Puntatore al membro dati del campo di cui si desidera controllare lo stato oppure NULL per determinare se uno dei campi è dirty.

Valore restituito

Diverso da zero se il membro dati del campo specificato è contrassegnato come dirty; in caso contrario, 0.

Osservazioni:

I dati in tutti i membri dati di campo dirty vengono trasferiti al record nell'origine dati quando il record corrente viene aggiornato da una chiamata alla Update funzione membro di CDaoRecordset (dopo una chiamata a Edit o AddNew). Con queste informazioni, è possibile eseguire ulteriori passaggi, ad esempio annullare ilflagging del membro dati del campo per contrassegnare la colonna in modo che non venga scritta nell'origine dati.

IsFieldDirty viene implementato tramite DoFieldExchange.

CDaoRecordset::IsFieldNull

Chiamare questa funzione membro per determinare se il membro dati del campo specificato di un recordset è stato contrassegnato come Null.

BOOL IsFieldNull(void* pv);

Parametri

Pv
Puntatore al membro dati del campo di cui si desidera controllare lo stato oppure NULL per determinare se uno dei campi è Null.

Valore restituito

Diverso da zero se il membro dati del campo specificato è contrassegnato come Null; in caso contrario, 0.

Osservazioni:

Nella terminologia del database Null significa "senza valore" e non è uguale a NULL in C++. Se un membro dati di campo è contrassegnato come Null, viene interpretato come una colonna del record corrente per cui non è presente alcun valore.

Nota

In determinate situazioni, l'uso IsFieldNull di può risultare inefficiente, come illustrato nell'esempio di codice seguente:

COleVariant varValue;
void *pField = &(rs.m_Age);
int nField = 2;

// this code is inefficient because data
// must be retrieved for both IsFieldNull
// and GetFieldValue
if (!rs.IsFieldNull(pField))
   rs.GetFieldValue(nField, varValue);

// this code is more efficient
rs.GetFieldValue(nField, varValue);
if (varValue.vt == VT_NULL)
   varValue.Attach(varNewVal); // do something

Nota

Se si usa l'associazione di record dinamica, senza derivare da CDaoRecordset, assicurarsi di usare VT_NULL come illustrato nell'esempio.

CDaoRecordset::IsFieldNullable

Chiamare questa funzione membro per determinare se il membro dati del campo specificato è "nullable" (può essere impostato su un valore Null; C++ NULL non è uguale a Null, che, nella terminologia del database, significa "senza valore".

BOOL IsFieldNullable(void* pv);

Parametri

Pv
Puntatore al membro dati del campo di cui si desidera controllare lo stato oppure NULL per determinare se uno dei campi è Null.

Valore restituito

Diverso da zero se il membro dati del campo specificato può essere reso Null; in caso contrario, 0.

Osservazioni:

Un campo che non può essere Null deve avere un valore. Se si tenta di impostare tale campo su Null durante l'aggiunta o l'aggiornamento di un record, l'origine dati rifiuta l'aggiunta o l'aggiornamento e Update genererà un'eccezione. L'eccezione si verifica quando si chiama Update, non quando si chiama SetFieldNull.

CDaoRecordset::IsOpen

Chiamare questa funzione membro per determinare se il recordset è aperto.

BOOL IsOpen() const;

Valore restituito

Diverso da zero se la funzione membro o Requery dell'oggetto Open recordset è stata chiamata in precedenza e il recordset non è stato chiuso; in caso contrario, 0.

Osservazioni:

CDaoRecordset::m_bCheckCacheForDirtyFields

Contiene un flag che indica se i campi memorizzati nella cache vengono contrassegnati automaticamente come dirty (modificati) e Null.

Osservazioni:

Per impostazione predefinita, il flag è TRUE. L'impostazione in questo membro dati controlla l'intero meccanismo di buffering doppio. Se si imposta il flag su TRUE, è possibile disattivare la memorizzazione nella cache in base al campo usando il meccanismo DFX. Se si imposta il flag su FALSE, è necessario chiamare SetFieldDirty e SetFieldNull se stessi.

Impostare questo membro dati prima di chiamare Open. Questo meccanismo è principalmente per facilitare l'uso. Le prestazioni possono essere più lente a causa del doppio buffer dei campi quando vengono apportate modifiche.

CDaoRecordset::m_nFields

Contiene il numero di membri dati del campo nella classe recordset e il numero di colonne selezionate dal recordset dall'origine dati.

Osservazioni:

Il costruttore per la classe recordset deve essere inizializzato m_nFields con il numero corretto di campi associati in modo statico. ClassWizard scrive questa inizializzazione quando viene usata per dichiarare la classe recordset. È anche possibile scriverlo manualmente.

Il framework usa questo numero per gestire l'interazione tra i membri dati del campo e le colonne corrispondenti del record corrente nell'origine dati.

Nota

Questo numero deve corrispondere al numero di colonne di output registrate in DoFieldExchange dopo una chiamata a SetFieldType con il parametro CDaoFieldExchange::outputColumn.

È possibile associare le colonne in modo dinamico tramite CDaoRecordset::GetFieldValue e CDaoRecordset::SetFieldValue. In questo caso, non è necessario incrementare il conteggio in m_nFields per riflettere il numero di chiamate di funzione DFX nella DoFieldExchange funzione membro.

CDaoRecordset::m_nParams

Contiene il numero di membri dati dei parametri nella classe recordset, ovvero il numero di parametri passati con la query del recordset.

Osservazioni:

Se la classe recordset include membri dati di parametro, il costruttore per la classe deve inizializzare m_nParams con il numero corretto. Il valore predefinito di m_nParams è 0. Se si aggiungono membri dati dei parametri, che è necessario eseguire manualmente, è necessario aggiungere manualmente un'inizializzazione nel costruttore della classe per riflettere il numero di parametri (che devono essere almeno il numero di segnaposto '' nel m_strFilter o m_strSort stringa).

Il framework usa questo numero quando parametrizza la query del recordset.

Nota

Questo numero deve corrispondere al numero di "params" registrati in DoFieldExchange dopo una chiamata a SetFieldType con il parametro CFieldExchange::param.

Per informazioni correlate, vedere l'argomento "Oggetto parametro" nella Guida di DAO.

CDaoRecordset::m_pDAORecordset

Contiene un puntatore all'interfaccia OLE per l'oggetto recordset DAO sottostante l'oggetto CDaoRecordset .

Osservazioni:

Usare questo puntatore se è necessario accedere direttamente all'interfaccia DAO.

Per informazioni correlate, vedere l'argomento "Oggetto Recordset" nella Guida di DAO.

CDaoRecordset::m_pDatabase

Contiene un puntatore all'oggetto tramite il quale il recordset è connesso a un'origine CDaoDatabase dati.

Osservazioni:

Questa variabile viene impostata in due modi. In genere, si passa un puntatore a un oggetto già aperto CDaoDatabase quando si costruisce l'oggetto recordset. Se invece si passa NULL, CDaoRecordset crea un CDaoDatabase oggetto per l'utente e lo apre. In entrambi i casi, CDaoRecordset archivia il puntatore in questa variabile.

In genere non è necessario usare direttamente il puntatore archiviato in m_pDatabase. Se si scrivono estensioni personalizzate in CDaoRecordset, tuttavia, potrebbe essere necessario usare il puntatore. Ad esempio, potrebbe essere necessario il puntatore se si genera un'eccezione CDaoException(s).

Per informazioni correlate, vedere l'argomento "Oggetto database" nella Guida di DAO.

CDaoRecordset::m_strFilter

Contiene una stringa utilizzata per costruire la clausola WHERE di un'istruzione SQL.

Osservazioni:

Non include la parola riservata WHERE per filtrare il recordset. L'uso di questo membro dati non è applicabile ai recordset di tipo tabella. L'utilizzo di m_strFilter non ha alcun effetto quando si apre un recordset utilizzando un CDaoQueryDef puntatore.

Usa il formato di data degli Stati Uniti (mese-giorno-anno) quando filtra i campi contenenti date, anche se non usi la versione statunitense del motore di database Microsoft Jet; in caso contrario, i dati potrebbero non essere filtrati come previsto.

Per informazioni correlate, vedere l'argomento "Filtra proprietà" nella Guida di DAO.

CDaoRecordset::m_strSort

Contiene una stringa contenente la clausola ORDERBY di un'istruzione SQL senza le parole riservate ORDERBY.

Osservazioni:

È possibile ordinare in oggetti recordset di tipo dynaset e snapshot.

Non è possibile ordinare oggetti recordset di tipo tabella. Per determinare l'ordinamento di un recordset di tipo tabella, chiamare SetCurrentIndex.

L'uso di m_strSort non ha alcun effetto quando si apre un recordset usando un CDaoQueryDef puntatore.

Per informazioni correlate, vedere l'argomento "Ordina proprietà" nella Guida di DAO.

CDaoRecordset::Move

Chiamare questa funzione membro per posizionare i record lRows del recordset dal record corrente.

virtual void Move(long lRows);

Parametri

lRows
Numero di record da spostare avanti o indietro. I valori positivi si spostano in avanti, verso la fine del recordset. I valori negativi si spostano all'indietro, verso l'inizio.

Osservazioni:

È possibile spostarsi avanti o indietro. Move( 1 ) equivale a MoveNexte Move( -1 ) equivale a MovePrev.

Attenzione

La chiamata a una delle Move funzioni genera un'eccezione se il recordset non contiene record. In generale, chiamare sia IsBOF che IsEOF prima di un'operazione Di spostamento per determinare se il recordset contiene record. Dopo aver chiamato o Requery, chiamare Open IsBOF o IsEOF.

Nota

Se è stato eseguito lo scorrimento oltre l'inizio o la fine del recordset ( IsBOF o IsEOF restituisce un valore diverso da zero), una chiamata a Move genera un'eccezione CDaoException.

Nota

Se si chiama una delle Move funzioni durante l'aggiornamento o l'aggiunta del record corrente, gli aggiornamenti vengono persi senza avvisi.

Quando si chiama Move uno snapshot di scorrimento forward-only, il parametro lRows deve essere un numero intero positivo e i segnalibri non sono consentiti, quindi è possibile spostarsi solo in avanti.

Per impostare il primo record, l'ultimo, successivo o precedente in un recordset, chiamare la MoveFirstfunzione membro , MoveLastMoveNext, o MovePrev .

Per informazioni correlate, vedere gli argomenti "Move Method" e "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" nella Guida di DAO.

CDaoRecordset::MoveFirst

Chiamare questa funzione membro per creare il primo record nel recordset (se presente) il record corrente.

void MoveFirst();

Osservazioni:

Non è necessario chiamare MoveFirst immediatamente dopo aver aperto il recordset. In quel momento, il primo record (se presente) è automaticamente il record corrente.

Attenzione

La chiamata a una delle Move funzioni genera un'eccezione se il recordset non contiene record. In generale, chiamare sia IsBOF che IsEOF prima di un'operazione Di spostamento per determinare se il recordset contiene record. Dopo aver chiamato o Requery, chiamare Open IsBOF o IsEOF.

Nota

Se si chiama una delle Move funzioni durante l'aggiornamento o l'aggiunta del record corrente, gli aggiornamenti vengono persi senza avvisi.

Usare le Move funzioni per passare dal record al record senza applicare una condizione. Utilizzare le operazioni Find per individuare i record in un oggetto recordset di tipo dynaset o snapshot che soddisfa una determinata condizione. Per individuare un record in un oggetto recordset di tipo tabella, chiamare Seek.

Se il recordset fa riferimento a un recordset di tipo tabella, lo spostamento segue l'indice corrente della tabella. È possibile impostare l'indice corrente usando la proprietà Index dell'oggetto DAO sottostante. Se non si imposta l'indice corrente, l'ordine dei record restituiti non è definito.

Se si chiama MoveLast su un oggetto recordset basato su una query SQL o querydef, la query viene forzata al completamento e l'oggetto recordset viene popolato completamente.

Non è possibile chiamare la MoveFirst funzione membro o MovePrev con uno snapshot di scorrimento forward-only.

Per spostare la posizione del record corrente in un oggetto recordset un numero specifico di record in avanti o indietro, chiamare Move.

Per informazioni correlate, vedere gli argomenti "Move Method" e "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" nella Guida di DAO.

CDaoRecordset::MoveLast

Chiamare questa funzione membro per creare l'ultimo record (se presente) nel recordset del record corrente.

void MoveLast();

Osservazioni:

Attenzione

La chiamata a una delle Move funzioni genera un'eccezione se il recordset non contiene record. In generale, chiamare sia IsBOF che IsEOF prima di un'operazione Di spostamento per determinare se il recordset contiene record. Dopo aver chiamato o Requery, chiamare Open IsBOF o IsEOF.

Nota

Se si chiama una delle Move funzioni durante l'aggiornamento o l'aggiunta del record corrente, gli aggiornamenti vengono persi senza avvisi.

Usare le Move funzioni per passare dal record al record senza applicare una condizione. Utilizzare le operazioni Find per individuare i record in un oggetto recordset di tipo dynaset o snapshot che soddisfa una determinata condizione. Per individuare un record in un oggetto recordset di tipo tabella, chiamare Seek.

Se il recordset fa riferimento a un recordset di tipo tabella, lo spostamento segue l'indice corrente della tabella. È possibile impostare l'indice corrente usando la proprietà Index dell'oggetto DAO sottostante. Se non si imposta l'indice corrente, l'ordine dei record restituiti non è definito.

Se si chiama MoveLast su un oggetto recordset basato su una query SQL o querydef, la query viene forzata al completamento e l'oggetto recordset viene popolato completamente.

Per spostare la posizione del record corrente in un oggetto recordset un numero specifico di record in avanti o indietro, chiamare Move.

Per informazioni correlate, vedere gli argomenti "Move Method" e "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" nella Guida di DAO.

CDaoRecordset::MoveNext

Chiamare questa funzione membro per impostare il record successivo nel recordset corrente.

void MoveNext();

Osservazioni:

È consigliabile chiamare IsBOF prima di tentare di passare al record precedente. Una chiamata a MovePrev genera un valore se IsBOF restituisce un CDaoException valore diverso da zero, a indicare che è già stato eseguito lo scorrimento prima del primo record o che nessun record è stato selezionato dal recordset.

Attenzione

La chiamata a una delle Move funzioni genera un'eccezione se il recordset non contiene record. In generale, chiamare sia IsBOF che IsEOF prima di un'operazione Di spostamento per determinare se il recordset contiene record. Dopo aver chiamato o Requery, chiamare Open IsBOF o IsEOF.

Nota

Se si chiama una delle Move funzioni durante l'aggiornamento o l'aggiunta del record corrente, gli aggiornamenti vengono persi senza avvisi.

Usare le Move funzioni per passare dal record al record senza applicare una condizione. Utilizzare le operazioni Find per individuare i record in un oggetto recordset di tipo dynaset o snapshot che soddisfa una determinata condizione. Per individuare un record in un oggetto recordset di tipo tabella, chiamare Seek.

Se il recordset fa riferimento a un recordset di tipo tabella, lo spostamento segue l'indice corrente della tabella. È possibile impostare l'indice corrente usando la proprietà Index dell'oggetto DAO sottostante. Se non si imposta l'indice corrente, l'ordine dei record restituiti non è definito.

Per spostare la posizione del record corrente in un oggetto recordset un numero specifico di record in avanti o indietro, chiamare Move.

Per informazioni correlate, vedere gli argomenti "Move Method" e "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" nella Guida di DAO.

CDaoRecordset::MovePrev

Chiamare questa funzione membro per impostare il record precedente nel recordset corrente.

void MovePrev();

Osservazioni:

È consigliabile chiamare IsBOF prima di tentare di passare al record precedente. Una chiamata a MovePrev genera un valore se IsBOF restituisce un CDaoException valore diverso da zero, a indicare che è già stato eseguito lo scorrimento prima del primo record o che nessun record è stato selezionato dal recordset.

Attenzione

La chiamata a una delle Move funzioni genera un'eccezione se il recordset non contiene record. In generale, chiamare sia IsBOF che IsEOF prima di un'operazione Di spostamento per determinare se il recordset contiene record. Dopo aver chiamato o Requery, chiamare Open IsBOF o IsEOF.

Nota

Se si chiama una delle Move funzioni durante l'aggiornamento o l'aggiunta del record corrente, gli aggiornamenti vengono persi senza avvisi.

Usare le Move funzioni per passare dal record al record senza applicare una condizione. Utilizzare le operazioni Find per individuare i record in un oggetto recordset di tipo dynaset o snapshot che soddisfa una determinata condizione. Per individuare un record in un oggetto recordset di tipo tabella, chiamare Seek.

Se il recordset fa riferimento a un recordset di tipo tabella, lo spostamento segue l'indice corrente della tabella. È possibile impostare l'indice corrente usando la proprietà Index dell'oggetto DAO sottostante. Se non si imposta l'indice corrente, l'ordine dei record restituiti non è definito.

Non è possibile chiamare la MoveFirst funzione membro o MovePrev con uno snapshot di scorrimento forward-only.

Per spostare la posizione del record corrente in un oggetto recordset un numero specifico di record in avanti o indietro, chiamare Move.

Per informazioni correlate, vedere gli argomenti "Move Method" e "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" nella Guida di DAO.

CDaoRecordset::Open

È necessario chiamare questa funzione membro per recuperare i record per il recordset.

virtual void Open(
    int nOpenType = AFX_DAO_USE_DEFAULT_TYPE,
    LPCTSTR lpszSQL = NULL,
    int nOptions = 0);

virtual void Open(
    CDaoTableDef* pTableDef,
    int nOpenType = dbOpenTable,
    int nOptions = 0);

virtual void Open(
    CDaoQueryDef* pQueryDef,
    int nOpenType = dbOpenDynaset,
    int nOptions = 0);

Parametri

nOpenType
Uno dei valori seguenti:

  • dbOpenDynaset Recordset di tipo dynaset con scorrimento bidirezionale. Si tratta dell'impostazione predefinita.

  • dbOpenTable Recordset di tipo tabella con scorrimento bidirezionale.

  • dbOpenSnapshot Recordset di tipo snapshot con scorrimento bidirezionale.

lpszSQL
Puntatore di stringa contenente uno degli elementi seguenti:

  • Puntatore NULL.

  • Nome di uno o più tabledef e/o querydef (delimitati da virgole).

  • Istruzione SQL SELECT (facoltativamente con una clausola SQL WHERE o ORDERBY ).

  • Query pass-through.

nOptions
Una o più delle opzioni elencate di seguito. Il valore predefinito è 0. I possibili valori sono i seguenti:

  • dbAppendOnly È possibile aggiungere solo nuovi record (solo recordset di tipo dynaset). Questa opzione significa letteralmente che i record possono essere aggiunti solo. Le classi di database ODBC MFC hanno un'opzione di sola accodamento che consente il recupero e l'aggiunta dei record.

  • dbForwardOnly Il recordset è uno snapshot di scorrimento forward-only.

  • dbSeeChanges Generare un'eccezione se un altro utente sta modificando i dati che si stanno modificando.

  • dbDenyWrite Altri utenti non possono modificare o aggiungere record.

  • dbDenyRead Altri utenti non possono visualizzare i record (solo recordset di tipo tabella).

  • dbReadOnly È possibile visualizzare solo i record; altri utenti possono modificarli.

  • dbInconsistent Sono consentiti aggiornamenti incoerenti (solo recordset di tipo dynaset).

  • dbConsistent Sono consentiti solo aggiornamenti coerenti (solo recordset di tipo dynaset).

Nota

Le costanti dbConsistent e dbInconsistent si escludono a vicenda. È possibile usare uno o l'altro, ma non entrambi in una determinata istanza di Open.

pTableDef
Puntatore a un oggetto CDaoTableDef . Questa versione è valida solo per i recordset di tipo tabella. Quando si usa questa opzione, il CDaoDatabase puntatore usato per costruire CDaoRecordset l'oggetto non viene usato. Invece, viene usato il database in cui risiede l'oggetto tabledef.

pQueryDef
Puntatore a un oggetto CDaoQueryDef . Questa versione è valida solo per i recordset di tipo dynaset e snapshot. Quando si usa questa opzione, il CDaoDatabase puntatore usato per costruire CDaoRecordset l'oggetto non viene usato; invece, viene usato il database in cui risiede querydef.

Osservazioni:

Prima di chiamare Open, è necessario costruire l'oggetto recordset. Questa operazione può essere eseguita in diversi modi:

  • Quando si costruisce l'oggetto recordset, passare un puntatore a un CDaoDatabase oggetto già aperto.

  • Quando si costruisce l'oggetto recordset, passare un puntatore a un CDaoDatabase oggetto che non è aperto. Il recordset apre un CDaoDatabase oggetto , ma non lo chiude quando l'oggetto recordset viene chiuso.

  • Quando si costruisce l'oggetto recordset, passare un puntatore NULL. L'oggetto recordset chiama GetDefaultDBName per ottenere il nome dell'oggetto Microsoft Access. File MDB da aprire. Il recordset apre quindi un CDaoDatabase oggetto e lo mantiene aperto finché il recordset è aperto. Quando si chiama Close sul recordset, viene chiuso anche l'oggetto CDaoDatabase .

    Nota

    Quando il recordset apre l'oggetto CDaoDatabase , apre l'origine dati con accesso non esclusivo.

Per la versione di Open che usa il parametro lpszSQL , una volta aperto il recordset, è possibile recuperare i record in uno dei diversi modi. La prima opzione consiste nell'avere funzioni DFX in DoFieldExchange. La seconda opzione consiste nell'usare l'associazione dinamica chiamando la GetFieldValue funzione membro. Queste opzioni possono essere implementate separatamente o in combinazione. Se vengono combinati, sarà necessario passare manualmente l'istruzione SQL alla chiamata a Open.

Quando si usa la seconda versione di Open in cui si passa un CDaoTableDef oggetto, le colonne risultanti sono disponibili per l'associazione tramite DoFieldExchange e il meccanismo DFX e/o l'associazione dinamicamente tramite GetFieldValue.

Nota

È possibile chiamare Open solo utilizzando un CDaoTableDef oggetto per i recordset di tipo tabella.

Quando si usa la terza versione di Open in cui si passa un CDaoQueryDef oggetto , tale query viene eseguita e le colonne risultanti sono disponibili per l'associazione tramite DoFieldExchange e il meccanismo DFX e/o l'associazione dinamica tramite GetFieldValue.

Nota

È possibile chiamare Open solo usando un CDaoQueryDef oggetto per i recordset di tipo dynaset e snapshot.

Per la prima versione di Open che usa il lpszSQL parametro , i record vengono selezionati in base ai criteri illustrati nella tabella seguente.

Valore del parametro lpszSQL I record selezionati sono determinati da Esempio
NULL Stringa restituita da GetDefaultSQL.
Elenco delimitato da virgole di uno o più tabledef e/o nomi querydef. Tutte le colonne rappresentate nell'oggetto DoFieldExchange. "Customer"
SELECT column-list FROM table-list Colonne specificate dai tabledef e/o querydef specificati. "SELECT CustId, CustName

FROM Customer"

La routine consueta consiste nel passare NULL a Open. In tal caso, Open chiama GetDefaultSQL, una funzione membro sostituibile generata da ClassWizard durante la creazione di una CDaoRecordsetclasse derivata da . Questo valore fornisce i nomi tabledef e/o querydef specificati in ClassWizard. È invece possibile specificare altre informazioni nel parametro lpszSQL .

Indipendentemente dal passaggio, Open costruisce una stringa SQL finale per la query (la stringa può includere clausole SQL WHERE e ORDERBY aggiunte alla stringa lpszSQL passata) e quindi esegue la query. È possibile esaminare la stringa costruita chiamando dopo aver chiamato GetSQL Open.

I membri dei dati di campo della classe recordset sono associati alle colonne dei dati selezionati. Se vengono restituiti record, il primo di essi diventa il record corrente.

Se si desidera impostare le opzioni per il recordset, ad esempio un filtro o un ordinamento, impostare m_strSort o m_strFilter dopo aver costruito l'oggetto recordset, ma prima di chiamare Open. Se si desidera aggiornare i record nel recordset dopo che il recordset è già aperto, chiamare Requery.

Se si chiama Open su un recordset di tipo dynaset o snapshot oppure se l'origine dati fa riferimento a un'istruzione SQL o a un tabledef che rappresenta una tabella associata, non è possibile usare dbOpenTable per l'argomento di tipo. In caso contrario, MFC genera un'eccezione. Per determinare se un oggetto tabledef rappresenta una tabella associata, creare un oggetto CDaoTableDef e chiamare la relativa funzione membro GetConnect .

Usare il dbSeeChanges flag se si desidera intercettare le modifiche apportate da un altro utente o da un altro programma nel computer quando si modifica o si elimina lo stesso record. Ad esempio, se due utenti iniziano a modificare lo stesso record, il primo utente a chiamare la Update funzione membro ha esito positivo. Quando Update viene chiamato dal secondo utente, viene generata un'eccezione CDaoException . Analogamente, se il secondo utente tenta di chiamare Delete per eliminare il record ed è già stato modificato dal primo utente, si verifica un oggetto CDaoException .

In genere, se l'utente lo ottiene CDaoException durante l'aggiornamento, il codice deve aggiornare il contenuto dei campi e recuperare i valori appena modificati. Se l'eccezione si verifica durante il processo di eliminazione, il codice potrebbe visualizzare i nuovi dati del record all'utente e un messaggio che indica che i dati sono stati modificati di recente. A questo punto, il codice può richiedere una conferma che l'utente vuole comunque eliminare il record.

Suggerimento

Usare l'opzione di scorrimento forward-only (dbForwardOnly) per migliorare le prestazioni quando l'applicazione esegue un singolo passaggio attraverso un recordset aperto da un'origine dati ODBC.

Per informazioni correlate, vedere l'argomento "Metodo OpenRecordset" nella Guida di DAO.

CDaoRecordset::Requery

Chiamare questa funzione membro per ricompilare (aggiornare) un recordset.

virtual void Requery();

Osservazioni:

Se vengono restituiti record, il primo di essi diventa il record corrente.

Affinché il recordset rifletta le aggiunte e le eliminazioni eseguite dall'utente o da altri utenti all'origine dati, è necessario ricompilare il recordset chiamando Requery. Se il recordset è un dynaset, riflette automaticamente gli aggiornamenti apportati dall'utente o da altri utenti ai relativi record esistenti (ma non aggiunte). Se il recordset è uno snapshot, è necessario chiamare Requery per riflettere le modifiche da parte di altri utenti, nonché aggiunte ed eliminazioni.

Per un dynaset o uno snapshot, chiamare Requery quando si desidera ricompilare il recordset usando i valori dei parametri. Impostare il nuovo filtro o ordinare impostando m_strFilter e m_strSort prima di chiamare Requery. Impostare nuovi parametri assegnando nuovi valori ai membri dati dei parametri prima di chiamare Requery.

Se il tentativo di ricompilare il recordset non riesce, il recordset viene chiuso. Prima di chiamare Requery, è possibile determinare se il recordset può essere rieseguito chiamando la CanRestart funzione membro. CanRestart non garantisce che Requery avrà esito positivo.

Attenzione

Chiamare Requery solo dopo aver chiamato Open.

Nota

La chiamata di Requery modifica modifica segnalibri DAO.

Non è possibile chiamare Requery su un recordset di tipo dynaset o snapshot se la chiamata CanRestart restituisce 0, né è possibile usarla in un recordset di tipo tabella.

Se entrambi IsBOF e IsEOF restituiscono un valore diverso da zero dopo la chiamata Requerya , la query non ha restituito alcun record e il recordset non conterrà dati.

Per informazioni correlate, vedere l'argomento "Metodo Requery" nella Guida di DAO.

CDaoRecordset::Seek

Chiamare questa funzione membro per individuare il record in un oggetto recordset di tipo tabella indicizzato che soddisfa i criteri specificati per l'indice corrente e impostarlo come record corrente.

BOOL Seek(
    LPCTSTR lpszComparison,
    COleVariant* pKey1,
    COleVariant* pKey2 = NULL,
    COleVariant* pKey3 = NULL);

BOOL Seek(
    LPCTSTR lpszComparison,
    COleVariant* pKeyArray,
    WORD nKeys);

Parametri

lpszComparison
Una delle espressioni stringa seguenti: "<", "<=", "=", ">=" o ">".

pKey1
Puntatore a un oggetto COleVariant il cui valore corrisponde al primo campo dell'indice. Obbligatorio.

pKey2
Puntatore a un oggetto COleVariant il cui valore corrisponde al secondo campo dell'indice, se presente. Il valore predefinito è NULL.

pKey3
Puntatore a un oggetto COleVariant il cui valore corrisponde al terzo campo dell'indice, se presente. Il valore predefinito è NULL.

pKeyArray
Puntatore a una matrice di varianti. Le dimensioni della matrice corrispondono al numero di campi nell'indice.

nKeys
Intero corrispondente alla dimensione della matrice, ovvero il numero di campi nell'indice.

Nota

non specificare caratteri jolly nelle chiavi. I caratteri jolly non Seek restituiscono record corrispondenti.

Valore restituito

Diverso da zero se vengono trovati record corrispondenti, in caso contrario 0.

Osservazioni:

Usare la seconda versione (matrice) di Seek per gestire gli indici di quattro campi o più.

Seek consente la ricerca di indici ad alte prestazioni nei recordset di tipo tabella. È necessario impostare l'indice corrente chiamando SetCurrentIndex prima di chiamare Seek. Se l'indice identifica un campo o campi chiave non univoci, Seek individua il primo record che soddisfa i criteri. Se non si imposta un indice, viene generata un'eccezione.

Se non si crea un recordset UNICODE, gli COleVariant oggetti devono essere dichiarati in modo esplicito ANSI. A tale scopo, è possibile usare il formato COleVariant::COleVariant( lpszSrc , vtSrc ) del costruttore con vtSrc impostato su VT_BSTRT (ANSI) o usando la COleVariant funzione SetString( lpszSrc , vtSrc ) con vtSrc impostato su .VT_BSTRT

Quando si chiama Seek, si passano uno o più valori di chiave e un operatore di confronto ("<", "<=", "=", ">=" o ">"). Seek cerca nei campi chiave specificati e individua il primo record che soddisfa i criteri specificati da lpszComparison e pKey1. Una volta trovato, Seek restituisce un valore diverso da zero e lo rende corrente. Se Seek non riesce a individuare una corrispondenza, Seek restituisce zero e il record corrente non è definito. Quando si usa direttamente DAO, è necessario controllare in modo esplicito la proprietà NoMatch.

Se lpszComparison è "=", ">=" o ">", Seek inizia all'inizio dell'indice. Se lpszComparison è "<" o "<=", Seek inizia alla fine dell'indice e cerca all'indietro, a meno che non siano presenti voci di indice duplicate alla fine. In questo caso, Seek inizia in corrispondenza di una voce arbitraria tra le voci di indice duplicate alla fine dell'indice.

Non è necessario che sia presente un record corrente quando si usa Seek.

Per individuare un record in un recordset di tipo dynaset o snapshot che soddisfa una condizione specifica, utilizzare le operazioni Trova. Per includere tutti i record, non solo quelli che soddisfano una condizione specifica, utilizzare le operazioni Di spostamento per passare dal record al record.

Non è possibile chiamare Seek su una tabella associata di qualsiasi tipo perché le tabelle associate devono essere aperte come recordset di tipo dynaset o snapshot. Tuttavia, se si chiama CDaoDatabase::Open per aprire direttamente un database ISAM installabile, è possibile chiamare Seek le tabelle in tale database, anche se le prestazioni potrebbero risultare lente.

Per informazioni correlate, vedere l'argomento "Metodo Seek" nella Guida di DAO.

CDaoRecordset::SetAbsolutePosition

Imposta il numero di record relativo del record corrente di un oggetto recordset.

void SetAbsolutePosition(long lPosition);

Parametri

lPosition
Corrisponde alla posizione ordinale del record corrente nel recordset.

Osservazioni:

La chiamata SetAbsolutePosition consente di posizionare il puntatore del record corrente a un record specifico in base alla posizione ordinale in un recordset di tipo dynaset o snapshot. È anche possibile determinare il numero di record corrente chiamando GetAbsolutePosition.

Nota

Questa funzione membro è valida solo per i recordset di tipo dynaset e snapshot.

Il valore della proprietà AbsolutePosition dell'oggetto DAO sottostante è in base zero; un'impostazione pari a 0 fa riferimento al primo record nel recordset. Se si imposta un valore maggiore del numero di record popolati, MFC genera un'eccezione. È possibile determinare il numero di record popolati nel recordset chiamando la GetRecordCount funzione membro.

Se il record corrente viene eliminato, il valore della proprietà AbsolutePosition non è definito e MFC genera un'eccezione se viene fatto riferimento. Alla fine della sequenza vengono aggiunti nuovi record.

Nota

Questa proprietà non deve essere usata come numero di record surrogato. I segnalibri sono ancora il modo consigliato per conservare e tornare a una determinata posizione e sono l'unico modo per posizionare il record corrente in tutti i tipi di oggetti recordset che supportano i segnalibri. In particolare, la posizione di un determinato record cambia quando vengono eliminati record precedenti. Non esiste inoltre alcuna garanzia che un determinato record avrà la stessa posizione assoluta se il recordset viene ricreato perché l'ordine dei singoli record all'interno di un recordset non è garantito a meno che non venga creato con un'istruzione SQL usando una clausola ORDERBY .

Per informazioni correlate, vedere l'argomento "AbsolutePosition Property" nella Guida di DAO.

CDaoRecordset::SetBookmark

Chiamare questa funzione membro per posizionare il recordset nel record contenente il segnalibro specificato.

void SetBookmark(COleVariant varBookmark);

Parametri

varBookmark
Oggetto COleVariant contenente il valore del segnalibro per un record specifico.

Osservazioni:

Quando un oggetto recordset viene creato o aperto, ognuno dei relativi record ha già un segnalibro univoco. È possibile recuperare il segnalibro per il record corrente chiamando GetBookmark e salvando il valore in un COleVariant oggetto . In un secondo momento è possibile tornare a tale record chiamando SetBookmark usando il valore del segnalibro salvato.

Nota

La chiamata a Requery modifica i segnalibri DAO.

Se non si crea un recordset UNICODE, l'oggetto COleVariant deve essere dichiarato in modo esplicito ANSI. A tale scopo, è possibile usare il formato COleVariant::COleVariant( lpszSrc , vtSrc ) del costruttore con vtSrc impostato su VT_BSTRT (ANSI) o usando la COleVariant funzione SetString( lpszSrc , vtSrc ) con vtSrc impostato su .VT_BSTRT

Per informazioni correlate, vedere gli argomenti "Proprietà segnalibro" e Proprietà bookmarkable nella Guida di DAO.

CDaoRecordset::SetCacheSize

Chiamare questa funzione membro per impostare il numero di record da memorizzare nella cache.

void SetCacheSize(long lSize);

Parametri

lSize
Specifica il numero di record. Un valore tipico è 100. Un'impostazione pari a 0 disattiva la memorizzazione nella cache. L'impostazione deve essere compresa tra 5 e 1.200 record. La cache può usare una notevole quantità di memoria.

Osservazioni:

Una cache è uno spazio nella memoria locale che contiene i dati recuperati più di recente dal server nel caso in cui i dati vengano richiesti di nuovo mentre l'applicazione è in esecuzione. La memorizzazione nella cache dei dati migliora le prestazioni di un'applicazione che recupera i dati da un server remoto tramite oggetti recordset di tipo dynaset. Quando vengono richiesti dati, il motore di database Microsoft Jet controlla prima la cache per i dati richiesti anziché recuperarli dal server, che richiede più tempo. I dati che non provengono da un'origine dati ODBC non vengono salvati nella cache.

Qualsiasi origine dati ODBC, ad esempio una tabella collegata, può avere una cache locale. Per creare la cache, aprire un oggetto recordset dall'origine dati remota, chiamare le SetCacheSize funzioni membro e SetCacheStart e quindi chiamare la FillCache funzione membro o scorrere i record usando una delle operazioni Move. Il parametro lSize della SetCacheSize funzione membro può essere basato sul numero di record che l'applicazione può usare contemporaneamente. Ad esempio, se si usa un recordset come origine dei dati da visualizzare sullo schermo, è possibile passare il SetCacheSize parametro lSize come 20 per visualizzare 20 record contemporaneamente.

Per informazioni correlate, vedere l'argomento "CacheSize, CacheStart Properties" nella Guida di DAO.

CDaoRecordset::SetCacheStart

Chiamare questa funzione membro per specificare il segnalibro del primo record nel recordset da memorizzare nella cache.

void SetCacheStart(COleVariant varBookmark);

Parametri

varBookmark
Oggetto COleVariant che specifica il segnalibro del primo record nel recordset da memorizzare nella cache.

Osservazioni:

È possibile usare il valore del segnalibro di qualsiasi record per il parametro varBookmark della SetCacheStart funzione membro. Impostare il record che si desidera avviare la cache con il record corrente, stabilire un segnalibro per tale record usando SetBookmark e passare il valore del segnalibro come parametro per la SetCacheStart funzione membro.

Il motore di database Microsoft Jet richiede record all'interno dell'intervallo di cache dalla cache e richiede record al di fuori dell'intervallo di cache dal server.

I record recuperati dalla cache non riflettono le modifiche apportate simultaneamente ai dati di origine da altri utenti.

Per forzare un aggiornamento di tutti i dati memorizzati nella cache, passare il parametro lSize di SetCacheSize come 0, chiamare SetCacheSize di nuovo con le dimensioni della cache richiesta in origine e quindi chiamare la FillCache funzione membro.

Se non si crea un recordset UNICODE, l'oggetto COleVariant deve essere dichiarato in modo esplicito ANSI. A tale scopo, è possibile usare il formato COleVariant::COleVariant( lpszSrc , vtSrc ) del costruttore con vtSrc impostato su VT_BSTRT (ANSI) o usando la COleVariant funzione SetString( lpszSrc , vtSrc ) con vtSrc impostato su .VT_BSTRT

Per informazioni correlate, vedere l'argomento CacheSize, CacheStart Properties" nella Guida di DAO.

CDaoRecordset::SetCurrentIndex

Chiamare questa funzione membro per impostare un indice su un recordset di tipo tabella.

void SetCurrentIndex(LPCTSTR lpszIndex);

Parametri

lpszIndex
Puntatore contenente il nome dell'indice da impostare.

Osservazioni:

I record nelle tabelle di base non vengono archiviati in un ordine specifico. L'impostazione di un indice modifica l'ordine dei record restituiti dal database, ma non influisce sull'ordine in cui vengono archiviati i record. L'indice specificato deve essere già definito. Se si tenta di usare un oggetto indice che non esiste o se l'indice non è impostato quando si chiama Seek, MFC genera un'eccezione.

È possibile creare un nuovo indice per la tabella chiamando CDaoTableDef::CreateIndex e accodando il nuovo indice all'insieme Indexes dell'oggetto tabledef sottostante chiamando CDaoTableDef::Append e quindi riaprendo il recordset.

I record restituiti da un recordset di tipo tabella possono essere ordinati solo dagli indici definiti per l'oggetto tabledef sottostante. Per ordinare i record in un altro ordine, è possibile aprire un recordset di tipo dynaset o snapshot usando una clausola SQL ORDERBY archiviata in CDaoRecordset::m_strSort.

Per informazioni correlate, vedere l'argomento "Index Object" e la definizione "indice corrente" nella Guida di DAO.

CDaoRecordset::SetFieldDirty

Chiamare questa funzione membro per contrassegnare un membro dati di campo del recordset come modificato o invariato.

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

Parametri

Pv
Contiene l'indirizzo di un membro dati di campo nel recordset o NULL. Se NULL, tutti i membri dati di campo nel recordset vengono contrassegnati. C++ NULL non è uguale a Null nella terminologia del database, il che significa "senza valore".

bDirty
TRUE se il membro dati del campo deve essere contrassegnato come "dirty" (modificato). In caso contrario, FALSE se il membro dati del campo deve essere contrassegnato come "pulito" (non modificato).

Osservazioni:

Contrassegnare i campi come invariati garantisce che il campo non sia aggiornato.

Il framework contrassegna i membri dei dati dei campi modificati per assicurarsi che vengano scritti nel record nell'origine dati dal meccanismo DFX (DAO Record Field Exchange). La modifica del valore di un campo imposta in genere il campo dirty automaticamente, quindi raramente è necessario chiamare SetFieldDirty se stessi, ma a volte potrebbe essere necessario assicurarsi che le colonne vengano aggiornate o inserite in modo esplicito indipendentemente dal valore presente nel membro dati del campo. Il meccanismo DFX impiega anche l'uso di PSEUDONULL. Per altre informazioni, vedere CDaoFieldExchange::m_nOperation.

Se il meccanismo di doppio buffering non viene usato, la modifica del valore del campo non imposta automaticamente il campo come dirty. In questo caso, è necessario impostare in modo esplicito il campo come dirty. Il flag contenuto in m_bCheckCacheForDirtyFields controlla questo controllo automatico dei campi.

Nota

Chiamare questa funzione membro solo dopo aver chiamato Edit o AddNew.

L'uso di NULL per il primo argomento della funzione applicherà la funzione a tutti i outputColumn campi, non ai campi param in CDaoFieldExchange. Ad esempio, la chiamata

SetFieldDirty(NULL);

imposta solo outputColumn i campi su NULL; i campi param non sono interessati.

Per lavorare su un parametro, è necessario specificare l'indirizzo effettivo del singolo parametro su cui si vuole lavorare, ad esempio:

SetFieldDirty(&m_strParam);

Ciò significa che non è possibile impostare tutti i campi param su NULL, come è possibile con i outputColumn campi.

SetFieldDirty viene implementato tramite DoFieldExchange.

CDaoRecordset::SetFieldNull

Chiamare questa funzione membro per contrassegnare un membro dati di campo del recordset come Null (in particolare senza valore) o come non Null.

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

Parametri

Pv
Contiene l'indirizzo di un membro dati di campo nel recordset o NULL. Se NULL, tutti i membri dati di campo nel recordset vengono contrassegnati. C++ NULL non è uguale a Null nella terminologia del database, il che significa "senza valore".

bNull
Diverso da zero se il membro dati del campo deve essere contrassegnato come senza valore (Null). In caso contrario, 0 se il membro dati del campo deve essere contrassegnato come non Null.

Osservazioni:

SetFieldNull viene utilizzato per i campi associati nel DoFieldExchange meccanismo.

Quando si aggiunge un nuovo record a un recordset, tutti i membri dati del campo vengono inizialmente impostati su un valore Null e contrassegnati come "dirty" (modificati). Quando si recupera un record da un'origine dati, le relative colonne hanno già valori o sono Null. Se non è appropriato creare un campo Null, viene generata un'eccezione CDaoException .

Se si usa il meccanismo di doppio buffering, ad esempio, se si desidera designare in modo specifico un campo del record corrente come non avere un valore, chiamare SetFieldNull con bNull impostato su TRUE per contrassegnarlo come Null. Se un campo è stato contrassegnato in precedenza su Null e si vuole assegnare un valore, impostarne il nuovo valore. Non è necessario rimuovere il flag Null con SetFieldNull. Per determinare se il campo può essere Null, chiamare IsFieldNullable.

Se non si usa il meccanismo di doppio buffering, la modifica del valore del campo non imposta automaticamente il campo come dirty e non Null. È necessario impostare in modo specifico i campi dirty e non Null. Il flag contenuto in m_bCheckCacheForDirtyFields controlla questo controllo automatico dei campi.

Il meccanismo DFX usa PSEUDONULL. Per altre informazioni, vedere CDaoFieldExchange::m_nOperation.

Nota

Chiamare questa funzione membro solo dopo aver chiamato Edit o AddNew.

L'uso di NULL per il primo argomento della funzione applicherà la funzione solo ai campi, non ai outputColumn campi param in CDaoFieldExchange. Ad esempio, la chiamata

SetFieldNull(NULL);

imposta solo outputColumn i campi su NULL; i campi param non sono interessati.

CDaoRecordset::SetFieldValue

Chiamare questa funzione membro per impostare il valore di un campo, in base alla posizione ordinale o modificando il valore della stringa.

virtual void SetFieldValue(
    LPCTSTR lpszName,
    const COleVariant& varValue);

virtual void SetFieldValue(
    int nIndex,
    const COleVariant& varValue);

void SetFieldValue(
    LPCTSTR lpszName,
    LPCTSTR lpszValue);

void SetFieldValue(
    int nIndex,
    LPCTSTR lpszValue);

Parametri

lpszName
Puntatore a una stringa contenente il nome di un campo.

varValue
Riferimento a un oggetto COleVariant contenente il valore del contenuto del campo.

nIndex
Intero che rappresenta la posizione ordinale del campo nell'insieme Fields del recordset (in base zero).

lpszValue
Puntatore a una stringa contenente il valore del contenuto del campo.

Osservazioni:

Utilizzare SetFieldValue e GetFieldValue per associare in modo dinamico i campi in fase di esecuzione anziché associare in modo statico le colonne usando il meccanismo DoFieldExchange .

Se non si crea un recordset UNICODE, è necessario usare una forma di SetFieldValue che non contiene un COleVariant parametro oppure l'oggetto COleVariant deve essere dichiarato in modo esplicito ANSI. A tale scopo, è possibile usare il formato COleVariant::COleVariant( lpszSrc , vtSrc ) del costruttore con vtSrc impostato su VT_BSTRT (ANSI) o usando la COleVariant funzione SetString( lpszSrc , vtSrc ) con vtSrc impostato su .VT_BSTRT

Per informazioni correlate, vedere gli argomenti "Field Object" e "Value Property" nella Guida di DAO.

CDaoRecordset::SetFieldValueNull

Chiamare questa funzione membro per impostare il campo su un valore Null.

void SetFieldValueNull(int nIndex);
void SetFieldValueNull(LPCTSTR lpszName);

Parametri

nIndex
Indice del campo nel recordset, per la ricerca per indice in base zero.

lpszName
Nome del campo nel recordset, per la ricerca in base al nome.

Osservazioni:

C++ NULL non è uguale a Null, che, nella terminologia del database, significa "senza valore".

Per informazioni correlate, vedere gli argomenti "Field Object" e "Value Property" nella Guida di DAO.

CDaoRecordset::SetLockingMode

Chiamare questa funzione membro per impostare il tipo di blocco per il recordset.

void SetLockingMode(BOOL bPessimistic);

Parametri

bPessimistic
Flag che indica il tipo di blocco.

Osservazioni:

Quando il blocco pessimistico è attivo, la pagina 2K contenente il record che si sta modificando viene bloccata non appena si chiama la Edit funzione membro. La pagina viene sbloccata quando si chiama la Update funzione membro o Close una delle operazioni Sposta o Trova.

Quando il blocco ottimistico è attivo, la pagina 2K contenente il record è bloccata solo quando il record viene aggiornato con la Update funzione membro.

Se una pagina è bloccata, nessun altro utente può modificare i record nella stessa pagina. Se si chiama SetLockingMode e si passa un valore diverso da zero e un altro utente ha già bloccato la pagina, viene generata un'eccezione quando si chiama Edit. Altri utenti possono leggere i dati dalle pagine bloccate.

Se si chiama SetLockingMode con un valore zero e una chiamata Update successiva mentre la pagina è bloccata da un altro utente, si verifica un'eccezione. Per visualizzare le modifiche apportate al record da un altro utente (e perdere le modifiche), chiamare la SetBookmark funzione membro con il valore del segnalibro del record corrente.

Quando si utilizzano origini dati ODBC, la modalità di blocco è sempre ottimistica.

CDaoRecordset::SetParamValue

Chiamare questa funzione membro per impostare il valore di un parametro nel recordset in fase di esecuzione.

virtual void SetParamValue(
    int nIndex,
    const COleVariant& varValue);

virtual void SetParamValue(
    LPCTSTR lpszName,
    const COleVariant& varValue);

Parametri

nIndex
Posizione numerica del parametro nell'insieme Parameters di querydef.

var
Valore da impostare; vedere Osservazioni.

lpszName
Nome del parametro di cui si desidera impostare il valore.

Osservazioni:

Il parametro deve essere già stato stabilito come parte della stringa SQL del recordset. È possibile accedere al parametro in base al nome o alla relativa posizione di indice nella raccolta.

Specificare il valore da impostare come COleVariant oggetto . Per informazioni sull'impostazione del valore desiderato e sul tipo nell'oggetto COleVariant , vedere classe COleVariant. Se non si crea un recordset UNICODE, l'oggetto COleVariant deve essere dichiarato in modo esplicito ANSI. A tale scopo, è possibile usare il formato COleVariant::COleVariant( lpszSrc , vtSrc ) del costruttore con vtSrc impostato su VT_BSTRT (ANSI) o usando la COleVariant funzione SetString( lpszSrc , vtSrc ) con vtSrc impostato su .VT_BSTRT

CDaoRecordset::SetParamValueNull

Chiamare questa funzione membro per impostare il parametro su un valore Null.

void SetParamValueNull(int nIndex);
void SetParamValueNull(LPCTSTR lpszName);

Parametri

nIndex
Indice del campo nel recordset, per la ricerca per indice in base zero.

lpszName
Nome del campo nel recordset, per la ricerca in base al nome.

Osservazioni:

C++ NULL non è uguale a Null, che, nella terminologia del database, significa "senza valore".

CDaoRecordset::SetPercentPosition

Chiamare questa funzione membro per impostare un valore che modifica la posizione approssimativa del record corrente nell'oggetto recordset in base a una percentuale dei record nel recordset.

void SetPercentPosition(float fPosition);

Parametri

fPosition
Numero compreso tra 0 e 100.

Osservazioni:

Quando si lavora con un recordset di tipo dynaset o snapshot, popolare prima di chiamare SetPercentPositionil recordset. Se si chiama SetPercentPosition prima di popolare completamente il recordset, la quantità di spostamento è relativa al numero di record a cui si accede come indicato dal valore di GetRecordCount. È possibile passare all'ultimo record chiamando MoveLast.

Dopo aver chiamato SetPercentPosition, il record nella posizione approssimativa corrispondente a tale valore diventa corrente.

Nota

Non è consigliabile chiamare SetPercentPosition per spostare il record corrente in un recordset specifico. Chiamare invece la funzione membro SetBookmark .

Per informazioni correlate, vedere l'argomento "Proprietà PercentPosition" nella Guida di DAO.

CDaoRecordset::Update

Chiamare questa funzione membro dopo una chiamata alla AddNew funzione membro o Edit .

virtual void Update();

Osservazioni:

Questa chiamata è necessaria per completare l'operazione AddNew o Edit .

Sia AddNew che Edit preparare un buffer di modifica in cui vengono inseriti i dati aggiunti o modificati per il salvataggio nell'origine dati. Update salva i dati. Vengono aggiornati solo i campi contrassegnati o rilevati come modificati.

Se l'origine dati supporta le transazioni, è possibile effettuare la Update chiamata (e la relativa chiamata o Edit corrispondenteAddNew) di una transazione.

Attenzione

Se si chiama senza prima chiamare Update AddNew o Edit, Update genera un'eccezione CDaoException. Se si chiama AddNew o Edit, è necessario chiamare Update prima di chiamare MoveNext o chiudere il recordset o la connessione all'origine dati. In caso contrario, le modifiche andranno perse senza notifica.

Quando l'oggetto recordset è bloccato in modo pessimistico in un ambiente multiutente, il record rimane bloccato dal momento Edit in cui viene utilizzato fino al completamento dell'aggiornamento. Se il recordset è bloccato in modo ottimistico, il record viene bloccato e confrontato con il record pre-modificato subito prima che venga aggiornato nel database. Se il record è stato modificato dopo aver chiamato Edit, l'operazione Update ha esito negativo e MFC genera un'eccezione. È possibile modificare la modalità di blocco con SetLockingMode.

Nota

Il blocco ottimistico viene sempre usato in formati di database esterni, ad esempio ODBC e ISAM installabile.

Per informazioni correlate, vedere gli argomenti "AddNew Method", "CancelUpdate Method", "Delete Method", "LastModified Property", "Update Method" e "EditMode Property" nella Guida DAO.

Vedi anche

Classe CObject
Grafico della gerarchia
Classe CDaoTableDef
Classe CDaoWorkspace
Classe CDaoDatabase
Classe CDaoQueryDef