DB ohne ODBC?



  • Hallo Leute,

    ich habe eine Aufgabe bekommen ein kleines Programm zu programmieren das eine Datebank benutz.

    Die FAQ hab ich mir schon angesehen. Nun habe ich ein paar Fragen zu ADO

    CDaoDatabase m_database;
    
    ...
    
    try {
        //  m_database.Open("C:\\sql.mdb", FALSE, FALSE);
            m_database = new CDaoDatabase();
            m_database->Open("c:\\sql.mdb"); // Fehler
        }
        catch(CDaoException* e) {
                     e = NULL;
         }
    

    bei dem Code bekomme ich immer einen Fehler das die Datenbank ein unbestimtes Format hat. Ich kann diese DB aber mit Accsess problemlos öffnen. 😞

    wenn ich stadtdessen

    m_database->Open("c:\\table.xls", FALSE, FALSE, "Excel 8.0;");
    

    ohne probleme. Aber mit der Accsess Tabelle will es nicht.

    Kan mir jemand den Unterschied zwischen der Klasse CDaoDatabas und CdbDatbase erklären??

    Ich weiß nicht mehr weiter.



  • Hallo,

    das was du verwendest ist nicht ADO sondern DAO.
    DAO hat mit Access 2002 (XP) so seine Probleme und dann kommt eben dieser Fehler.

    Wenn du trotzdem mit DAO arbeiten möchtest musst du die Datenbank in Access97-Format konvertieren.



  • Hi Franz,

    als Ergänzung ein Auzug aus der DAO- Hilfe

    Microsoft Jet-Datenbank "[Datenbank];" "Laufwerk:\Pfad\
    Dateiname.MDB"
    dBASE III "dBASE III;" "Laufwerk:\Pfad"
    dBASE IV "dBASE IV;" "Laufwerk:\Pfad"
    dBASE 5 „dBASE 5;“ "Laufwerk:\Pfad"
    Paradox 3.x "Paradox 3.x;" "Laufwerk:\Pfad"
    Paradox 4.x "Paradox 4.x;" "Laufwerk:\Pfad"
    Paradox 5.x „Paradox 5.x;“ "Laufwerk:\Pfad"
    FoxPro 2.0 "FoxPro 2.0;" "Laufwerk:\Pfad"
    FoxPro 2.5 "FoxPro 2.5;" "Laufwerk:\Pfad"
    FoxPro 2.6 "FoxPro 2.6;" "Laufwerk:\Pfad"
    Excel 3.0 "Excel 3.0;" "Laufwerk:\Pfad\Dateiname.xls"
    Excel 4.0 "Excel 4.0;" "Laufwerk:\Pfad\Dateiname.xls"
    Excel 5.0 oder Excel 95 "Excel 5.0;" "Laufwerk:\Pfad\Dateiname.xls"
    Excel 97 „Excel 97“ "Laufwerk:\Pfad\Dateiname.xls"
    HTML-Import HTML Import; Laufwerk:\Pfad\Dateiname
    HTML-Export HTML Export; Laufwerk:\Pfad\
    Text "Text;" "Laufwerk:\Pfad"
    ODBC "ODBC;
    DATABASE=Datenbank;
    UID=Benutzer;
    PWD=Kennwort;
    DSN=Datenquellenname
    [LOGINTIMEOUT=Sekunden;] Keine Angabe
    Exchange Exchange;
    MAPILEVEL=Ordnerpfad; [TABLETYPE={ 0 | 1 }];[PROFILE=Profil;]
    [PWD=Kennwort;]
    [DATABASE=Datenbank;] Laufwerk:\Pfad\Dateiname.mdb

    Ich vermute dein größtest Problem wird sein, dass Excel 8.0 nicht supported wird. Versuche es mit dem Excel 5.0 Treiber.

    Grüße, Volle.

    P.S.: Die Hilfe solltest du auf deinem Rechner auch finden. Das File heißt DAO35.hlp, oder ähnliche, je nach installierter Version. Da findest du eigentlich alles zum Thema.

    [ Dieser Beitrag wurde am 22.01.2003 um 09:38 Uhr von Volle editiert. ]



  • Hallo und danke erst mal für die Antworten.

    @Elmar natürlich heißt das DAO und nett ADO, kleiner Buchstaben Dreher.
    unglaublich aber wahr, als ich meine access 2000 db zu 97 Konvertiert habe funkt alles prima!

    @Volle das mit Excel 8.0 hat wirklich funktioniert da ich dao 3.6 installiert habe.

    Nun habe ich noch ein anderes Problem:
    tbl_Personen:
    Personen_ID Anrede, Vorname, Name, Straße, PLZ_ID

    tbl_Ort:
    PLZ_ID, Ort

    so nun will ich beide Tabellen anzeigen. Ich kann ja jetzt einen zweiten Recordset auf die zweite Tabelle setzen. Aber die Daten müßen zusammen angezeigt werden:
    ID = 1, Vorname = Thomas, Name = Müller, Straße = Hauptstraße 12, PLZ_ID = 34123
    PLZ_ID = 34123, Ort = Kassel

    um diese beiden Tabellen miteinander zu verknüpfen kan man volgenden SQL befehl ausführen:
    SELECT tbl_personen.vorname, tbl_personen.name, tbl_personen.straße, tbl_personen.plz_id AS PLZ, tbl_ort.ort
    FROM tbl_personen INNER JOIN tbl_ort ON tbl_personen.plz_id = tbl_ort.plz_id;

    wie kann ich eine solche Verknüpfung machen? wenn ich einen zweiten Recordset öffne dann kann ich ja nicht auf die andere Tabelle zugreifen 😞



  • einfach schon eine Abfrage im Access erstellen, die das macht (das geht graphisch und per SQL, je nach wunsch...) und dann von VC++ auf die Abfrage wie auf eine Tabelle zugreifen...



  • Ich hab das jetzt so gemacht:

    SetDlgItemText(IDC_EDIT1, m_pSet->m_Vorname);
        SetDlgItemText(IDC_EDIT2, m_pSet->m_Name);
        SetDlgItemText(IDC_EDIT3, m_pSet->m_Stra_e);
        SetDlgItemText(IDC_EDIT4, m_pSet->m_PLZ_ID);
    
        CString ort;
        CString filer;
        filer.Format("select * from [tbl_Ort] where [PLZ_ID] = '%s'", m_pSet->m_PLZ_ID);
    //  m_pSet2.m_strFilter = filer;
        m_pSet2.Open(AFX_DAO_USE_DEFAULT_TYPE, filer);
    
        ort = m_pSet2.m_Ort;
        SetDlgItemText(IDC_EDIT5, ort);
        m_pSet2.Close();
    

    den Code hab ich der Move Methode meiner Ansicht. Das Problem ist das ich jedes mal den Record schließe und wieder aufmache um nur an den Ort zu kommen.

    @ITSE wie geht das genau? Hab ich noch nie gehört.

    Selbst bei Java kann ich einfach SQL befehle ausführen, egal welche. Als Ergebniss bekommt man so ne Art Record zurück.



  • also:

    Einfach Access öffnen, die Datei öffnen und Abfragen auswählen..
    Neue abfrage - die gewünschten Tabellen einfügen und dann von den Tabellen die gewünschten Spalten oder alle Spalten (*) nach unten in die unteren weissen Felder ziehen...

    Zusätzlich kann man jetzt noch die Tabellen , die man vorhin eingefügt hat miteinander verknüpfen (mit der Maus), nämlich einfach eine Spalte der einen Listobox mit der linken Maustaste nehmen und auf die Spalte der anderen Listbox fallen lassen)

    Dann nur noch die Abfrage abspeichern. Jetzt hast du eine neue "Ansicht" deiner Tabellen, die genauso wie eine original-Tabelle abfragbar ist....



  • jaja da mit Accsess hab ich ja noch geschaft, aber ich meinte wie ich diese mit der mfc anspreche



  • auserdem was ist wenn ich kein Access benutze, das muß doch irgentwie noch anders gehen.



  • Ich versteh dein Problem nicht wenn du ein Record set mit den SQL-Befehl den du gepostet hast öffnets müsste du doch auf alle Felder zugreifen können.

    deinRecordset.Open(dbOpenDynase,"SELECT tbl_personen.vorname,
     tbl_personen.name,tbl_personen.straße, tbl_personen.plz_id AS PLZ, tbl_ort.ort
    FROM tbl_personen INNER JOIN tbl_ort ON tbl_personen.plz_id = tbl_ort.plz_id")
    

    [ Dieser Beitrag wurde am 22.01.2003 um 13:12 Uhr von Andorxor editiert. ]


Anmelden zum Antworten