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

PyQt Python Discussion :

QSqlRelationalTableModel mise à jour


Sujet :

PyQt Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2014
    Messages : 4
    Points : 5
    Points
    5
    Par défaut QSqlRelationalTableModel mise à jour
    Bonjour,

    Je cherche à mettre en place 2 relationalTablesmodels (et Views) basées sur la même base de donnée mais je n'arrive pas à programmer la mise à jour en temps réel.

    j'ai testé les 2options suivantes , mais dans les deux cas, les tablesViews n'e se mettent pas à jour:

    model.setEditStrategy(QSqlTableModel.OnFieldChange)
    model.setEditStrategy(QSqlTableModel.OnRowChange)

    Merci pour votre aide.

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    setEditStrategy concerne le mode de mise à jour de la base à partir des modifications saisies dans le QTableView.

    Pour le contraire (base => affichage), essaie la méthode "select()" du modèle, utilisée pour "peupler" le modèle à partir de la base.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2014
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour tyrtamos,

    Je ne cherche pas à alimenter la vue depuis la base, je cherche à mettre à jour plusieurs vues relationnelles de la même base directement depuis la GUI.

    La méthode de mise à jour instantanée ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     model.setEditStrategy(QSqlTableModel.OnFieldChange)
    voici une image du problème:

    Nom : img.png
Affichages : 359
Taille : 12,9 Ko


    Voici le code python:

    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    from PyQt5.QtCore import Qt
    from PyQt5.QtWidgets import QApplication, QTableView,QMessageBox
    from PyQt5.QtSql import QSqlTableModel,QSqlDatabase, QSqlQuery,QSqlRelationalTableModel,QSqlRelation,QSqlRelationalDelegate
     
     
    def createConnection():
        db = QSqlDatabase.addDatabase('QSQLITE')
        db.setDatabaseName(':memory:')
        db.open()
     
        return db
     
     
     
    # create tables -----------------------------------
     
    def createRelationalTables(QSqlDatabase):
        query = QSqlQuery(QSqlDatabase)
     
        query.exec_("create table employee(id int, name varchar(20), city int, country int)")
        query.exec_("insert into employee values(1, 'Espen', 5000, 47)")
        query.exec_("insert into employee values(2, 'Harald', 80000, 49)")
        query.exec_("insert into employee values(3, 'Sam', 100, 41)")
     
        query.exec_("create table city(id int, name varchar(20))")
        query.exec_("insert into city values(100, 'San Jose')")
        query.exec_("insert into city values(5000, 'Oslo')")
        query.exec_("insert into city values(80000, 'Munich')")
     
        query.exec_("create table country(id int, name varchar(20))")
        query.exec_("insert into country values(41, 'USA')")
        query.exec_("insert into country values(47, 'Norway')")
        query.exec_("insert into country values(49, 'Germany')")
     
     
     
     
     
     
    def initializeRelModel(model):
        model.setTable('employee')
     
        model.setEditStrategy(QSqlTableModel.OnFieldChange)
        model.setRelation(2, QSqlRelation('city', 'id', 'name'))
        model.setRelation(3, QSqlRelation('country', 'id', 'name'))
     
        model.setHeaderData(0, Qt.Horizontal, "ID")
        model.setHeaderData(1, Qt.Horizontal, "Name")
        model.setHeaderData(2, Qt.Horizontal, "City")
        model.setHeaderData(3, Qt.Horizontal, "Country")
     
        model.select()
     
     
    def initializeModeCity(model):
        model.setTable('city')
        model.setEditStrategy(QSqlTableModel.OnFieldChange)
        model.setHeaderData(0, Qt.Horizontal, "ID")
        model.setHeaderData(1, Qt.Horizontal, "Name")
        model.select()
     
     
     
    def createRelView(title, model):
        view = QTableView()
        view.setModel(model)
        view.setWindowTitle(title)
        view.setItemDelegate(QSqlRelationalDelegate(view))
        return view
     
    def createView(title, model):
        view = QTableView()
        view.setModel(model)
        view.setWindowTitle(title)
     
        return view
     
     
     
     
    if __name__ == '__main__':
     
        import sys
     
        app = QApplication(sys.argv)
        db=createConnection()
     
        createRelationalTables(db)
     
     
        modelRel=QSqlRelationalTableModel()
     
        model = QSqlTableModel()
     
        initializeRelModel(modelRel)
        initializeModeCity(model)
     
     
        view1 = createRelView("Table Model (View employee)", modelRel)
        view2 = createView("Table Model (View city)", model)
     
        view1.show()
        view2.move(view1.x() + view1.width() + 20, view1.y())
        view2.show()
     
        sys.exit(app.exec_())

Discussions similaires

  1. QSqlRelationalTableModel, QRelation et mises à jour
    Par zhebulonn dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/05/2013, 13h59
  2. [mise à jour]Comment procéder sans tout péter...
    Par FFF dans le forum Installation
    Réponses: 3
    Dernier message: 10/09/2003, 08h11
  3. Mise à jour de la version de MySQL
    Par jobstar dans le forum Administration
    Réponses: 8
    Dernier message: 18/08/2003, 10h45
  4. mise à jour de champs time (interbase)
    Par pram dans le forum XMLRAD
    Réponses: 6
    Dernier message: 04/03/2003, 10h25
  5. Réponses: 2
    Dernier message: 12/02/2003, 15h26

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