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 :

Liaison entre 2 tables ACCESS


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut Liaison entre 2 tables ACCESS
    Bonjour,

    J'effectue actuellement un projet de gestion d'un parc informatique dans le cadre des mes études en alternance.

    J'utilise une BDD ACCESS avec une interface VB.NET 2010 express.

    Actuellement, la base de données comprend 3 table. (USERS, USERS_CONFIG, CONFIG). USERS_CONFIG est ma relation entre la table USERS et CONFIG.

    J'ai fait la connexion à la base de donnée et j'arrive à afficher les données de la table USERS. (voir ci-dessous)

    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
     
    'connexion BDD de la table USERS
     
        Public Sub demarrage_users()
            con_user = New OleDbConnection
            con_user.ConnectionString = strConn
            strSql_user = "SELECT * FROM USERS"
            dta_user = New OleDbDataAdapter(strSql_user, con_user)
            dta_user.Fill(dts_user, "USERS")
        End Sub
     
    ' une partie de l'affichage des données
     
    TXT_ALPS_USER.Text = dts_user.Tables("USERS").Rows(i).Item("ALPS").ToString
            TXT_NOM_USER.Text = dts_user.Tables("USERS").Rows(i).Item("NOM_USER").ToString
     
    If dts_user.Tables("USERS").Rows(i).Item("ID_LOTUS") Is DBNull.Value Then
                TXT_TELMOBILE.Text = ""
            Else
                TXT_IDLOTUS.Text = dts_user.Tables("USERS").Rows(i).Item("ID_LOTUS")
            End If
    Néanmoins, je n'arrive pas à afficher les postes affectés un utilisateur. J'ai essayé d'employer la même méthode avec le dataset mais il me prend un index qui a pour valeur le champ ALPS. (donc j'ai un message me disant aucun champs à l'index valeur ALPS ) (voir ci-dessous)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    'connexion BDD de la table USERS_CONFIG
        Public Sub demarage_user_config()
            con_user_config = New OleDbConnection
            con_user_config.ConnectionString = strConn
            strSql_user_config = "SELECT * FROM USERS_CONFIG"
            dta_user_config = New OleDbDataAdapter(strSql_user_config, con_user_config)
            dta_user_config.Fill(dts_user_config, "USERS_CONFIG")
     
     
    'liaison table USERS_CONFIG pour afficher les postes affectés à l'utilisateur
    TXT_ASSET.Text = dts_user_config.Tables("USERS_CONFIG").Rows(dts_user.Tables("USERS").Rows(i).Item("ALPS")).Item("ASSET")
    Merci par avance pour votre aide ou information

    Cordialement,

  2. #2
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Bonjour,

    peut tu nous donner la strucuture de ta BDD.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TXT_ASSET.Text = dts_user_config.Tables("USERS_CONFIG").Rows(_ 
    dts_user.Tables("USERS").Rows(i).Item("ALPS")).Item("ASSET")
    a moins que tu ais des valeur numérique qui correspondent aux lignes dans ALPS,
    requête ne fonctionnera pas...

    qu'est ce que tu veut faire en vrai?
    quelles valeurs veut tu comparer ou prendre en compte?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut
    Vous trouverez en pièce jointe le MCD comprenant les 2 tables et l'association.

    ALPS correspond à l'identifiant de l'utilisateur. Il est de type numérique.

    ASSET correspond à l'identifiant du poste. Il est de type Texte. Un utilisateur peut avoir 0 ou plusieurs postes

    J'aimerai à partir de l'association USERS_CONFIG afficher le ou les poste(s) affecté(s) à l'utilisateur en cours. (voir pièce jointe "fichier interface")

    En espérant avoir été clair. Et merci d'avoir pris le temps de me répondre.

    Cordialement,
    Images attachées Images attachées   

  4. #4
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    tu confond entre numéro de ligne et "ID utilisateur" *ils sont différents*
    (ce que je t'ai mis en gras au précédement est censé etre un numéro de ligne, pas un ID)

    comment est défini ton utilisateur en cours? par sont ALPS?

    comme je n'ai que des bouts de code, je peut te proposer l'idée suivante:*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i as integer = 0 to xx 
        If dts_user.Tables("USERS_CONFIG").Rows(i).Item("ALPS") = Mon_ALPS_en_cours Then
            TXT_ASSET.Text = dts_user_config.Tables("USERS_CONFIG").Rows(i).Item("ASSET")
        end If
    Next

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut
    salut hunteshiva,

    Je ne confond pas du tout le numéro de ligne (index pour ma part soit i dans mon code) et l'ID utilisateur (ALPS)

    Ton premier exemple est le même que j'ai transmis lors de l'ouverture du post.

    Pour ton dernier message, je ne comprend pas pourquoi intégrer une boucle FOR. A quoi cela servira t'il dans mon cas ?

    Je transmets le code réalisé à ce jour.

    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
    60
    61
    62
    63
    64
    65
    66
    67
     
     
    'Lorsque je clique sur le bouton utilisateur, affichage des informations de l'utilisateur.
     
        Public Sub BT_consultUsers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_consultUsers.Click
     
            BindingNavigatorMoveNextItem.Enabled = True
            BindingNavigatorMovePreviousItem.Enabled = True
            BindingNavigatorMoveFirstItem.Enabled = True
            BindingNavigatorMoveLastItem.Enabled = True
            Dim index As Integer
     
            TXT_ALPS_USER.Text = dts_user.Tables("USERS").Rows(i).Item("ALPS").ToString
            TXT_NOM_USER.Text = dts_user.Tables("USERS").Rows(i).Item("NOM_USER").ToString
            TXT_PRENOM_USER.Text = dts_user.Tables("USERS").Rows(i).Item("PRENOM_USER").ToString
            CB_ACTIVITE_USER.Text = dts_user.Tables("USERS").Rows(i).Item("ACTIVITE_PSF").ToString
            TXT_LIB_ACTIVITE.Text = dts_activite.Tables("ACTIVITES").Rows(i).Item("LIB_ACTIVITE").ToString
            CB_CC.Text = dts_user.Tables("USERS").Rows(i).Item("ID_CC").ToString
            TXT_LIB_CC.Text = dts_cc.Tables("CC").Rows(i).Item("LIB_CC").ToString
            TXT_resp_cc.Text = dts_cc.Tables("CC").Rows(i).Item("RESP_CC").ToString
            CB_FACTURATION.Text = dts_user.Tables("USERS").Rows(i).Item("STE_FACTURATION").ToString
            TXT_CHANTIER_SEDENTAIRE.Text = dts_user.Tables("USERS").Rows(i).Item("CHANTIER/SEDENTAIRE").ToString
            CB_TYPE_CONTRAT_USER.Text = dts_user.Tables("USERS").Rows(i).Item("TYPE_CONTRAT_USER").ToString
            TXT_BUREAU_USER.Text = dts_user.Tables("USERS").Rows(i).Item("BUREAU_USER").ToString
            TXT_BAT_USER.Text = dts_user.Tables("USERS").Rows(i).Item("BATIMENT").ToString
     
    'champ non obligatoire pour un utilisateur,
     
            If dts_user.Tables("USERS").Rows(i).Item("ID_LOTUS") Is DBNull.Value Then
                TXT_TELMOBILE.Text = ""
            Else
                TXT_IDLOTUS.Text = dts_user.Tables("USERS").Rows(i).Item("ID_LOTUS")
            End If
     
            If dts_user.Tables("USERS").Rows(i).Item("LOG_DOM2") Is DBNull.Value Then
                TXT_TELMOBILE.Text = ""
            Else
                TXT_LOG_DOM2.Text = dts_user.Tables("USERS").Rows(i).Item("LOG_DOM2")
            End If
     
            If dts_user.Tables("USERS").Rows(i).Item("TELEPHONE_PORTABLE") Is DBNull.Value Then
                TXT_TELMOBILE.Text = ""
            Else
                TXT_TELMOBILE.Text = dts_user.Tables("USERS").Rows(i).Item("TELEPHONE_PORTABLE")
            End If
     
            If dts_user.Tables("USERS").Rows(i).Item("ID_PDM") Is DBNull.Value Then
                TXT_ID_PDM.Text = ""
            Else
                TXT_ID_PDM.Text = dts_user.Tables("USERS").Rows(i).Item("ID_PDM")
            End If
     
            If dts_user.Tables("USERS").Rows(i).Item("MAIL_USER") Is DBNull.Value Then
                TXT_MAIL_USER.Text = ""
            Else
                TXT_MAIL_USER.Text = dts_user.Tables("USERS").Rows(i).Item("MAIL_USER")
            End If
     
            If dts_user.Tables("USERS").Rows(i).Item("TELEPHONE_FIXE") Is DBNull.Value Then
                TXT_TELFIXE.Text = ""
            Else
                TXT_TELFIXE.Text = dts_user.Tables("USERS").Rows(i).Item("TELEPHONE_FIXE")
            End If
     
     
     
        End Sub
    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
     
    ' code permettant de me déplacer dans la base de données
     
    Private Sub BindingNavigatorMoveNextItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorMoveNextItem.Click
            If i <> maxrow - 1 Then
                i = i + 1
                BT_consultUsers_Click(sender, e)
            Else
                MsgBox("Dernier enregistrement")
            End If
     
        End Sub
     
        Private Sub BindingNavigatorMovePreviousItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorMovePreviousItem.Click
            If i > 0 Then
                i = i - 1
                BT_consultUsers_Click(sender, e)
            Else
                MsgBox("Premier enregistrement")
            End If
        End Sub
     
        Private Sub BindingNavigatorMoveLastItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorMoveLastItem.Click
            If inc <> maxrow - 1 Then
                i = maxrow - 1
                BT_consultUsers_Click(sender, e)
            End If
        End Sub
     
        Private Sub BindingNavigatorMoveFirstItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorMoveFirstItem.Click
            If i <> 0 Then
                i = 0
                BT_consultUsers_Click(sender, e)
            End If
        End Sub

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 61
    Par défaut
    Ok d'accord je viens seulement de comprendre l'intérêt de ton FOR. Mais si le nombre de ligne vient à varier dans ma table USER_CONFIG ? Comment je fais ? N'a t'il pas un moyen plus simple et plus sûr ?

    Merci encore pour l'intérêt que tu portes à mon problème,

    Cdlt,

  7. #7
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    tu a deux options:


    pourquoi ta liaison ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    TXT_ASSET.Text = dts_user_config.Tables("USERS_CONFIG").Rows(dts_user.Tables("USERS").Rows(i).Item("ALPS")).Item("ASSET")
     
     
    'Tu a besoin d'entrer un numéro de ligne
    TXT_ASSET.Text = dts_user_config.Tables("USERS_CONFIG").Rows("...............Numéro de ligne...........").Item("ASSET")
    'or ceci :
    dts_user.Tables("USERS").Rows(i).Item("ALPS")
    'ne retourne pas de numéro de ligne..


    je trouve que ta solution a des limites...
    ex:
    tu balaye "USERS_CONFIG"
    l'index i montre la ligne
    seulement tu ne peut pas dire que la ligne i est la même pour ta table "USERS" et "USERS_CONFIG" (sans parler des autres tables)
    *sauf si les deux tables ont le même nombre de lignes et sont indexées pareil*

    PS: la boucle For dont je t'ai parlé est horriblement fausse pour les raisons que j'ai cité au dessus

Discussions similaires

  1. [VBA-A] liaison entre deux tables
    Par lumbroso dans le forum VBA Access
    Réponses: 16
    Dernier message: 01/06/2006, 10h22
  2. liaison entre les tables
    Par celticval dans le forum Access
    Réponses: 19
    Dernier message: 05/04/2006, 16h49
  3. Comparaison de champs entre 2 tables ACCESS
    Par Proview dans le forum Access
    Réponses: 12
    Dernier message: 25/03/2006, 22h25
  4. Problème de jointure entre 2 tables Access
    Par MITCH31 dans le forum VBA Access
    Réponses: 8
    Dernier message: 14/12/2005, 14h31
  5. VB : Jointure entre 2 tables Access
    Par MITCH31 dans le forum Access
    Réponses: 7
    Dernier message: 14/12/2005, 11h55

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