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

MFC Discussion :

[MFC] et connexion a une base MySql en C++


Sujet :

MFC

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    142
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 142
    Par d�faut [MFC] et connexion a une base MySql en C++
    Bonjour,

    J'ai un ptit probl�me et je voudrais savoir si quelqu'un pourra�t m'�clairer !

    Lors de l'ouverture de mon application MFC, je voudrais que une connexion � la base de donn�es soit r�alis�.

    Voici mes questions
    1� comment etre sur que une fois l'application, il n'y ait pas besoin de faire une demande de connexion lors des travaux sur la table

    2� Refermer la connexion lors de la fermeture de l'application. ( pour ca, je pense que c sur mon bouton "quitter" que je doit faire ...)

    Je vous remecie

  2. #2
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    salut,
    rien compris a la question 1.
    la connexion tu la fermes quand tu veux par exemple dans ExitInstance (classe d'application).

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    142
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 142
    Par d�faut
    et bien en fait, je ne voit pas comment faire pour me connecter a la base lors de l'ouverture de l'appli et que la connexion reste pour que les differentes fonctions de mon appli puisse r�aliser des requetes sur ma base sans avoir � ce reconnecter � chaque fois ...

    Si t'as un lien pour m'expliquer sa ... parce que la, mon script ne se connecte meme po !

  4. #4
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    C'est une tr�s chouette question.

    Le probl�me qu'on rencontre souvent est que l'on g�re mal une connexion � une base de donn�es. Il y a de ces gens qui sans le savoir ouvre plus d'une dizaine de fois des connexions � leur bd lorsqu'il clique sur des boutons de leurs interfaces. Ne parlons m�me des appli web. La connexion � la base est r�ouverte � chaque chargement de la page. Ce qui est grave.
    Lorsque la connexion est ouverte elle doit �tre pr�cieusement garder et m�me, elle doit �tre mise en cache si possible. Avec un d�veloppement sous OLE DB, ATL fournit la classe CDataSourceCache dont l'instance de cette classe doit demeurer dans un objet dont sa dur�e de vie est �gale � celle de l'application et particuli�rement dans la classe de module pour une dll ATL.
    S'il l'on utilise ODBC avec les MFC. Je personnalise ma classe CDatabase et je le sauvegarde dans l'objet l'application.

    Il est pr�f�rable d'ouvrir la connexion le plut�t possible une et une seule fois dans toute l'application dans le InitInstance de l'objet application.
    Et il faut fermer la connexion le plutard possible dans Existance de l'objet application

    Si un recordset qui � besoin de la connexion � ma bd
    je fais simplement
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    CRecordset rs;
    rs.m_pDatabase = &myOnlyOneConnectedDatabase;
    // ...

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    142
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 142
    Par d�faut
    oula, jai pas tout compris mais bon, c'est possible si je met mon script au dans le InitInstance alors ...

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    142
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 142
    Par d�faut
    voici le code que j'utilise pour me connectere, por, il ne fonctionne po et la, je comprend pas pourquoi, tout me semble normal !

    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
     
    #include <mysql.h> 
    #include <iostream>
    #define MYSQL_DB "aquarium"
     
    #pragma comment(lib, "libmysql.lib") // libmysql.dll doit etre dans le meme rep.
    using namespace std;
    int main(void)
    {
     MYSQL mysql;
     const char *host  = "127.0.0.1"; // Adresse du serveur MySQL
     const char *user  = "Nelmo"; // Nom d'utilisateur
     const char *pass  = "matrix"; // Mot de passe
     const char *db    = "aquarium"; // Base de donnée
     
     //MYSQL_RES *result;
     
     system("cls");
     
     mysql_init(&mysql);
     //mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"main");
     if (!mysql_real_connect(&mysql,host,user,pass,db,3306,NULL,0)) //connexion
      {
       cout<<"connexion Failed";
       return (0);
            }
            else
      {
       cout<<"connexion reussi";
      }
     
      /*(mysql_select_db(&mysql,MYSQL_DB)) 
      {
                    mysql_close(&mysql);
        system("pause");
            }*/
            mysql_close(&mysql);
      return 0;
    }
    Voila, jespere que vous pourrez m'aider, je suis en train de me ronger la tete ... hihihihi

  7. #7
    Membre �clair�
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Chef de projet NTIC
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Par d�faut
    salut

    utilise ADOLib.h c'est une librairie qui regroupe toute les classes premettant
    la connexion et la cr�ation de requete SQL, de plus elle est tres simple d'utilisation.


    et pour pouvoir te connecter au d�marrage de ton application met ton code
    dans la methode OnInitDialog() mais n'oublie pas de fermer ta connexion lors de la fermeture de ton appli

    voila et bon TAF

  8. #8
    Membre �clair�
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Chef de projet NTIC
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Par d�faut
    et si je dit pas de b�tise y me semble que Mysql.h est une librairie pour du C
    et non du C++

    enfin sui pas sur � confirmer par quelqu'un d'autres

  9. #9
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Mais ton appli, n'est pas de l' MFC!!!

    Pour ce qui est de MySql, ou pour tout autre SGBD, il serait mieux de trouver un pilote ODBC pour MySQL je crois MyOdbc, ensuite tu enregistres ta source de donn�es aupr�s de l'administrateur ODBC.

    L'int�r�t d'utiliser les classes de ODBC (CDatabase, CRecordset, etc) moyennant un pilote d'acc�s � ta base de donn�es est que tu r�alises une programmation homog�ne sans trop t'int�ress� aux API sp�cifiques � tel ou tel SGBD. Au lieu d'utiliser directement les api : mysql_init(), mysql_options(), mysql_real_connect(), etc Tu te sert uniquement des m�thodes des classes fournit par ODBC et ce dernier se charge de dialoguer avec le pilote ODBC pour invoquer l'api MySQL ad�quate.

    De cette fa�on, tu peux rendre ton code r�utilisable, et appliquer ton m�me code de connexion pour un autre SGBD tel que SQL Server. Et au mieux tu empaqu�tes tes CDatabase et CRecordset dans une dll MFC d'extension s�par�e du code principale de ton appli.

  10. #10
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    142
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 142
    Par d�faut
    Je vous remercie pour tout vos conseils !

    Donc si je t'ais bien compris Gabrielly, les commandes MySQL seront devenu transparentes pour moi ? je ne "pisserait" que de l'ODBC ?


    Je vais �galement me renseigner sur ADOlib .. mais bon, je doit me mettre d'accord aujourdui, le temps presse

    En tout cas, je vous remercie

  11. #11
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    142
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 142
    Par d�faut
    Bien, j'ai install� le connector ODBC pour MySql 5.0.

    Concraitement, que va engendrer cette installation ?

    Je ne comprend pas trop, vais-je programmer en ODBC ?

    Merci

  12. #12
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Donc si je t'ais bien compris Gabrielly, les commandes MySQL seront devenu transparentes pour moi ? je ne "pisserait" que de l'ODBC ?
    C'est exacte, que �a soit ODBC, OLE DB, ADO ou ADO .NET, le but fix� est la transparence visa vis des divers SGBD. Quand bien m�me ces technos fournissent des classes diff�rentes CDatabase pour ODBC, CDataConnection pour OLE DB, SqlConnection pour ADO .NET ne repr�sentent au fait qu'un m�me concept de connection � une base de donn�es.

    Une fois que ton pilote ODBC est install�. Tu vas sur l'administrateur des sources de donn�es ODBC et tu s�lectionnes ton pilote en indiquant un nom pour ta source (DSN), un utilisateur et mot de passe probablement.
    Tu cr��s ta base de donn�es (tables, vues, proc�dures stock�es etc) sous MysSQL.

    Et � l'aide des assistants de VC++ tu g�n�res des classes ODBC pour te connecter et faire des requ�tes sur tes tables.

    Je ne comprend pas trop, vais-je programmer en ODBC ?
    Tu as le choix chaque techno � ses plus et ses moins.

  13. #13
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    142
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 142
    Par d�faut
    je vous remercie pour vos r�actions

    Je ne met pas le tag r�solus, parce qui si jamais j'ai pas r�ussi, sa m'embetterai de recreer un nouveau poste lol

    En tout cas, merci

  14. #14
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    142
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 142
    Par d�faut
    bon, jn'"ayant encore pas tout saisie sur ADO et ODBC, j'ai continu� un peu a me d�patouiller avec ma fonction mysql

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Linking...
    connection.obj : error LNK2001: unresolved external symbol <a href="mailto:_mysql_fetch_row@4">_mysql_fetch_row@4</a>
    connection.obj : error LNK2001: unresolved external symbol <a href="mailto:_mysql_use_result@4">_mysql_use_result@4</a>
    connection.obj : error LNK2001: unresolved external symbol <a href="mailto:_mysql_query@8">_mysql_query@8</a>
    connection.obj : error LNK2001: unresolved external symbol <a href="mailto:_mysql_close@4">_mysql_close@4</a>
    connection.obj : error LNK2001: unresolved external symbol <a href="mailto:_mysql_select_db@8">_mysql_select_db@8</a>
    connection.obj : error LNK2001: unresolved external symbol <a href="mailto:_mysql_real_connect@32">_mysql_real_connect@32</a>
    connection.obj : error LNK2001: unresolved external symbol <a href="mailto:_mysql_init@4">_mysql_init@4</a>
    Debug/connection.exe : fatal error LNK1120: 7 unresolved externals
    Error executing link.exe.
    J'utilise la librairie mysql.h au lieu de mysql++ car sinon, j'ai 21 erreurs lors de la compile ...

    Il �e semble avoir deja vu ce probleme, mais j'ai pas retrouv� le topic ...

    voici le code que j'ai
    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
     
    #include "stdafx.h"
    #include <iostream>
    #include <mysql.h>
    //#include <mysql++>
    #define MYSQL_HOST "localhost"
    #define MYSQL_DB "aquarium"
    #define MYSQL_LOGIN "Nelmo"
    #define MYSQL_PASSWD "matrix"
    int main (int argc, char * const argv[]) {
        MYSQL *mysql;
        MYSQL_RES *result;
        MYSQL_ROW row;
     
     
        if((mysql = mysql_init(NULL))==NULL){
            return -1;
        }
        if (!mysql_real_connect(mysql,MYSQL_HOST,MYSQL_LOGIN,MYSQL_PASSWD,NULL,3306,NULL,0)) {
            return -1;
        }
        if (mysql_select_db(mysql,MYSQL_DB)) {
            mysql_close(mysql);
            return -1;
        }
        mysql_query(mysql,"SELECT * FROM t_module");
        result = mysql_use_result(mysql);
        while((row = mysql_fetch_row(result))) {
            printf("%s",row[1]);
            fflush(stdout);
        }
        mysql_close(mysql);
        std::cout << "Hello, World!\n";
        return 0;
    J'avoue que la, j'en ai plus que marre, j'y met du mien, mais je n'arrive pas a comprendre

    Merci

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. erreur connexion a une base mysql
    Par klemellill dans le forum JBuilder
    R�ponses: 9
    Dernier message: 03/05/2007, 16h45
  2. connexion a une base mysql : accessed denied
    Par ghita269 dans le forum SQL Proc�dural
    R�ponses: 1
    Dernier message: 17/09/2006, 11h01
  3. probl�me de connexion sur une base mysql
    Par boss_gama dans le forum Installation
    R�ponses: 4
    Dernier message: 05/09/2006, 14h13
  4. Voir le nombre de connexion d'une base MYSQL ?
    Par zmania69 dans le forum SQL Proc�dural
    R�ponses: 1
    Dernier message: 31/08/2006, 18h22
  5. Connexion sur une base Mysql distante (non locale)
    Par externa dans le forum SQL Proc�dural
    R�ponses: 2
    Dernier message: 20/02/2006, 11h34

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