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

Qt Quick Discussion :

Accès à une base de données MySQL distante


Sujet :

Qt Quick

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 38
    Points : 26
    Points
    26
    Par défaut Accès à une base de données MySQL distante
    Bonsoir,

    Je viens vers vous afin d'avoir un peu d'aide. Je suis actuellement entrain de développer une petite appli avec QtQuick et QML, j’aimerais pouvoir accéder en enregistrer des données sur une base MySql distante, actuellement j'utilise un système de stockage local et j'aimerais changer pour pouvoir par la suite avoir accès à mes données sur différents postes.
    Donc voila si quelqu'un à déjà fait ceci ou une quelconque expérience je suis preneur de tous vos conseils.
    D'après mes recherches il faudrait réaliser une classe C++ qui s'occuperait de gérer la base et d'effectuer la connexion et les requêtes SQL

  2. #2
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut


    C'est exactement ça. Tu trouveras ici un exemple qui devrait bien t'aider .

    Bonne continuation.

    ++


    J
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    Effectivement ce liens est très intéressants, mais j'ai une petite question au moment ou je veut compiler afin de faire des test pour bidouiller un peu j'ai une erreur lorsque je tente d'ouvrir une connexion sur la bdd.
    Lorsque je tente de charger le driver j’obtiens une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QSqlDatabase: QMYSQL driver not loaded
    QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7
    Résultat ouverture QSqlError("", "Driver not loaded", "Driver not loaded")
    Pourtant QMYSQL est bien présent dans les drivers disponibles et j'ai bien un dossier sqldrivers dans mon répertoire d'installation de Qt qui lui même contient libqsqlmysql.so

  4. #4
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Huumm ... sur quel OS tournes tu ?
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Jiyuu Voir le message
    Huumm ... sur quel OS tournes tu ?
    Je suis sur Linux Debian Wheezy et Qt 5.4.1. J'ai fait quelques recherche et apparemment je suis pas le seul dans ce cas, ce serait un problème de librairies, certain dise même qu'il faut recompiler le plugin sql pour Qt.

    Edit : Après quelques recherche en effectuant cette commande
    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
    ldd libqsqlmysql.so 
    	linux-vdso.so.1 (0x00007ffdda787000)
    	libmysqlclient_r.so.16 => not found
    	libQt5Sql.so.5 => /opt/Qt/5.4/gcc_64/plugins/sqldrivers/./../../lib/libQt5Sql.so.5 (0x00007f7362a78000)
    	libQt5Core.so.5 => /opt/Qt/5.4/gcc_64/plugins/sqldrivers/./../../lib/libQt5Core.so.5 (0x00007f736233b000)
    	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7362034000)
    	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7361c8b000)
    	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7361a6d000)
    	libicui18n.so.53 => /opt/Qt/5.4/gcc_64/plugins/sqldrivers/./../../lib/libicui18n.so.53 (0x00007f7361621000)
    	libicuuc.so.53 => /opt/Qt/5.4/gcc_64/plugins/sqldrivers/./../../lib/libicuuc.so.53 (0x00007f7361296000)
    	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7361091000)
    	libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f7360e8f000)
    	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f7360c87000)
    	libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f736098e000)
    	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f736068d000)
    	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7360477000)
    	/lib64/ld-linux-x86-64.so.2 (0x00007f7362ee5000)
    	libicudata.so.53 => /opt/Qt/5.4/gcc_64/plugins/sqldrivers/./../../lib/libicudata.so.53 (0x00007f735edee000)
    	libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f735ebb1000)
    On voit bien que sur la 2eme ligne il ne trouve pas libmysqlclient_r.so.16, j'ai essayé de faire un lien symbolique mais toujours rien. Je pense que le problème est la sur cette ligne

  6. #6
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    En effet ça doit venir de là.

    Voici ce que me sort cette commande :
    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
    [charlie@arch sqldrivers]$ ldd libqsqlmysql.so
            linux-vdso.so.1 (0x00007fff7abf3000)
            libmysqlclient.so.18 => /usr/lib/libmysqlclient.so.18 (0x00007f45615d1000)
            libQt5Sql.so.5 => /usr/lib/libQt5Sql.so.5 (0x00007f456138e000)
            libQt5Core.so.5 => /usr/lib/libQt5Core.so.5 (0x00007f4560ca0000)
            libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f456091d000)
            libc.so.6 => /usr/lib/libc.so.6 (0x00007f4560579000)
            libz.so.1 => /usr/lib/libz.so.1 (0x00007f4560363000)
            libssl.so.1.0.0 => /usr/lib/libssl.so.1.0.0 (0x00007f45600e8000)
            libcrypto.so.1.0.0 => /usr/lib/libcrypto.so.1.0.0 (0x00007f455fc71000)
            libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f455fa6d000)
            libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f455f84f000)
            libm.so.6 => /usr/lib/libm.so.6 (0x00007f455f551000)
            libicui18n.so.55 => /usr/lib/libicui18n.so.55 (0x00007f455f0eb000)
            libicuuc.so.55 => /usr/lib/libicuuc.so.55 (0x00007f455ed57000)
            libpcre16.so.0 => /usr/lib/libpcre16.so.0 (0x00007f455eaf1000)
            libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x00007f455e7e3000)
            librt.so.1 => /usr/lib/librt.so.1 (0x00007f455e5da000)
            libsystemd.so.0 => /usr/lib/libsystemd.so.0 (0x00007f455e556000)
            libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f455e340000)
            /usr/lib64/ld-linux-x86-64.so.2 (0x000055ae06df4000)
            libicudata.so.55 => /usr/lib/libicudata.so.55 (0x00007f455c889000)
            libpcre.so.1 => /usr/lib/libpcre.so.1 (0x00007f455c619000)
            libresolv.so.2 => /usr/lib/libresolv.so.2 (0x00007f455c401000)
            liblzma.so.5 => /usr/lib/liblzma.so.5 (0x00007f455c1db000)
            liblz4.so.1 => /usr/lib/liblz4.so.1 (0x00007f455bfc9000)
            libgcrypt.so.20 => /usr/lib/libgcrypt.so.20 (0x00007f455bce6000)
            libgpg-error.so.0 => /usr/lib/libgpg-error.so.0 (0x00007f455bad3000)
            libcap.so.2 => /usr/lib/libcap.so.2 (0x00007f455b8cf000)
            libattr.so.1 => /usr/lib/libattr.so.1 (0x00007f455b6c9000)
    avec /usr/lib/libmysqlclient.so.18 qui pointe vers /usr/lib/libmysqlclient.so.18.0.0 si ça peut aider.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    Je pense que ma version de Qt est trop ancienne par rapport au client Mysql Qui est installé sur mon PC, je dispose de la même que toi sur mon PC la version libmysqlclient.so.18 or dans mon installe de Qt il cherche la version 16.

  8. #8
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    C'est pas impossible ça... moi je suis avec une Qt 5.5.1 sur une archlinux comme tu l'auras sûrement vu.

    Et si tu passes en mode bourrin ? faire pointer /usr/lib/libmysqlclient.so.16 vers /usr/lib/libmysqlclient.so.18.0.0

    Après sinon, c'est soit retrouver la 16, soit recompiler une version récente de Qt...


    Question complémentaire : as-tu essayer avec un autre SGDB que MySQL, je pense notamment à PostgreSQL. Tu n'auras peut-être pas le souci et en plus tu pourrais sûrement y gagner en performance.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  9. #9
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 619
    Points : 188 605
    Points
    188 605
    Par défaut
    Citation Envoyé par Jiyuu Voir le message
    Et si tu passes en mode bourrin ? faire pointer /usr/lib/libmysqlclient.so.16 vers /usr/lib/libmysqlclient.so.18.0.0
    Si ça fonctionne, c'est par chance : de manière générale, quand le numéro de version majeure change (ici, 16 et 18), ça indique un changement d'API, c'est-à-dire que l'extension Qt n'y retrouvera probablement plus ses jeunes en cherchant certaines fonctions. (Il n'est cependant pas impossible que ça fonctionne.)
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par dourouc05 Voir le message
    Si ça fonctionne, c'est par chance : de manière générale, quand le numéro de version majeure change (ici, 16 et 18), ça indique un changement d'API, c'est-à-dire que l'extension Qt n'y retrouvera probablement plus ses jeunes en cherchant certaines fonctions. (Il n'est cependant pas impossible que ça fonctionne.)

    Oui toute façon je pense repartir sur une install plus récente de Qt

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    J'ai finalement trouvé une autre solution, j'ai télécharger le paquet .deb libmysqlclient16.deb depuis le dépôt officiel Debian, j'ai ensuite effectué un sudo dpkg -i libmysqlclient16.deb et j'ai recompiler mon projet Qt et tout fonctionne à merveille.
    En ce qui concerne Windows j'ai suivit ce liens qui est juste parfait http://qt.developpez.com/tutoriels/q...pilotes/mysql/ avec quelques petites mise à jour sur les liens qui ont changé depuis, il faudrait voir pour le mettre à jour si c'est possible.
    Et notamment sur l'archive qui m'a été conseillé pour découvrir MySQl et QML qui est parfait aussi, il faudrait modifier la fonction open() afin que les paramètres de connexion spécifié dans le fichier main.qml puisse être pris en compte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    bool Storage::open()
    {
        m_sqlDatabase = QSqlDatabase::addDatabase(m_driver);
        m_sqlDatabase.setHostName(m_hostName);
        m_sqlDatabase.setUserName(m_userName);
        m_sqlDatabase.setPassword(m_password);
        m_sqlDatabase.setDatabaseName(m_name);
     
        bool ok = m_sqlDatabase.open();   
        qDebug() << "Resulstat ouverture " <<  m_sqlDatabase.lastError();
     
        return ok;
    }

  12. #12
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Citation Envoyé par simon884 Voir le message
    t notamment sur l'archive qui m'a été conseillé pour découvrir MySQl et QML qui est parfait aussi, il faudrait modifier la fonction open() afin que les paramètres de connexion spécifié dans le fichier main.qml puisse être pris en compte
    En effet c'est un oubli de ma part ça et c'est corrigé
    As-tu testé sous windows ? Normalement ça doit fonctionner correctement mais si tu peux me le confirmer ça serait top
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Jiyuu Voir le message
    En effet c'est un oubli de ma part ça et c'est corrigé
    As-tu testé sous windows ? Normalement ça doit fonctionner correctement mais si tu peux me le confirmer ça serait top
    Oui oui testé sur Windows 7, ça fonctionne nickel, si le problème du driver apparaît aussi sur Windows suivre ce liens http://qt.developpez.com/tutoriels/q...pilotes/mysql/ en modifiant les chemins en fonction de la version de Qt installé et surtout installé MySQL server version 32bits sinon les DLL ne sont pas prise en compte lors de la re-compilation du modules SQL de Qt.

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    J'aurais juste une dernière petite question, est-ce que je peut traiter les données récupérer depuis la fonction setQuery dans une fonction JS du QML ou je dois faire ça coté C++ ? Car dans le code qui m'a été donnée pour externalStorage, la fonction setQuery() retourne un bool, donc vont-il mieux faire ça côté C++ ou QML, ou les deux sont possibles ?

  15. #15
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Tu peux tout à fait récupérer le résultat rt l'utiliser côté QML. Il faut juste changer le type de ce qui est retourné et c'est good.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Accés à une base de données MySQL
    Par apt dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 06/10/2008, 19h35
  2. connexion impossible à une base de donnée mysql distante
    Par jihane1 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 09/04/2008, 12h37
  3. mettre a jour une base de donné MySQL distante
    Par gasper06 dans le forum Installation
    Réponses: 0
    Dernier message: 20/01/2008, 14h27
  4. Accès à une base de données MySQL
    Par cybernikkos dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/05/2007, 22h03
  5. [JDBC]acces à une base de données mysql
    Par sehaba dans le forum JDBC
    Réponses: 13
    Dernier message: 07/12/2004, 00h39

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