Jeu d'enregistrements : sélection d'enregistrements par les jeux d'enregistrements (ODBC)
Mise à jour : novembre 2007
Cette rubrique s'applique aux classes ODBC MFC.
Cette rubrique explique :
vos rôle et options dans la sélection d'enregistrements ;
comment un jeu d'enregistrements construit son instruction SQL et sélectionne les enregistrements ;
les actions à entreprendre pour personnaliser la sélection.
Les jeux d'enregistrements sélectionnent les enregistrements d'une source de données via un pilote ODBC en envoyant des instructions SQL au pilote. L'instruction SQL envoyée dépend de la façon dont vous avez conçu et ouvert la classe de jeu d'enregistrements.
Options de sélection des enregistrements
Le tableau suivant répertorie les options de sélection des enregistrements.
Comment et quand influer sur un jeu d'enregistrements
Pour... |
Vous pouvez : |
---|---|
Déclarer la classe de jeu d'enregistrements à l'aide de l'Assistant Ajouter une classe |
Définir la table à partir de laquelle s'effectue la sélection. Définir les colonnes à inclure. Consultez Ajout d'un consommateur ODBC MFC. |
Implémenter la classe de jeu d'enregistrements |
Substituer les fonctions membres OnSetOptions (option avancée) pour définir des options propres à l'application ou modifier les valeurs par défaut. Définir les membres de données de type paramètre si vous voulez un jeu d'enregistrements paramétré. |
Construire un objet recordset (avant d'appeler Open) |
Préciser la condition de recherche (éventuellement composée) à utiliser dans la clause WHERE qui filtre les enregistrements. Consultez Jeu d'enregistrements : filtrage d'enregistrements (ODBC). Définir l'ordre de tri à utiliser dans la clause ORDER BY qui trie les enregistrements. Consultez Jeu d'enregistrements : tri d'enregistrements (ODBC). Définir les valeurs des paramètres ajoutés à la classe. Consultez Jeu d'enregistrements : paramétrage d'un jeu d'enregistrements (ODBC). |
Exécuter la requête du jeu d'enregistrements en appelant Open |
Définir une chaîne SQL personnalisée pour remplacer la chaîne SQL par défaut définie par l'Assistant. Consultez CRecordset::Open dans Class Library Reference et SQL : personnalisation de l'instruction SQL du jeu d'enregistrements (ODBC). |
Appeler Requery pour lancer une nouvelle requête sur le jeu d'enregistrements avec les valeurs les plus récentes de la source de données |
Définir de nouveaux paramètres, un filtrage ou un tri. Consultez Jeu d'enregistrements : lancement d'une nouvelle requête sur un jeu d'enregistrements (ODBC). |
Construction de l'instruction SQL par le jeu d'enregistrements
Quand vous appelez la fonction membre Open d'un objet recordset, Open construit l'instruction SQL à l'aide d'une partie ou de la totalité des éléments suivants :
Le paramètre lpszSQL passé à Open. S'il est différent de NULL, ce paramètre définit une chaîne SQL personnalisée, ou une partie de celle-ci. La structure analyse la chaîne. Si la chaîne est une instruction SQL SELECT ou une instruction ODBC CALL, l'infrastructure utilise la chaîne comme instruction SQL du jeu d'enregistrements. Si la chaîne ne commence pas par "SELECT" ou "{CALL", l'infrastructure utilise ce qui a été fourni pour construire la clause SQL FROM.
La chaîne retournée par GetDefaultSQL. Par défaut, il s'agit du nom de la table que vous avez défini pour le jeu d'enregistrements dans l'Assistant, mais vous pouvez modifier ce qui est retourné par la fonction. L'infrastructure appelle GetDefaultSQL — si la chaîne ne commence pas par "SELECT" ou par "{CALL", elle est considérée comme nom de table, utilisé alors pour construire la chaîne SQL.
Les membres de données de type champ de recordset, qui doivent être liés à des colonnes spécifiques de la table. L'infrastructure lie les colonnes de l'enregistrement aux adresses de ces membres, les utilisant comme tampons. L'infrastructure détermine la corrélation des membres de données de type champ et des colonnes de la table à partir des appels de fonction RFX ou RFX en bloc dans les fonctions membres DoFieldExchange ou DoBulkFieldExchange du jeu d'enregistrements.
Le filtre du jeu d'enregistrements, s'il existe, contenu dans le membre de données m_strFilter. L'infrastructure utilise la chaîne pour construire une clause SQL WHERE.
L'ordre de tri du jeu d'enregistrements, s'il existe, contenu dans le membre de données m_strSort. L'infrastructure utilise la chaîne pour construire une clause SQL ORDER BY.
Conseil : Pour utiliser la clause SQL GROUP BY (et éventuellement la clause HAVING), ajoutez les clauses à la fin de la chaîne de filtre.
Les valeurs des membres de données de type paramètre que vous avez définis pour la classe. Vous définissez les valeurs des paramètres juste avant d'appeler Open ou Requery. L'infrastructure lie les valeurs des paramètres aux emplacements réservés « ? » de la chaîne SQL. À la compilation, vous définissez la chaîne avec les emplacements réservés. À l'exécution, l'infrastructure complète les informations à partir des valeurs de paramètres que vous passez.
Open construit une instruction SQL SELECT à partir de ces éléments. Pour plus d'informations sur l'utilisation de ces éléments par l'infrastructure, consultez Personnalisation de la sélection.
Après avoir construit l'instruction, Open l'envoie au gestionnaire de pilotes ODBC (et à la bibliothèque de curseurs ODBC si elle a été chargée en mémoire), lequel à son tour la transmet au pilote ODBC du SGBD concerné. Le pilote communique avec le SGBD pour effectuer la sélection sur la source de données et extrait le premier enregistrement. L'infrastructure charge l'enregistrement dans les membres de données de type champ de recordset.
Vous pouvez associer ces techniques pour ouvrir des tables et pour construire une requête fondée sur la jointure de plusieurs tables. Avec une personnalisation supplémentaire, vous pouvez appeler des requêtes prédéfinies (procédures stockées), sélectionner des colonnes inconnues au moment du design et les lier aux champs du jeu d'enregistrements, ou effectuer bien d'autres tâches d'accès aux données. Les tâches que vous ne pouvez pas effectuer en personnalisant les jeux d'enregistrements peuvent toujours être accomplies en appelant les fonctions ODBC API ou en exécutant directement les instructions SQL avec CDatabase::ExecuteSQL.
Personnalisation de la sélection
Outre le fait de fournir un filtre, un ordre de tri ou des paramètres, vous pouvez prendre les mesures suivantes pour personnaliser la sélection du jeu d'enregistrements :
Passer une chaîne SQL personnalisée à lpszSQL lorsque vous appelez la fonction Open pour le jeu d'enregistrements. Toute valeur passée à lpsqSQL a priorité sur ce que la fonction membre GetDefaultSQL retourne.
Pour plus d'informations, consultez SQL: personnalisation de l'instruction SQL du jeu d'enregistrements (ODBC), qui décrit les types d'instructions SQL (ou d'instructions partielles) que vous pouvez passer à Open et l'utilisation qu'en fait l'infrastructure.
Remarque : Si la chaîne personnalisée que vous passez ne commence pas par "SELECT" ou "{CALL", MFC en déduit qu'elle contient un nom de table. Cette remarque s'applique aussi à l'élément à puce suivant.
Modifier la chaîne que l'Assistant écrit dans la fonction membre GetDefaultSQL du jeu d'enregistrements. Modifiez le code de la fonction pour changer ce qu'elle retourne. Par défaut, l'Assistant écrit une fonction GetDefaultSQL retournant un seul nom de table.
Vous pouvez demander à GetDefaultSQL de retourner les éléments que vous passez au paramètre lpszSQL de la fonction Open. Si vous ne passez pas une chaîne personnalisée SQL dans lpszSQL, l'infrastructure utilise la chaîne retournée par GetDefaultSQL. Au minimum, GetDefaultSQL doit retourner un nom de table. Mais vous pouvez faire en sorte que soient retournés plusieurs noms de tables, une instruction SELECT complète, une instruction ODBC CALL, etc. Pour obtenir la liste de ce que vous pouvez passer à lpszSQL (ou demander à GetDefaultSQL de retourner) consultez SQL : personnalisation de l'instruction SQL du jeu d'enregistrements (ODBC).
Si vous effectuez une jointure sur deux ou plusieurs tables, réécrivez GetDefaultSQL pour personnaliser la liste des tables utilisée dans la clause SQL FROM. Pour plus d'informations, consultez Jeu d'enregistrements : création d'une jointure (ODBC).
Lier manuellement les membres de données de type champ supplémentaires, peut-être à partir des informations obtenues à l'exécution sur le schéma de la source de données. Ajoutez les membres de données de type champ à la classe de jeu d'enregistrements, les appels de fonction RFX ou RFX en bloc correspondants aux fonctions membres DoFieldExchange ou DoBulkFieldExchange, et les initialisations des membres de données dans le constructeur de classe. Pour plus d'informations, consultez Jeu d'enregistrements : liaison dynamique des colonnes de données (ODBC).
Substituer les fonctions membres du jeu d'enregistrements; comme OnSetOptions, pour définir les options propres à l'application ou substituer les valeurs par défaut.
Si vous devez établir le jeu d'enregistrements à partir d'une instruction SQL complexe, vous devrez utiliser conjointement certaines de ces techniques de personnalisation. Par exemple, vous pouvez utiliser des clauses et mots clés SQL non directement pris en charge par les jeux d'enregistrements ou joindre plusieurs tables.
Voir aussi
Concepts
Jeu d'enregistrements : modification des enregistrements par les jeux d'enregistrements (ODBC)
Éléments fondamentaux relatifs à ODBC
Jeu d'enregistrements : verrouillage d'enregistrements (ODBC)