Diverso da zero se l'oggetto CRecordset è stato aperto con successo; in caso contrario 0 se CDatabase:: Open (se chiamato) restituisce 0.
Parametri
nOpenType
Accettare il valore predefinito, AFX_DB_USE_DEFAULT_TYPE, o utilizzare uno dei seguenti valori enumOpenType:
CRecordset::dy&nasetnbsp; Un recordset con scorrimento bidirezionale. L'appartenenza e l'ordinamento dei record sono determinati quando viene aperto il recordset, ma le modifiche apportate da altri utenti per i valori dei dati sono visibili dopo un'operazione di recupero. Dynaset sono anche conosciuti come i recordset basati su keyset.
CRecordset::s&napshotnbsp; Un recordset statico con scorrimento bidirezionale. L'appartenenza e l'ordinamento dei record sono determinati quando viene aperto il recordset; i valori dei dati vengono determinati quando vengono recuperati i record. Le modifiche apportate da altri utenti non sono visibili fino a quando il recordset viene chiuso e riaperto poi.
CRecordset::dy&namicnbsp; Un recordset con scorrimento bidirezionale. Le modifiche apportate da altri utenti ai valori di appartenenza, ordinazione e i dati sono visibili dopo un'operazione di recupero. Si noti che molti driver ODBC non supportano questo tipo di recordset.
CRecordset::forwardO&nlynbsp; Un recordset con scorrimento soltanto al futuro di sola lettura.
Per CRecordset, il valore predefinito è CRecordset::snapshot. Il valore predefinito meccanismo permette le procedure guidate di Visual C++ interagire con ODBC CRecordset e DAO CDaoRecordset, che hanno diverse impostazioni predefinite.
Per ulteriori informazioni su questi tipi di recordset, vedere l'articolo Recordset ((ODBC)) nel manuale del programmatore di Visual C++. Per informazioni correlate, vedere l'articolo "Utilizzando blocco e scorrevole Cursors" in ODBC SDK Programmer di riferimento.
Cautela Se il tipo richiesto non è supportato, il framework genera un'eccezione.
lpszSQL
Un puntatore a una stringa contenente uno dei seguenti:
Un puntatore NULL.
Il nome di una tabella.
Un'istruzione SQL SELECT (eventualmente con una clausola SQL dove o ORDER BY ).
Un'istruzione CALL specificando il nome di una query (stored procedure). Fare attenzione che non inserire spazi tra parentesi graffa e la parola chiave chiamare.
Per ulteriori informazioni su questa stringa, vedere la tabella e la discussione del ruolo di ClassWizard sotto osservazioni.
&Notanbsp; L'ordine delle colonne nel vostro set di risultati deve corrispondere l'ordine della RFX o eseguire l'override di chiamate alle funzioni RFX di massa nella funzione DoFieldExchange o DoBulkFieldExchange.
dwOptions
Maschera di bit che è possibile specificare una combinazione dei valori elencati di seguito. Alcuni di questi sono mutualmente esclusivi. Il valore predefinito è none.
CRecordset::nonenbsp; &Nessun insieme di opzioni. Valore di questo parametro si escludono tutti gli altri valori. Per impostazione predefinita, il recordset può essere aggiornato con modificare o eliminare e permette l'aggiunta di nuovi record con AddNew. Aggiornabilità dipende sull'origine dei dati, nonché l'opzione nOpenType che si specifica. Ottimizzazione per le addizioni di massa non è disponibile. Recupero di massa di riga non verrà implementato. Record eliminati non verranno ignorati durante la navigazione recordset. I segnalibri non sono disponibili. Controllo automatico campo sporco viene implementato.
CRecordset::appendOnlynbsp; Dell'oggetto recordset, non permettono modificare o eliminare . Consentire solo Add&New . Questa opzione si escludono reciprocamente CRecordset.
CRecordset Aprire l'oggetto recordset come di sola lettura. Questa opzione si escludono reciprocamente CRecordset::appendOnly.
CRecordset::optimizeBulkAdd Utilizzare un'istruzione SQL preparata per ottimizzare l'aggiunta di molti record alla volta. Si applica solo se non si utilizza la funzione API ODBC SQLSetPos per aggiornare il recordset. Il primo aggiornamento determina quali campi sono contrassegnati sporchi. Questa opzione si escludono reciprocamente CRecordset:: useMultiRowFetch.
CRecordset:: useMultiRowFetch Implementare il recupero di massa di fila per consentire più righe da recuperare in un'operazione singola operazione di recupero. Questa è una funzionalità avanzata progettata per migliorare le prestazioni; scambio di campi di record di massa, tuttavia, non è supportato da ClassWizard. Questa opzione si escludono CRecordset::optimizeBulkAdd. Si noti che se si specifica CRecordset:: useMultiRowFetch, quindi l'opzione CRecordset::noDirtyFieldCheck verrà attivata automaticamente (doppio buffer non è disponibile); il recordset di tipo forward-only, l'opzione CRecordset::useExtendedFetch verrà attivata automaticamente. Per ulteriori informazioni sul recupero di massa di righe, vedere l'articolo Recordset: recupero Records in Bulk (ODBC) nel manuale del programmatore di Visual C++.
CRecordset::skipDeletedRecords Saltare i record eliminati tutti durante la navigazione attraverso il recordset. Questo ritarderà prestazioni in determinate operazioni di recupero relativi. Questa opzione non è valida per i recordset forward-only. Si noti che CRecordset::skipDeletedRecords è simile al conducente di imballaggio, che significa che le righe eliminate vengano rimossi dal recordset. Tuttavia, se il driver Pack record, quindi lo ignorerà solo i record che eliminano; esso non ignorerà record eliminati da altri utenti, mentre il recordset è aperto. CRecordset::skipDeletedRecords ignorerà le righe eliminate da altri utenti.
CRecordset:: useBookmarksnbsp; Può utilizzare i segnalibri dell'oggetto recordset, se supportata. Segnalibri lento recupero dei dati, ma migliorare le prestazioni per la navigazione dei dati. &Non valido sui recordset forward-only. Per ulteriori informazioni, vedere l'articolo Recordset: i segnalibri e le posizioni assolute (ODBC) nel manuale del programmatore di Visual C++.
CRecordset::noDirtyFieldChecknbsp; Spegnere il campo sporca automatico, controllo (doppio buffer). Ciò permetterà di migliorare le prestazioni; Tuttavia, è necessario contrassegnare manualmente campi come dirty chiamando il SetFieldDirty e il SetField&Null membro funzioni.Si noti che doppio buffer in classe che CRecordset è simile a doppio buffer in classe CDaoRecordset. Tuttavia, in CRecordset, è non è possibile attivare doppio buffer su singoli campi; attivarlo per tutti i campi o disattivarlo per tutti i campi. Per ulteriori informazioni su doppio buffer, vedere l'articolo DAO DAO Record campo Exchange: doppio Buffering Records nel manuale del programmatore di Visual C++. Si noti che se si specifica l'opzione CRecordset:: useMultiRowFetch, poi CRecordset::noDirtyFieldCheck verrà attivata automaticamente; Tuttavia, SetFieldDirty e SetFieldNull non può essere utilizzato sul recordset che implementare il recupero di righe alla rinfusa.
CRecordset::executeDirectnbsp; &Non utilizzare un'istruzione SQL preparata. Per migliorare le prestazioni, specificare questa opzione se non verrà mai chiamata la funzione membro Requery.
CRecordset::useExte&ndedFetchnbsp; Implementare SQLExtendedFetch invece di SQLFetch. Questo è stato progettato per l'implementazione di recupero di massa di righe sui recordset forward-only. Se si specifica l'opzione CRecordset:: useMultiRowFetch su un recordset di tipo forward-only, poi CRecordset::useExtendedFetch verrà attivata automaticamente.
UserAllocMultiRowBuffers L'utente sarà allocare il buffer di archiviazione per i dati. Utilizzare questa opzione in combinazione con CRecordset:: useMultiRowFetch se volete allocare il proprio spazio di archiviazione; in caso contrario, il quadro assegneranno automaticamente l'archiviazione necessaria. Per ulteriori informazioni, vedere l'articolo Recordset: recupero Records in Bulk (ODBC) nel manuale del programmatore di Visual C++. Si noti che specificando userAllocMultiRowBuffers senza specificare CRecordset:: useMultiRowFetch si tradurrà in un'asserzione non riuscita.
Osservazioni
È necessario chiamare questa funzione membro per eseguire la query definita dal recordset. Prima di chiamare Open, è necessario costruire l'oggetto recordset.
Connessione del recordset all'origine dati dipende da come si crea il recordset prima di chiamare Open. Se si passa un oggetto CDatabase al costruttore recordset che non è stato collegato all'origine dati, questa funzione membro utilizza GetDefaultConnect per tentare di aprire l'oggetto di database. Se si passa NULL al costruttore recordset, il costruttore costruisce un oggetto CDatabase per te, e Open tenta di connettersi l'oggetto di database. Per ulteriori informazioni sulla chiusura del recordset e la connessione in queste circostanze diverse, vedere stretta.
&Notanbsp; Accesso a un'origine dati mediante 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 Open, una query, solitamente un'istruzione SQL SELECT , seleziona record sulla base dei criteri indicati nella tabella seguente.
Valore del parametro lpszSQL
Record selezionati sono determinati da
Esempio
NULL
La stringa restituita da GetDefaultSQL.
Nome della tabella SQL
Tutte le colonne della tabella-lista in DoFieldExchange o DoBulkFieldExchange.
"Cliente"
Nome della query predefinite (stored procedure)
Le colonne che della query è definita per restituire.
"{call OverDueAccts}"
Selezionare elenco di colonne dalla tabella-elenco
Le colonne specificate dal table(s) specificato.
"Seleziona CustId, CustName dal cliente"
! Avviso Fare attenzione che non inserire spazi vuoti supplementari nella stringa SQL. Ad esempio, se si inseriscono spazi vuoti tra parentesi graffa e la parola chiave chiamare , MFC interpretano male la stringa SQL come un nome di tabella e incorporarlo in un'istruzione SELECT , che si tradurrà in un'eccezione. Allo stesso modo, se la query predefinita utilizza un parametro di output, non inserire spazi vuoti tra parentesi graffa e il '?' simbolo. Infine, è necessario non inserire spazi bianchi prima la parentesi graffa in un'istruzione CALL o prima della parola chiave selezionate in una dichiarazione di selezionare.
La procedura usuale è di passare NULL all' aperto; in questo caso, Open chiama GetDefaultSQL. Se si utilizza una classe derivata di CRecordset , GetDefualtSQL dà i nomi di tabella specificata nel 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 clausole SQL dove e ORDER BY aggiunte alla stringa lpszSQL che è stato passato) e quindi viene eseguita la query. È possibile esaminare la stringa costruita chiamando GetSQL dopo la chiamata aperta. Per ulteriori dettagli su come il recordset costruisce un'istruzione SQL e seleziona il record, vedere l'articolo Recordset: come i recordset selezionare record (ODBC) nel manuale del programmatore di Visual C++.
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, specificare queste dopo che si costruisce l'oggetto recordset, ma prima di chiamare Open. Se si desidera aggiornare il record del recordset, dopo il recordset è già aperto, chiamare Requery.
Gli esempi di codice seguenti mostrano diverse forme di chiamata Open.
/ / rs è un CRecordset o
/ / Derivata da CRecordset oggetto
/ / Open rs utilizzando l'istruzione SQL predefinita,
/ / implementare i segnalibri e spegnere
/ / controllo automatico campo sporca
RS.Apri (CRecordset::snapshot, &NULL,
nbsp; CRecordset:: useBookmarks |
CRecordset::noDirtyFieldCheck);
/ / Pass un'istruzione SELECT completa
/ / e aperta come un dynaset
RS.Aprire (CRecordset::dynaset,
T ("Seleziona L_Name dal cliente"));
/ / Accettare tutte le impostazioni predefinite
RS.(Aperto)