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 CDaoRecordset tabella 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à
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 Edit
Edit
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 FindFirst
funzioni membro , FindLast
, FindNext
e 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, AttributesAFX_DAO_SECONDARY_INFO
Informazioni principali, più: Posizione ordinale, Obbligatorio, Consenti lunghezza zero, Ordine di confronto, Nome esterno, Campo di origine, Tabella di origineAFX_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, CampiAFX_DAO_SECONDARY_INFO
Informazioni primarie, più: Primario, Univoco, Clustered, IgnoreNulls, Required, ForeignAFX_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 tabelladbOpenDynaset
Recordset di tipo DynasetdbOpenSnapshot
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 Open
a , 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 chiamandoMoveFirst
. Pertanto, la chiamataOpen
a un set vuoto di record causaIsBOF
eIsEOF
restituisce un valore diverso da zero. Per il comportamento di una chiamata oMoveLast
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 unaUpdate
chiamata che inserisce correttamente un nuovo record restituiràIsBOF
0, ma solo seIsEOF
è già diverso da zero. Lo stato diIsEOF
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 diIsBOF
oIsEOF
.
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 Open
a , 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 chiamandoMoveFirst
. Pertanto, la chiamataOpen
a un set vuoto di record causaIsBOF
eIsEOF
restituisce un valore diverso da zero. Per il comportamento di una chiamata 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 unaUpdate
chiamata che inserisce correttamente un nuovo record restituiràIsBOF
0, ma solo seIsEOF
è già diverso da zero. Lo stato diIsEOF
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 diIsBOF
oIsEOF
.
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 MoveNext
e 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 MoveFirst
funzione membro , MoveLast
MoveNext
, 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 unCDaoDatabase
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 unCDaoDatabase
oggetto e lo mantiene aperto finché il recordset è aperto. Quando si chiamaClose
sul recordset, viene chiuso anche l'oggettoCDaoDatabase
.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 CDaoRecordset
classe 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 Requery
a , 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.
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.
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 SetPercentPosition
il 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