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

VB.NET Discussion :

Ajout d'un élément avec control des doublons dans la BDD depuis le code vb.net


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2013
    Messages : 5
    Par défaut Ajout d'un élément avec control des doublons dans la BDD depuis le code vb.net
    Bonjour à tous,

    Je souhaite aller plus loin. J’entre les éléments des tableaux de ma base de données en utilisant une InputBox.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim NewCable As String = InputBox("Ajouter Un Type de Cable", "Nouveau", "Entrer", 4, 4)
    Dim RequeteCable As String = "Insert into Cables(Type) values ('" + NewCable + "')"
    cela marche sans probleme.
    Toutefois, je ne parviens pas à gérer les doublons. Je voudrai qu’une MsgBox s’ouvre et affiche un message de doublon sans ajouter l’élément dans la table chaque fois que ce dernier existe déjà dans la table. Lorsque l’élément n’existe pas encore, la MsgBox m’indique qu’un nouvel élément vient d’être ajouté. Qui a une idée?

    Merci

  2. #2
    Membre Expert Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Par défaut
    Voici comment je procédérai:
    - Je créer un index sur le champ Type de la table Cable. Je mets sa propriété Is Unique à Yes.
    - Puis dans mon code, je fais un truc du genre:
    Code vb.net : 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
    Dim newCable As String = InputBox("Ajouter Un Type de Cable", "Nouveau", "Entrer", 4, 4)
     
            If Len(Trim(newCable)) > 0 Then
                Dim strConn As String = "Server=DEV-PC;Database=MaBase;Trusted_Connection=True;"
     
                Using connection As New SqlConnection(strConn)
     
                    Try
                        connection.Open()
                        'MessageBox.Show("Connection ouverte")
                        Dim requete As String = "INSERT INTO Cables (Type) VALUES (@TypeCable)"
                        Dim myCommand As SqlCommand = New SqlCommand(requete, connection)
     
                        myCommand.Parameters.Add(New SqlParameter("@TypeCable", SqlDbType.VarChar))
     
                        myCommand.Parameters("@TypeCable").Value = newCable
     
                        myCommand.ExecuteNonQuery()
     
                        MessageBox.Show("Nouvelle ligne ajoutée avec succès!", "Cool", MessageBoxButtons.OK, MessageBoxIcon.Information)
     
                    Catch ex As Exception
     
                        If ex.HResult = -2146232060 Then
                            MessageBox.Show("Ce cable existe déjà dans la base de données", "Risque de doublons", MessageBoxButtons.OK, MessageBoxIcon.Error)
                        Else
                            MessageBox.Show("Erreur : " & ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
                        End If
     
                    End Try
     
                End Using
     
            Else
                MessageBox.Show("Aucun type de cable saisi", "Pas de données fournies", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
    Etant donnée la contrainte au niveau de la base de données, une exception sera levée en cas de doublon dans le champ sur lequel j'ai mis l'index. Je récupère donc cette exception correspondant au doublon et effectue le traitement qu'il faut.

  3. #3
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Je plussoie la réponse de Callo, et préciserais que tu devrais gérer la saisie pour éviter des doublons.


    Sinon tu risque d'avoir des doublons comme "paire torsadée", "paire torsadee", "PAIRE torsadee", "PAIRE TORSADEE", etc.


    Tu peux enlever les caractères et mettre en majuscule à l'insertion.

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Le mieux pour ça, ça reste de passer par une table de référence (clef étrangère) dans laquelle tu stockeras les types de cables. C'est ce qu'on appelle l'intégrité référentielle.

    Le contrôle de l'intégrité référentielle doit se faire via le SGBD et non dans l'application (ce que tu cherches visiblement à faire), car il est fait pour ça et ça t'évite de réinventer la roue (ce qu'_Ez3kiel propose un peu de faire ).

    Il faudrait donc rajouter une colonne "Id" dans la table "Cables" en tant que clef primaire. Tu pourras ainsi utiliser cette colonne comme clef étrangère dans tes autres tables.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Au début j'avais pensé à une table référentielle, puis je me suis dit "Pourquoi il ferait une appli pour remplir une table de référence ligne par ligne ... ?" Surtout s'il rentre directement le texte sans traitement

    Et pour l'index je n'ai pas proposé car pour moi cela va de soit et la requête Insert into Cables(Type) values ('" + NewCable + "') peut induire qu'il y a un ID autoInc géré par le Sgbd ..

    Donc je me suis dit qu'il devait y avoir une autre finalité, et j'ai pas cherché plus loin, j'ai juste répondu à la question.

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par _Ez3kiel Voir le message
    Au début j'avais pensé à une table référentielle, puis je me suis dit "Pourquoi il ferait une appli pour remplir une table de référence ligne par ligne ... ?" Surtout s'il rentre directement le texte sans traitement
    Il vaut mieux toujours faire un petit contrôle, ça coûte quelques lignes de code et ça permet de garder un truc clean ^^

    Citation Envoyé par _Ez3kiel Voir le message
    Et pour l'index je n'ai pas proposé car pour moi cela va de soit et la requête Insert into Cables(Type) values ('" + NewCable + "') peut induire qu'il y a un ID autoInc géré par le Sgbd ..
    On est d'accord, en principe ça va de soit, mais bon on voit tellement de choses aberrante sur les modélisations de bases de données qu'il vaut mieux se méfier

    Citation Envoyé par _Ez3kiel Voir le message
    Donc je me suis dit qu'il devait y avoir une autre finalité, et j'ai pas cherché plus loin, j'ai juste répondu à la question.
    Pas de soucis En fait quand je vois des membres qui reçoivent des réponses qui me font penser à une autre solution, j'essaie de voir si on peut conseiller de revenir dans les clous. Mais là effectivement on ne sait pas encore ce qu'il en est.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

Discussions similaires

  1. [AC-2007] Fusion d’enregistrement avec suppression des doublons dans champs multivaleur
    Par Daniel-Gérald dans le forum VBA Access
    Réponses: 1
    Dernier message: 15/09/2011, 04h20
  2. [MySQL] Controler des doublons
    Par Telecaster dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/10/2009, 09h57
  3. Formulaire en plusieurs parties ? (avec controle des erreurs)
    Par fabseven dans le forum Ruby on Rails
    Réponses: 0
    Dernier message: 04/04/2008, 16h23
  4. problème avec la suppression des doublons dans arraylsit
    Par ulysse031 dans le forum Langage
    Réponses: 13
    Dernier message: 04/03/2007, 12h52
  5. Prbleme de liaison avec des doublons dans le fichier lié.
    Par krak70 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/10/2005, 11h03

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