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

Access Discussion :

Rassembler des informations dans une liste à partir de 3 tables


Sujet :

Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 40
    Points : 24
    Points
    24
    Par défaut Rassembler des informations dans une liste à partir de 3 tables
    J'ai trois table :
    tblhopital(Numhopital, Nomhopital)
    tblsite(Numsite, Nomsite, Nomhopital(liaison tblhopital))
    Surfacesite(Nomsite(liaison tblsite), Date, Surface_totale)

    Je veux créer un formulaire qui regroupe ses données dans une liste :

    NomHopital / Nomsite / Surface_totale

    Et je n'y arrive pas...

    Un peu d'aide SVP.
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Bonjour,

    Il faudrait déjà corriger la structure de la table SurfaceSite qui ne peut faire la relation avec tblSite.

    Ensuite faire une requete comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT tblhopital.Nomhopital, tblsite.Nomsite, Surfacesite.Surface_totale
    FROM (tblsite RIGHT JOIN tblhopital ON tblsite.Nomhopital = tblhopital.Nomhopital) LEFT JOIN Surfacesite ON tblsite.Nomsite = Surfacesite.Nomsite;
    Une bonne conception du modèle de données est la base d'une bonne application. (proverbe Loufab)

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 40
    Points : 24
    Points
    24
    Par défaut
    Il faudrait déjà corriger la structure de la table SurfaceSite qui ne peut faire la relation avec tblSite.
    Peux tu être plus explicite.

    Il existe une relation entre tblsite et Surfacesite : liaison faite sur Nomsite.

    Merci.

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Effectivement il y a bien une relation mais elle n'est pas correcte. D'un coté tu as un champ texte et de l'autre un champ numérique...
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 40
    Points : 24
    Points
    24
    Par défaut
    Quand je crée la table surfacesite pour le champ Nomsite je choisie liste de choix et lui indique le Nomsite de la table tblsite.

    Systématiquement le type de donnée est numérique.... je ne peux pas le changer.

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    La liste est basée sur le Numero de site et pas le nom. Revois la requete source de cette liste et tout rentrera dans l'ordre.

    Il faut ABSOLUMENT que les 2 champs en relation soient du même type (soit Texte, soit Numerique).

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 40
    Points : 24
    Points
    24
    Par défaut
    Ok, j'ai modifier le champ Nomsite de la table Surfacesite en texte.

    Le code fournit ne fonctionne pas, mais c'est pas trés grave : je fais une requête avec l'assistant et je peux regrouper sans pb les 2 tables Surfacesite et tblsite.

    Mais nouveau problème : Ca marche trés bien avec ma base TEST mais lorsque je reproduit dans ma base ca ne marche plus... pourtant mes tables sont identiques à TEST.

    la requete s'execute mais pour résultat j'obtient la ligne avec les intitulés des colonnes et rien d'autres.

    D'ou pourrait venir ce pb ?

    _____________________________________________________
    J'ai donc transferer formulaires, tables et requetes dans ma base TEST.

    Ma requete fonctionne bien

    Mais j'ai un autre problème ( certainement du à la modification du type du champ Nomsite en type texte) :
    message d'erreur : ERREUR DE Compilation - Type défini par l'utilisateur non défini.
    Il m'ouvre le code en surlignant Dim Item As ListItem.
    Le code est le suivant :

    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
    Private Sub Form_Current()
    Dim oDB As DAO.Database
    Dim oQdf As DAO.QueryDef
    Dim oRstActivite As DAO.Recordset, oRstRealiser As DAO.Recordset
    Dim Item As ListItem
    Dim intAct As Integer
    Set oDB = CurrentDb
    'Vide la zone de liste
    'Dim ListView1 As ListView
    ListView1.ListItems.Clear
    'Définit la propriété Case à cocher à oui
    ListView1.Checkboxes = True
    ListView1.View = lvwList
     
    'Prépare la requête sur la table tblRealiser
    Set oQdf = oDB.QueryDefs("R02")
    With oQdf
        .Parameters(0).Value = Me.Numsite
        Set oRstRealiser = .OpenRecordset
    End With
     
    Set oRstActivite = oDB.OpenRecordset("R01")
    'Parcours le recordset des activités
    With oRstActivite
        While Not .EOF
            intAct = .Fields(0)
            'Crée la nouvelle ligne
            Set Item = ListView1.ListItems.Add(Key:="A" & .Fields(0), Text:=.Fields(1))
            'recherche l'enregistrement
            With oRstRealiser
                .FindFirst "NumActivite=" & intAct
                Item.Checked = Not .NoMatch
            End With
        .MoveNext
        Wend
    End With
     
    End Sub
     
    Private Sub ListView1_ItemCheck(ByVal Item As Object)
    Dim oDB As DAO.Database
    Dim oQdf As DAO.QueryDef
    Dim strName As String
    If Item.Checked Then
      strName = "R03"
    Else
      strName = "R04"
    End If
     
    Set oDB = CurrentDb
    Set oQdf = oDB.QueryDefs(strName)
    With oQdf
        .Parameters("PSite") = CInt(Me.Numsite)
        .Parameters("PActivite") = CInt(Mid(Item.Key, 2))
        .Execute
    End With
     
    End Sub
    Merci pour les informations pour corriger erreur

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Ceci ce produit lorsqu'il n'y a rien à afficher.

    Regarde si tes relations sont correctes. Pour cela il faut faire une analyse de la structure des données.

    Exemple :
    1 hopital --> plusieurs sites
    1 sites --> plusieurs surfaces

    Dans ce cas il faut que les liens des relations soient hopital - 1 à plusieurs - Site - 1 à plusieurs - Surface.

    On paramètre cela en faisant un clic droit sur le lien des tables, et une flèche apparait du coté de la relation "plusieurs".

    Comme c'est de la théorie pure, seul le concepteur peut faire cette analyse et les corrections.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 40
    Points : 24
    Points
    24
    Par défaut
    Je suis pas d'accord avec toi :

    Mes relations sont les meme que ce soit dans TEST (ou j'ai un résultat) ou dans ma BASEHOPITAL (ou je n'ai pas de résultat).

    ___________________________
    Pour comprendre mon erreur , J'ai donc transferer les formulaires, tables et requetes de la base HOPITAL dans ma base TEST.

    Ma requete fonctionne bien...

    Mais j'ai un autre problème ( certainement du à la modification du type du champ Nomsite en type texte) :
    message d'erreur : ERREUR DE Compilation - Type défini par l'utilisateur non défini.
    Il m'ouvre le code en surlignant Dim Item As ListItem.
    Le code est le suivant :

    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
    Private Sub Form_Current()
    Dim oDB As DAO.Database
    Dim oQdf As DAO.QueryDef
    Dim oRstActivite As DAO.Recordset, oRstRealiser As DAO.Recordset
    Dim Item As ListItem
    Dim intAct As Integer
    Set oDB = CurrentDb
    'Vide la zone de liste
    'Dim ListView1 As ListView
    ListView1.ListItems.Clear
    'Définit la propriété Case à cocher à oui
    ListView1.Checkboxes = True
    ListView1.View = lvwList
     
    'Prépare la requête sur la table tblRealiser
    Set oQdf = oDB.QueryDefs("R02")
    With oQdf
        .Parameters(0).Value = Me.Numsite
        Set oRstRealiser = .OpenRecordset
    End With
     
    Set oRstActivite = oDB.OpenRecordset("R01")
    'Parcours le recordset des activités
    With oRstActivite
        While Not .EOF
            intAct = .Fields(0)
            'Crée la nouvelle ligne
            Set Item = ListView1.ListItems.Add(Key:="A" & .Fields(0), Text:=.Fields(1))
            'recherche l'enregistrement
            With oRstRealiser
                .FindFirst "NumActivite=" & intAct
                Item.Checked = Not .NoMatch
            End With
        .MoveNext
        Wend
    End With
     
    End Sub

  10. #10
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Je suis interessé de savoir comment tu arrive à faire fonctionner une application avec une relation entre 2 tables sur des champs de types différents.

    En regardant de plus le contenu de tes tables : Surfaces contient le N° des sites c'est donc normal que rien ne s'affiche. Je pense qu'il faudrais que tu reprenne la structure de tes tables pour faire quelque chose de cohérent et fonctionnel. Soit la relation par N° (préférable) soit par Nom.

    En ce qui concerne ton nouveau problème l'analyse est simple le type de l'objet ListItem n'est pas reconnu, voir du coté des références.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

Discussions similaires

  1. [AC-2007] Remplir un champ à partir des informations d'une liste déroulant
    Par titsoun83 dans le forum IHM
    Réponses: 12
    Dernier message: 31/03/2015, 15h26
  2. Réponses: 1
    Dernier message: 15/12/2013, 21h38
  3. Réponses: 2
    Dernier message: 06/11/2009, 17h41
  4. Afficher des informations dans une liste déroulante
    Par onlytime dans le forum Langage
    Réponses: 1
    Dernier message: 08/03/2008, 18h47
  5. [langage] Comment rajouter des champs dans une liste
    Par toto_titi dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2003, 14h09

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