In diesem dritten Datenbank-Tutorial zeige ich, wie man mit Visual C++ und MFC (Microsoft Foundation Classes) eine Datenbankanwendung erstellt, die dynamische Filterung von Datensätzen ermöglicht. Um diese Anleitung nicht zu lang werden zu lassen, schreibe ich immer nur die Dinge auf, die verändert werden müssen. Bei Codeabschnitten werden die Teile, die von mir verändert wurden, fett geschrieben.


CRecordView auswählen
void CDb3View::OnButton1()
{
// Zwischenspeicher für das Formatieren des Strings
// und Konvertierung einer Int-Zahl in einen CString
CString zwsp;
// Kopieren der in dem Editfeld angezeigten Information
// in die dazugehörige Klassenvariable
UpdateData();
// Löschen vorheriger Einträge der Listbox
m_list.ResetContent();
// Öffnen der Datenbank, wenn sie noch nicht offen ist
// (wird normalerweise nicht gebraucht, aber zur Sicherheit)
if (!m_pSet->IsOpen())
m_pSet->Open();
// Nur Datensätze anzeigen, deren Attribut "BestellteEinheiten"
// gleich der eingegebenen Zahl ist - dazu wird ein Filter aktiviert
// m_strFilter ist eine CString Membervariable der Klasse CRecordSet
// und enthält den Teil der SQL-Klausel, der nach "WHERE" folgt
m_pSet->m_strFilter.Format("[BestellteEinheiten]=%d", m_zahl);
// Das CRecordSet muss unter Anwendung des Filters neu geladen werden
m_pSet->Requery();
// Alle gefilterten Datensätze durchlaufen
while (!m_pSet->IsEOF())
{
// Formatierte Ausgabe: "Artikelnummer; Artikelname"
zwsp.Format("%d; %s", m_pSet->m_Artikel_Nr, m_pSet->m_Artikelname);
// String zur ListBox hinzufügen
m_list.AddString(zwsp);
// Zum nächsten Datensatz im CRecordSet springen
m_pSet->MoveNext();
}
}
Wichtige Konzepte im Code:
UpdateData() - Synchronisiert UI-Elemente mit MembervariablenResetContent() - Leert die ListBox vor neuer Befüllungm_strFilter - CRecordSet-Member für SQL WHERE-KlauselnRequery() - Lädt das RecordSet mit aktuellem Filter neuIsEOF() und MoveNext() - Navigation durch Datensätze
Erweiterungsmöglichkeiten:
- Mehrere Filterkombinationen ermöglichen
- Dropdown-Liste für Filterwerte statt manueller Eingabe
- Speichern und Laden von Filtereinstellungen
- Dynamische Spalten in der ListBox (Report-View statt Simple-View)