Funktion aufrufen



  • Hallo
    ich habe in der ...App den Code für das Wechseln der FormDialogen geschrieben.
    Damit aber nach dem Wechsel die Daten aus der Datenbank wieder angezeigt werden, muss der Code zum Öffnen der Datenbank nochmals aufrufen werden(oder?).
    Doch mache ich das mit dem Öffnen der Datenbank in der ...Doc.
    Wie kann ich es also erreichen, dass ich in der ...App den Befehl gebe die Datenbank neu zu öffnen?
    Mfg Kobold



  • Hallo
    ich kann jetzt OnNewDocument(da wo die verbindung zur Datenbank hergestellt wird) aufrufen.
    Doch die Daten werden immer noch nicht angezeigt(ich bin mit meinem Latein am Ende).
    Mache es immoment so:
    1)Schließe die Datenbankverbindung
    2)Wechsel das FormView mit switch
    3)und öffne die Datenbank neu (mit der gleichen Funktion wie ich es beim Starten des Programms mache)
    dann müssten doch eigentlich alle Daten angezeigt werden.(werden sie aber leider nicht!).

    Hier ist der Code:

    CFrameWnd* pMain = (CFrameWnd*)AfxGetMainWnd(); //anstatt AfxGetApp()->m_pMainWnd
    CAdoDatabaseView* pView = (CAdoDatabaseView*) pMain->GetActiveView( );
    CAdoDatabaseDoc* pDoc = (CAdoDatabaseDoc*)pMain->GetActiveDocument( );

    // Datenbankverbindung schießen
    pDoc->DeleteContents();

    // FormView wechseln
    SwitchView (2);

    // Datenbankverbindung öffnen
    pDoc->OnNewDocument();

    Brauche unbedingt eure hilfe.
    Mfg Kobold



  • 123Kobold schrieb:

    CFrameWnd* pMain = (CFrameWnd*)AfxGetMainWnd();  //anstatt AfxGetApp()->m_pMainWnd 
    	CAdoDatabaseView* pView = (CAdoDatabaseView*) pMain->GetActiveView( ); 
    	CAdoDatabaseDoc* pDoc = (CAdoDatabaseDoc*)pMain->GetActiveDocument( ); // 1
    		
    	// Datenbankverbindung schießen
    	pDoc->DeleteContents();
    
    	// FormView wechseln
    	SwitchView (2); // 2
    
    	// Datenbankverbindung öffnen
    	pDoc->OnNewDocument(); // 3
    

    Naja, ist ja auch logisch, wenn der Code da lückenlos kopiert wurde:
    1: Du holst einen Zeiger auf das aktuelle Dokument.
    2: Du WECHSELST Doc und View.
    3: Du lässt das ALTE Doc was tun. (Der Zeiger wurde nicht umgesetzt.)
    Abhilfe: Du machst nach dem SwitchView nochmal

    pDoc = (CAdoDatabaseDoc*)pMain->GetActiveDocument( );
    


  • Du hast geschieben:

    2: Du WECHSELST Doc und View.

    Doch mit meiner Switchanwendung wechsel ich doch nur die View und nicht die Doc.
    Hier der Code:

    ASSERT( nIndex >=0 && nIndex < NUMVIEWS ); 
    
        CView* pNewView = m_pViews[nIndex]; 
    
        CView* pActiveView = 
        ((CFrameWnd*) m_pMainWnd)->GetActiveView(); 
    
        if ( !pActiveView )    // No currently active view 
            return NULL; 
    
        if ( pNewView == pActiveView )    // Already there 
            return pActiveView; 
    
        m_nCurView = nIndex;    // Store the new current view's index 
    
        // exchange view window ID's so RecalcLayout() works 
        UINT temp = ::GetWindowLong(pActiveView->m_hWnd, GWL_ID); 
        ::SetWindowLong(pActiveView->m_hWnd, GWL_ID, 
              ::GetWindowLong(pNewView->m_hWnd, GWL_ID)); 
        ::SetWindowLong(pNewView->m_hWnd, GWL_ID, temp); 
    
        // Display and update the new current view - hide the old one     
        pActiveView->ShowWindow(SW_HIDE); 
        pNewView->ShowWindow(SW_SHOW); 
        ((CFrameWnd*) m_pMainWnd)->SetActiveView(pNewView); 
        ((CFrameWnd*) m_pMainWnd)->RecalcLayout(); 
        pNewView->Invalidate(); 
        return pActiveView;
    

    Habe es nach diesem Artikel gemacht:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-6294-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-formview-and-start-is-0-and-sid-is-0b185b49fafb8879dec9b9c5558499d7.html

    Muss ich denn auch die Doc wechseln bzw. brauche ich eine zweite Doc?
    Damit du eine Vorstellung hast von dem was ich vor habe, ist hier eine Zusammenfassung:
    Mit meinem Programm auf zwei Tabellen einer Datenbank zugreifen und dies Daten anzeigen lassen(jeweils in einem anderen View).
    Mfg Kobold


Anmelden zum Antworten