TabCtrl und Datenbankverbindung



  • Hi Leute

    Ich habe immer noch das Problem mit meinen TabCtrl
    Ich schreibe an einer Dialog-Anwendung mit Dyntabctrl.
    Jedes Tab ist ja nun ein eigener Dialog.
    Diese Dialoge werden nach erfolgreicher VErbinung zu meiner
    Mysql-Datenbank initialisiert. Die Verbinung zur Datenbank klappt.

    Nun möchte ich aber in den einzelnen Tabs auf diese Datenbank zugreifen,
    bekomme das aber einfach nicht hin . Ich hatte mir eigentlich folgendes
    gedacht :

    Deklaration der Datenbank in CvereinDlg.h:

    class CMYSQLDatabase m_database;
    

    in dem Tab-Dialog CDlg_Mitglied.h:

    class CMYSQLDatabase m_dbase_mitglied;
    

    und anschließend nach der Initialisierung der Tabs

    CDlg_Mitglied.m_dbase_mitglied=m_database;
    

    das funktioniert aber so nicht 😕
    Bitte nicht lachen wenn mein Ansatz total daneben ist.

    Danke im Voraus für Eure Hilfe
    Linus



  • linus schrieb:

    CDlg_Mitglied.m_dbase_mitglied=m_database;
    

    Du brauchst eine Instanz von dem Dialog. So direkt in die Klasse stopfen geht nicht.



  • Hi , Danke für die Antwort,
    Ich habe jetzt eine ganze Weile versucht.
    Aber ich glaube ich habe ein grundsätzliches Verständnis-Problem
    wie ich Funktionen aus Dialog D1 in Dialog D2 aufrufen kann.
    Ich hatte es bisher folgendermaßen verstanden:

    Ich habe CDialog_1 und CDialog_2 als entsprechende Klassen von CDialog abgeleitet.
    Sei nun zum Beispiel eine Funktion m_funktion(parameter_x) in Dialog_2 vorhanden .
    Dann habe ich eine Membervariable in Dialog_1.h erstellt:

    CDialog_2* m_Dialog_2;
    

    Ich versuche nun mit

    m_Dialog_2 = new CDialog_2();
    m_Dialog_2->m_funktion(x);
    

    Diese Funktion aufzurufen. Aber das schein so nicht zu gehen (zumindest bei mir nicht)
    Fehler : Es wurde ein nicht unterstützter Vorgang ausgeführt (u.a.)
    Ich versteh das irgendwie nicht 🤡



  • Deklaration der Datenbank in CvereinDlg.h:

    CDlg_Mitglied Dlg_Mitglied_1; //dein TabDialog
    ....                         
    CDlg_Mitglied Dlg_Mitglied_n;
    
    CMYSQLDatabase m_database;
    

    in dem Tab-Dialog CDlg_Mitglied.h:

    CMYSQLDatabase *m_dbase_mitglied;
    

    und anschließend nach der Initialisierung der Tabs für jeden TabDialog

    Dlg_Mitglied_1.m_dbase_mitglied=&m_database;
    ....
    Dlg_Mitglied_n.m_dbase_mitglied=&m_database;
    

    oder wenn Du sie mit new erzeugen willst

    Deklaration der Datenbank in CvereinDlg.h:

    CDlg_Mitglied *Dlg_Mitglied_1; //dein TabDialog
    ....                         
    CDlg_Mitglied *Dlg_Mitglied_n;
    
    CMYSQLDatabase m_database;
    

    in dem Tab-Dialog CDlg_Mitglied.h:

    CMYSQLDatabase *m_dbase_mitglied;
    

    und anschließend nach der Initialisierung der Tabs für jeden TabDialog

    Dlg_Mitglied_1 = new CDlg_Mitglied();
    ....
    Dlg_Mitglied_n = new CDlg_Mitglied();
    
    Dlg_Mitglied_1->m_dbase_mitglied=&m_database;
    ....
    Dlg_Mitglied_n->m_dbase_mitglied=&m_database;
    

    Gruß



  • Danke für diese ausführliche Antwort.
    Die Datenbankverbindung klappt und es gibt dahingehend keine Fehler mehr.
    Aber wie so oft , wenn ein Problem gelöst ist kommt schon das nächste 😞

    Ich möchte nach der Initialisierung der Tabs die Steuerelemente in den einzelnen Tabs füllen. und das funktioniert nicht 😕

    Hier mein Code im Hauptdialog OnInitDialog() in dem sich die Tabs befinden:

    ....
    m_dTabctrl.InsertItem(new CDlg_Titel   ,"   Start    ",IDD_DLG_TITEL);
    m_dTabctrl.InsertItem(new CDlgLogdienst,"    Log     ",IDD_DLG_LOG);
    
    if(!db_connect())
    {
    	MessageBox("Database not connected");
    }
    else
    {
    	m_dTabctrl.InsertItem(new CDlg_Mitglied," Mitglieder ",IDD_DLG_MIT);
    
    	m_DlgMitglied.m_dbase_mitglied=&m_database;
             m_DlgLogdienst.Logdienst("Verbindung OK");
    }
    ...
    

    und in CDlgLogdienst die Funktion:

    void CDlgLogdienst::Logdienst(CString Text)
    {
    	MessageBox(Text,Text,MB_OK);
    	m_aktTime=CTime::GetCurrentTime();
    	m_LogList.SetCurSel(m_LogList.AddString(m_aktTime.Format("%d.%m.%Y     %H:%M:%S Uhr -> ")+Text));
    	UpdateData(FALSE);
    }
    

    Dabei soll eine Listbox mit denMeldungen gefüllt werden.
    Nur wird dort nicht hineingeschrieben sonder es folgt der Fehler
    "Es wurde versucht einen nicht unterstützten Vorgang auszuführen"
    Diese meldung erscheint nicht mehr wenn ich UpdateData(FALSE) weglasse
    aber trotzdem wird nichts geschrieben.



  • 😞 Hat keiner eine Lösung für mein Problem 😞
    Ich doktere nun schon eine ganze Weile daran herum und
    krieg's nicht hin


Anmelden zum Antworten