Condividi tramite


Recordset: selezione dei record (ODBC)

Nota

La Creazione guidata consumer ODBC MFC non è disponibile in Visual Studio 2019 e versioni successive. È comunque possibile creare manualmente un consumer.

Le informazioni contenute in questo argomento sono valide per le classi ODBC MFC.

In questo argomento:

I recordset selezionano i record da un'origine dati tramite un driver ODBC mediante l'invio di istruzioni SQL al driver. Il codice SQL inviato dipende dalla modalità di progettazione e apertura della classe del recordset.

Opzioni disponibili in Selezione dei record

Nella tabella seguente sono illustrate le opzioni per la selezione dei record.

Casi in cui è possibile modificare un recordset

Quando si È possibile
Dichiara la classe recordset con la procedura guidata Aggiungi classe Specificare la tabella da selezionare.

Specificare le colonne da includere.

Vedere Aggiunta di un consumer ODBC MFC.
Completa l'implementazione della classe recordset Eseguire l'override di funzioni membro come OnSetOptions (impostazione avanzata) per impostare opzioni specifiche dell'applicazione o modificare le impostazioni predefinite. Specificare i membri dati di parametro, se si vuole un recordset con parametri.
Costruire un oggetto recordset (prima di chiamare Open) Specificare una condizione di ricerca (possibilmente composta) da usare in una clausola WHERE che filtra i record. Vedere Recordset: Filtro dei record (ODBC).See Recordset: Filtering Records (ODBC).

Specificare un ordinamento da usare in una clausola ORDER BY che ordina i record. Vedere Recordset: Ordinamento dei record (ODBC).

Specificare i valori dei parametri per gli eventuali parametri aggiunti alla classe. Vedere Recordset: Parametrizzazione di un oggetto Recordset (ODBC).See Recordset: Parameterizing a Recordset (ODBC).

|Eseguire la query del recordset chiamando Open|Specificare una stringa SQL personalizzata per sostituire la stringa SQL predefinita impostata dalla procedura guidata. Vedere CRecordset::Open nella guida di riferimento alla libreria di classi e SQL: Personalizzazione dell'istruzione SQL (ODBC)|

|Chiamare Requery per ripetere la query sul recordset con i valori più recenti nell'origine dati|Specificare nuovi parametri, filtrare o ordinare i dati. Vedere Recordset: Requerying a Recordset (ODBC)||

Come un recordset costruisce la relativa istruzione SQL

Quando si chiama la funzione membro Open di un oggetto recordset, Open costruisce un'istruzione SQL usando tutti gli elementi seguenti o alcuni di essi:

  • Il parametro lpszSQL passato a Open. Se non è NULL, questo parametro specifica una stringa SQL personalizzata (o parte di una stringa). Il framework analizza la stringa. Se la stringa è un'istruzione SQL SELECT o un'istruzione ODBC CALL, il framework usa la stringa come istruzione SQL del recordset. Se la stringa non inizia con "SELECT" o "{CALL", il framework usa gli elementi forniti per costruire una clausola SQL FROM.

  • La stringa restituita da GetDefaultSQL. Per impostazione predefinita, è il nome della tabella specificata per il recordset nella procedura guidata, ma è possibile modificare il valore restituito dalla funzione. Il framework chiama GetDefaultSQL: se la stringa non inizia con "SELECT" o "{CALL", si presume che sia un nome di tabella, che viene usato per costruire una stringa SQL.

  • I membri dati di campo del recordset, che devono essere associati a colonne specifiche della tabella. Il framework associa le colonne di record agli indirizzi di questi membri, usandoli come buffer. Il framework determina la correlazione tra i membri dati di campo e le colonne della tabella dalle chiamate di funzione RFX o RFX di massa nella funzione membro DoFieldExchange o DoBulkFieldExchange del recordset.

  • L'eventuale filtro per il recordset, contenuto nel membro dati m_strFilter. Il framework usa questa stringa per costruire una clausola SQL WHERE.

  • L'eventuale ordinamento per il recordset, contenuto nel membro dati m_strSort. Il framework usa questa stringa per costruire una clausola SQL ORDER BY.

    Suggerimento

    Per usare la clausola SQL GROUP BY (ed eventualmente la clausola HAVING), aggiungere le clausole alla fine della stringa di filtro.

  • I valori di eventuali membri dati di parametro specificati per la classe. I valori dei parametri sono impostati subito prima di chiamare Open o Requery. Il framework associa i valori dei parametri ai segnaposto "?" nella stringa SQL. In fase di compilazione, la stringa viene specificata con segnaposto. In fase di esecuzione, il framework inserisce i dettagli in base ai valori dei parametri passati.

Open costruisce un'istruzione SQL SELECT con questi elementi. Vedere Personalizzazione della selezione per informazioni dettagliate sul modo in cui il framework usa gli elementi.

Al termine della creazione dell'istruzione, Open invia il codice SQL a Gestione driver ODBC (e alla libreria di cursori ODBC, se è in memoria), che lo invia al driver ODBC per lo specifico sistema di gestione di database. Il driver comunica con il sistema di gestione di database per eseguire la selezione nell'origine dati e recupera il primo record. Il framework carica il record nei membri dati di campo del recordset.

È possibile usare una combinazione di queste tecniche per aprire le tabelle e costruire una query basata su un join di più tabelle. Con un'ulteriore personalizzazione, è possibile chiamare query predefinite (stored procedure), selezionare colonne di tabelle che non erano note in fase di progettazione e associarle ai campi del recordset o eseguire la maggior parte delle altre attività di accesso ai dati. Le attività che non è possibile eseguire tramite la personalizzazione dei recordset possono comunque essere effettuate mediante le chiamate di funzioni API ODBC o eseguendo direttamente istruzioni SQL con CDatabase:: ExecuteSQL.

Personalizzazione della selezione

Oltre a specificare un filtro, un ordinamento o parametri, è possibile eseguire le seguenti azioni per personalizzare la selezione del recordset:

  • Passare una stringa SQL personalizzata in lpszSQL quando si chiama Open per il recordset. Qualsiasi elemento passato in lpsqSQL ha la precedenza sul valore restituito dalla funzione membro GetDefaultSQL.

    Per altre informazioni, vedere SQL: Personalizzazione dell'istruzione SQL (ODBC) dell'oggetto Recordset, che descrive i tipi di istruzioni SQL (o istruzioni parziali) a Open cui è possibile passare e a cosa fa il framework.

    Nota

    Se la stringa personalizzata passata non inizia con "SELECT" o "{CALL", MFC presuppone che contenga un nome di tabella. Questo vale anche per l'elemento successivo.

  • Modificare la stringa scritta dalla procedura guidata nella funzione membro GetDefaultSQL del set di record. Modificare il codice della funzione per cambiare il valore restituito. Per impostazione predefinita, la procedura guidata scrive una funzione GetDefaultSQL che restituisce un singolo nome di tabella.

    È possibile impostare GetDefaultSQL in modo da restituire gli elementi che è possibile passare nel parametro lpszSQL a Open. Se non si passa una stringa SQL personalizzata in lpszSQL, il framework usa la stringa restituita da GetDefaultSQL. Come minimo, GetDefaultSQL deve restituire un singolo nome di tabella. Tuttavia, può restituire più nomi di tabella, un'intera istruzione SELECT, un istruzione ODBC CALL e così via. Per un elenco degli elementi che è possibile passare a lpszSQL o avere GetDefaultSQL restituito, vedere SQL: Personalizzazione dell'istruzione SQL dell'oggetto Recordset (ODBC).

    Se si esegue un join di due o più tabelle, riscrivere GetDefaultSQL per personalizzare l'elenco di tabelle usato nella clausola SQL FROM. Per altre informazioni, vedere Recordset: Esecuzione di un join (ODBC).

  • Associare manualmente membri dati di campo aggiuntivi, eventualmente basati sulle informazioni ottenute sullo schema dell'origine dati in fase di esecuzione. I membri dati di campo vengono aggiunti alla classe recordset, le relative chiamate di funzione RFX o RFX di massa alla funzione membro DoFieldExchange o DoBulkFieldExchange e le inizializzazioni dei membri dei dati nel costruttore della classe. Per altre informazioni, vedere Recordset: Binding dinamico di colonne di dati (ODBC).

  • Eseguire l'override di funzioni membro del recordset, come OnSetOptions, per impostare opzioni specifiche dell'applicazione o eseguire l'override delle impostazioni predefinite.

Se si vuole basare il recordset su un'istruzione SQL complessa, è necessario usare una combinazione di queste tecniche di personalizzazione. Ad esempio, è possibile usare clausole e parole chiave SQL non direttamente supportate dal recordset o eseguire il join di più tabelle.

Vedi anche

Recordset (ODBC)
Recordset: aggiornamento dei record (ODBC)
Nozioni fondamentali su ODBC
SQL
Recordset: blocco dei record (ODBC)