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 :

Récuperer une clé primaire d'un enregistrement dans une base de donné


Sujet :

VB.NET

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 60
    Points : 41
    Points
    41
    Par défaut Récuperer une clé primaire d'un enregistrement dans une base de donné
    Salut tout le monde

    Je vous écris car je recontre quelques petits problème ! En faite dans un formulaire principal (ajout d'une personne : athléte), je charge une combobox (les libellés de mes catégories) à l'aide d'une requête. Mais ensuite pour ajouter cette personne, il faut que je récupère l'identifiant de la catégorie, donc j'execute le même type de requête, mais cela ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      Dim BDD As GestionBDD
                Dim IdVille, IdCategorie As String
                BDD = New GestionBDD()
     
                BDD.SelectBDD("select VIL_ID from ville where VIL_NOM = '" & cbx_ville.Text & "'")
                IdVille = BDD.MonReader.GetString(0)
     
                BDD.SelectBDD("select CAT_ID from categorie where CAT_LIBELLE = ('" & cbx_categorie.Text & "')")
                IdCategorie = BDD.MonReader.GetString(0)
     
    ......
    La variable cbx_ville contient bien une valeur puique je l'ai testé avec une msgbox, de plus c'est dans cette variable que j'ai chargé précedemment mes villes à partir de ma base de donnée, donc aucune incohérence me parait possible.

    Merci pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 374
    Points : 451
    Points
    451
    Par défaut
    Bonjour,
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BDD.SelectBDD("select VIL_ID from ville where VIL_NOM = '" & cbx_ville.Text.trim & "'")
    Bon boulot
    Jean

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 60
    Points : 41
    Points
    41
    Par défaut Explication plus clair : Récupération de clé primaire
    Donc j'ai essayé avec la proposition ci dessus, ça ne marche pas avec le "trim". Mais merci quand même.

    Je vais réexpliquer mon problème. Donc j'ai un formaulaire où il se situe des combobox alimenter par une base de données ( des tables différentes). Jusque là ça fonctionne du tonnere.

    Mais c'est ensuite lorsque je veux récuperer les clés primaires de mes valeurs situées dans les combobox où cela se corse ! Impossible ... J'en ai absolument besoin pour ajouter mon enregistrement de départ !

    Donc je vais vous mettre tout mon code détailler que j'utilise pour que vous puissiez m'éclairer.

    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
     
         ' Code situé dans ma classe GestionBDD que j'utilise pour la connection
        Public Sub New()
            Me.New("dsn=BASE_DONNEE_ATHLE")
        End Sub
     
        'Permet d'établir une connection avec n'importe quelle BDD
        Public Sub New(ByVal MonOdbc As String)
            Try
                If (IsNothing(Me.oConnection)) Then
                    ' Si la connection n'existe pas, on l'instancie
                    Me.oConnection = New OdbcConnection(MonOdbc)
                    ' On ouvre la connection
                    Me.oConnection.Open()
                    Me.oDataset = New DataSet("GestionBDD")
                    Me.oDataAdapter = New OdbcDataAdapter
                End If
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
     
        ' Permet d'exécuter les réquêtes de sélection
        Public Sub SelectBDD(ByVal Requete As String)
            Try
                'Instanciation de la commande sql
                Me.oCommand = New OdbcCommand(Requete, Me.oConnection)
                'Creation d'un Oreader qui permet de récupérer le résultat
                Me.oReader = Me.oCommand.ExecuteReader
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim BDD As GestionBDD
    Dim IdVille, IdCategorie As String
     
    BDD = New GestionBDD()    
     
    BDD.SelectBDD("select VIL_ID from ville where VIL_NOM = '" & cbx_ville.Text & "'")
     
    IdVille = BDD.MonReader.GetString(0)
    Donc ma question peut se résumer : Comment puis je récupérer une clé primaire dans un table pour l'insérer ensuite dans un enregistrement dans une autre table.

    J'atends beaucoup de vous chèr développeurs !!

    Merci

    Vincent

  4. #4
    Futur Membre du Club
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Mauvais Type !
    La clé primaite ne peut pas être du Type texte, donc pas un string.
    La clé primaire est obligatoirement du type integer dans la base de donnée.
    Il faut donc lire la valeur avec GetInt32 et non GetString, et il faut l'attribuer à une variable integer et non pas string.

    Je pense que ça devrait marcher maintenant.

    P.S. : évidemment avec GetInt32.ToString tu peux directement convertir en type string.

    Alain

  5. #5
    Futur Membre du Club
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Points : 6
    Points
    6
    Par défaut J'ai écrit une bêtise
    Je suis désolé Vincent, mais dans ma réponse précédente j'ai écrit une grosse connerie (après un café ça va mieux !).
    Une clé primaire peut évidemment être du type texte dans une base de données, mais on procède rarement de cette façon. Si ton champ ID est effectivement de type numérique comme je le suppose, ma réponse est bonne, sinon le problème doit se situer dans le 'SelectBDD' de ta classe.

    Alain

  6. #6
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Pourquoi tu ne récupère pas le cles primaires en meme temps que tu récupères les valeurs pour tes combobox ?
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 374
    Points : 451
    Points
    451
    Par défaut
    Bonjour,
    Si j'ai bien compris tu as le libellé des catégories dans un combobox et tu voudrais récupérer la clé de la catégorie sélectionée??
    Si c'est bien le cas.
    La solution la plus simple est de lier le combo à une table avec un bindingsource,
    chaque déplacement dans le combo déplace la position du bindingsource, la propriété .current renvoie l'enregistrement de la table d'ou tu peux extraire la cle de l'enregistrement.
    Si le combo n'est pas lié à une table.
    Il faut chercher le libellé dans la table avec un select ou un find(dataview)
    J'espère c'est ce que tu cherches.
    Bon boulot
    Jean

  8. #8
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 60
    Points : 41
    Points
    41
    Par défaut Réponse au problème mais encore quelques petits ennuis ..
    Merci à vous tous,
    je me suis inspiré du getin(32). De plus une camarade de cours avait fais la même erreur que moi. Elle m'a dit que j'ai oublier de lire mon reader, donc ça ne pouvait pas marcher !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    BDD = New GestionBDD()
     
    ' Permt de récupérer l'identifiant de ma ville
    BDD.SelectBDD("select VIL_ID from ville where VIL_NOM = '" & cbx_ville.Text & "'")
    BDD.MonReader.Read()
    IdVille = BDD.MonReader.GetInt32(0)
    BDD.MonReader.Close()
     
    ' Permt de récupérer l'identifiant de ma catégorie
    BDD.SelectBDD("select CAT_ID from categorie where CAT_LIBELLE = ('[" & cbx_categorie.Text & "]')")
    BDD.MonReader.Read()
    IdCategorie = BDD.MonReader.GetInt32(0)
    BDD.MonReader.Close()
    Mais par contre parfois ça plante ! j'ai le message suivant :
    Error[4200][Microsoft][Pilote ODBC Microsoft access] Erreur de syntaxe (opérateur absent) dans l'expression 'CAT_LIBELLE=('[écolde d'athlétisme]').
    Donc au départ je pensais que ça plantait parce que j'avais un mot composé (école d'athlétisme), donc j'ai mis des crochets, mais ça n'a rien changeait!

    Vous avez peut-être une idéee ?

    Merci

  9. #9
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    je te le redis, pourquoi vouloir faire une requète pour récupérer l'identifiant ?
    Lorsque tu fais ta requète pour obtenir la liste des catégories, tu récupère en même temps leurs identifiants. Comme ça tu les as directement en local.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  10. #10
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut D'accord avec badger
    Bonjour.

    Je suis entièrement d'accord avec Badger sur le fait qu'il est conceptuellement beaucoup plus propre de récupérer l'ID et le Nom dans la requête d'alimentation de la combo.

    Pourquoi donc ? Tout simplement parce que de toute façon, il n'est pas exclus que tu ais à terme des doublons sur le nom de la ville (2 villes de même nom c'est courant !). De maniére générale, une propriété non discréminante ne devrait jamais servir à recherche une clé primaire. En chargeant ton ID, dans le cas ou tu aurais des doublons sur le nom de ville, tu pourrais afficher nom de ville + département sans remettre en cause le fonctionnement.

    Un exemple de chargement de combo avec un dataset :
    monCombo.ValueMember = ds.Tables(0).Columns(0).ColumnName --> l'ID
    monCombo.DisplayMember = ds.Tables(0).Columns(1).ColumnName --> le nom de la ville
    monCombo.DataSource = ds.Tables(0)

    ds est le dataset chargé avec le résultat d'une requête de type :
    select ID, nom from matable where ...

    cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  11. #11
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 60
    Points : 41
    Points
    41
    Par défaut
    Je vous remercie beaucoup de cette aide ! je vais appliqué cela ...


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

Discussions similaires

  1. [Débutant] afficher une image dont le path est enregistré dans la base se données
    Par sarrabnh dans le forum ASP.NET
    Réponses: 1
    Dernier message: 30/05/2014, 17h42
  2. Réponses: 0
    Dernier message: 04/06/2013, 10h31
  3. Réponses: 1
    Dernier message: 08/10/2012, 17h37
  4. Réponses: 5
    Dernier message: 28/02/2011, 21h42
  5. Réponses: 4
    Dernier message: 22/03/2007, 18h28

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