Bonjour,

Je me permet de vous soliciter parce que je suis en train de faire des testes pour mettre mon application en relation avec une base de données MySQL.

J'ai créé une petite boite de dialogue qui affiche et permet de modifier le contenu d'une table de ma base de données.

Voilà 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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
 
import os
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtSql import *
from PyQt4.Qt import *
 
 
NUMMANIP, NOMS, REFCAHIER, TAILLE, NBITER, PCIBLE, FENETRE, COLLIMATEUR, ENERGIE, FAISCEAU, COMPTEUR, OBJECTIF, COMMENTAIRE, MODE = range(14)
 
class ManipDlg(QDialog):
 
    def __init__(self):
        super(ManipDlg, self).__init__()
 
        self.db = None
        self.manipView = QTableView()
        self.openDatabase()
 
        buttonsBox = QDialogButtonBox()
        addButton = buttonsBox.addButton("Ajouter", QDialogButtonBox.ActionRole)
        deleteButton = buttonsBox.addButton("Supprimer", QDialogButtonBox.ActionRole)
 
 
        layout = QVBoxLayout()
        layout.addWidget(self.manipView)
        layout.addWidget(buttonsBox)
        self.setLayout(layout)
 
    def openDatabase(self):
 
        if self.db:
            self.closeDatabase()
 
        self.db = QSqlDatabase.addDatabase("QMYSQL")
        self.db.setHostName("host")
        self.db.setUserName("root")
        self.db.setPassword("xxxx")
        self.db.setDatabaseName("DiamTestAnalyse_db")
 
        if not self.db.open():
            QMessageBox.warning(None, "Reference Data",
                "Database Error: {}".format(self.db.lastError().text()))
            sys.exit(1)
 
        self.manipModel = QSqlRelationalTableModel(self)
        self.manipModel.setTable("manip")
        self.manipModel.setSort(NUMMANIP, Qt.DescendingOrder)
        self.manipModel.setHeaderData(NUMMANIP, Qt.Horizontal, QVariant("numManip"))
        self.manipModel.setHeaderData(NOMS, Qt.Horizontal, QVariant("noms"))
        self.manipModel.setHeaderData(REFCAHIER, Qt.Horizontal, QVariant("refCahier"))
        self.manipModel.setHeaderData(TAILLE, Qt.Horizontal, QVariant("taille"))
        self.manipModel.setHeaderData(NBITER, Qt.Horizontal, QVariant("nbIter"))
        self.manipModel.setHeaderData(PCIBLE, Qt.Horizontal, QVariant("Pcible"))
        self.manipModel.setHeaderData(FENETRE, Qt.Horizontal, QVariant("fenetre"))
        self.manipModel.setHeaderData(COLLIMATEUR, Qt.Horizontal, QVariant("collimateur"))
        self.manipModel.setHeaderData(ENERGIE, Qt.Horizontal, QVariant("energie"))
        self.manipModel.setHeaderData(FAISCEAU, Qt.Horizontal, QVariant("faisceau"))
        self.manipModel.setHeaderData(COMPTEUR, Qt.Horizontal, QVariant("compteur"))
        self.manipModel.setHeaderData(OBJECTIF, Qt.Horizontal, QVariant("objectif"))
        self.manipModel.setHeaderData(COMMENTAIRE, Qt.Horizontal, QVariant("commentaire"))
        self.manipModel.setHeaderData(MODE, Qt.Horizontal, QVariant("mode"))
        self.manipModel.setEditStrategy(QSqlTableModel.OnFieldChange)
        self.manipModel.select()
 
        self.manipView.setModel(self.manipModel)
        self.manipView.setSelectionMode(QTableView.SingleSelection)
        self.manipView.setSelectionBehavior(QTableView.SelectRows)
        self.manipView.resizeColumnsToContents()
 
 
    def closeDatabase(self):
 
        self.manipView.setModel(None)
        del self.manipModel
        self.db.close()
        dbConnectionName = self.db.connectionName()
        self.db = QSqlDatabase()
        self.db.removeDatabase(dbConnectionName)
 
    def closeEvent(self, event):
        self.closeDatabase()
 
 
def main():
    app = QApplication(sys.argv)    
 
    form = ManipDlg()
    form.show()
 
    sys.exit(app.exec_())
 
if __name__ == "__main__": 
    main()
J'ai un message d'erreur qui apparait à la fermeture de mon application pour me dire que j'ai encore des requètes en cours. Pourtant j'ai supprimé le Model qui accède aux données !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
Je donne ma langue au chat sur ce coup là...

Merci pour votre aide