Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 46

Qt Connexion base de données Mysql

  1. #1
    defender19

    Qt Connexion base de données Mysql

    Bonjour!

    Après pas mal de recherches sur la doc, des exemples, des forums, j'arrive pas à établir une connexion ou faire des reqûete avec ma base de données Mysql!

    J'ai Mysql d'installé sur mon ordi, j'ai une base de données test avec deux tables remplies, j'ai eu beau essayé, je ne suis pas arrivé à soit me connecter soi afficher les données d'une table!

    Premier essai de connection qui ne marche pas :

    Code:
    QSqlDatabase *db = new QSqlDatabase;
        db->addDatabase("QSQLITE"); //-------> QMYSQL ne marche pas... 
        db->setHostName("localhost");
        db->setDatabaseName("test");
        db->setUserName("root");
        db->setPassword("antoine");
        db->open();
    
    if(!db->open()){
            texte->setPlainText("Erreur");//---- s'affiche toujours!
        }
    Autre méthode trouvé qui ne fait pas d'erreur à la connexion mais n'affiche rien:

    Code:
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
            db.setDatabaseName("test");
    if(!db.open()){
                texte->setPlainText("erreur");
            }
    QSqlQuery query("SELECT  ID FROM saisir;");
    
            while (query.next()) {
                QString hello = query.value(0).toString();
                texte->setPlainText(hello);
            }
    Merci de m'aider! J'ai pas tout compris la dessus!

    -----


  2. Publicité
  3. #2
    photon57

    Re : Qt Connexion base de données Mysql

    Hello,

    Si tu arrives à accéder à ta base par l'interface mysql (donc le serveur est ok...), le moyen le plus simple est de voir ce qui se passe avec lasterror pour avoir plus d'info (mot passe, user, ...)

  4. #3
    defender19

    Re : Qt Connexion base de données Mysql

    Pour le premier cas de figure?

    Il affiche erreur et en consol dans Qt il affiche : QSqlQuery::exec: database not open

    Je rajoute : QSqlError error=db->lastError();
    Comment je l'affiche?

  5. #4
    photon57

    Re : Qt Connexion base de données Mysql

    Toujours en suivant la doc que je t'ai donné en lien ... http://developer.qt.nokia.com/doc/qt-4.8/qsqlerror.html

    T
    u as tester ta requête évidemment ?

  6. #5
    defender19

    Re : Qt Connexion base de données Mysql

    Avec :

    QSqlError error=db->lastError();
    QString er=error.databaseText();
    texte->setPlainText(er);

    Il affiche ; Driver not loaded

  7. #6
    photon57

    Re : Qt Connexion base de données Mysql

    addDatabase est static ...
    essaye db=QSqlDatabase::addDatabase( "QMYSQL" );

  8. #7
    defender19

    Re : Qt Connexion base de données Mysql

    Alors avec :

    Code:
    QSqlDatabase db;
        db=QSqlDatabase::addDatabase("QMYSQL");
        db.setHostName("localhost");
        db.setDatabaseName("test");
        db.setUserName("root");
        db.setPassword("antoine");
        db.open();
    
        if(!db.open()){
            texte->setPlainText("ok");
        }
    
        QSqlQuery query("SELECT  ID FROM saisir;");
            while (query.next()) {
                QString hello = query.value(0).toString();
                texte->setPlainText(hello);
                        }
        QSqlError error=db.lastError();
         QString er=error.driverText();
        texte->setPlainText(er);
    En console :
    QMYSQL driver not loaded
    QSqlDatabase: available drivers: QSQLITE
    QSqlQuery::exec: database not open

    Il affiche : Driver not loaded

    En remplacant par QSQLITE, pas d'erreur mais n'affiche rien du tout non plus...

  9. #8
    photon57

    Re : Qt Connexion base de données Mysql

    Si tu as une base MySql, il ne faut pas essayer le driver sqlite ça ne servira pas à grand chose. As tu le driver Mysql ? Linkes-tu ton projet avec la lib msyqlclient_r ?

  10. #9
    defender19

    Re : Qt Connexion base de données Mysql

    Il me semble que non...

    En fait je transpose un programme que j'avais fait en java en C++, avec Java j'avais installé le driver Mysql en effet.

    La dans : C:\QtSDK\Desktop\Qt\4.7.4\ming w\plugins\sqldrivers

    je n'ai que :

    qsqlite4.dll
    et qsqlited4.dll avec leurs deux fichiers a.

    Après je link rien du tout :S

  11. #10
    photon57

    Re : Qt Connexion base de données Mysql

    Alors dans un premier suivre la doc pour le plugin mysql pour qt : http://doc.qt.nokia.com/4.7-snapshot/sql-driver.html#how-to-build-the-mysql-driver-for-mingw-users



  12. #11
    defender19

    Re : Qt Connexion base de données Mysql

    Vu que je trouve ça bien complexe et que je trouve pas les fichiers à télécharger, c'est pas plus simple que je télécharge SQLITE ?

  13. #12
    photon57

    Re : Qt Connexion base de données Mysql

    Sqlite est simple et performant dans les limites d'utilisation préconisées. Une base = un fichier, surcouche sql relativement complète ... à essayer. Qt a quand même besoin de son driver,mais si tu l'as déjàinstallé ...

  14. #13
    defender19

    Re : Qt Connexion base de données Mysql

    Je n'ai rien installé en plus de Qt, mais il est déjà là par défaut on dirait...
    J'ai pas trouvé non plus ou télécharger pour installer Sqlite.

    Bref, je re teste pour le driver MySQL

  15. #14
    photon57

    Re : Qt Connexion base de données Mysql

    Downloade sqlite (http://www.sqlite.org/), crée une base, et teste avec ton prog.

  16. #15
    defender19

    Re : Qt Connexion base de données Mysql

    J'avais trouvé le site mais dans download, ya que des fichiers qui lancent des consoles... Rien qui s'installe!

    Désolé, je suis dessus depuis hier, j'en peux plus

  17. #16
    photon57

    Re : Qt Connexion base de données Mysql

    Bah oui ... il est super light
    il n'y a rien besoin d'autre. Toute la base est contenue dans un fichier, le prog en mode console te permet de créer la base, de faire des requetes, .... pas besoin de GUI ...
    Il doit y avoir des drivers ODBC pour y accéder via un GUI de tout choix (excel, access, eqv libreoffice, ...)

    L'avantage : pas besoin de procédures pour l'installation puisque tout tient dans des fichiers : il suffit de les copier et d'y accéder.
    Sans compter qu'au final sqlite est plus standard SQL que mysql.
    Dernière modification par photon57 ; 20/01/2012 à 13h34.

  18. #17
    defender19

    Re : Qt Connexion base de données Mysql

    Alors au final juste ça :

    Code:
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
        db.setHostName("localhost");
        db.setDatabaseName("base.db3");
    
            if(!db.open())
            {
                QMessageBox::critical(0, tr("Erreur"),
                    tr("Connexion impossible :\n") + db.lastError().text());
            return;
            }
    
            QSqlError error=db.lastError();
             QString er=error.databaseText();
            texte->setPlainText(er);
    ça marche? Pas d'erreur ni rien du tout...

    Par contre, j'utilise les même requet sql ici ? Genre create table, show tables, ... ?

  19. #18
    photon57

    Re : Qt Connexion base de données Mysql

    oui tout pareil. Tu peux trouver la listes des fonctionnalités SQL non implémentées : http://www.sqlite.org/.
    Attention au dialect mysql si tu traduis vers sqlite ...

    Mais pour des trucs simples c'est généralement OK.

  20. #19
    defender19

    Re : Qt Connexion base de données Mysql

    Bon, bah vais tester ça ce soir, mais du coup ça a l'air beaucoup plus simple!! Merci

    Je reviendrai surement...

  21. #20
    photon57

    Re : Qt Connexion base de données Mysql

    Pas de problèmes, à propos, ça avance sur IOI ?

  22. #21
    defender19

    Re : Qt Connexion base de données Mysql

    Pas vraiment non, je n'ai pas encore eu le temps de regarder vraiment ce que tu avais fait et j'ai pas continué. Occupé à trouver des poursuites d'études en info (qui me sont par ailleurs pas accessible!).

  23. #22
    photon57

    Re : Qt Connexion base de données Mysql

    Citation Envoyé par defender19 Voir le message
    Pas vraiment non, je n'ai pas encore eu le temps de regarder vraiment ce que tu avais fait et j'ai pas continué. Occupé à trouver des poursuites d'études en info (qui me sont par ailleurs pas accessible!).
    C'était pas le problème en particulier, c'était juste pour savoir si tu continuais ... en tout cas bon courage

  24. #23
    defender19

    Re : Qt Connexion base de données Mysql

    Oui, mais comme je fais dans l'ordre, donc je compte bien voir ce que tu as fait, pour y faire à ma façon... Mais je continuerai!


    Sinon, pour SQLITE, ça s'arrange, la connection va bien, il crée la base sans soucis, par contre, il arrive pas à insérer les valeurs. Pas d'erreur dans la console, mais rien dans le fichier...

    Code:
    QString creation="create table "+nomBase+" (ID VARCHAR(32), LONGUEUR INTEGER, PRODUIT TEXT(500), ORGANISME TEXT(500), SEQUENCE TEXT(150000), PRIMARY KEY(ID))";
        QSqlQuery query;
        query.exec(creation);
        query.exec("INSERT INTO "+nomBase+" (ID, LONGUEUR, PRODUIT, ORGANISME, SEQUENCE) VALUES ('ident', 1400, 'human', 'attat')");
    C'est des requêtes de sql, donc j'ai pas regardé encore si quelque chose n'était pas compatible.

  25. #24
    photon57

    Re : Qt Connexion base de données Mysql

    Une bonne pratique est de tester les requêtes avant de les programmer via l'interface de ta base. Ensuite de vérifier que les requêtes que tu programmes sont bien celles que tu veux, qu'il n'y a pas une mécanisme particulier pour passer les paramètres ...

  26. #25
    defender19

    Re : Qt Connexion base de données Mysql

    Je viens de trouver un mystère sur mon code! C'est une fonction qui récupère via des expressions régulières des infos d'une fiche en téléchargement (de la bio).
    J'ai testé initialement la fonction en écrivant les infos dans un fichier texte. Tout marche parfaitement. Intégré au programme, plus besoin d'écrire dans le fichier, en enlevant la partie écriture dans le fichier, impossible de récupérer les infos.

    On vient d'essayer tous les cas de figures avec un pote, et s'il manque le QFileDialog initial (qui ne sert strictement à rien), cela ne marche pas!

    Code initial : marche parfaitement

    Code:
    const QUrl url = QUrl("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&rettype=.gb&id="+num); //On récupère l'URL entrée par l'utilisateur.
        const QNetworkRequest requete(url);
        QNetworkAccessManager *m = new QNetworkAccessManager;
        QNetworkReply *r = m->get(requete);
    
       QString fichier=QFileDialog::getSaveFileName(this, "Enregister Sous", QString(), "Fichier texte (*.txt)");
    
       QFile f("C:/Users/Antoine/Desktop/test.txt");
    
        QString ligne, id, bp, orga, seq2, produit1;
           if(f.open(QIODevice::WriteOnly)){
    
            QTextStream out(&f);
            ligne=r->readLine();
            int cpt1=0;
    
            while(ligne!=NULL){
    
    // ------------------------------------------------- Identifiant + longueur
                QRegExp rx("^LOCUS\\s+(\\w+)\\s+(\\d+)\\sbp[\\s-\\w-\\d]*");
                    if(rx.exactMatch(ligne)){
                        id = rx.cap(1);
                        bp = rx.cap(2);
                        out <<id<<" "<<bp<<"bp\n\n";
                     }
    //------------------------------------------------------------------ Organisme
                QRegExp org("\\s+/organism=\"(.+)\"\\s+");
                    if(org.exactMatch(ligne)){
                         orga=org.cap(1);
                         out<<orga<<endl;
                    }
     //-------------------------------------------------------------------Sequence!
                QRegExp seq("ORIGIN\\s+");
                   if(seq.exactMatch(ligne)){
                        ligne=r->readLine();
                        QRegExp aa("\\s+(\\d)\\s+(([a|c|g|t|n]+)\\s)+");
    
                        if(aa.exactMatch(ligne)){
                           QString res=ligne.replace(QRegExp("\\s"), "");
                           QString ros=res.replace(QRegExp("\\d"), "");
                            seq2+=ros;
                            ligne=r->readLine();
                            QRegExp stop("\/\/(.+)");
    
                            while(!stop.exactMatch(ligne)){
                                QString res=ligne.replace(QRegExp("\\s"), "");
                                QString ros=res.replace(QRegExp("\\d"), "");
                                seq2+=ros;
                                ligne=r->readLine();
                            }
                        }
                         out<<"\n\n"<<seq2;
                   }
    
     //----------------------------------------------------------- Produit!
                QRegExp prod("\\s+/product=\"(.+)\"\\s+");
                   if(prod.exactMatch(ligne) && cpt1==0){
                        produit1=prod.cap(1);
                        out<<produit1<<endl;
                        cpt1++;
                   }
    //------------------------------------------------
    
                ligne=r->readLine();
            }
    
    
    
            f.close();
            r->deleteLater();
    
            QMessageBox::information(this, "Fin de téléchargement", ("Téléchargement terminé !"));
    
            QMessageBox::information(this, "test", "id "+id);
    
        gene g(id, bp, seq2, produit1, orga);
        return g;
    code final :

    Code:
    const QUrl url = QUrl("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&rettype=.gb&id="+num); //On récupère l'URL entrée par l'utilisateur.
        const QNetworkRequest requete(url);
        QNetworkAccessManager *m = new QNetworkAccessManager;
        QNetworkReply *r = m->get(requete);
    
       QString fichier=QFileDialog::getSaveFileName(this, "Enregister Sous", QString(), "Fichier texte (*.txt)"); //---------------------->sans cette ligne, rien ne marche!!
    
    
        QString ligne, id, bp, orga, seq2, produit1;
    
            ligne=r->readLine();
            int cpt1=0;
    
            while(ligne!=NULL){
    
    // ------------------------------------------------- Identifiant + longueur
                QRegExp rx("^LOCUS\\s+(\\w+)\\s+(\\d+)\\sbp[\\s-\\w-\\d]*");
                    if(rx.exactMatch(ligne)){
                        id = rx.cap(1);
                        bp = rx.cap(2);
                     }
    //------------------------------------------------------------------ Organisme
                QRegExp org("\\s+/organism=\"(.+)\"\\s+");
                    if(org.exactMatch(ligne)){
                         orga=org.cap(1);
                    }
     //-------------------------------------------------------------------Sequence!
                QRegExp seq("ORIGIN\\s+");
                   if(seq.exactMatch(ligne)){
                        ligne=r->readLine();
                        QRegExp aa("\\s+(\\d)\\s+(([a|c|g|t|n]+)\\s)+");
    
                        if(aa.exactMatch(ligne)){
                           QString res=ligne.replace(QRegExp("\\s"), "");
                           QString ros=res.replace(QRegExp("\\d"), "");
                            seq2+=ros;
                            ligne=r->readLine();
                            QRegExp stop("\/\/(.+)");
    
                            while(!stop.exactMatch(ligne)){
                                QString res=ligne.replace(QRegExp("\\s"), "");
                                QString ros=res.replace(QRegExp("\\d"), "");
                                seq2+=ros;
                                ligne=r->readLine();
                            }
                        }
    
                   }
    
     //----------------------------------------------------------- Produit!
                QRegExp prod("\\s+/product=\"(.+)\"\\s+");
                   if(prod.exactMatch(ligne) && cpt1==0){
                        produit1=prod.cap(1);
                        cpt1++;
                   }
    //------------------------------------------------
    
                ligne=r->readLine();
            }
    
    
            r->deleteLater();
    
            QMessageBox::information(this, "Fin de téléchargement", ("Téléchargement terminé !"));
    
            QMessageBox::information(this, "test", "id "+id);
    
        gene g(id, bp, seq2, produit1, orga);
        return g;
    C'est pas grave, mais si quelqu'un trouve pourquoi, je suis preneur!!



    Autre chose, si quelqu'un connait la commande en sqlite pour connaitre les tables de sa base, je suis preneur aussi

  27. #26
    photon57

    Re : Qt Connexion base de données Mysql

    Citation Envoyé par defender19 Voir le message
    (...)

    C'est pas grave, mais si quelqu'un trouve pourquoi, je suis preneur!!
    Un moyen pour trouver l'erreur : le debugger
    Il s'agit un schrödinbug.

    Citation Envoyé par defender19 Voir le message
    Autre chose, si quelqu'un connait la commande en sqlite pour connaitre les tables de sa base, je suis preneur aussi
    La doc sqlite ? http://www.sqlite.org/sqlite.html

    soit en utilisant le shell sqlite, ou comme pour tout dbms qui se respecte en queryant les tables systèmes.

  28. #27
    defender19

    Re : Qt Connexion base de données Mysql

    Ouarf, j'ai pas compris ton queryant, mais j'ai trouvé! "select name from sqlite_master".

    Tout marche à merveille, de jolies interfaces graphiques, tout n'est pas fini, mais ça fait du bien que ça marche un peu!

    Merci bien pour toutes tes réponses , heureusement que tu ne perds pas patience

  29. #28
    photon57

    Re : Qt Connexion base de données Mysql

    No pb, queryant néologisme (personnel ?) forgé à partir de to query ... oublie ça ...

    Bravo !
    Toutes les bdd offrent un mécanisme similaire de reflexion pour accéder à la structure d'une base. Et ton problème de filedialog ?

  30. #29
    defender19

    Re : Qt Connexion base de données Mysql

    Je laisse le filedialog pour le moment, au pire les chercheurs ne comprendront pas et on expliquera que c'est comme ça et puis c'est tout...

    Enfin, vu ce qui reste, j'aurai surement d'autre questions, mais la repos!!

  31. #30
    defender19

    Re : Qt Connexion base de données Mysql

    Au final, j'ai trouvé. Le temps de répondre à la boite de dialogue permet en fait de télécharger le fichier. Sinon, la requête n'est pas totalement exécutée et ça ne rentre même pas dans la boucle. Reste à trouver pour patienter 5s.

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. connexion a une base de données a travers sharepoint
    Par mehdii dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 04/05/2010, 21h37
  2. base de données MySQL (methode merise)
    Par poste22 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 13/03/2010, 17h01
  3. ActionScript, Base de données MySQL
    Par lui dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 07/05/2009, 08h32
  4. importation base de donnée MySQL
    Par aneurysm55 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 1
    Dernier message: 13/03/2007, 18h24
  5. Connexion Java - BD MySQL sur un serveur distant
    Par Witten dans le forum Internet - Réseau - Sécurité générale
    Réponses: 3
    Dernier message: 19/04/2005, 21h09