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 :

Eviter doublons dans base de données [QtSql]


Sujet :

PyQt Python

  1. #1
    Candidat au Club
    Homme Profil pro
    autre
    Inscrit en
    Février 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Février 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Eviter doublons dans base de données
    Bonjour,

    je suis en train d'essayer de développer une petite application via PyQt4, liée à une base de donnée Sqlite3. En gros, on pourra simplement y enregistrer des "profils clients"(nom, prenom, age etc.) via des QlineEdit pour ensuite parcourir ces "profils" pour les regarder ou les modifier.

    Je fais cette appli pour apprendre, je suis débutant de tout, je n'ai jamais rien développer, je ne comprends pas tout, j'ai pas mal lu mais c'est tout. Je suis donc loin d'avoir toutes les bases, et les expressions adéquates, pardonnez-moi d'avance.

    Cependant pour en revenir à ma petite appli, elle est composée d'un main.py qui regroupe toutes mes fenêtres créées avec Qt Designer par classes.

    Malgré mes lacunes et surtout grâce au net, j'ai tout de même réussi, après des heures de recherche, à créer quelque chose de fonctionnel(ex.: j'accède au menu via mot de passe, du menu j'ouvre une fenêtre pour enregistrer un nouveau profil, une autre pour parcourir les profils existant et les modifier, mes combobox et lineedit fonctionnent bien, ils se mettent à jour en temps et en heure, etc.).


    Il ne me reste plus qu'une chose à faire, et là je ne trouve même pas un indice pour savoir vers où me diriger :

    dans ma classe Ui_Creerclient, j'ai des QlineEdit avec un bouton. Lorsque les QlineEdit sont remplis et que je clique sur le bouton, les données sont enregistrées dans la base de donnée. Ça c'est bon.

    Seulement, j'aimerais qu'à ce moment là, si le nom inscrit dans le QlineEdit est déjà présent dans la colonne "Nom" de ma base de donnée, j'ai un QMessageBox qui s'affiche "client déjà existant".

    Cela éviterai les doublons, et avertirai l'utilisateur.


    Voici la classe en question, désolé si le code n'est pas lisible, ni argumenté, je n'ai pas le vocabulaire pour bien le faire, vous pouvez sourire ou au contraire vous prendre la tête à deux mains, au choix lol...

    Merci d'avance pour votre aide.

    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
     
    class Ui_CreerClient(QtGui.QWidget, Ui_CreerClient):
        def __init__(self, parent=None):
            QtGui.QWidget.__init__(self, parent)
            self.setupUi(self)
     
    #Model initialisé depuis la classe Model()
            self.model = Model()
     
            self.cmdEnregister1.clicked.connect(self.inputData)       
     
        def inputData(self):
            N = self.lineNom
            P = self.linePrenom
            reply = QtGui.QMessageBox.question(self, 
            "Enregistrement...",
            "Enregistrer ce nouveau client ?",
            QtGui.QMessageBox.Yes, 
            QtGui.QMessageBox.No)       
     
            if reply == QtGui.QMessageBox.Yes:
     
    #La seule méthode que j'ai trouvé pour éviter les champs vides :
                if (N.text() == "") or (N.text() == " ") or (
                    N.text() == "  ") or (N.text() == "   ") or (
                    N.text() == "    ") or (N.text() == "     ") or (
                    N.text() == "      ") or (N.text() == "       ") or (
                    N.text() == "        "):
                    QtGui.QMessageBox.warning(
                        self, "Erreur...", """Case "Nom" vide !""")
                    return False
     
                if (P.text() == "") or (P.text() == " ") or (
                    P.text() == "  ") or (P.text() == "   ") or (
                    P.text() == "    ") or (P.text() == "     ") or (
                    P.text() == "      ") or (P.text() == "       ") or (
                    P.text() == "        "):
                    QtGui.QMessageBox.warning(
                        self, "Erreur...", """Case "Prenom" vide !""")
                    return False
     
    #Insertion dans la base de donnée :
                else:
                    liste = [self.lineNom.text(), self.linePrenom.text()] #...Etc.
                    self.model.insertRows(0, 1)
                    a = 0
                    while a <= 1:
                        self.model.setData(self.model.index(0, a+1), liste[a])
                        a+=1
                    self.model.submitAll()
                    QtGui.QMessageBox.information(
                        self, "Succes...", "Client enregistre !")
     
    #Mise à jour des champs du formulaire:
                    self.lineNom.clear()
                    self.linePrenom.clear()
                    self.labelNom_Prenom.clear()
                    self.linePseudo.clear()
                    self.lineMail.clear()

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Tu te compliques la vie là, les strings ont une méthode strip() pour supprimer les espaces précédant et suivant un texte.

    Et il me paraît plus rationnel de faire la vérification avant de proposer l'enregistrement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        def inputData(self):
            N = self.lineNom().strip()
            P = self.linePrenom.strip()
            if not N or not P:
                # on ignore
                return
            reply = QtGui.QMessageBox.question(self, 
                                                "Enregistrement...",
                                                "Enregistrer ce nouveau client ?",
                                                QtGui.QMessageBox.Yes, 
                                                QtGui.QMessageBox.No)
    Pour éviter les doublons, lis le nom dans la base de données, si tu as une réponse positive c'est que le nom existe déjà.

  3. #3
    Candidat au Club
    Homme Profil pro
    autre
    Inscrit en
    Février 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Février 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Salut VinsS, déjà merci pour ton aide.

    Je savais bien que je me compliquais la vie, et qu'il existait une méthode pour enlever les espaces d'un string, mais je n'ai pas réussi à trouver.
    Je n'ai pas réussi à appliquer ta méthode .split() exactement mais j'ai fait comme ceci et c'est, il me semble, déjà un peu plus propre :
    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
     
            N = self.lineNom.text()
            P = self.linePrenom.text()
            if (N.isspace()) or (N == ""):
                QtGui.QMessageBox.warning(
                self, "Erreur...", """Case "Nom" vide !""")
                return False
            if (P.isspace()) or (P == ""):
                QtGui.QMessageBox.warning(
                self, "Erreur...", """Case "Prenom" vide !""")
                return False
            else:
                reply = QtGui.QMessageBox.question(self, 
                "Enregistrement...",
                "Enregistrer ce nouveau client ?",
                QtGui.QMessageBox.Yes, 
                QtGui.QMessageBox.No)
    Maintenant pour lire une base de donnée, pareil je ne sais pas comment m'y prendre,
    mais je pense qu'il faille que je "transforme" la colonne de ma bdd en liste et je compare la liste obtenue à mon string, c'est bien ça?

    Dois-je bien me baser sur le tuto suivant ? :

    http://pyqt.developpez.com/faq/?page=sql#sql-lire

    Merci d'avance !

  4. #4
    Candidat au Club
    Homme Profil pro
    autre
    Inscrit en
    Février 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Février 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    C'est bon j'ai réussi, grâce à toi VinsS, tu m'as indiqué le bon chemin à suivre, exactement ce que j'attendais. Merci beaucoup !

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

Discussions similaires

  1. [AC-2003] erreur doublon dans base de données sans trouver les données
    Par warrios dans le forum Access
    Réponses: 3
    Dernier message: 04/11/2014, 18h19
  2. Eviter les doublons de base de données
    Par Oneor dans le forum Access
    Réponses: 15
    Dernier message: 17/06/2014, 16h55
  3. [VB.NET]Champ image dans base de donnée access
    Par dankes dans le forum Windows Forms
    Réponses: 10
    Dernier message: 06/10/2005, 15h31
  4. [VB.NET] filtre dans base de donnée
    Par speedtug dans le forum Windows Forms
    Réponses: 7
    Dernier message: 21/09/2005, 17h12
  5. Réponses: 8
    Dernier message: 11/05/2005, 14h48

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