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 :

Fermer une connexion proprement


Sujet :

Bases de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 133
    Par défaut Fermer une connexion proprement
    Bonjour à tous,

    Voilà plusieurs jours que je n'arrive pas à comprend le fonctionnement de ma QSqlDatabase.

    Je l'ouvre, le la ferme mais j'y ai encore accès !! Voici mon code :

    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
     QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=" + qs_UrlBaseDeDonnees);
     
        if(db.open())
        {
            b_Connection = true;
        }
        else
        {
            b_Connection = false;
        }
     
        // Fermeture de la db
        QSqlDatabase::database("QODBC").close();
        QSqlDatabase::removeDatabase("QODBC");
     
        // Test pour voir si elle est encore là
        QSqlRelationalTableModel* test;
        test = new QSqlRelationalTableModel();
        test -> setTable("Clients");
        test -> select();
        int a = test -> rowCount(); // retourne le bon nombre et pas 0... Etrange
     
        return (b_Connection);

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 133
    Par défaut
    J'ai essayé ça mais il me fait "Unknow error" sans donner plus de précisions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=" + qs_UrlBaseDeDonnees);
        db.open();
        db.close();

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 133
    Par défaut
    J'ai aussi essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        QString nom;
        {
            QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
            QString qs_UrlBaseDeDonnees = "D:/DataBaseSC.mdb";
            db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=" + qs_UrlBaseDeDonnees);
            db.open();
            nom = db.connectionName();
        }
     
        QSqlDatabase::database(nom).close();
        QSqlDatabase::removeDatabase(nom);
    Toujours un plantage : Echec de l'exécutable Uknow error, le Processus gdb s'est terminé de façon inattendue (0).

    Et ce problème n'arrive pas en release...

    Please Help j'en ai marre de ce problème je suis sur que c'est pas compliqué mais tous les posts que je trouve sur le sujet ne fonctionnent pas

  4. #4
    Membre averti

    Homme Profil pro
    gerant
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : gerant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Par défaut
    salut, je penses que c'est du à la protée de la variable db qui est detruite a la sortie de son scope, du coup tu cherche a fermer une base déjà fermée.
    essai de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(db.isOpen())
    db.close();
    histoire de vérifier.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 133
    Par défaut
    Ce que tu m'as dis ne plante pas par contre je viens de m'aperçevoir qu'il y a quelque chose qui m'échappe.

    Je n'ai pas besoin d'ouvrir la base pour accéder aux données et c'est cet accès que je n'arrive pas à fermer proprement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
            QString qs_UrlBaseDeDonnees = "D:/DataBaseSC.mdb";
            db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=" + qs_UrlBaseDeDonnees);
     
            QSqlRelationalTableModel* test2;
            test2 = new QSqlRelationalTableModel();
            test2 -> setTable("Clients");
            test2 -> select();
            int b = test2 -> rowCount();// Renvoi 13 le bon nombre de ligne alors qu'il n'y a pas de db.open!!

  6. #6
    Membre averti

    Homme Profil pro
    gerant
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : gerant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Par défaut
    salut, j'ai fais un petit tour dans les sources de Qt (%QTDIR%\src\sql\models\qsqltablemodel.cpp) et voilà ce qu'on y trouve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void QSqlTableModel::setTable(const QString &tableName)
    {
        Q_D(QSqlTableModel);
        clear();
        d->tableName = tableName;
        d->initRecordAndPrimaryIndex();
        d->initColOffsets(d->rec.count());
     
        if (d->rec.count() == 0)
            d->error = QSqlError(QLatin1String("Unable to find table ") + d->tableName, QString(),
                                 QSqlError::StatementError);
    }
    donc a je crois que c'est la fonction setTable(...) recupère le nombre des records dans la table et ainsi tu a le bon nombre mais c pas pour autant que la connexion est active. (Enfin, c'est ce que je pense)

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 133
    Par défaut
    Ok bon je comprend pas tout mais bon

    Je pense que je n'arriverais pas à faire propre c'est à dire bien fermer la base dès que je m'en sert plus donc je vais laisser la connexion ouverte tous le temps.

    Dès que je me connecte un fichier .ldb se crée ("Le fichier .ldb sert à déterminer quels enregistrements sont verrouillés dans une base de données partagée, et par qui.") et j'aurais aimer fermer proprement pour qu'il n'y soit plus et qu'il n'y a pas des conflits quand si il y a plusieurs utilisateur.

    Merci quand même.

Discussions similaires

  1. [MySQL] Doit-ont ouvrir et fermer une connexion mysql à chaque debut et fin de programme
    Par tentsuken dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/02/2010, 15h54
  2. Fermer une connexion d'un client depuis le seveur
    Par Yogy dans le forum Windows Communication Foundation
    Réponses: 6
    Dernier message: 04/02/2010, 20h35
  3. RMI - fermer une connexion - connaitre le nombre de stub
    Par damien77 dans le forum Débuter avec Java
    Réponses: 0
    Dernier message: 01/02/2009, 17h29
  4. Réponses: 3
    Dernier message: 31/10/2006, 16h15
  5. Fermer une applet proprement
    Par Stef784ever dans le forum Applets
    Réponses: 4
    Dernier message: 30/01/2006, 20h13

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