Condividi tramite


CRecordset::Open

Apre il recordset recuperando la tabella o esegue la query del recordset rappresenta.

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

Parametri

  • nOpenType
    Accettare il valore predefinito, AFX_DB_USE_DEFAULT_TYPE, o utilizzare uno dei seguenti valori da enum OpenType:

    • Recordset diCRecordset::dynaset con lo scorrimento bidirezionale.L'appartenenza e l'ordine dei record vengono determinati quando si apre il recordset, ma le modifiche apportate da altri utenti ai valori sono visibili lungo un'operazione di recupero.I dynaset sono noti anche come per recordset di tipo keyset.

    • Recordset statico diCRecordset::snapshot con lo scorrimento bidirezionale.L'appartenenza e l'ordine dei record vengono determinati quando si apre il recordset, i valori di dati vengono determinati quando i record vengono recuperati.Le modifiche apportate da altri utenti non sono visibili fino alla chiusura e quindi essere riaperto il recordset.

    • Recordset diCRecordset::dynamic con lo scorrimento bidirezionale.Le modifiche apportate da altri utenti di appartenenza, all'ordine e ai valori sono visibili lungo un'operazione di recupero.Notare che molti driver ODBC non supporta questo tipo di recordset.

    • Recordset di sola lettura diCRecordset::forwardOnly con solo lo scorrimento in avanti.

      Per CRecordset, il valore predefinito è CRecordset::snapshot.Il meccanismo di valore predefinito consente delle procedure guidate di Visual C++ di interagire con la CRecordset ODBC e DAO CDaoRecordset, che dispongono di valori predefiniti diversi.

    Per ulteriori informazioni su questi tipi di recordset, vedere l'articolo recordset (ODBC).Per informazioni correlate, vedere l'articolo "utilizzando il blocco e i cursori scorrevoli" in Windows SDK.

    Nota di avvisoAttenzione

    Se il tipo richiesto non è supportato, il framework genera un'eccezione.

  • lpszSQL
    Un puntatore di stringa contenente uno dei seguenti:

    • Un puntatore null.

    • Nome di una tabella.

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

    • Un'istruzione CALL che specifica il nome di una query già definita (stored procedure).Prestare attenzione affinché non viene inserito lo spazio vuoto tra la parentesi graffa e la parola chiave CALL.

    Per ulteriori informazioni su questa stringa, vedere la tabella e la descrizione del ruolo di ClassWizard in commenti.

    [!NOTA]

    L'ordine delle colonne nel gruppo di risultati deve corrispondere all'ordine di RFX o chiamate di funzione RFX di massa override nella funzione DoBulkFieldExchange o DoFieldExchange.

  • dwOptions
    Una maschera di bit che può specificare una combinazione dei valori elencati di seguito.Alcuni di questi si escludono reciprocamente.Il valore predefinito è none.

    • CRecordset::none nessun opzioni impostate.Questo valore del parametro e si escludono reciprocamente tutti gli altri valori.Per impostazione predefinita, il recordset può essere aggiornato con Modifica o Elimina e consente di aggiungere nuovi record con AddNew.Updatability dipende dall'origine dati e sull'opzione nOpenType specificate.L'ottimizzazione per le aggiunte di massa non è disponibile.Il recupero di massa di righe non verrà distribuito.I record eliminati non vengono ignorati durante la navigazione del recordset.I segnalibri non saranno disponibili.Controllare modificato automatico del campo viene distribuito.

    • CRecordset::appendOnly non consente Modifica o Elimina nel recordset.Consente AddNew solo.Questa opzione e si escludono reciprocamente CRecordset::readOnly.

    • CRecordset::readOnly apre il recordset come di sola lettura.Questa opzione e si escludono reciprocamente CRecordset::appendOnly.

    • Utilizzo diCRecordset::optimizeBulkAdd un'istruzione SQL scritta ottimizzare aggiunta di molti record contemporaneamente.Si applica solo se non si utilizza la funzione API ODBC SQLSetPos per aggiornare il recordset.Il primo aggiornamento determina quali campi vengono modificati.Questa opzione e si escludono reciprocamente CRecordset::useMultiRowFetch.

    • Recupero di massa di righe di utilizzo diCRecordset::useMultiRowFetch per consentire più righe da recuperare in una singola operazione di recupero.Questa è una funzionalità avanzata progettata per migliorare le prestazioni, tuttavia, il trasferimento di massa di campi di Record non è supportato da ClassWizard.Questa opzione e si escludono reciprocamente CRecordset::optimizeBulkAdd.Si noti che se si specifica CRecordset::useMultiRowFetch, quindi l'opzione CRecordset::noDirtyFieldCheck verrà attivata automaticamente il doppio buffer non sarà disponibile); nei recordset forward-only, l'opzione CRecordset::useExtendedFetch verrà attivata automaticamente.Per ulteriori informazioni sul recupero di massa di righe, vedere l'articolo recordset: Recupero di massa di record (ODBC).

    • Passaggio diCRecordset::skipDeletedRecords tutti i record eliminati quando si spostano con il recordset.Ciò rallenterà le prestazioni in alcune raccolte di.Questa opzione non è valida per i recordset di tipo forward-only.Se si chiama Sposta con il parametro nRows impostato su 0 e il set di opzioni CRecordset::skipDeletedRecords, Sposta asserirà.Si noti che CRecordset::skipDeletedRecords è simile a compressione del driver, ovvero le righe eliminate vengono rimosse dal recordset.Tuttavia, se il driver comprime i record, quindi ignorerà solo i record eliminati; non ignorerà i record eliminati da altri utenti quando si apre il recordset.CRecordset::skipDeletedRecords ignorerà le righe eliminate da altri utenti.

    • Segnalibri di utilizzo diCRecordset::useBookmarks maggio il recordset, se supportato.Il recupero dei dati lento segnalibri ma migliora le prestazioni di navigazione di dati.Non valido per i recordset di tipo forward-only.Per ulteriori informazioni, vedere l'articolo recordset: Segnalibri e absolute position (ODBC).

    • CRecordset::noDirtyFieldCheck disattivare controllare modificato automatico del campo (doppio buffer).Ciò consente di migliorare le prestazioni, tuttavia, è necessario contrassegnare i campi modificati come chiamare le funzioni membro SetFieldNull e SetFieldDirty. Si noti che il doppio buffer nella classe CRecordset è simile al doppio buffering nella classe CDaoRecordset.Tuttavia, in CRecordset, non è possibile attivare il doppio buffering sui singoli campi, viene abilitato per tutti i campi o la disabilitazione per tutti i campi.Si noti che se si specifica l'opzione CRecordset::useMultiRowFetch, quindi CRecordset::noDirtyFieldCheck verrà attivato automaticamente, tuttavia, SetFieldDirty e SetFieldNull non possono essere utilizzati nei recordset che implementano il recupero di massa di righe.

    • CRecordset::executeDirect non utilizza un'istruzione SQL scritta.Per ottenere prestazioni migliori, specificare questa opzione se la funzione membro Requery non verrà mai chiamata.

    • Utilizzo SQLExtendedFetch diCRecordset::useExtendedFetch anziché SQLFetch.Ciò è progettata per implementare il recupero di massa di righe nei recordset forward-only.Se si specifica l'opzione CRecordset::useMultiRowFetch in un recordset forward-only, quindi CRecordset::useExtendedFetch verrà attivato automaticamente.

    • CRecordset::userAllocMultiRowBuffers l'utente allocherà i buffer di archiviazione per i dati.Utilizzare questa opzione con CRecordset::useMultiRowFetch se si desidera assegnare la propria archiviazione; in caso contrario, il framework automaticamente allocherà la memoria necessaria.Per ulteriori informazioni, vedere l'articolo recordset: Recupero di massa di record (ODBC).Si noti che specifica CRecordset::userAllocMultiRowBuffers senza specificare CRecordset::useMultiRowFetch è un'asserzione non riuscita.

Valore restituito

Diverso da zero se l'oggetto CRecordset correttamente è stato aperto, in caso contrario 0 se restituisce 0 CDatabase::Open (se chiamato).

Note

È necessario chiamare la funzione membro per eseguire la query definita dal recordset.Prima di chiamare Apri, è necessario creare l'oggetto recordset.

La connessione del recordset all'origine dati dipende da come si crea il recordset prima di chiamare Apri.Se si passa un oggetto CDatabase al costruttore del recordset non è stato connesso all'origine dati, utilizzare GetDefaultConnect di questa funzione membro tenta di aprire l'oggetto di database.Se si passa NULL al costruttore del recordset, il costruttore viene costruito un oggetto CDatabase automaticamente e i tentativi Apri connettere l'oggetto di database.Per informazioni dettagliate sulla chiusura del recordset e la connessione in queste condizioni variant, vedere Chiudi.

[!NOTA]

Accesso a un'origine dati tramite un oggetto CRecordset è sempre condiviso.A differenza della classe CDaoRecordset, non è possibile utilizzare un oggetto CRecordset per aprire un'origine dati con accesso esclusivo.

Quando si chiama Apri, una query, in genere un'istruzione SQL SELECT, selezionare i record 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.

 

Nome della tabella SQL

Tutte le colonne di tabelle elenco in DoFieldExchange o in DoBulkFieldExchange.

"Customer"

Nome predefinito di query (stored procedure)

Le colonne la query viene definita per restituire.

"{call OverDueAccts}"

Le tabelle elenco FROM l'elenco colonne diSELECT

Le colonne specificate dalle tabelle specificate.

"SELECT CustId, CustName FROM

Customer"

Nota di avvisoAttenzione

Prestare attenzione affinché non viene inserito lo spazio aggiuntivo nella stringa SQL.Ad esempio, se si inserisce lo spazio vuoto tra la parentesi graffa e la parola chiave CALL, MFC interpreterà erroneamente la stringa SQL come nome della tabella e la è incluso in un'istruzione SELECT, che genererà un'eccezione generata.Analogamente, se la query predefinito utilizza un parametro di output, non inserire uno spazio vuoto tra la parentesi graffa e "?" simbolo.Infine, non è necessario inserire uno spazio prima della parentesi graffa in un'istruzione CALL o prima della parola chiave SELECT in un'istruzione SELECT.

La routine consiste nel passare NULL a Apri; in questo caso, chiamare GetDefaultSQLdi Apri.Se si utilizza una classe derivata CRecordset, GetDefualtSQL fornisce i nomi di tabella specificato 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 ORDER BY aggiunte a lpszSQL la stringa viene passato) e quindi esegue la query.È possibile esaminare la stringa costruita chiamando GetSQL dopo aver chiamato Apri.Per informazioni dettagliate su come il recordset crea un'istruzione SQL e selezionare i record, vedere l'articolo recordset: Come i recordset selezionano record (ODBC).

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, specificare questi 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 Ripetere una query.

Per ulteriori informazioni, inclusi gli esempi aggiuntivi, vedere gli articoli recordset (ODBC), recordset: Come i recordset selezionano record (ODBC)e recordset: Creazione e chiusura del recordset (ODBC).

Eccezioni

Questo metodo può generare eccezioni di tipo CDBException* e CMemoryException*.

Esempio

I form diversi di seguito mostra esempi di codice relativi alla chiamata Apri.

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

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

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

// Accept all defaults
rsDefault.Open();

Requisiti

Header: afxdb.h

Vedere anche

Riferimenti

Classe di CRecordset

Grafico della gerarchia

CRecordset::CRecordset

CRecordset::Close

CRecordset::GetDefaultSQL

CRecordset::GetSQL

CRecordset::m_strFilter

CRecordset::m_strSort

CRecordset::Requery