URGENT : pb de conexion avec mysql_real_connect

Résolu
Stephworlds Messages postés 16 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 16 avril 2007 - 18 mars 2007 à 10:42
Stephworlds Messages postés 16 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 16 avril 2007 - 18 mars 2007 à 21:57
salut a tous
C'est éxtrémement urgent.
Je doit me connecter sur une base de donées distante. Mon programme compile. Mais lorsque je lance l'appli la connexion ne se fait pas... J'essaye de me connecter à une base de données free.
Voici le code

#include <stdio.h>
#include <mysql.h>
#include <stdarg.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>

#if defined _DEBUG //pour passer en mode debug, aller dans Générer/Gestionnaire de configuration
    #define DBGPRINTF ::printf
    #include <stdio.h>
#else
    #define DBGPRINTF ::dbgprintf
    inline int dbgprintf( const char* strFormat, ... );
    inline int dbgprintf( const char* strFormat, ... ){
        return(0);
    }
#endif
#define MYSQL_HOST "sql.free.fr" //mettre l'adresse de ton serveur sur internet
#define MYSQL_DB "********"
#define MYSQL_LOGIN "********"
#define MYSQL_PASSWD "*******"

void main (void)
{ // déclaration pour la lecture ecriture création des fichier textes
    FILE *fileUser; //pour le fichier user.txt
    FILE *fileCles; //pour le fichier cles.txt
    FILE *fileLien; //pour le fichier inuse.txt
    FILE *filePerdu; //pour le fichier lost.txt
    FILE *fileHistorique;    //pour le fichier historique.txt

    char cUser[]="user.txt";
    char cCles[]="keys.txt";
    char cLien[]="inuse.txt";
    char cPerdu[]="lost.txt";
    char cHistorique[]="historique.txt";

    char *cNumCles[17]; //les clés iButtons possedent un code de 16 caractères
    char *cNumUser[50];
    char cDateHeure[19];
    char cNumBadge[16];
    char tab[256][256];

    int index;
    int test;

    errno_t erruser; //confirmation de l'ouvertures du fichier user.txt
    errno_t errkeys; //confirmation de l'ouvertures du fichier keys.txt
    errno_t errinuse; //confirmation de l'ouvertures du fichier inuse.txt
    errno_t errlost; //confirmation de l'ouvertures du fichier lost.txt
    errno_t errhistorique; //confirmation de l'ouvertures du fichier historique.txt
   

 // déclaration des variables nécessaire à la bdd
    MYSQL *sql;    //gestionnaire de connexion
    MYSQL *mysql; //gestionnaire d'initialisation
    MYSQL_RES *myRES;
    MYSQL_ROW myROW;

    int iResult;
   
//récupération de l'horloge
    int HeureDebut;
    int HeureFin;
    time_t timer1;
    time(&timer1);
    int secondes, minutes, heures, horaires;
    char* cHeureDebut[6];
    char* cHeureFin[6];
    struct tm *newTime1;

    newTime1 = localtime(&timer1);
    heures = newTime1->tm_hour; // Les heures sont dans "heures"
    minutes = newTime1->tm_min; // Les minutes sont dans "minutes"
    secondes = newTime1->tm_sec; // Les secondes sont dans "secondes"
    horaires=60*heures+minutes;

//-----Mise en place du lien avec la base sql------------------------------------------------------------
       
    mysql=mysql_init(0); //la fonction mysql_init appelle mysql_library_init quand il n'y a pas de multi thread.
    if(mysql!=0){
        dbgprintf("librairies initialisees\n");
        dbgprintf("objet alloue\n");
        sql=mysql_real_connect(mysql,MYSQL_HOST,MYSQL_LOGIN,MYSQL_PASSWD,MYSQL_DB,21,0,0); // connexion a notre base
        if(sql!=0){
            dbgprintf("base connecté\n");
       
//-----Première partie : utilisation de la base projet et de la table numero_des_cles---------------------

            erruser = fopen_s(&fileUser, cUser, "w");
            errkeys = fopen_s(&fileCles, cCles, "w");            /* on ouvre un fichier en  write ce qui provoque la création de celui ci */
            errinuse = fopen_s(&fileLien, cLien, "w");
            errlost = fopen_s(&filePerdu, cPerdu, "w");
            if(erruser==0 && errkeys==0 && errinuse==0 && errlost==0){
                dbgprintf("les fichier sont crées");
               
                //requette pour recuperer l'heure des acces de la base
                //mysql_query(sql, "SELECT HeureDebut ,HeureFin FROM type_acces WHERE TypeAcces = 'Etudiant'");
                //myRES = mysql_store_result(sql);
                //    myROW = mysql_fetch_row(myRES);
                //for(unsigned int i = 0; i < myRES->row_count /*nombre de lignes dans la structure du resultat*/; i++) {
                //    myROW = mysql_fetch_row(myRES); //Récupère la ligne suivante d'un jeu de résultats
                //    cHeureDebut[i]= myROW[1]; //l'heure de début est dans la 1ere colonne
                //    cHeureFin[i]= myROW[2];//le numéro de fin est dans la 1ere colonne
                //}
                //mysql_free_result(myRES);
               
                // execution d'une simple requête pour récuperer l'ensemble des bases de données     
                //if( =1){ //selon l'heure on envoie soit la totalité soit les admins
                    iResult=mysql_query(sql, "SELECT NumBadge ,NumUtisateur FROM numero_des_cles WHERE TypeAcces = 'Admin' AND TypeAcces = 'Etudiant'");  
                //}
                //else{
                //    iResult=mysql_query(mysqlconnexion, "SELECT NumBadge ,NumUtisateur FROM numero_des_cles WHERE TypeAcces = 'Admin'");
                //}
                       
                myRES = mysql_store_result(sql); //initialisation du jeu de résultats et l'enregistre dans le client
                if (myRES!=NULL) { //parcours de l'ensemble des lignes du resultat myRES    
                    for(unsigned int i = 0; i < myRES->row_count /*nombre de lignes dans la structure du resultat*/; i++) {
                        myROW = mysql_fetch_row(myRES); //Récupère la ligne suivante d'un jeu de résultats
                        cNumCles[i]= myROW[1]; //le numéro des clé est dans la 1ere colonne
                        cNumUser[i]= myROW[2]; //le numéro utilisateur est dans la 2eme colonne
                        fprintf(fileUser, "%s\n", cNumUser[i]);  // écriture des données des utilisateurs dans le fichier user.txt
                        fprintf(fileCles, "%s\n", cNumCles[i]);  // écriture des données des clés dans le fichier dans le fichier keys.txt
                        fprintf(fileLien, "%s ", cNumCles[i]);   // écriture des données des clés suivit d'un éspace dans le fichier des liens
                        fprintf(fileLien, "%s\n", cNumUser[i]);  // écriture des données des utilisateurs suivit d'un retour ligne dans le fichier des liens
                    }
                }
                mysql_free_result(myRES); //Libèration de la mémoire allouée au résultat myRES
            //on referme les fichiers
                fclose(fileUser);
                fclose(fileCles);
                fclose(fileLien);
                fclose(filePerdu);
            }   
//-----Deuxième partie :  Lire et rentrer dans la bdd le contenu du fichier historique--------------------

            errhistorique = fopen_s(&fileHistorique, cHistorique, "r");  // read
            if(errhistorique == 0){    // on vérifie que l'ouverture s'est bien passé
                for (index = 0; !feof(fileHistorique); ++index) { //pour chaque ligne du fichier chistorique
                    fgets(tab[index], 255, fileHistorique); //on récupere les valeur dans le tableau tab
                    test=0;                              
                    do{      //on fait un boucle pour supprimer les retours lignes
                        if(tab[index][test]=='\n'){
                            tab[index][test]='\0';
                            test=0;
                        }
                        test++;
                    }while(test=0);
                }
                test=index;

                //on sait ce qu'on va recevoir donc a partir de ça on cherche dans le char

                for (index = 0; index<test ; ++index) { // On écrit dans la base
                    iResult=mysql_query(sql, "INSERT INTO `historique` ( `NumAcces` , `DateHeureAcces` , `NumBadge` ) VALUES ( '', cDateHeure[index], cNumBadge[index])");
                }
            }
            fclose(fileHistorique);
        }
        else{
            dbgprintf("connexion echouee\n");
        }
    }

//-----Troisième partie : Créer un fichier vide pour l'historique-----------------------------------------

    errhistorique = fopen_s(&fileHistorique, cHistorique, "w"); //on ouvre un fichier en  write ce qui provoque la création de celui ci
    if(errhistorique == 0){
        dbgprintf("le fichier de l'historique vide est cree\n");
        fclose(fileHistorique);//on referme le fichier pour qu'il puisse être envoyé par le serveur ftp
    }
    else{
        dbgprintf("le fichier de l'historique vide n'est pas crée\n");
    }
    mysql_close(mysql);
}

c'est très important vu que ça fait parti de mon projet de fin d'étude.....
Merci de vos réponses

3 réponses

24Karas Messages postés 233 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 5 juillet 2008
18 mars 2007 à 15:20
Si je me souviens bien, free interdit les connexions externes donc pas moyen de se connecter avec un programme ...

Il doit quand meme y avoir moyen de recup un code erreur de la connexion qui échoue et de checker sur le site mysql à quoi correspond ce code d'erreur :
if (!mysql_real_connect(&mysql,"host","user","passwd","database",0,NULL,0))
{
fprintf(stderr, "Failed to connect to database: Error: %s\n",
mysql_error(&mysql));
}

`CR_CONN_HOST_ERROR'
Failed to connect to the *MySQL* server.

`CR_CONNECTION_ERROR'
Failed to connect to the local *MySQL* server.

`CR_IPSOCK_ERROR'
Failed to create an IP socket.

`CR_OUT_OF_MEMORY'
Out of memory.

`CR_SOCKET_CREATE_ERROR'
Failed to create a Unix socket.

`CR_UNKNOWN_HOST'
Failed to find the IP address for the hostname.

`CR_VERSION_ERROR'
A protocol mismatch resulted from attempting to connect to a
server with a client library that uses a different protocol
version. This can happen if you use a very old client library to
connect to a new server that wasn't started with the
`--old-protocol' option.

`CR_NAMEDPIPEOPEN_ERROR'
Failed to create a named pipe on Windows.

`CR_NAMEDPIPEWAIT_ERROR'
Failed to wait for a named pipe on Windows.

`CR_NAMEDPIPESETSTATE_ERROR'
Failed to get a pipe handler on Windows.

`CR_SERVER_LOST'
If `connect_timeout' > 0 and it took longer then `connect_timeout'
seconds to connect to the server or if the server died while
executing the `init-command'.

++
3
24Karas Messages postés 233 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 5 juillet 2008
18 mars 2007 à 15:23
Tu peux toujours installer un serveur mysql  local (tu t'installes easyphp rapido) et tu tentes ton programme sur localhost; Si ça marche chez toi c'est soit que ça vient de chez free, soit ton firewall qui bloque ... Mais je doute quand meme que free autorise des accès externes à leurs bases .. à voir ;-)

++
3
Stephworlds Messages postés 16 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 16 avril 2007
18 mars 2007 à 21:57
Merci 24Karas tu me sauve la vie maintenant ça marche nikel. Donc free ne veut pas qu'on se connecte a sa base. Avec easyphp c'est bon. Les seules modifs sont localhost et root en login.
0
Rejoignez-nous