Stephworlds
Messages postés16Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention16 avril 2007
-
18 mars 2007 à 10:42
Stephworlds
Messages postés16Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention16 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
#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 *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
24Karas
Messages postés233Date d'inscriptionjeudi 4 juillet 2002StatutMembreDerniè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'.
24Karas
Messages postés233Date d'inscriptionjeudi 4 juillet 2002StatutMembreDerniè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 ;-)
Stephworlds
Messages postés16Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention16 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.