2 Probleme mit MFC & DB (OnInitDialog() & ODBC)



  • Hi, ich habe 2 probleme mit einem Programm, an dem ich gerade schreibe.
    Das Ganze ist eine Dialogfeldbasierende Anwendung mit einigen Unterdialogen, woraus sich auch das erste problem ergibt:

    Wie zum Teufel kann ich auf die OnInitDialog eines Unterdialogs zugreifen? Wenn ich den Dialog mit DoModal() aufrufe, kann ich keine Initialisierungen vornehmen. OnInitDialog im Unterdialog selbst erstellen klappt auch nicht ("Methode unterscheidet sich nur hinsichtlich des Rückgabetyps..." wenn ich sie selbst deklariere bzw. "Member-Funktion nicht in CClass deklariert...")

    Das 2. problem ergibt sich aus der Datenbankanbindung:
    Ich kann aus der DB (Access & ODBC) lesen, schreiben, klappt alles wunderbar. nur muss ich immer wenn ich beim ausführen des Programms die datenbank öffne (also quasi immer bei aufrufen von OpenEx()) den Dialog "Datenquelle auswählen" über mich ergehen lassen und meine *.dsn Datei von hand auswählen. Das möchte ich natürlich nicht... ich hab auch schon CDatabase::noOdbcDialog übergeben, aber das hat irgendwie keinen Effekt.
    Das Ganze ist wie gesagt ne Dialogfeldbasierende Anwendung... kann / muss ich da Datenbankunterstützung auswählen irgendwo? wenn ja, geht das auch nachträglich?

    Vielen Dank schonmal für die Hilfe, wenn ihr weitere Informationen benötigt einfach reinschreiben...



  • zeig doch mal ein paar codeschnipsel her, ich lasse die db automatisch beim programmstart bei mir immer gleich mit öffnen und spiechere die zuletzt verwendete datenbank um uptodate zu bleiben,
    klappt einwandfrei
    für db´s benutze ich einfach CDatabase und die recordsetzs dazu



  • Hmmm, ich öffne die DB immer dann, wenn ich auch mit ihr arbeite... also ne abfrage mache etc, ebenfalls mit CRecordset und CDatabase
    Sieht dann so aus:

    CDatabase db;
    
    db.OpenEx( "DSN=PatientenDB; UID=admin", CDatabase::noOdbcDialog );
    
    CRecordset rs( &db );
    rs.Open(CRecordset::dynaset, querry, CRecordset::readOnly);
    // Abfragen & ähnliches
    rs.Close();
    db.Close();
    

    Klappt auch alles wie gesagt wunderbar, nur das Problem ist halt dass ich immer manuell die PatientenDB.dsn auswählen muss im passenden Dialog 😞



  • ist schon klar, das da das dialogfeld kommt,
    schreib einfach

    CDatabase db;
    db.open("ich bein die datenbankdatei mit pfad");
    db.OpenEx( "DSN=PatientenDB; UID=admin", CDatabase::noOdbcDialog );
    
    CRecordset rs( &db );
    rs.Open(CRecordset::dynaset, querry, CRecordset::readOnly);
    // Abfragen & ähnliches
    rs.Close();
    db.Close();
    

    dann musst du den speicherpfad nicht mehr angeben



  • hmmm, ich schreib da die *.mdb datei rein ne? also in meinem fall:

    db.Open("Data.mdb");
    db.OpenEx( "DSN=PatientenDB; UID=admin", CDatabase::noOdbcDialog );
    
    CRecordset rs( &db );
    rs.Open(CRecordset::dynaset, querry, CRecordset::readOnly);
    

    ist das dialogfeld zwar weg, aber ich bekomm ne fehlermeldung:

    "Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben"

    was mach ich falsch?



  • si ists schon richtig, wie initialisierst du db?
    CDaoDatabase db; so ca?



  • CDatabase db;

    CDaoDatabase willer nicht, kommt Fehlermeldung:
    Fehlende Speicherklasse oder Typbezeichner

    als include hab ich
    #include "afxdb.h"



  • Erstmal sry wegen Doppelpost, aber edit geht nicht als unregistrierter 😉

    hab jetzt afxdao.h included, damit kann ich CDaoDatabase Objekte erstellen.

    nun kennt CDaoDatabase aber OpenEx() nicht, weshalb ich jetzt folgendes machen muss:

    CDaoDatabase db;
    CDatabase db1;
    
    db.Open("Data.mdb");
    db1.OpenEx( "DSN=PatientenDB; UID=admin", CDatabase::noOdbcDialog );
    
    CRecordset rs( &db1 );
    rs.Open(CRecordset::dynaset, querry, CRecordset::readOnly);
    

    Kann zwar kompiliert werden, aber hab ne Fehlermeldung:
    "Nicht erkennbares Datenbankformat: \Pfad\Data.mdb"

    oder geht das öffnen dann anders als ich da oben tue?

    ich werd noch wahnsinnig hier 😉
    Danke aber schonmal für die bis jetzt geleistete Hilfe!



  • So, ich war ein bisschen dämlich, vielen Dank aber für die Hilfe!
    Funktioniert alles so wie ichs mal geplant hatte, hab nur ne ne falsche Datenquelle angegeben im ODBC-Administrationstool... so kanns gehen 😉


Anmelden zum Antworten