IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

requete Mysql en C


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Par défaut requete Mysql en C
    Bonsoir,

    j'essai de créer un programme en C me permettant de stocker des chaines de caractère en base de donnée.

    Pour cela, je me suis basé sur le programme suivant qui fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    /* pour integrer l'API WinSock on a le choix entre #include<winsock> et #define __LCC__ 
    dans le fichier mysql.h lignes 34(ça depend de la version) nous avons:
     
    #ifdef __LCC__
    #include <winsock.h> // For windows 
    #endif
     
    alors si on met #define __LCC__ cela engendre l'inclusion de winsock.h
    */
     
    #define __LCC__
    //#include <winsock.h>
     
    #include <stdio.h>
    #include "mysql.h" // guillemet pour dire que l'header est dans le répertoire courant du projet
    #include <conio.h>
    #include <time.h>
     
    MYSQL *mysqlconnexion;
    MYSQL_ROW myROW;
    MYSQL_RES *myRES;
     
    const char * hostname,*user,*password;
    unsigned int port;
     
    void sleep(int nbr_seconds);
     
    int main()
    {
    //initialisation des parametres de connexion
    hostname="localhost";
    user="root";
    password=""; // => pas de password pour l'utilisateur
    port=3306;
    //initialisation du gestionnaire de la connexion à la base de données mySQL
    mysqlconnexion=mysql_init(NULL);
    		if(!mysqlconnexion) 
    		{
    			printf("Echec de l'initialisation du gestionnaire de la connexion mysql\n");
    			return -1;
    		}  
    		printf("Initialisation du gestionnaire de la connexion mysql avec succes\n");
     
           //tentative de connexion au serveur mySQL
     
    		if (!mysql_real_connect(mysqlconnexion,hostname,user,password,NULL,port,NULL,0))
    		{
                    printf("Echec lors de la tentative de connexion au serveur mySQL\n");
    				return -1;
            }
            printf("Connexion au serveur mySQL reussie\n");
     
           // execution d'un simple requête pour récuperer l'ensemble des bases de données
            mysql_query(mysqlconnexion,"show databases");
     
           //initialisation du jeu de résultats et l'enregistre dans le client		
    		myRES = mysql_store_result(mysqlconnexion);
     
    		if (myRES) 
    		{
              //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);
                 for(unsigned int j = 0; j < mysql_num_fields(myRES)/*nombre de champs(colonnes) dans une ligne du resultat*/; j++)
    			 {
                    //affichage de la valeur du J ème champs de la ligne en cours du resultat. 
    				 printf("%s   ", myROW[j]);
    			 }
    		   //retour à la ligne aprés affichage des valeurs de tous les champs de ligne en cours du resultat myRES
    		   printf("\n");
    		  }
              //Libèration de la mémoire allouée au résultat myRES
              mysql_free_result(myRES);
    		}
           // fermeture de la connexion et libèration du pointeur de connexion mysqlconnexion
            mysql_close(mysqlconnexion);
            return 0;
    }
    Mais, peut-on me dire comment accéder à une table dans ma base de donnée? Puis un champ de la table? (lire ce champs par exemple).

    J'ai consulté ce lien: http://dev.mysql.com/doc/refman/5.0/...-overview.html
    qui détail pas mal des possibilité avec l'header mysql.h

    Mais je ne trouve pas la syntaxe des fonctions mysql_querry(....).
    En php, il suffit de faire INSERT .... .... mais là? Quelqu'un pourrait m'expliquer ou me donner une de ces syntaxes en C?

    Merci beaucoup,
    Florian

  2. #2
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    t'as de la peau de saucisson qui s'est formée devant les yeux apparement.
    un post ( http://www.developpez.net/forums/sho...d.php?t=285460 ) sur cette page, repond a ta question ...
    et plusieurs autres en utilisant la fonction rechercher.
    et meme d'autres reponses plus completes sur dev.mysql.com

    c'est pas genant de rien y voir comme ça pour coder?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Par défaut
    ben j'essai de m'en servir... j'ai essayé ça:

    mysql_query(mysqlconnexion,"INSERT INTO champ1 VALUES('valeur 1', 'valeur 2', 'etc')");

    mais je ne m'en sors pas ! rien ne se passe dans ma BDD... De quel type doit être le champ de la BDD? si je le met en TEXT... ça devrais me sauvergarder les values en texte non?

    Pour parler la france comme toi:
    j'ai une couille dans le patté !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Par défaut
    j'ai réussi à faire fonctionner ma requète.

    Mais je ne trouve pas comment faire pour dans cette requètte intégrer une chaine de caractère (variable) à la place d'une donnée brut

  5. #5
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    tu ne passe pas le nom de la database a utiliser a mysql_real_connect.
    tu es sur de vouloir te connecter a ta base par default? (et accessoirement, sur que la base par default est celle que tu veux)
    tu as verifié les valeurs de retour de tes fonctions?

    de plus, je trouve ton code vraiment brouillon. des globales inutiles ... du merdier avec les .h ...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Par défaut
    Bonjour et merci d'avoir répondu.

    Effectivement, pour mon code, il y a une déclaration de fonction inutile (j'ai supprimé la fonction mais pas sa déclaration).

    Oui, je ne lui indique pas ma base par défauts, mais c'est une erreur de ma part car je faisait des tests. Voici mon code actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    /* pour integrer l'API WinSock on a le choix entre #include<winsock> et #define __LCC__ 
    dans le fichier mysql.h lignes 34(ça depend de la version) nous avons:
     
    #ifdef __LCC__
    #include <winsock.h> // For windows 
    #endif
     
    alors si on met #define __LCC__ cela engendre l'inclusion de winsock.h
    */
     
    #define __LCC__
    //#include <winsock.h>
     
    #include <stdio.h>
    #include "mysql.h" // guillemet pour dire que l'header est dans le répertoire courant du projet
    #include <conio.h>
    #include <time.h>
     
    MYSQL *mysqlconnexion;
    MYSQL_ROW myROW;
    MYSQL_RES *myRES;
     
    const char * hostname,*user,*password;
    unsigned int port;
     
    char variable_essai;
     
    int main()
    {
    //initialisation des parametres de connexion
    hostname="localhost";
    user="root";
    password=""; // => pas de password pour l'utilisateur
    port=3306;
    //initialisation du gestionnaire de la connexion à la base de données mySQL
    mysqlconnexion=mysql_init(NULL);
    		if(!mysqlconnexion) 
    		{
    			printf("Echec de l'initialisation du gestionnaire de la connexion mysql\n");
    			return -1;
    		}  
    		printf("Initialisation du gestionnaire de la connexion mysql avec succes\n");
     
           //tentative de connexion au serveur mySQL
     
    		if (!mysql_real_connect(mysqlconnexion,hostname,user,password,"localhost",port,NULL,0))
    		{
                    printf("Echec lors de la tentative de connexion au serveur mySQL\n");
    				return -1;
            }
            printf("Connexion au serveur mySQL reussie\n");
     
    		// Modification d'un champ, ajout de valeurs en table
     
    		mysql_query(mysqlconnexion,"INSERT INTO champ1 VALUES('le')"); // Marche !!
     
    		// je bloque pour le code ici !!
    		variable_essai='l';
    		mysql_query(mysqlconnexion,"INSERT INTO champ1 VALUES (%c)",variable_essai);
     
           // execution d'un simple requête pour récuperer l'ensemble des bases de données
     
    		mysql_query(mysqlconnexion,"show databases");
     
           //initialisation du jeu de résultats et l'enregistre dans le client		
    		myRES = mysql_store_result(mysqlconnexion);
     
    		if (myRES) 
    		{
              //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);
                 for(unsigned int j = 0; j < mysql_num_fields(myRES)/*nombre de champs(colonnes) dans une ligne du resultat*/; j++)
    			 {
                    //affichage de la valeur du J ème champs de la ligne en cours du resultat. 
    				 printf("%s   ", myROW[j]);
    			 }
    		   //retour à la ligne aprés affichage des valeurs de tous les champs de ligne en cours du resultat myRES
    		   printf("\n");
    		  }
              //Libèration de la mémoire allouée au résultat myRES
              mysql_free_result(myRES);
    		}
           // fermeture de la connexion et libèration du pointeur de connexion mysqlconnexion
            mysql_close(mysqlconnexion);
            return 0;
    }
    Donc comme indiqué dans mon code je ne sais pas comment envoyer une variable dans le VALUES du INSERT:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query(mysqlconnexion,"INSERT INTO champ1 VALUES (%c)",variable_essai);
    J'avais essayé ça, mais apparement ça ne fonctionne pas... Quelle est la syntaxe?

    Merci beaucoup,
    Florian

  7. #7
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    j'ai pas l'impression que mysql_query puisse prendre autre chose qu'un const char*.
    tu dois passer par un snprintf pour former ta chaine, et donner ta chaine a mysql_query.
    [QUOTE=bontempf]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    snprintf(query_buff,sizeof(query_buff),"INSERT INTO champ1 VALUES (%c)",variable_essai);
    mysql_query(mysqlconnexion,query_buff);
    donne la requete:
    INSERT INTO champ1 VALUES (l)

    tu souhaite:
    INSERT INTO champ1 VALUES ('l')

    la syntaxe est donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    snprintf(query_buff,sizeof(query_buff),"INSERT INTO champ1 VALUES ('%c')",variable_essai);
    mysql_query(mysqlconnexion,query_buff);

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Par défaut
    Merci beaucoup.

    J'ai une erreur dans le compilation que je ne comprend pas.
    Visual studio m'indique:
    c:\documents and settings\test\mes documents\visual studio 2005\projects\mysql\mysql.cpp(61) : error C3861: 'snprintf' : identificateur introuvable
    Pourtant, en faisant un tour sur google, il est dit que snprintf appartient à l'header stdio.h ...

    Là, j'ai du mal à comprendre pourquoi VS rale...

  9. #9
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    ha oui ... les produits microsofts, je les oubliait

    ce sujet la: http://www.developpez.net/forums/sho...d.php?t=276724

    pourras te renseigner.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Par défaut
    Merci, ça fonctionne. J'ai essayé de faire de même pour crééer une table:

    Ceci fonctionne (sans variable):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query(mysqlconnexion,"CREATE TABLE `Patient n+3` (`Patient1_nom` LONGTEXT NOT NULL)");
    Mais en passant par une variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		gets(nom_patient);
    		printf("%s",nom_patient);
    		_snprintf(query_buff,sizeof(query_buff),"CREAT TABLE `%s` (`%s` LONGTEXT NOT NULL)",nom_patient,nom_patient);
    		mysql_query(mysqlconnexion,query_buff);
    avec char nom_patient[20];
    Tout compile, s'éxécute mais la table n'est pas crée dans la BDD.
    J'ai ajoutté une ligne de test et vérifié que nom_patient contenait bien le nom saisi.

    dure dure :s

  11. #11
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    NE SURTOUT PAS UTILISERGETS

    cette fonction ne devrais plus exister

    utilise fgets sur stdin a la place.

    concernant ton probleme, essaye un printf("%s",query_buff);
    assure toi que query_buff soit suffisement grand pour contenir toute ta chaine.
    --
    et il te manque un e a CREATE

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Par défaut
    Je ne savais pas pour GETS désolé :-( :-p. Pour le E de CREATE, le problème venait de là. Un oubli de ma part.

    Maintenant que j'ai un peu manipuler le SQL en C, pouvez-vous me dire si je suis sur la bonne voie:

    Je souhaite réaliser un logiciel qui gère des patients.
    J'aurais donc une BDD nommée PATIENT.
    Cette BDD contiendra une table CLIENT.
    La table CLIENT contiendra les champs NOM,PRENOM,AGE,SEX,SUIVI.
    Ces tables contiendrons des données.

    Admettons que j'aii deux passients et que je les enregistre dans les champs 1 par 1 :
    NOM---PRENOM---AGE---SEX---SUIVI
    dupont--jean------45----M---grippe
    brown--alphonse---38---M----gorge

    est-ce que les champs sont liés? je m'explique,
    Si je souhaite en sélectionnant le Nom que le programme m'affiche le prénom l'age le sex et le suivi, est-ce possible? Est ce qu'il ne risque pas de tout me mélanger? (le tri des données est par ordre alphabétique non?).

    Dans ce cas,
    N'est-je pas plustôt intéret de créer une table du nom du patient pour chaque nouveau patient? Cette table contiendra les champs et le fait de relire la table m'affichera tout simplement ses données?

    Merci beaucoup

  13. #13
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par bontempf
    j'ai essayé ça:

    mysql_query(mysqlconnexion,"INSERT INTO champ1 VALUES('valeur 1', 'valeur 2', 'etc')");

    mais je ne m'en sors pas !
    En C on n'écrit pas plutôt comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO champ1 VALUES(\'valeur 1\', \'valeur 2\', \'etc\')"
    ?

  14. #14
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut Re:
    Citation Envoyé par bontempf
    Je souhaite réaliser un logiciel qui gère des patients.
    J'aurais donc une BDD nommée PATIENT.
    Cette BDD contiendra une table CLIENT.
    La table CLIENT contiendra les champs NOM,PRENOM,AGE,SEX,SUIVI.
    Ces tables contiendrons des données.

    Admettons que j'aii deux passients et que je les enregistre dans les champs 1 par 1 :
    NOM---PRENOM---AGE---SEX---SUIVI
    dupont--jean------45----M---grippe
    brown--alphonse---38---M----gorge

    est-ce que les champs sont liés? je m'explique,
    Si je souhaite en sélectionnant le Nom que le programme m'affiche le prénom l'age le sex et le suivi, est-ce possible?
    C'est pas dans le forum SQL ou quelque chose du genre que tu devrais poser cette question?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT PRENOM, AGE, SEX, SUIVI FROM CLIENTS WHERE (NOM = \'Dupont\'"

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Par défaut
    Citation Envoyé par Melem
    En C on n'écrit pas plutôt comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO champ1 VALUES(\'valeur 1\', \'valeur 2\', \'etc\')"
    ?
    Je ne savais pas ... J'en prend note . Merci

    Citation Envoyé par Melem
    C'est pas dans le forum SQL ou quelque chose du genre que tu devrais poser cette question?
    Bien à vrai dire, je ne sais pas trop, car mon programme est en C et ma base en MYSQL. Vu que j'avais déjà ouvert un topic ICI, je ne comptais pas en ouvrir un autre. Peut-être que Dark_Ebola pourras me répondre, sinon j'ouvrirais un autre topic dans le forum SQL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT PRENOM, AGE, SEX, SUIVI FROM CLIENTS WHERE (NOM = \'Dupont\'"
    Merci
    => La base de donnée va donc me sauvegarder les données dans l'ordre rentré?


    Merci beaucoup,
    Florian

  16. #16
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    Citation Envoyé par Melem
    En C on n'écrit pas plutôt comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO champ1 VALUES(\'valeur 1\', \'valeur 2\', \'etc\')"
    ?
    pourquoi faire?

    Peut-être que Dark_Ebola pourras me répondre, sinon j'ouvrirais un autre topic dans le forum SQL.
    c'est devenu un probleme de SQL, plus un probleme de C.
    donc la place de cette question est la section SQL
    je suis nul en SQL (jviens d'avoir un cours dessus en plus ... j'espere que mon prof lit pas le forum )
    mais pour te repondre vite fait, tu peux selectionner la ligne qui t'interresse en utilisant WHERE.
    SELECT * FROM CLIENT WHERE Nom=Dupont AND Prenom=Jacques

    pour la suite, je te conseille de demander aux pros du SQL

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Par défaut
    Merci beaucoup,

    je vais me renseigner dans la section SQL.

    Je reviendrais sur ce post si j'ai des problèmes de C

    @ bientôt

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Par défaut
    J'ai de nouveau un souci, mais cette fois-ci de compilation:

    Tout ce que j'ai fait précédement, je l'ai fait à base d'une source qui avait été compilée sous un ancien Visual C++.

    J'ai donc recréé une solution, cette fois-ci avec Visual Studio (dernière version). J'ai copié collé le code, importé les fichier en tête mysql.h, mysql_com.h, mysql_version.h.

    Mais lorsque je compile, il m'indique les 3 erreurs suivantes dans mysql_com ????
    Mysql_dialogue.cpp
    c:\documents and settings\test\mes documents\visual studio 2005\projects\mysql_dialogue\mysql_dialogue\mysql_com.h(118) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'fd'
    c:\documents and settings\test\mes documents\visual studio 2005\projects\mysql_dialogue\mysql_dialogue\mysql_com.h(118) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
    c:\documents and settings\test\mes documents\visual studio 2005\projects\mysql_dialogue\mysql_dialogue\mysql_com.h(118) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
    Le journal de génération a été enregistré à l'emplacement "file://c:\Documents and Settings\test\Mes documents\Visual Studio 2005\Projects\Mysql_dialogue\Mysql_dialogue\Debug\BuildLog.htm"
    Mysql_dialogue - 3 erreur(s), 0 avertissement(s)
    Ce sont ces deux lignes qui sont concernées dans mysql_com:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    typedef struct st_net {
      Vio* vio;
      my_socket fd;
    Je ne comprend pas vraiment ce qu'il se passe...
    Je précise que cette fois-ci la librairies de base n'est pas stdio.h mais stdafx.h

  19. #19
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut Re:
    Tout d'abord il y a déja une accolade fermante qui manque donc ca devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct st_net
    {
        Vio* vio;
        my_socket fd;
    }
    Alors ton compilateur dit :
    erreur de syntaxe : absence de ';' avant l'identificateur 'fd'
    Autrement dit il pense que la structure devrait être ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct st_net
    {
        Vio* vio;
        my_socket;
        fd;
    }
    Ensuite il dit pourquoi.
    spécificateur de type manquant - int est pris en compte par défaut.
    En ajoutant:
    Remarque : C++ ne prend pas en charge int par défaut
    Voici donc ce qu'il te suggère:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct st_net
    {
        Vio* vio;
        int my_socket;
        int fd;
    }
    Conclusion : le compilateur estime que 'my_socket' et 'fd' sont des variables que tu veux créer. Et puisqu'en C le type par défaut est le type int, il te rappelle que tel n'est pas le cas en C++ (puisque tu utilises un compilateur C++). Autrement dit : le compilateur n'a jamais entendu parlé de my_socket ou de fd. Conclusion : tu dois déclarer 'my_socket' avant de l'utiliser!

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Par défaut
    Citation Envoyé par Melem
    Tout d'abord il y a déja une accolade fermante qui manque donc ca devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct st_net
    {
        Vio* vio;
        my_socket fd;
    }
    Alors ton compilateur dit :


    Autrement dit il pense que la structure devrait être ainsi :
    [CODE]typedef struct st_net
    En fait, le problème ne vient pas de la fin d'accolade. Je n'ai mis que les premières lignes de code. Voici la fonction complète:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    typedef struct st_net {
      Vio* vio;
      my_socket fd;					/* For Perl DBI/dbd */
      int fcntl;
      unsigned char *buff,*buff_end,*write_pos,*read_pos;
      char last_error[MYSQL_ERRMSG_SIZE];
      unsigned int last_errno,max_packet,timeout,pkt_nr;
      unsigned char error;
      my_bool return_errno,compress;
      my_bool no_send_ok; /* needed if we are doing several
       queries in one command ( as in LOAD TABLE ... FROM MASTER ),
       and do not want to confuse the client with OK at the wrong time
    		      */
      unsigned long remain_in_buf,length, buf_length, where_b;
      unsigned int *return_status;
      unsigned char reading_or_writing;
      char save_char;
    }
    Pour les deux autres erreurs, je compilerai ce soir. Mais comment se fait-il qu'il me compile le projet importé d'une plus ancienne version de VC++ et qu'il ne veut pas me compiler lorsque je créé un nouveau projet?
    Sachant, biensur, que je n'ai rien changé ni dans le code principal ni dans les header.

    Merci,
    Florian

Discussions similaires

  1. résultat d'une requete mysql
    Par noinneh dans le forum MFC
    Réponses: 4
    Dernier message: 03/03/2005, 16h54
  2. arret requete mysql
    Par titiyo dans le forum Bases de données
    Réponses: 5
    Dernier message: 15/10/2004, 17h40
  3. Problème sous requete MySQL
    Par gavelin dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/07/2004, 10h36
  4. Requete MySql pour Mambo Open source
    Par azman0101 dans le forum Requêtes
    Réponses: 2
    Dernier message: 22/06/2004, 09h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo