Datenbankbeispiel 3


Einleitung

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.

Beispiel

Aufgabe

Suchen Sie mit dem Explorer die MS-Beispieldatenbank "Nordwind". Es kann sein, dass diese nicht installiert ist.

Erstellen Sie ein Programm, das die Attribute "Artikelnummer" und "Artikename" der Tabelle "Artikel" in einem CListCtrl anzeigt.
Wird eine Zahl in das Editfeld eingegeben und mit "Show" bestätigt, werden nur noch die Datensätze angezeigt, bei denen das Attribut "Bestellte Menge" gleich dem eingegebenen Wert ist.

Lösung in Prosa

  1. Zuerst einmal ein neues Projekt anlegen:
  2. Zeichnen des Dialogs:
    Es werden nur eine Listbox, ein Eingabefeld und ein Button benötigt.

  3. Nun müssen nur noch die Eingabefelder mit den Feldern in der Datenbank verbunden werden.
    Dazu muss der Klassenassistent geöffnet werden.
  4. Nun muss die Listbox noch mit den Daten befüllt werden, wenn auf den Button "Show" gedrückt wird. Hierfür muss ein Handler im Klassenassistenten erstellt werden. Oder man macht einfach in der Ressourcenansicht einen Doppelklick auf den Button und bestätigt die Erstellung mit "OK".
    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 DB wenn sie noch nicht offen ist
    	// wird normalerweise nicht gebraucht
    	// aber zur Sicherheit :-)
    	if (!m_pSet->IsOpen())
    		m_pSet->Open();
    
    	// Da ich nur die Datensätze anzeigen möchte, dessen Attribut
    	// "BestellteEinheiten" gleich der Zahl ist, die man in das Editfeld
    	// eingegeben hat, muss ein Filter aktiviert werden.
    	// Dieser ist nur eine CString Membervariable der Klasse CRecordSet
    	// und beinhaltet eigentlich nur den Teil der SQL-Klausel, die nach dem
    	// Schlüssenwort "Where" folgt
    	m_pSet->m_strFilter.Format("[BestellteEinheiten]=%d",m_zahl);
    	// Das CRecordSet muss nun unter Anwendung des Filters noch einmal
    	// neu geladen werden, damit der Filter Wirkung zeigt
    	m_pSet->Requery();
    
    	// Solange, bis kein weiteres Element in der Tabelle angekommen
    	while (!m_pSet->IsEOF())
    	{
    		// Den in die Listbox zu schreibenden String zusammenstellen
    		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();
    	}
    }
          
  5. Fertig