Welche Datenbank?



  • Nabend allerseits. 🙂

    Ich möchte gerne ein Adressbuch/Geburtstagsreminder programmieren und logischerweise muss ich ja die Daten irgendwie speichern. *g*
    Nun meine Frage: Wie mache ich das am sinnvollsten? Am liebsten wäre mir eine Art Datenbank, da ich die Einträge ja auch nach verschiedenen Kriterien sortieren möchte.

    Jetzt kommt aber der Haken bei der Sache: Außer meinem Programm selber dürfen keine weiteren DBTreiber usw. auf einem fremden Rechner benötigt werden. Wenn ich das richtig verstehe, fällt ODBC (z. B. Access) dadurch weg.
    Welche Möglichkeiten gibts da jetzt? Also vermutlich brauch ich ja irgendeine Library, die ich direkt in meine EXE reinlinke... Kann mir da jemand was empfehlen? Oder sollte ich ein ganz anderes Datenspeichermodell benutzen? Am liebsten wäre mir irgendeine MFC-Lösung, aber rein C(++) tuts auch...

    Danke schonmal im Vorraus!
    Bloops



  • Wieso nimmst du nicht OLE DB in Verbindung mit
    der Jet Engine(oder Access)?

    DAO und OLE DB sind in dll Dateien implementiert und bieten eine
    simple möglichkeit die Datenbank anzubinden.

    epidemic



  • Hi!
    Ich würde mich auf freesql.org registrieren. Dann bekommst du dort eine gratis MySQL DB. Dann kann man ziemlich schnell (mit wenig Sourceaufwand) auf die DB per MySQL++ zugreifen. www.mysql.org bietet auch ne Menge an Bsp. an, mit denen man schnell zum Ziel kommt.

    mfg



  • Ihr müsst schon richti lesen *g*

    Es dürfen KEINERLEI externe Dateien/Treiber/oder gar nen MySQL-Server benutzt werden.

    Dazu kommt, dass ich ähnliches auch für ein kommerzielles Produkt brauche und da darf dann also auch keine Lösung benutzt werden, wordurch zusätzliche Gebühren anfallen (wie es z.B. bei Mysql der Fall wäre)

    Mfg, Bloops



  • Hi!
    Sorry, hab das mit auf einem fremden Rechner benötigt werden überlesen 🤡
    Also wie du das mit den Kosten meinst weiß ich nicht. Ich hab von freesql.org noch keine Rechnung bekommen 😉

    mfg



  • Da hast du zwar Recht, aber das MySQL-API ist nicht kostenlos, sondern kostet 400 € (?) Lizenzgebühren in nem Kommerziellen Produkt...

    Aber das steht ja sowieso nicht zur Diskussion, denn eine Remote-Datenbank will ich ja gar nicht. 🙂



  • Hi!
    Naja dann eben M$ Menia

    #include <odbcinst.h>
    
    void CAccessDlg::OnLesen() 
    {
        CDatabase db;
        CString Sql;
        CString Ausgabe1, Ausgabe2;
        CString Treiber;
        CString Dsn;
        CString Datei = "db1.mdb";
        // eine Listbox leeren und dann wieder füllen
        m_ctrlListBox.ResetContent();
    
        Treiber = GetTreiber();
        if( Treiber.IsEmpty() ){
            AfxMessageBox("Kein Access-Treiber gefunden");
            return;
        }
    
        Dsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s",Treiber,Datei);
    
        TRY{
            db.Open(NULL,false,false,Dsn);
            CRecordset rc( &db );
            Sql = "SELECT Name, Vorname "        
                     "FROM Tabelle1 ";
            rc.Open(CRecordset::forwardOnly,Sql,CRecordset::readOnly);
    
            while( !rc.IsEOF() ){
                rc.GetFieldValue("Name",Ausgabe1);
                rc.GetFieldValue("Vorname",Ausgabe2);
                m_ctrlListBox.AddString( Ausgabe1 + ", "+Ausgabe2 );
                rc.MoveNext();
            }
            db.Close();
    
        }
        CATCH(CDBException,Fehler){
    
            AfxMessageBox("Fehler: "+Fehler->m_strError);
        }
        END_CATCH;
    }
    
    CString CAccessDlg::GetTreiber()
    {
        char Buf[2001];
        WORD BufMax = 2000;
        WORD BufAus;
        char *p_Buf = Buf;
        CString Treiber;
    
       if(!SQLGetInstalledDrivers(Buf,BufMax,& BufAus))
           return "";
        do{
            if( strstr( p_Buf, "Access" ) != 0 ){
                Treiber = CString( p_Buf );
                break;
            }
            p_Buf = strchr( p_Buf, '\0' ) + 1;
        }while( p_Buf[1] != '\0' );
    
        return Treiber;
    }
    

    Hab das gleiche Problem mal gehabt - bin dann aber zu PostgreSQL gegangen. Hab den Source von www.fun-soft.de bekommen

    mfg mike



  • Da hab ich doch immer noch das Problem, dass ich einen zusaätzlichen Treiber brauche. Und der Accesstreiber ist vermutlich nicht kostenlos oder?



  • Die Acces-Treiber (Jet Database Engine) sind kostenlos. MS Access ist sozusagen nur eine Benutzeroberfläche, und die kostet.
    Mir ist keine Treiber-freie echte relationale Datenbank unter Windows bekannt (wenn man SQL, Indizierung, und die üblichen Integritätstprüfungen erwartet).

    Du kannst Jet direkt über die Jet-Schnittstelle (CDAODatabase Klassen in MFC), oder über eine ODBC-Verbindung (CDatabase-Klassen in MFC)ansprechen. Da beginnt aber schon der Spaß mit einigen Jet-nonkonformistas...

    Für die Zukunftsaussichten: Es sieht so aus, als wöllte MS die Jet Database auf lange Sicht am liebsten loswerden (gibt auch genügend technische Gründe dafür) und Access auf ihren kleinen (freien) SQL-Server-Ableger umrüsten. Aber für kleinere Anwendungen (wie deine ;)) wird Jet wohl noch "lange genug" nutzbar bleiben.


Anmelden zum Antworten