Condividi tramite


CDaoRecordset::Open

 

Pubblicato: aprile 2016

È necessario chiamare la funzione membro per recuperare i record del recordset.

Sintassi

      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:

    • Recordset di tipo dynasetdbOpenDynaset con lo scorrimento bidirezionale. Impostazione predefinita.

    • Recordset di tipo tabella didbOpenTable con lo scorrimento bidirezionale.

    • Recordset di tipo snapshot didbOpenSnapshot con lo scorrimento bidirezionale.

  • lpszSQL
    Un puntatore di stringa contenente uno dei seguenti:

    • Un puntatore null.

    • Il nome di uno o più TableDef e/o querydefs (delimitati da virgole.

    • Un'istruzione SQL SELECT (facoltativamente con una clausola SQL where o ORDERBY ).

    • Pass-through query.

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

    • dbAppendOnly è possibile aggiungere solo i nuovi record (recordset di tipo dynaset solo). Questa opzione letteralmente significa che i record possono essere aggiunti soltanto. Le classi di database ODBC MFC con un'opzione che consente solo i record da recuperare e aggiungere.

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

    • dbSeeChanges genera un'eccezione se un altro utente sta modificando i dati modificati.

    • dbDenyWrite che altri utenti non possono modificare o aggiungere i record.

    • dbDenyRead altri utenti non può visualizzare i record (recordset di tipo tabella solo).

    • dbReadOnly è possibile visualizzare solo i record, altri utenti possono modificarli.

    • Gli aggiornamenti incoerenti didbInconsistent sono consentiti (recordset di tipo dynaset solo).

    • Gli aggiornamenti coerenti didbConsistent solo sono consentiti (recordset di tipo dynaset solo).

    Nota

    Le costanti dbConsistent e dbInconsistent si escludono reciprocamente.È possibile utilizzare una o l'altra, ma non entrambi in una determinata istanza Apri.

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

  • pQueryDef
    Un puntatore a un oggetto CDaoQueryDef. Questa versione è valida solo per i recordset di tipo dynaset e di tipo snapshot. Quando si utilizza questa opzione, il puntatore CDaoDatabase utilizzato per costruire CDaoRecordset non viene utilizzato; invece, il database in cui si trova tra cui viene utilizzato.

Note

Prima di chiamare Apri, è necessario creare l'oggetto recordset. Sono disponibili diversi modi per eseguire questa operazione:

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

  • Quando si crea l'oggetto recordset, passare un puntatore a un oggetto CDaoDatabase che non è aperto. Il recordset aperto un oggetto CDaoDatabase, ma non viene chiusa quando l'oggetto recordset viene chiusa.

  • Quando si crea l'oggetto recordset, passare un puntatore null. L'oggetto recordset chiama GetDefaultDBName per ottenere il nome del file di Microsoft Access .MDB da aprire. Il recordset viene aperto un oggetto CDaoDatabase e lo mantiene aperto finché si apre il recordset. Quando si chiama Chiudi il recordset, l'oggetto CDaoDatabase viene chiuso.

    Nota

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

Per la versione Apri che utilizza il parametro lpszSQL, una volta che si apre il recordset è possibile recuperare i record in vari modi. La prima opzione consiste nel disporre di funzioni di DFX nel DoFieldExchange. La seconda opzione è utilizzare il collegamento dinamico chiamando la funzione membro GetFieldValue. Queste opzioni possono essere distribuiti separatamente o in combinazione. Se si combinano, sarà necessario passare nell'istruzione SQL manualmente nella chiamata a Apri.

Quando si utilizza la seconda versione Apri in cui viene passato un oggetto CDaoTableDef, le colonne risultanti saranno disponibili per l'associazione mediante DoFieldExchange e il meccanismo di DFX e/o associare in modo dinamico tramite GetFieldValue.

Nota

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

Quando si utilizza la terza versione Apri in cui viene passato un oggetto CDaoQueryDef, la query verrà eseguito e colonne risultanti saranno disponibili per l'associazione mediante DoFieldExchange e il meccanismo di DFX e/o associare in modo dinamico tramite GetFieldValue.

Nota

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

Per la prima versione Apri che utilizza il parametro lpszSQL, i record selezionati in base ai criteri indicati nella tabella seguente.

Valore del parametro lpszSQL

I record selezionati sono determinati da

Esempio

NULL

La stringa restituita da GetDefaultSQL.

 

Un elenco delimitato da virgole di uno o più TableDef e/o nomi di querydef.

Tutte le colonne rappresentate in DoFieldExchange.

"Customer"

Le tabelle elenco FROM l'elenco colonne diSELECT

Le colonne specificate da TableDef specificati e/o

"SELECT CustId, CustName

FROM Customer"

La routine consiste nel passare NULL a Apri; in tal caso, Apri chiama GetDefaultSQL, una funzione membro sottoponibile a override che ClassWizard generato quando si crea CDaoRecordsetclasse derivata da. Questo valore fornisce nomi di querydef e/o di TableDef specificati in ClassWizard. È invece possibile specificare altre informazioni nel parametro lpszSQL.

Qualsiasi passato, i costrutti Apri una stringa finale di SQL della query (stringa può contenere SQL where le clausole e ORDERBY aggiunte a lpszSQL la stringa viene passato) e quindi esegue la query. È possibile esaminare la stringa costruita chiamando GetSQL dopo aver chiamato Apri.

I membri dati di campo della classe recordset associati alle colonne di dati selezionate. Se i record da restituire, il primo record diventa il record corrente.

Se si desidera impostare opzioni per il recordset, ad esempio un filtro o un ordinamento, impostare m_strSort o m_strFilter dopo la costruzione l'oggetto recordset ma prima di chiamare Apri. Se si desidera aggiornare i record del recordset dopo che il recordset è già aperto, chiamare Requery.

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

Utilizzare il flag dbSeeChanges se si desidera applicare l'abbondanza alle modifiche apportate da un altro utente o da un altro programma nel computer quando si modificano o eliminando lo stesso record. Ad esempio, se due utenti avviano modificare lo stesso record, il primo utente per chiamare la funzione membro Aggiorna riesce. Quando Aggiorna viene chiamato dal secondo utente, CDaoException viene generato. Analogamente, se il secondo utente tenta di chiamare Elimina per eliminare il record e è già stato modificato dal primo utente, CDaoException si verifica.

In genere, se l'utente ottiene questo CDaoException e aggiornando, il codice deve aggiornare il contenuto dei campi e recuperare i valori solo modificati. Se l'eccezione si verifica nel processo di eliminazione, il codice può visualizzare i dati del nuovo record all'utente e un messaggio che indica che i dati che sono stati modificati. In questa fase, il codice può richiedere una conferma che l'utente si desidera eliminare il record.

Suggerimento

Utilizzare l'opzione forward-only di scorrimento (dbForwardOnly) migliorare le prestazioni quando l'applicazione esegue una sola sessione utilizzando un recordset aperto da un'origine dati ODBC.

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

Requisiti

Header: afxdao.h

Vedere anche

CDaoRecordset Class
Grafico delle gerarchie
CDaoRecordset::Close
CDaoRecordset::CDaoRecordset