Recordset : calculs de totaux et autres résultats de regroupement (ODBC)
Remarque
L’Assistant Consommateur ODBC MFC n’est pas disponible dans Visual Studio 2019 et ultérieur. Vous pouvez toujours créer un consommateur manuellement.
Cette rubrique s’applique aux classes ODBC MFC.
Cette rubrique explique comment obtenir les résultats d’agrégation avec les mots clés SQL suivants :
SUM calcule le total des valeurs dans une colonne ayant un type de données numérique.
MIN extrait la plus petite valeur dans une colonne ayant un type de données numérique.
MAX extrait la plus grande valeur dans une colonne ayant un type de données numérique.
AVG calcule une valeur moyenne de toutes les valeurs dans une colonne ayant un type de données numérique.
COUNT comptabilise le nombre d’enregistrements dans une colonne de n’importe quel type de données.
Ces fonctions SQL s’utilisent pour obtenir des informations statistiques sur les enregistrements contenus dans une source de données plutôt que pour extraire des enregistrements de la source de données. Le recordset créé se compose généralement d’un seul enregistrement (si toutes les colonnes sont des agrégats) contenant une valeur. (Il peut y avoir plusieurs enregistrements si vous avez utilisé une clause GROUP BY.) Cette valeur est le résultat de l’opération de calcul ou d’extraction effectuée par la fonction SQL.
Conseil
Quand vous ajoutez une clause SQL GROUP BY (et éventuellement une clause HAVING) à l’instruction SQL, placez-la à la fin de m_strFilter
. Par exemple :
m_strFilter = "sales > 10 GROUP BY SALESPERSON_ID";
Vous pouvez limiter le nombre d’enregistrements utilisés pour obtenir des résultats d’agrégation en filtrant et en triant les colonnes.
Attention
Certains opérateurs d’agrégation retournent un type de données différent des colonnes sur lesquelles porte l’agrégation.
SUM et AVG peuvent retourner un type de données de longueur immédiatement supérieure (par exemple, l’appel avec
int
retourne le type LONG oudouble
).COUNT retourne généralement le type LONG indépendamment du type de la colonne cible.
MAX et MIN retournent le même type de données que les colonnes utilisées pour le calcul.
Par exemple, l’Assistant Ajouter une classe crée
long
m_lSales
pour contenir une colonne Sales, mais vous devez le remplacer par un membre de donnéesdouble m_dblSumSales
pouvant contenir le résultat de l’agrégation. Consultez l’exemple qui suit.
Pour obtenir un résultat d’agrégation à partir d’un recordset
En suivant les étapes décrites dans Ajout d’un consommateur ODBC MFC, créez un recordset contenant les colonnes à partir desquelles vous souhaitez obtenir un résultat d’agrégation.
Modifiez la fonction DoFieldExchange pour le recordset. Remplacez la chaîne représentant le nom de colonne (le deuxième argument dans les appels de fonction RFX) par une chaîne représentant la fonction d’agrégation appliquée sur la colonne. Par exemple, remplacez :
RFX_Long(pFX, "Sales", m_lSales);
par :
RFX_Double(pFX, "Sum(Sales)", m_dblSumSales)
Ouvrez le recordset. Le résultat de l’opération d’agrégation est conservé dans
m_dblSumSales
.
Remarque
En fait, l’Assistant attribue des noms sans préfixe hongrois aux membres de données. Par exemple, l’Assistant génère le nom m_Sales
pour la colonne Sales à la place du nom m_lSales
utilisé précédemment à titre d’illustration.
Si vous utilisez une classe CRecordView pour afficher les données, vous devez modifier l’appel de fonction DDX pour afficher la nouvelle valeur du membre de données, qui ici a changé de :
DDX_FieldText(pDX, IDC_SUMSALES, m_pSet->m_lSales, m_pSet);
Par :
DDX_FieldText(pDX, IDC_SUMSALES, m_pSet->m_dblSumSales, m_pSet);
Voir aussi
Recordset (ODBC)
Recordset : sélection d’enregistrements par les recordsets (ODBC)