Bentutzen Sie diese Datenbank und erstellen sie eine Benutzer- oder System-DSN im ODBC Manager in der Systemsteuerung mit dem Namen "splitter". Wie das geht steht hier. Erstellen Sie eine Visual Anwendung, welche in einem geteilten Fenster (Splitter Window) diese Datenbank in 4 Ansichten zeigt: Inhalte der Ansichten:
|
// MainFrm.cpp : Implementierung der Klasse CMainFrame // #include "stdafx.h" #include "splitter.h" #include "MainFrm.h" //Die Dokumentklasse #include "SplitterDoc.h" //Die 4 View Klassen #include "DKunde.h" #include "DLand.h" #include "DJoin.h" #include "DAdresse.h"
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen // Folgende Zeile muss auskommentiert werden // -> return CFrameWnd::OnCreateClient(lpcs, pContext); // Geteiltes Fenster mit 2 Zeilen und 2 Spalten erstellen m_wndSplitter.CreateStatic(this,2,2); // Alle 4 Views an den in den ersten zwei Parametern übergebenen Positionen einfügen m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(DKunde),CSize(350,250),pContext); m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(DAdresse),CSize(350,250),pContext); m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(DLand),CSize(350,220),pContext); m_wndSplitter.CreateView(1,1,RUNTIME_CLASS(DJoin),CSize(350,220),pContext); return TRUE; }
void DAdresse::OnVor() { // Datensatzzeiger vorrücken m_pSet->MoveNext(); // Daten in die Controls (auf den Bildschirm) schreiben UpdateData(false); } void DAdresse::OnZurueck() { // Datensatzzeiger zurückrücken m_pSet->MovePrev(); // Daten in die Controls (auf den Bildschirm) schreiben UpdateData(false); } void DAdresse::OnAdd() { // Datenbank für Hinzufügen vorbereiten m_pSet->AddNew(); // Spalte Index der Tabelle ist Autowert // desshalb den von AddNew() generierten merken.. int merker = m_pSet->m_Index; // Daten von den Controls in die Variablen kopieren UpdateData(); // .. und Autowert von Index restaurieren m_pSet->m_Index = merker; // Einfügeoperation abschließen m_pSet->Update(); // Aktualisieren der Datenbank m_pSet->Requery(); // Daten in Controls kopieren UpdateData(false); } void DAdresse::OnDel() { // Aktellen Datensatz löschen m_pSet->Delete(); // Gelöschten wirklich entfernen // er wird sonst noch als gelöscht angezeigt m_pSet->Requery(); // Controls aktualisieren UpdateData(false); } void DAdresse::OnUpdate() { // Aktuellen Datensatz zum Editieren vorbereiten m_pSet->Edit(); // Benutzereingaben in die Variablen kopieren UpdateData(); // Editieroperation abschließen m_pSet->Update(); }
void DJoin::OnInitialUpdate() { BeginWaitCursor(); GetRecordset(); CRecordView::OnInitialUpdate(); if (m_pSet->IsOpen()) { CString strTitle = m_pSet->m_pDatabase->GetDatabaseName(); CString strTable = m_pSet->GetTableName(); if (!strTable.IsEmpty()) strTitle += _T(":") + strTable; GetDocument()->SetTitle(strTitle); } EndWaitCursor(); // Tabellenüberschriften setzen m_list.InsertColumn(0,"Kunde",LVCFMT_LEFT,60); m_list.InsertColumn(1,"Ort",LVCFMT_LEFT,60); m_list.InsertColumn(2,"Strasse",LVCFMT_LEFT,80); m_list.InsertColumn(3,"Hausnr",LVCFMT_LEFT,40); m_list.InsertColumn(4,"Land",LVCFMT_LEFT,80); }
void DJoin::OnSuch() { // Natural Join (jedes mit jedem) verhindern m_pSet->m_strFilter = "Kunde.Adresse = Adresse.Index AND Adresse.Land = Land.Index"; // Schauen, ob etwas im Eingabefeld steht UpdateData(); if (m_kunde != "") //Wenn ja, danach suchen m_pSet->m_strFilter += " AND Kunde.Name = '"+m_kunde+"'"; // Recordset aktualisieren ( Suchregel wird angewendet ) m_pSet->Requery(); // Alte Items der CListCtrl löschen m_list.DeleteAllItems(); // Solange Elemente vorhanden while (!m_pSet->IsEOF()) { // in CListCtrl einfügen int item = m_list.InsertItem(0,m_pSet->m_kunde,-1); m_list.SetItemText(item,1,m_pSet->m_ort); m_list.SetItemText(item,2,m_pSet->m_strasse); m_list.SetItemText(item,3,m_pSet->m_hausnummer); m_list.SetItemText(item,4,m_pSet->m_land); // Aktellen Datensatz um eins weitersetzen m_pSet->MoveNext(); } }