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 :

Liens entre plusieurs tables


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 21
    Par défaut Liens entre plusieurs tables
    bonjour à tous,
    Alors voila mon problème :

    J'ai 4 tables dans ma base de donnée sous sqlserver qui sont : Site, Building, Location et System

    Dans la table Site il y a les champs id_Site et Site_Name.
    Dans la table Building il y a id_Building, ide_Site et Building_Name.
    Dans la table location il y a id_Location, ide_Site et ide_Building
    Dans la table System il y a id_System et ide_Location.

    Je ne vous fait pas de dessin pour les relations entre les tables vous les avez compris je pense ^^!

    Donc en fait j'ai trois combobox : comboboxSite, comboboxBatiment et comboboxSysteme.

    Donc quand mon formulaire ce charge je met les donnée de Site_Name dans mon premier combobox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     Try
     
                objConnexion.Open()
                objCommand.CommandText = "SELECT Site_Name, id_Site FROM ITIL_Site ORDER BY Site_Name"
                objReader = objCommand.ExecuteReader
                Do While objReader.Read
                    comboboxSite.Items.Add(objReader.GetString(0))
                Loop
                objReader.Close()
                objConnexion.Close()
            Catch ex As Exception
                MessageBox.Show("L'erreur suivante a été rencontrée :" & ex.Message)
            End Try
    J'arrive à mettre les donnée dans le combobox batiment en fonction du site selectionné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Try
                  objConnexion.Open()
                  objCommand.CommandText = "SELECT Building_Name FROM ITIL_Building B, ITIL_Site S WHERE S.id_Site = B.ide_Site AND S.Site_Name ='" & comboboxSite.SelectedItem & "'"
                objReader = objCommand.ExecuteReader
                Do While objReader.Read
                    comboboxBatiment.Items.Add(objReader.GetString(0))
                Loop
                objReader.Close()
                objConnexion.Close()
            Catch ex As Exception
                MessageBox.Show("L'erreur suivante a été rencontrée :" & ex.Message)
            End Try
    Mais pour je n'arrive pas à récupérer les données de System_Name en fonction du Site et du Batiment sélectionnés en passant par id_Location...


    J'ai essayer de récupérer id_Site et id_Building des sites et batiment sélectionné mais cela ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Try
                objConnexion.Open()
                objCommand.CommandText = "SELECT id_Site FROM ITIL_Site WHERE Site_Name = '" & comboboxSite.SelectedItem & "'"
                objReader = objCommand.ExecuteReader
                Dim intID_Site As Integer = objReader.GetInt16(0)
                objReader.Close()
                objConnexion.Close()
            Catch ex As Exception
                MessageBox.Show("L'erreur suivante a été rencontrée :" & ex.Message)
            End Try
    Si vous pouviez m'aider ça serait vraiment sympas car je suis vraiment en galère là...

  2. #2
    Membre émérite

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Par défaut
    Re bonjour

    d'abord les tables

    Dans la table Site il y a les champs id_Site et Site_Name.
    Dans la table Building il y a id_Building, ide_Site et Building_Name.
    Dans la table location il y a id_Location, ide_Site et ide_Building
    Dans la table System il y a id_System et ide_Location.
    à quoi sert ta table location et la table system ?
    il manque des champs

  3. #3
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Salut,
    Citation Envoyé par simraill Voir le message
    J'ai essayer de récupérer id_Site et id_Building des sites et batiment sélectionné mais cela ne marche pas
    C'est à dire? tu n'as aucun résultat? tu as une erreur? Si oui laquelle?

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 88
    Par défaut
    Bonjour,
    Dans la table Site il y a les champs id_Site et Site_Name.
    Dans la table Building il y a id_Building, ide_Site et Building_Name.
    Dans la table location il y a id_Location, ide_Site et ide_Building
    Dans la table System il y a id_System et ide_Location.
    Pourquoi ide_Site dans la table Location ? ide_Building suffira.
    objReader = objCommand.ExecuteReader
    Dim intID_Site As Integer = objReader.GetInt16(0)
    objReader.Close()
    Il te manque un While je crois, essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim intID_Site As Integer
    Do While objReader.Read
          intID_Site = objReader.GetInt16(0)
    Loop

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 21
    Par défaut
    Désolé de répondre que maintenant, week end de 4 jours ne m'a pas laisser le temps de bosser !!

    @shayw : Je n'ai pas donner toutes les tables (il y en a une quinzaine), juste celle utile pour le problème rencontré.
    En fait c'est pour faire un outil de gestion d'obsolescence des équipements d'automatisme. Donc la table système a aussi des champs system_name (ligne de production numéro 1 par exemple) et d'autres. Elle sera relier aussi à une table équipement etc ...

    @-N4w4k- : Oui j'ai une erreur :
    L'erreur suivante a été rencontrée : Invalid attempt to read when no data is present.
    Et quand j'essaye avec la boucle while que propose moncef2010 j'ai :
    L'erreur suivante a été rencontrée :Specified cast is not valid
    J'utilise le mauvais Get du Reader?!

    @moncef2010 : J'ai le un ide_Site et ide_Building car un système peut être commun à tous un site, donc sans avoir de bâtiment.
    Et pour le while j’obtiens l'erreur que je cite plus haut.

    Merci à tous pour vos réponses.

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Avec un reader, si mes souvenirs sont bon il faut vérifier que le read ne renvoie pas false (ce qui signifie qu'il n'y a pas de résultat ou que tu es arrivé à la fin de tes résultats). On l'utilise principalement en tant que condition de sortie de la boucle pour le traitement de la requete.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    While monreader.read()
    traiter l'enregistrement
    End While
    Si tu attends uniquement un résultat (requête sur un identifiant par exemple), tu peux utiliser la propriété HasRows afin de vérifier qu'il y a bien au moins une ligne..

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 88
    Par défaut
    objReader.GetInt16(0)
    EssayezVérifiez bien les types des champs en base de données : entier, chaine...

Discussions similaires

  1. Visualiser les liens entre plusieurs tables .dbf
    Par emmy99 dans le forum Autres SGBD
    Réponses: 6
    Dernier message: 21/02/2008, 19h47
  2. Faire des liens entre plusieurs table
    Par gibea00 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 16/01/2007, 18h01
  3. [Débutant] requete entre plusieurs tables
    Par xufux dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/08/2005, 14h00
  4. [VB.NET] ComboBox lien entre deux tables
    Par VDB1 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/07/2004, 12h15
  5. lien entre les table de paradox
    Par salim_intic1 dans le forum Bases de données
    Réponses: 2
    Dernier message: 13/05/2004, 16h00

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