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 :

Petit problème d'apostrophe dans une base de donnée [QtSql]


Sujet :

PyQt Python

  1. #1
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut Petit problème d'apostrophe dans une base de donnée
    Bonjour, ou plutôt Bonsoir.

    Je rencontre un petit souci qui commence à me faire tourner la tête totalement.

    Dans mon code un appui sur un bouton rend un combobox éditable. Je récupère dans une liste la valeur de ce widget et de plusieurs autres. Après un deuxième appui sur le bouton cette liste est passée dans une fonction qui stocke chacune des valeurs de la liste dans un base de donnés SQlite.

    Au rafraichissement de la fenêtre, je relis cette base de données et je crée une liste des valeurs de la colonne n°2 (la première étant l'id). Cette liste sert à mettre à jour le combobox ci-dessus. La sélection d'un item permettra de lire la ligne de la bdd correspondant à cet item.

    Jusque là aucun souci, enfin presque...

    Dans le cadre de mon projet l'utilisateur peut être mené à écrire une chaine de caractères dans le combobox comprenant un apostrophe... et là ça se complique.
    Jusqu'à la mise à jour du combobox je ne rencontre aucun problème. Seulement lorsque je change la valeur du combobox, si cette valeur comporte un apostrophe, l'interrogation de la bdd plante.

    Je ne trouve aucun moyen de résoudre le problème, alors si quelqu'un a une idée je suis preneur à 3000%.

    Voici quelques morceaux de mon code :

    Code Permettant d'enregistrer dans la bdd : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    def on_BtSalon_clicked(self):                 
            if self.BtSalon.text() == "Créer un nouveau salon":
                self.cbSalon.setEditable(True)
                self.BtSalon.setText("Enregistrer les modifications")
            elif self.BtSalon.text() == "Enregistrer les modifications":
                name_salon = self.cbSalon.currentText() + " " + self.EditVilleSalon.text()+ " (" + str(self.dtDebut.date().year()) \
                + " - " + str(self.dtFin.date().year()) + ")" 
                liste = [name_salon, self.dtDebut.date(), self.dtFin.date(), self.EditVilleSalon.text(), self.EditBudget.text(), 
                            self.EditDescriptif.text(), self.EditIntervenant.text(), self.EditInteret.text()]
                self.bdd.WriteTableSalon(liste)

    Code Enregistrant dans la bdd : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def WriteTableSalon(self, liste):
            model = QtSql.QSqlTableModel()
            model.setTable('salon')
            model.select()
            model.insertRows(0, 1)
            a = 0
            while a <= 7:
                model.setData(model.index(0, a+1), liste[a])
                a+=1
            model.submitAll()

    Code Permettant la lecture et la mise à jour du combobox : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def ListeSalon(self):
            liste = [""]
            model = QtSql.QSqlTableModel()
            model.setTable("salon")
            model.select()
            nb_row = model.rowCount()
            a = 0
            while a < nb_row:
                record = model.record(a)
                salon = record.value("salon")
                liste.append(salon)
                a +=1
                liste.sort()
            return liste

    Code Mettant le combobox à jour : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def actuComboSalon(self,  bdd):
            self.cbSalon.clear()
            self.cbSalon.addItems(bdd.ListeSalon())

    Code exécuté au changement de la valeur du CB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def on_cbSalon_activated(self, p0):
            name_salon = self.cbSalon.currentText().encode('utf-8')
            liste = self.bdd.OpenSalon(name_salon)

    Code Accédant à la ligne de la BDD correspond à l'item du CB : 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
    def OpenSalon(self, salon):
            liste_ligne = []
            model = QtSql.QSqlTableModel()
            model.setTable("salon")
            model.setFilter("""salon = '%s' """ %(salon))
            model.select()
            nb_row = model.rowCount()
            a = 0
            while a < nb_row:
                record = model.record(a)
                for i in lib_salon:
                    salon = record.value(i)
                    liste_ligne.append(salon)    
                a += 1
     
            return liste_ligne

    Ne vous focalisé surtout pas sur des aspects comme l'indentation, ... Le code fonctionne bien jusqu'à la mise à jour du combobox et fonctionne parfaitement bien si l'item de celui-ci ne comporte pas d'apostrophe.

    D'avance merci pour votre aide..
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  2. #2
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Bon, la nuit porte vraiment conseil...

    Une erreur toute bête et une toute petite modif de ce code, et le problème est résolu ^^.
    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
    def OpenSalon(self, salon):
            liste_ligne = []
            model = QtSql.QSqlTableModel()
            model.setTable("salon")
            ## Ancienne version : model.setFilter("""salon = '%s' """ %(salon))
            model.setFilter("""salon = "%s" """ %(salon))
            model.select()
            nb_row = model.rowCount()
            a = 0
            while a < nb_row:
                record = model.record(a)
                for i in lib_salon:
                    salon = record.value(i)
                    liste_ligne.append(salon)    
                a += 1
     
            return liste_ligne
    Cela dit, lorsqu'il y a des guillemets dans l'item du CB je risque de retomber sur le même souci, mais ceci est plus rare, et je peux sûrement trouver une solution pour les remplacer le cas échéant.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

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

Discussions similaires

  1. Problème d'enregistrement dans une base de données
    Par mcfly37 dans le forum Hibernate
    Réponses: 1
    Dernier message: 08/07/2010, 17h41
  2. Problème d'insertion dans une base de donnèes
    Par atout dans le forum Administration
    Réponses: 14
    Dernier message: 27/12/2006, 07h07
  3. problème d'insertion dans une base de données
    Par belmansour tidjani dans le forum JDBC
    Réponses: 7
    Dernier message: 18/01/2006, 22h13
  4. problème de recherche dans une base de donnée mysql
    Par Xini28 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 24/10/2005, 18h00
  5. problème de recherche dans une base de données
    Par bouzid_mehdi dans le forum Bases de données
    Réponses: 2
    Dernier message: 19/07/2005, 06h47

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