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

Bases de données Discussion :

Essai de suppression d'avertissement à la compilation


Sujet :

Bases de données

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Points : 227
    Points
    227
    Par défaut Essai de suppression d'avertissement à la compilation
    Bonjour a tous,
    je suis en train d'essayé de supprimer tout les warning de mon logiciel.

    Il me reste plus qu'un seul qui est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.
    Chacune de mes requetes est former ainsi:
    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
     
    QSqlDatabase base = QSqlDatabase::addDatabase("QSQLITE");
        base.setDatabaseName(QDir::fromNativeSeparators(QDir::homePath()+"/.QFacturation/data.db"));
        base.open();
        QSqlQuery query;
        query.exec("SELECT * FROM customer ORDER BY name");
     
     
        int i=0;
        while(query.next()){
            QSqlRecord rec = query.record();
           ....
            i++;
        }
        query.finish();
        base.commit();
        base.close();
        QSqlDatabase::removeDatabase(QDir::fromNativeSeparators(QDir::homePath()+"/.QFacturation/data.db"));
    Savez-vous d'ou vient le problème ?
    J'ai oublier de faire quelque chose ?

    Merci d'avance pour vos lumières

  2. #2
    Membre expérimenté
    Avatar de charlespf
    Homme Profil pro
    Développeur C/C++/Qt/Python et WebPHP
    Inscrit en
    Mai 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur C/C++/Qt/Python et WebPHP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 251
    Points : 1 683
    Points
    1 683
    Par défaut
    Salut ,

    Je pense que, quelque part dans ton code, tu essaye d'ouvrir plusieurs connexions sur le fichier sqlite.
    1 fonction créée une connexion puis appelle une autre fonction qui ouvre à nouveau une connexion ...
    Du coup, Qt ferme la connexion précédente et garde celle que tu viens d'ouvrir...

    A+
    charlespf

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Points : 227
    Points
    227
    Par défaut
    Donc quand je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    query.finish();
    base.commit();
    base.close();
        QSqlDatabase::removeDatabase(QDir::fromNativeSeparators(QDir::homePath()+"/.QFacturation/data.db"));
    Je ne ferme pas la connexion ?
    Comment doit je faire alors ?

  4. #4
    Membre expérimenté
    Avatar de charlespf
    Homme Profil pro
    Développeur C/C++/Qt/Python et WebPHP
    Inscrit en
    Mai 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur C/C++/Qt/Python et WebPHP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 251
    Points : 1 683
    Points
    1 683
    Par défaut
    mmm,

    Ce que tu fais est correct .
    Le commit n'est obligatoire que si tu fait une requête d'écriture (pas besoin de commiter pour une requête de lecture vu que tu ne fais aucune modif sur la BDD).

    Le mieux est d'ouvrir une fois la connexion au démarrage de ton programme et de la fermer à l'arrêt de ton programme.

    En cherchant sur le net, j'ai trouvé ceci (en anglais): http://stackoverflow.com/questions/5...database-in-qt.

    A+
    charlespf

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Points : 227
    Points
    227
    Par défaut
    Bon si j'ai bien comprit, il me suffit de faire un addDatabase dans mon main
    puis remplacer les autre addDatabase par des database().

    Je teste cela

    EDIT: cela fonctionne avec quelque modif.

    En gros dans le main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    QApplication a(argc, argv);
    QSqlDatabase base=QSqlDatabase::addDatabase("QSQLITE");
    base.setDatabaseName(QDir::fromNativeSeparators(QDir::homePath()+"/.QFacturation/data.db"));
    base.open();
    Pour les requetes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    QSqlDatabase base = QSqlDatabase::database();
    QSqlQuery query;
    .........
    query.finish();
    base.commit();
    et on ferme la connexion a la fermeture de l'application

  6. #6
    Membre expérimenté
    Avatar de charlespf
    Homme Profil pro
    Développeur C/C++/Qt/Python et WebPHP
    Inscrit en
    Mai 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur C/C++/Qt/Python et WebPHP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 251
    Points : 1 683
    Points
    1 683
    Par défaut
    .

    En gros, il faut toujours éviter, même si c'est possible, de multiplier les connexions à la BDD. Si on peut travailler avec une seule connexion, ça n'est que mieux !.

    A+
    charlespf

  7. #7
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Points : 227
    Points
    227
    Par défaut
    Je suis bien d'accord, je trouvais cela un peux lourd (c'est ma premiere appli avec QTsql)

    En passant voici le code a la fermeture d'une QMainWindow:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void MainWindow::closeEvent(QCloseEvent* event) {
        int ret = QMessageBox::question(this,tr("Quitter?"),tr("Voulez-vous vraiment quitter?"),QMessageBox::Yes | QMessageBox::No);
        if (ret == QMessageBox::Yes){
            QSqlDatabase base = QSqlDatabase::database();
            base.commit();
            base.close();
            QSqlDatabase::removeDatabase(QDir::fromNativeSeparators(QDir::homePath()+"/.QFacturation/data.db"));
            event->accept();
        }
        else
            event->ignore();
    }

    Si ça peux servir a d'autre

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

Discussions similaires

  1. [AC-2007] suppression des avertissements des macro
    Par STOUPI dans le forum VBA Access
    Réponses: 4
    Dernier message: 09/08/2015, 18h15
  2. XE5 et avertissement de compilation
    Par Papy214 dans le forum Débuter
    Réponses: 3
    Dernier message: 20/11/2013, 13h55
  3. Suppression de doublons et compilation de champs
    Par Baffien dans le forum SAS Base
    Réponses: 4
    Dernier message: 13/02/2011, 19h50
  4. Réponses: 1
    Dernier message: 18/08/2010, 15h48

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