Ergebnis 1 bis 11 von 11

Thema: [Dev-C++] MySQL Devpack - Verbindungs Probleme

  1. #1

    [Dev-C++] MySQL Devpack - Verbindungs Probleme

    Aloa

    Ich habe mir vom DevPack primary Server die MySQL Erweiterung gezogen ...
    Allerdings hab ich ein kleines Problem ...

    Obwohl mein (lokaler) SQL Server laeuft und ich mit phpMyAdmin dadrauf zugreifen kann etc. weigert sich die mySQL lib beharrlich zur Datenbank zu verbinden -> "konnte Datenbank nicht oeffnen"

    Die Verbindung zum Server hat aber geklappt. Allerdings auch erst, als ich von "localhost" auf "127.0.0.0" umgestiegen bin.

    Hat einer vielleicht Erfahrung mit dem Teil, und ne idee, woran es liegen koennte ?
    Ich haett euch ja gerne eine Internetseite/Referenz zu dem mySQL Ding gegeben. Allerdings war keine Quelle angegeben -__-

    Gruss Luki

  2. #2
    Zitat Zitat von Ineluki
    Hat einer vielleicht Erfahrung mit dem Teil, und ne idee, woran es liegen koennte ?
    Wie wär's mit etwas Code? Vielleicht kann man dir deine Fehler dann besser auf die Nase binden.
    Bei mir klappt's auf jeden Fall auch mit localhost. Ich poste mal ein Connection-Stückchen .. :
    Code:
    //[...] 
    MYSQL link;
     mysql_init(&link); 
     if (!mysql_real_connect(&link,"localhost","username","password","db",3306,NULL,0)) 
     {
      cout<<"Fehler: " << mysql_error(&link) << endl;
      system("pause");
      return 1; // Fehler! 
     }
     else
     {
      // hier finden die aktionen statt
     }
     mysql_close(&link); // verbindung zu ..
    //[...]
    Der Code funktioniert bei mir. Kannst es ja mal mit deinem vergleichen.

    freundliche Grüße, Rolus

  3. #3
    Ich haette vielleicht erwaehnen sollen, das ich das mitgelieferte Beispielprogramm meine \o/ (Ja ich hab die DB Daten angepasst)
    ( ja ja .. als Mod weisst man andere immer auf die selben Fehler hin, und macht sie dann selber .... die noobs faerben echt ab Oo )

    Code:
    // Database name...
    char        g_szHost[]          = "127.0.0.0";
    UINT        g_unPort            = MYSQL_PORT;
    char        g_szUserName[]      = "nutzer";
    char        g_szPassword[]      = "passwort";
    char        g_szDatabase[]      = "datenbank";
    char        g_szSQLStatement[]  = "SELECT * FROM teilnehmer";
    ...
    MYSQL    *myDatabase      = NULL;
    ...
    if(mysql_real_connect(myDatabase, g_szHost, g_szUserName, g_szPassword, 
                              NULL, g_unPort, NULL, 0) != 0)
      {
         ... // klappt tadellos
      }
    
    
    if(mysql_select_db(myDatabase, g_szDatabase) < 0)
        // == -1 <- hier hauts mich raus
        {
            // Alert user... 
            printf("] Error: Unable to select database...\n");
            printf("] Error: %s\n",mysql_error(myDatabase));
               // Error: MySQL server has gone away  <- what the fook ?
            ....
        }
    Nach der operation steht der mySQL server aber noch tadellos ...
    Auch die DB in mysql_real_connect anzugeben bringgt keine pluspunkte

    Geändert von Ineluki (04.09.2005 um 19:57 Uhr)

  4. #4
    Mag sein, dass ich falsch lieg, aber war localhost nicht immer 127.0.0.1 und nicht 127.0.0.0?

  5. #5
    Zitat Zitat von DFYX
    Mag sein, dass ich falsch lieg, aber war localhost nicht immer 127.0.0.1 und nicht 127.0.0.0?
    Das Alias localhost liegt normalerweise auf 127.0.0.1, aber der Server ist über den kompletten Raum 127.*.*.* erreichbar.

  6. #6
    Zitat Zitat von Ineluki
    Ich haette vielleicht erwaehnen sollen, das ich das mitgelieferte Beispielprogramm meine
    Hm, achja ein Beispielprogramm. Ich habe aber keines, das aussieht wie deines.
    Dafür habe ich mal deinen Code probiert. Bei mir klappt alles, wenn ich myDatabase so definiere: MYSQL myDatabase; und dann halt später immer so übergebe: &myDatabase. Btw, die IF-Abfrage wird nur ausgeführt, wenn's Fehler gibt. Sonst nicht. Oder meintest du mit "raushauen" einen Absturz? Der lässt sich bei mir, wie eben beschrieben, umgehen.

    freundliche Grüße, Rolus

  7. #7
    mit "// == -1 <- hier hauts mich raus" meinte ich, dass die funktion zu -1 evaluiert und somit die if klausel bearbeitet wird, wo mysqlerror den kommentierten fehlertext ausspuckt

    Das Beispiel wird unter Examples/MySQLClientTest/ installiert
    Zitat Zitat
    Dafür habe ich mal deinen Code probiert. Bei mir klappt alles, wenn ich myDatabase so definiere: MYSQL myDatabase; und dann halt später immer so übergebe: &myDatabase.
    Das klappt so nicht ...

    In dem Codebeispiel wird das ganze so initialisiert:
    myDatabase = mysql_init(NULL);

    Irgendwie hab ich die Vermutung, wir haben nicht die selben Versionen/Codes/Whatever.

    Das interessante ist ausserdem, dass er mit 127.0.0.1 den server gar nicht erst findet, sondern nur ueber 127.0.0.0 *schulterzuck*

    hier mal der GANZE code des beispielprogs ...
    Code:
    /*
      Name:         MySQLClientTest
      Author:       Kip Warner (kip@zero47.com)
      Date:         24/11/03 13:15
      Description:  Example to show usage of MySQL databases from client end.
                    I did not have much time. Sorry...
    */
    
    // Bis auf dass localhost durch 127.0.0.0 ersetzt wurde. meine
    // DB Daten eingetragen wurden und an der gekennzeichneten
    // Stelle der mysql_error Text ausgegeben wird, ist alles original
    
    // Includes...
    #include <windows.h>
    #include <MySQL\mysql.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>
    
    // Database name... // hier habe ich meine DB daten eingetragen 
    char        g_szHost[]          = "127.0.0.0";
    UINT        g_unPort            = MYSQL_PORT;
    char        g_szUserName[]      = "user";
    char        g_szPassword[]      = "password";
    char        g_szDatabase[]      = "database";
    char        g_szSQLStatement[]  = "SELECT * FROM table";
    
    // Entry point...
    int main(int nArguments, char *pszArguments[])
    {
        // Variables...
        MYSQL          *myDatabase      = NULL;
        MYSQL_RES	   *myResult        = NULL;
        MYSQL_FIELD	   *myField         = NULL;
        MYSQL_ROW	    myRow           = NULL;
        UINT            unRecords       = 0;
        UINT            unFields        = 0;
        UINT            unIndex         = 0;
        UINT            unFieldIndex    = 0;
    
        // Initialize MySQL...
        myDatabase = mysql_init(NULL);
    
            // Failed...
            if(!myDatabase)
            {
                // Alert user...
                printf("] Error: Unable to initialize MySQL API...\n");
    
                // Cleanup, abort, terminate...
                mysql_close(myDatabase);
                getch();
                return 0;
            }
    
        // Connect to server and check for error...
        if(mysql_real_connect(myDatabase, g_szHost, g_szUserName, g_szPassword,
                              NULL, g_unPort, NULL, 0) != 0)
        {
            // Alert user...
            printf("] Error: Unable to connect to server...\n");
    
            // Cleanup, abort, terminate...
            mysql_close(myDatabase);
            getch();
            return 0;
        }
    
        // Select database in server and check for error...
        if(mysql_select_db(myDatabase, g_szDatabase) < 0)
        {
            // Alert user...
             printf("] Error: Unable to select database...\n");
             printf("] Error: %s\n",mysql_error(myDatabase)); 
               //<- das letzte printf hab ich eingefuegt
               // gibt "]Error: MySQL server has gone away" aus.
            // Cleanup, abort, terminate...
            mysql_close(myDatabase);
            getch();
            return 0;
        }
    
        // Query database and check for error...
        if(mysql_query(myDatabase, g_szSQLStatement) != 0)
        {
            // Alert user...
            printf("] Error: Unable to execute query...\n");
    
            // Cleanup, abort, terminate...
            mysql_close(myDatabase);
            getch();
            return 0;
        }
    
        // Retrieve query result from server...
        myResult = mysql_store_result(myDatabase);
    
            // Failed...
            if(!myResult)
            {
                // Alert user...
                printf("] Error: Unable to retrieve result...\n");
    
                // Cleanup, abort, terminate...
                mysql_close(myDatabase);
                getch();
                return 0;
            }
    
        // How many records were returned in the result set?
    
            // Calculate...
            unRecords = mysql_num_rows(myResult);
    
            // Alert user...
            printf("] Query: %d records found...\n", unRecords);
    
        // How many fields are present in a record?
    
            // Calculate...
            unFields = mysql_num_fields(myResult);
    
            // Alert user...
            printf("] Query: There are %d fields in each record...", unFields);
    
        // Output records...
        for(unIndex = 0; unIndex < unRecords; unIndex++)
        {
            // Fetch row from results...
            myRow = mysql_fetch_row(myResult);
    
            // Fetch fields from row...
            myField = mysql_fetch_fields(myResult);
    
            // Show record...
            printf("] Record: %d / %d\n", unIndex, unRecords);
    
            // Output all fields in this row...
            for(unFieldIndex = 0; unFieldIndex < unFields; unFieldIndex++)
            {
                // Output...
                printf("\t%s", myField[unFieldIndex].name);
            }
        }
    
        // Free result...
        mysql_free_result(myResult);
    
        // Close server connection...
        mysql_close(myDatabase);
        myDatabase = NULL;
    
        // Alert user, exit...
        printf("] Done, press any key to exit...\n");
        getch();
        return 0;
    }

    Geändert von Ineluki (04.09.2005 um 21:49 Uhr)

  8. #8
    Zitat Zitat von Ineluki
    Irgendwie hab ich die Vermutung, wir haben nicht die selben Versionen/Codes/Whatever.
    Ja, das denke ich auch. Welche Dev-Cpp Version hast du und welche hat dein Package? Der Code funktioniert so bei mir gar nicht. Ich schau's mir morgen mal genauer an, wenn's recht ist. *gähn*

    freundliche Grüße, Rolus

  9. #9
    Dev-C++ 4.9.9.2
    Package Name: MySQL
    Version: 4.0.16
    Description: Everything you need to start using MySQL. Say thanks to Martin for preparing the files. Example on board. Kip
    Site: http://www.MySQL.com

  10. #10
    Zitat Zitat von Ineluki
    Dev-C++ 4.9.9.2
    Package Name: MySQL
    Version: 4.0.1
    Hm, anscheinend ist mein Dev-Cpp älter und mein MySql-Package neuer. Aber ich denke trotzdem nicht, dass es daran liegt, sondern eher an der lokalen MySql Installation. Bei deinem Beispiel ging das Connecten komischerweise auch nur mit "127.0.0.0". Aber immerhin kam mein Programm dann bis zum Ausführen der Query und ist erst daran gescheitert. Aber an der Host-Angabe scheint es teilweise zu liegen. Wenn ich in der Funktion direkt "localhost" angebe und die Funktion mit !function() statt mit function() != 0 überprüfen, klappt alles. Also ..
    Code:
        if(!mysql_real_connect(myDatabase, "localhost", g_szUserName, g_szPassword,
                              NULL, g_unPort, NULL, 0))
    Wäre interessant zu wissen, ob das bei dir auch so funktioniert. Ansonsten überprüfe nochmal, ob wirklich alle MySql-Angaben stimmen ..

    freundliche Grüße, Rolus

  11. #11
    mit ! anstelle von !=0 funktioniert es tadellos, unterverwendung von "localhost" oder "127.0.0.1"

    Anscheinend wars wohl ein Bug im Beispielquelltext.
    Ich nehme an, real_connect gibt einen Zeiger auf das DB struct zurueck anstatt wie bisher angenommen einen Fehlercode (Warum sollte man sonst auf !=0 testen)

    Thx fuer die Hilfe. Auf die Idee, dass der code nur "funktionierte", wenn er einen fehler bei der DBVerbindung gemacht hat, bin ich natuerlich nicht gekommen ...

    Jetzt gehts mit dem Querry ohne Probleme ...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •