C++, Visual C++ 2005 und MySQL



  • Libs sind natürlich auch bekannt. Nur weiß ich eben nicht, wie und vor allem wo ich die Option "-lmysql" dem Linker bekannt geben kann.



  • Menu: Project -> options
    Subtree: Linker -> additional dependencies -> mysql.lib eintragen



  • Ach so, also entspricht die Option "-lmysql" der mysql.lib?

    Mal sehen, ob es was bringt.

    Evtl. nochmal zu der Windows.h:

    Brauche ich da eine SDK? Bei Dev-C++ war eine windows.h dabei, aber bei VC++ scheint dieses nicht der Fall zu sein. Hat jemand vielleicht einen Link (wie gesagt, meine ersten Schritte)...





  • Danke sehr, werde das PSDK mal testen (muss ich da etwas beachten bei der Installation? Das Tutorial, wie man es einrichtet ist offline).

    Mußte dort im Archiv nachsehen - habe nun alles gefunden. Danke schonmal soweit.

    Melde mich wieder, wenn ich das ausprobiert habe.



  • Soderle, alles installiert und ein wenig herum getestet, das Problem bleibt allerdings:

    Fehlermeldung:

    ------ Build started: Project: mySQL_KonsolenConnect, Configuration: Debug Win32 ------
    Compiling...
    mySQL_KonsolenConnect.cpp
    c:\mysql-noinstall-4.1.16-win32\mysql-4.1.16-win32\include\mysql_com.h(155) : error C2146: syntax error : missing ';' before identifier 'fd'
    c:\mysql-noinstall-4.1.16-win32\mysql-4.1.16-win32\include\mysql_com.h(155) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    c:\mysql-noinstall-4.1.16-win32\mysql-4.1.16-win32\include\mysql_com.h(155) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    c:\mysql-noinstall-4.1.16-win32\mysql-4.1.16-win32\include\mysql_com.h(299) : error C2065: 'SOCKET' : undeclared identifier
    c:\mysql-noinstall-4.1.16-win32\mysql-4.1.16-win32\include\mysql_com.h(299) : error C2146: syntax error : missing ')' before identifier 's'
    c:\mysql-noinstall-4.1.16-win32\mysql-4.1.16-win32\include\mysql_com.h(300) : error C2059: syntax error : ')'
    c:\dokumente und einstellungen\seth\eigene dateien\visual studio 2005\projects\mysql_konsolenconnect\mysql_konsolenconnect\mysql_konsolenconnect.cpp(8) : error C2871: 'std' : a namespace with this name does not exist
    Build log was saved at "file://c:\Dokumente und Einstellungen\Seth\Eigene Dateien\Visual Studio 2005\Projects\mySQL_KonsolenConnect\mySQL_KonsolenConnect\Debug\BuildLog.htm"
    mySQL_KonsolenConnect - 7 error(s), 0 warning(s)
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    

    Die Fehlerquellen sagen mir jetzt nichts. Vor allem der letzte:

    2005\projects\mysql_konsolenconnect\mysql_konsolenconnect\mysql_konsolenconnect.cpp(8) : error C2871: 'std' : a namespace with this name does not exist
    

    Sagt ja aus, das etwas mit dem

    using namespace std;
    

    nicht stimmt. Ich sehe nur nicht so recht was...???

    Der bearbeitete Quellcode:

    #include <stdafx.h>
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 
    #include <windows.h> 
    #include <mysql.h> 
    using namespace std; 
    
    /* Funktionsprototypen */ 
    void check_error(void); 
    void verbinden(void); 
    void verbindung_schliessen(void); 
    void db_waehlen(char *); 
    void print_line(MYSQL_RES *); 
    
    MYSQL *mysql; 
    
    /* 
     * Ab hier können Sie die einzelnen Funktion der 
     * kommenden Seiten einfügen 
     */ 
    
    int main (int argc, char **argv) { 
      int auswahl; 
      char darsteller[255]; 
      char *ptr; 
    
      printf("Baue verbindung zur Datenbank auf ...\n\n"); 
      verbinden(); 
      db_waehlen("dvd_archiv"); 
    
      printf("Verbindung steht!\n"); 
      system("PAUSE"); 
      verbindung_schliessen(); 
      return EXIT_SUCCESS; 
    } 
    
    /* Bricht bei Fehler (mysql_error != 0) das Programm ab */ 
    void check_error(void)  { 
       if (mysql_errno(mysql) != 0) { 
          fprintf(stderr, "Fehler: %s\n", mysql_error(mysql)); 
          system("PAUSE"); 
          exit(EXIT_FAILURE); 
       } 
    } 
    
    /* Baut eine Verbindung zum Datenbankserver auf. 
     * Passen Sie ggf. Usernamen und Passwort und, sofern 
     * andere Parameter benötigt werden, diese Ihren 
     * Umständen selbst an 
     */ 
    void verbinden(void)  { 
       mysql=mysql_init(mysql); 
       check_error(); 
       mysql_real_connect(mysql, "localhost", "root", 
                          "", NULL, 0, NULL, 0); 
       check_error(); 
    } 
    
    /* Serververbindung wieder schließen und den Speicher für die 
     * Struktur MYSQL wieder freigeben */ 
    void verbindung_schliessen(void)  { 
       mysql_close(mysql); 
    } 
    
    /* Falls Datenbank bei der Funktion verbinden() nicht angegeben 
     * wurde oder Sie die Datenbank wechseln wollen, dann verwenden 
     * Sie diese Funktion */ 
    void db_waehlen(char *db) { 
       mysql_select_db(mysql, db); 
       check_error(); 
    }
    

    Das PSDK habe ich nach folgender Anleitung installiert:
    http://old.germangamedev.de/index.php?site=article&id=28

    Bis jetzt ja noch kein glorreicher Start mit dem VC++... 😞



  • Der Fehler wegen dem std namespace hat nichts mit dem VC++ zu tun, sondern damit, dass Du die alten C Header verwendest.

    #include <string> nicht string.h



  • Ah, ok. Und was ist mit dem Rest?

    Normalerweise würde ich ja sagen, ich wäre zu dusselig dazu. Aber genau dieses Programm ist unter Dev-C++ kompilierbar (mit includes, libs und linker opt.). Das kann also nur am VC liegen. Nur woran?

    Ich habe ein win32 Konsolenprogramm erstellen lassen (standartvorgaben). Ich habe die inlcudes und die libs eingebunden. PSDK ist eingebunden. Linker Option ist drin.

    Ich verzweifle noch.



  • Hmm..da kann ich nur raten.
    Scheint ein Problem mit dem Build von MySQL zu sein.
    Versuch doch mal, wenn Du Zeit hast, ne neuere Version (4.1.20) zu installieren http://dev.mysql.com/downloads/mysql/4.1.html



  • Wie ich schon schrieb kann es kein Problem mit dem Quellcode an sich oder mySQL sein. Denn genau so kann ich es unter Dev-C++ kompilieren und ausführen. Das sollte dann doch heißen, daß mySQL Fehler ausgeschlossen sind, oder?

    EDIT:

    So, Problem ist gelöst. Ich mußte an sich "nur" die winsock.h einbinden (warum auch immer, mußte ich im Dev-C++ nicht) und die libmysql.dll in mein Projektordner kopieren.

    Das war es auch schon. Vielen Dank an alle, die mir halfen. Jetzt wird das ganze mit (zunächst einfacherer MFC GUI) umgesetzt. Vielen Dank Euch !


Anmelden zum Antworten