Recordset: Abrufen von Summen und anderen Aggregatergebnissen (ODBC)
Dieses Thema bezieht sich auf die MFC-ODBC-Klassen.
In diesem Thema wird erläutert, wie Sie mit folgenden SQL-Schlüsselwörtern Aggregatergebnisse abrufen:
SUM Berechnet die Summe der Werte in einer Spalte mit einem numerischen Datentyp.
MIN Gibt den kleinsten Wert aus einer Spalte mit einem numerischen Datentyp zurück.
MAX Gibt den größten Wert aus einer Spalte mit einem numerischen Datentyp zurück.
AVG Berechnet den Durchschnitt aller Werte aus einer Spalte mit einem numerischen Datentyp.
COUNT Zählt die Datensätze in einer Spalte mit einem beliebigen Datentyp.
Sie können mit diesen SQL-Funktionen statistische Informationen über die Datensätze in einer Datenquelle abrufen, ohne die Datensätze aus der Datenquelle abrufen zu müssen. Das für diesen Zweck erstellte Recordset besteht normalerweise aus einem einzigen Datensatz (falls alle Spalten Aggregate sind) mit einem Wert. (Falls Sie eine GROUP BY-Klausel verwenden, kann es auch mehrere Datensätze geben.) Dieser Wert ist das Ergebnis der Berechnung oder Suche, die von der SQL-Funktion durchgeführt wurde.
Tipp
Um eine SQL-GROUP BY-Klausel (und unter Umständen eine HAVING-Klausel) in die SQL-Anweisung einzufügen, hängen Sie diese an das Ende von m_strFilter an. Beispiel:
m_strFilter = "sales > 10 GROUP BY SALESPERSON_ID";
Sie können die Anzahl der Datensätze begrenzen, mit denen Sie Aggregatergebnisse ermitteln, indem Sie die Spalten filtern und sortieren.
Warnung
Einige Aggregatoperatoren geben einen anderen Datentyp zurück als den der Spalten, über die sie ausgeführt werden.
SUM und AVG geben unter Umständen den nächstgrößeren Datentyp zurück (z. B. erfolgt beim Aufruf von int eine Rückgabe von LONG oder double).
COUNT gibt unabhängig vom Typ der Zielspalte in den meisten Fällen LONG zurück.
MAX und MIN geben den Datentyp der Spalten zurück, die sie berechnen.
Der Assistent zum Hinzufügen von Klassen könnte z. B. für eine Umsatzspalte den Datenmember long m_lSales erstellen. Sie müssen diesen Datenmember jedoch durch double m_dblSumSales ersetzen, um das Aggregatergebnis zu unterstützen. (Siehe nachstehendes Beispiel.)
So ermitteln Sie ein Aggregatergebnis für ein Recordset
Erstellen Sie ein Recordset (wie unter Hinzufügen eines MFC-ODBC-Consumers beschrieben) mit den Spalten, für die Sie Aggregatergebnisse abrufen möchten.
Ändern Sie die DoFieldExchange-Funktion des Recordsets. Ersetzen Sie die Zeichenfolge mit dem Spaltennamen (das zweite Argument der RFX-Funktionsaufrufe) durch eine Zeichenfolge, die die Aggregatfunktion für die Spalte enthält. Ersetzen Sie z. B.
RFX_Long(pFX, "Sales", m_lSales);
durch
RFX_Double(pFX, "Sum(Sales)", m_dblSumSales)
Öffnen Sie das Recordset. Das Ergebnis der Aggregatoperation wird in m_dblSumSales abgelegt.
Tipp
Der Assistent verwendet Datenmembernamen ohne ungarische Präfixe. Der Assistent legt z. B. für eine Spalte mit dem Namen Sales das Datenelement m_Sales an, und nicht das in diesem Beispiel verwendete m_lSales.
Wenn die Daten mithilfe einer CRecordView-Klasse angezeigt werden, müssen Sie den DDX-Funktionsaufruf ändern, um den neuen Datenmemberwert darzustellen. Ändern Sie den Aufruf in diesem Fall von
DDX_FieldText(pDX, IDC_SUMSALES, m_pSet->m_lSales, m_pSet);
in
DDX_FieldText(pDX, IDC_SUMSALES, m_pSet->m_dblSumSales, m_pSet);