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(); } }