Recordset: Abrufen von Summen und anderen Aggregatergebnissen (ODBC)
Hinweis
Der MFC-ODBC-Consumer-Assistent ist in Visual Studio 2019 und höher nicht verfügbar. Sie können einen Consumer weiterhin manuell erstellen.
Dieses Thema bezieht sich auf die MFC-ODBC-Klassen.
In diesem Thema wird erläutert, wie Aggregatergebnisse mit den folgenden SQL-Schlüsselwörtern abgerufen werden:
SUM: Berechnet die Summe der Werte in einer Spalte mit einem numerischen Datentyp.
MIN: Extrahiert den kleinsten Wert aus einer Spalte mit einem numerischen Datentyp.
MAX: Extrahiert den größten Wert aus einer Spalte mit einem numerischen Datentyp.
AVG: Berechnet den Durchschnittswert aller Werte in einer Spalte mit einem numerischen Datentyp.
COUNT: Zählt die Anzahl der Datensätze in einer Spalte mit einem beliebigen Datentyp.
Sie können diese SQL-Funktionen verwenden, um statistische Informationen zu den Datensätzen in einer Datenquelle abzurufen, statt Datensätze aus der Datenquelle zu extrahieren. Das Recordset, das erstellt wird, besteht in der Regel aus einem einzigen Datensatz (wenn alle Spalten Aggregate sind), der einen Wert enthält. (Es können mehrere Datensätze vorhanden sein, wenn Sie eine GROUP BY-Klausel verwendet haben.) Dieser Wert ist das Ergebnis der Berechnung oder Extraktion, die von der SQL-Funktion ausgeführt wurde.
Tipp
Wenn Sie eine GROUP BY-SQL-Klausel (und möglicherweise eine HAVING-Klausel) zu Ihrer SQL-Anweisung hinzufügen möchten, fügen Sie diese am Ende von m_strFilter
an. Zum Beispiel:
m_strFilter = "sales > 10 GROUP BY SALESPERSON_ID";
Sie können die Anzahl von Datensätzen, aus denen Sie Aggregatergebnisse abrufen, einschränken, indem Sie die Spalten filtern und sortieren.
Achtung
Einige Aggregationsoperatoren geben einen Wert mit einem Datentyp zurück, der sich vom Datentyp der Spalten unterscheidet, über die die Operatoren aggregieren.
SUM und AVG geben möglicherweise den nächstgrößeren Datentyp zurück (ein Aufrufen mit
int
führt z. B. zur Rückgabe von LONG oderdouble
).COUNT gibt üblicherweise LONG zurück, unabhängig vom Typ der Zielspalte.
MAX und MIN geben den Datentyp zurück, den die Spalte hat, die sie berechnen.
Der Assistent zum Hinzufügen von Klassen erstellt beispielsweise
long
m_lSales
, um eine Spalte „Sales“ einzubinden. Sie müssen dies aber durch einendouble m_dblSumSales
-Datenmember ersetzen, um das aggregierte Ergebnis zu berücksichtigen. Siehe folgendes Beispiel.
So rufen Sie ein aggregiertes Ergebnis für ein Recordset ab
Erstellen Sie gemäß der Beschreibung unter Hinzufügen eines MFC-ODBC-Consumers ein Recordset, das die Spalten enthält, aus denen Sie aggregierte Ergebnisse abrufen möchten.
Ändern Sie die DoFieldExchange-Funktion für das Recordset. Ersetzen Sie die Zeichenfolge, die den Namen der Spalte darstellt (das zweite Argument des RFX-Funktionsaufrufs) durch eine Zeichenfolge, die die Aggregationsfunktion für die Spalte darstellt. Ersetzen Sie beispielsweise:
RFX_Long(pFX, "Sales", m_lSales);
Durch:
RFX_Double(pFX, "Sum(Sales)", m_dblSumSales)
Öffnen Sie das Recordset. Das Ergebnis des Aggregationsvorgangs wird in
m_dblSumSales
gespeichert.
Hinweis
Der Assistent weist tatsächlich Datenmembernamen ohne ungarische Präfixe zu. Beispielsweise würde der Assistent den Namen m_Sales
für eine „Sales“-Spalte anstelle des Namens m_lSales
erstellen, der zuvor zur Veranschaulichung verwendet wurde.
Wenn Sie eine CRecordView-Klasse verwenden, um die Daten anzuzeigen, müssen Sie den DDX-Funktionsaufruf so ändern, dass der neue Wert des Datenmembers angezeigt wird. In diesem Fall bedeutet dies eine Änderung von:
DDX_FieldText(pDX, IDC_SUMSALES, m_pSet->m_lSales, m_pSet);
In:
DDX_FieldText(pDX, IDC_SUMSALES, m_pSet->m_dblSumSales, m_pSet);
Weitere Informationen
Recordset (ODBC)
Recordset: Wie Recordsets Datensätze auswählen (ODBC)