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 :

creation d'un record pour un QSqlTableModel


Sujet :

PyQt Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 49
    Par défaut creation d'un record pour un QSqlTableModel
    bonjour,
    J'ai un petit souci avec l'utilisation d'un QSqlRecord et l'insertion dans une qsqltablemodel:
    a partir d'un même formulaire, je crée un nouveau record ou je modifie un record existant. Quand j'appuie sur le bouton sauver, j'appelle indifféremment la fonction SaveButtonClicked ci-dessous.
    S'il s'agit d'un nouveau record, j'affecte à la variable globale Op un record de la table Operations et le renseigne avec les champs du formulaire. S'il s'agit de la modification d'un record existant, je passe directement au renseignement.
    la modification d'un record existant fonctionne correctement, mais pas la création d'un nouveau. le renseignement ne fonctionne pas très bien, les champs restent à None. En utilisant la fonction clearValues, ça fonctionne un peu mieux sauf pour le champs "Poste" qui reste à None.
    J'ai testé différentes bricoles, notamment par rapport au type de variable, mais int ou str, ça ne fonctionne pas mieux donc je fais appel au forum parce que là, je n'ai plus d'idées!
    Si quelqu'un peut m'expliquer en détail le fonctionnement le QSqlTableModel.Record notamment à l'initialisation qu'y-a-t-il dans le record ?

    voici ma fonction en python 3 et QT4
    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
     
        def SaveButtonClicked(self, checked=False):
            #permet de sauvegarder les données entrées dans la BDD
            #autorise la MAJ des bilans
     
            if self.Op is None:
                print("affecte un enregistrement vide à Op")
                model = QSqlTableModel(self)
                model.setTable("Operations")            
                self.Op = model.record()
                self.Op.clearValues() #s'assure que le record est vide, le remplit de valeurs NULL
                print("idposte = {}".format(self.Op.value("Poste")))
                print("Date {}".format(self.Op.value("Date")))
                print("type {}".format(self.Op.value("Operation")))
                print("libelle {}".format(self.Op.value("Libelle")))
                print("cheque {}".format(self.Op.value("Cheque")))
                print("montant {}".format(self.Op.value("Montant")))
                print("realise {}".format(self.Op.value("Realise")))
                if self.Op.isEmpty() == True:
                    print("op est vide")
                else:
                    print("op n'est pas vide mais contient des valeurs null")
     
            self.IDPoste = self.FG.RequeteIDPoste("{}".format(self.ui.comboBox_Poste.currentText()))
            print("avant affectation, idposte :{}".format(self.IDPoste))
     
            self.Op.setValue("Poste", self.IDPoste)
            self.Op.setValue("Operation", self.ui.comboBox_type.currentText())
            self.Op.setValue("Date", self.ui.Edit_date.date().toString("yyyy-MM-dd"))
            self.Op.setValue("Libelle", self.ui.Edit_Libelle.text())
            self.Op.setValue("Cheque", self.ui.Edit_cheque.text())
            self.Op.setValue("Montant", self.ui.Edit_montant.text())
            if self.ui.checkBox_solde.isChecked() == True: #0 = False = unchecked, 1 = True = checked
                self.Op.setValue("Realise", 1)
            else:
                self.Op.setValue("Realise", 0)
     
            print("idposte = {}".format(self.Op.value("Poste")))
            print("Date {}".format(self.Op.value("Date")))
            print("type {}".format(self.Op.value("Operation")))
            print("libelle {}".format(self.Op.value("Libelle")))
            print("cheque {}".format(self.Op.value("Cheque")))
            print("montant {}".format(self.Op.value("Montant")))
            print("realise {}".format(self.Op.value("Realise")))
    merci d'avance pour votre aide et bon week-end

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 49
    Par défaut
    Finalement, j'ai trouvé l'erreur quand il s'agit d'ajouter un nouvel enregistrement/record mais je ne comprends pas pourquoi ça fonctionnait lors de la modification d'un enregistrement existant.
    J'appelais le champs "Poste" au lieu de "IDPoste"...

Discussions similaires

  1. Création d'un Framework pour les jeux
    Par alex6891 dans le forum UML
    Réponses: 2
    Dernier message: 04/05/2006, 14h27
  2. [MFC] Creation d'un thread pour un popup d'attente
    Par firejocker dans le forum MFC
    Réponses: 8
    Dernier message: 07/02/2006, 09h15
  3. Réponses: 4
    Dernier message: 03/01/2006, 13h44
  4. Creation d'un paquet pour prog windows
    Par OjBarbare dans le forum C
    Réponses: 8
    Dernier message: 04/11/2005, 17h06
  5. [Executable]creation d'un batch pour une application
    Par tarik75 dans le forum Général Java
    Réponses: 4
    Dernier message: 03/08/2005, 15h33

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