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ächsteIch 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