CDaoRecordset:: Open

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

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

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

Parametri

nOpenType

Uno dei valori seguenti:

lpszSQL

Un puntatore a una stringa contenente uno dei seguenti:

nOptions

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

pTableDef

 Puntatore a un oggetto CDaoTableDef . Questa versione è valida solo per i recordset di tipo tabella. Quando si utilizza questa opzione, non viene utilizzato il puntatore CDaoDatabase utilizzato per costruire il CDaoRecordset ; piuttosto, viene utilizzato il database in cui risiede il tabledef.

pQueryDef

Puntatore a un oggetto CDaoQueryDef . Questa versione è valida solo per tipo dynaset e recordset di tipo snapshot. Quando si utilizza questa opzione, non viene utilizzato il puntatore CDaoDatabase utilizzato per costruire il CDaoRecordset ; piuttosto, viene utilizzato il database in cui si trova l'oggetto querydef.

Osservazioni

È necessario chiamare questa funzione membro per recuperare i record per il recordset. Prima di chiamare Open, è necessario costruire l'oggetto recordset. Ci sono diversi modi per farlo:

Per la versio&ne di aprire che utilizza il parametro lpszSQL , una volta che il recordset è aperto è possibile recuperare record in diversi modi. La prima opzione è di avere funzioni DFX nella tua DoFieldExchange. La seconda opzione consiste nell'utilizzare associazione dinamica chiamando la funzione membro GetFieldValue . Queste opzioni possono essere implementate separatamente o in combinazione. Se essi vengono combinate, si dovrà passare nell'istruzione SQL se stessi alla chiamata aperta. Per ulteriori informazioni sull'associazione dinamica, vedere l'articolo Recordset DAO: associazione Records dinamicamente nel manuale del programmatore di Visual C++.nbsp;

Quando si utilizza la seconda versione di Open dove passare un oggetto CDaoTableDef , le colonne risultante sarà disponibile per poter associare via DoFieldExchange e il meccanismo DFX, e/o associare in modo dinamico tramite GetFieldValue.

&Notanbsp;  Si può chiamare soltanto aperto utilizzando un oggetto CDaoTableDef per i recordset di tipo tabella.

Quando si utilizza la terza versione del aperto dove passare un oggetto CDaoQueryDef , che sarà eseguita la query, e le colonne risultante saranno essere disponibili per voi da associare tramite DoFieldExchange e il meccanismo DFX, e/o associare in modo dinamico tramite GetFieldValue.

&Notanbsp;  Si può chiamare soltanto aperto utilizzando un oggetto CDaoQueryDef per tipo dynaset e recordset di tipo snapshot.

Per la prima versione del aperto che utilizza il parametro lpszSQL , record vengono selezionati sulla base dei criteri indicati nella tabella seguente.

Valore del parametro lpszSQL Record selezionati sono determinati da Esempio
NULL La stringa restituita da GetDefaultSQL.
Un elenco delimitato da virgole di uno o più oggetti TableDef e/o nomi di querydef. Tutte le colonne rappresentate nella DoFieldExchange.
"Cliente"
Selezionare elenco di colonne dalla tabella-elenco Le colonne specificate da tabledef(s) specificato e/o querydef(s).
"Seleziona CustId, CustName
DAL cliente"

La procedura usuale è di passare NULL all' aperto; in tal caso, Open chiama GetDefaultSQL, una funzione membro overridable ClassWizard genera quando si crea un CDaoRecordset-classe derivata. Questo valore dà tabledef(s) e/o querydef dal nome specificato al ClassWizard. È possibile specificare invece altre informazioni nel parametro lpszSQL.

Qualunque cosa si passa, Open costruisce una stringa SQL finale per la query (la stringa potrebbe avere SQL dove e ORDER BY clausole aggiunte alla stringa lpszSQL che è stato passato) e quindi viene eseguita la query. È possibile esaminare la stringa costruita chiamando GetSQL dopo la chiamata Open.

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

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

Se si chiama Open su un recordset di tipo snapshot o di tipo dynaset, o se l'origine dati si riferisce a un'istruzione SQL o un tabledef che rappresenta una tabella allegata, è non è possibile utilizzare dbOpenTable per l'argomento di tipo; Se lo fai, MFC genera un'eccezione. Per determinare se un oggetto tabledef rappresenta una tabella allegata, creare un oggetto CDaoTableDef e chiamare la relativa funzione membro GetConnect.

Utilizzare il flag dbSeeChanges se lo si desidera intercettare le modifiche apportate da un altro utente o un altro programma sulla vostra macchina durante la modifica o l'eliminazione dello stesso record. Ad esempio, se due utenti iniziano a modificare lo stesso record, succede all'utente prima di chiamare la funzione membro Update . Quando Update viene chiamato dall'utente secondo, viene generata una CDaoException . Analogamente, se il secondo utente prova a chiamare Elimina per eliminare il record, e ha già modificato dall'utente primo, un CDaoException si verifica.

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

Suggerimento Utilizzare il tipo forward-only scorrere un recordset aperto da un'origine dati ODBC opzione (dbForwardOnly) per migliorare le prestazioni durante l'applicazione prende un unico passaggio.

Per ulteriori informazioni sull'apertura recordset, vedere gli articoli Recordset DAO: creare recordset e DAO: creazione, apertura e chiusura di oggetti DAO nel manuale del programmatore di Visual C++. Per informazioni correlate, vedere l'argomento "Metodo OpenRecordset" nell'aiuto di DAO.

Pa&noramica CDaoRecordset |nbsp; Membri della classe | Gerarchia Chart

Vedere a&nchenbsp;CDaoRecordset::Close, CDaoRecordset::CDaoRecordset

Index