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

IHM Discussion :

afficher un champ - ou un autre si le 1er n'existe pas [AC-2010]


Sujet :

IHM

  1. #1
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Juin 2015
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Juin 2015
    Messages : 288
    Points : 87
    Points
    87
    Par défaut afficher un champ - ou un autre si le 1er n'existe pas
    bonjour,

    voici mon contexte.

    J'ai une tbl T_CUID_2re :
    Nom : T_CUID_2re.JPG
Affichages : 115
Taille : 38,8 Ko

    dans cette table on voit que seuls une 10aine de CUID principaux ont un CUID 2aire.

    J'ai une autre tbl T_Personne qui contient près de 400 enregistrements avec pour chacun un CUID_Personne

    je cherche dans une requête à renseigner un champ "CUID" :
    - soit par la valeur CUID_personne issu de T_Personne
    - soit par la valeur CUID_2re si dans T_CUID_2re il y a un enregistrement qui dit que le CUID_principal a un CUID_2re (cf table ci-dessus) - car le CUID 2re est plus récent que le principal...

    J'ai tenté qq actions mais cela ne fonctionne pas :
    - si je fais une relation entre T_Personne.CUID_Personne vers T_CUID_2re.CUID_Principal, seuls ceux qui sont dans cette table sortent dans la requête,
    - si je laisse la table dans mon schéma sans faire de relation, alors toutes les personnes de T_Personne sont affichées 10 fois (puisqu'il y a 10 CUID 2res dans la table)
    Nom : R_effectifs-personne.JPG
Affichages : 125
Taille : 20,0 Ko

    Donc là, je sèche...

    Merci d'avance pour vos lumières !!

    NOTA : le cas ne se présente pas, mais en fait si un CUID principal a plusieurs CUID 2res, je voudrais récupérer le plus récent (via Date_2re)

    bien cordt

  2. #2
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut
    Salut Weyb06
    As-tu pensé à modifier la jointure de tbl en jointure à Gauche ou ou jointure à Droite ?
    Je suppose que tu es resté en mode équi-jointure (d'égal à égal) .
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  3. #3
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Juin 2015
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Juin 2015
    Messages : 288
    Points : 87
    Points
    87
    Par défaut
    bonjour,

    ne connaissant pas la théorie des jointures (non vu en cours débutant, et n'ayant jamais eu le besoin... ), je suis allé voir le tuto ici, et je crois que j'ai réussi mon coup à l'aide d'une jointure gauche !!!

    MERCI !!

    Je réussis à afficher le CUID principal + le CUID 2re quand il existe dans 2 colonnes distinctes.

    --> Du coup :
    1/ comment faire pour n'avoir qu'une colonne avec le CUID principal ou le CUID 2re quand il existe ?
    2/cerise sur la gâteau, dans le cas où j'ai plusieurs CUID 2re pour un CUID principal, comment faire pour ne retenir que le + récent (via Date_2re) ?

    cordt

  4. #4
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut
    Re
    A mon avis via une req.
    Il faut tester la présence du 2nd CUID, s'il est présent tu le retiens, sinon tu gardes le 1er.
    Et comme il y a date 2nd CUID utiliser la fct Max voire MaxDom() voire DernDom()
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  5. #5
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Juin 2015
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Juin 2015
    Messages : 288
    Points : 87
    Points
    87
    Par défaut
    re,

    je suis déjà dans une requête R_Effectifs :

    Nom : R_effectifs-extract.JPG
Affichages : 100
Taille : 103,8 Ko

    qui permet d'avoir en résultat un tableau genre excel avec un tas d'infos :

    Nom : R_effectifs-extract-result.JPG
Affichages : 91
Taille : 38,9 Ko

    et je ne vois pas comment je pas faire ça dans ma requête

    on peut mettre dans "critères" quelque chose du genre =si(CUID_2re<>""; CUID_2re;CUID_Personne) ???

    cordt

    EDIT :
    Access me dit de faire une requête séparée et de l'insérer dans la partie SQL de la requête de départ, ok...
    mais où ? comment ?...

    j'ai jamais fait de SQL, ca devient sioux...

  6. #6
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut
    Salut
    Désolé pour ce retard
    Il faudrait créer une req qui va te permettre de calculer le dernier des doublons de chaque CUID_Principal dans T_CUID_2re
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT Max() AS LastN°, CUID_Principal, Max(Date_Secondaire) AS DateMax
    FROM T_CUID_2re
    WHERE CUID_Principal In (SELECT CUID_Principal
        FROM T_CUID_2re
        GROUP BY CUID_Principal
        HAVING COUNT(*) > 0)
    GROUP BY CUID_Principal;
    Et l'utiliser dans une autre req pour calculer présence du CUID principal ou secondaire
    A tester.
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  7. #7
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Juin 2015
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Juin 2015
    Messages : 288
    Points : 87
    Points
    87
    Par défaut
    bonjour,

    pas de souci, c'est les vacances pour tout le monde...

    j'ai réussi à créer la requête dans Access via le mode SQL, ça me donne ce que je voulais - merci !!!

    mais comment j'incorpore ce résultat (que j'obtiens sous forme de tableau) dans une autre requête ???
    via le mode SQL ?
    mais où incorporer votre code dans le mien qui ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T_Personne.CUID_Personne, T_Personne.Nom_Personne, T_Personne.Prénom_Personne, T_Prestation.Statut_Personne, T_Site.Nom_Site, T_Ville.Nom_Ville, T_Prestation.Date_Début_Prestation, T_Prestation.Date_Fin_Prestation, T_Entité.Nom_Entité, T_Métier.Libellé_Métier, T_Société.Nom_SSII_Porteuse, T_Société.Nom_Société, [T_Personne_1].[Nom_Personne] & " " & [T_Personne_1].[Prénom_Personne] AS Expr1, T_CUID_2re.CUID_Secondaire
    FROM T_Ville INNER JOIN (T_Société INNER JOIN (T_Site INNER JOIN ((T_Personne LEFT JOIN T_CUID_2re ON T_Personne.CUID_Personne = T_CUID_2re.CUID_Principal) INNER JOIN (T_Métier INNER JOIN (T_FFS INNER JOIN ((T_Entité INNER JOIN T_Personne AS T_Personne_1 ON T_Entité.[CUID_Resp_Entité] = T_Personne_1.CUID_Personne) INNER JOIN T_Prestation ON T_Entité.ID_Entité = T_Prestation.ID_Entité_Prestation) ON T_FFS.ID_FFS = T_Prestation.ID_FFS_Prestation) ON T_Métier.ID_Métier = T_Prestation.ID_Métier_Prestation) ON T_Personne.CUID_Personne = T_Prestation.CUID_Prestation) ON T_Site.ID_Site = T_Prestation.ID_Site_Prestation) ON T_Société.ID_Société = T_Prestation.ID_Société_Prestation) ON T_Ville.ID_Ville = T_Site.ID_Ville
    WHERE (((T_Entité.Nom_Entité) Like "DSI*" Or (T_Entité.Nom_Entité) Like "DESI*"))
    ORDER BY T_Personne.Nom_Personne, T_Prestation.Date_Début_Prestation;
    ?

    je me dis qu'il faudrait remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT T_Personne.CUID_Personne,...
    par votre code puisque je cherche le CUID_2re, non ?

    Mais ensuite, il faudrait que cela ne le fasse que s'il existe un CUID_2re...
    ?

    cordt

  8. #8
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut
    Salut,
    Je n'ai aucune visibilité sur ta bdd et décrypter la req ...
    Je te propose une proc via btn d'un form
    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 Commande0_Click()
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim strSQL As String
     
    Set dbs = CurrentDb
    'Req qui calcule dernière date CUID_Secondaire
    strSQL = "SELECT Last(ID_CUID_2re) AS DernierID, CUID_Principal, Max(Date_Secondaire) AS DateMax" _
        & " FROM T_CUID_2re" _
        & " GROUP BY T_CUID_2re.CUID_Principal;"
     
    Set rst = dbs.OpenRecordset(strSQL, dbOpenSnapshot)
    DoCmd.SetWarnings False
    'On vérifie la présence dun jeu denregistrement dans le strSQL d'au-dessus
    If rst.RecordCount <> 0 Then
        'Alors on crée la tbl ci-dessous
        CurrentDb.Execute "CREATE TABLE T_Personne_tmp (" _
        & " ID_Personne_tmp AutoIncrement, " _
        & " CUID_Personne_tmp Text(8) CONSTRAINT idxCUID Primary Key, " _
        & " Nom_Personne_tmp Text(50), " _
        & " Prénom_Personne_tmp Text(30), " _
        & " CUID_Secondaire_tmp Text(8), " _
        & " Date_Secondaire_tmp Date, " _
        & " CUID_Valid_tmp Text(8))", dbFailOnError
     
        'On insert le jeu denregistrement de tbl_Personne dans tbl_tmp
        CurrentDb.Execute "INSERT INTO T_Personne_tmp (ID_Personne_tmp, CUID_Personne_tmp, Nom_Personne_tmp, Prénom_Personne_tmp)" _
        & " SELECT T_Personne.ID_Personne, T_Personne.CUID_Personne, T_Personne.Nom_Personne, T_Personne.Prénom_Personne" _
        & " FROM T_Personne", dbFailOnError
     
        'On crée la tbl ci-dessous
        CurrentDb.Execute "CREATE TABLE T_CUID_2re_tmp (" _
        & " id_tmp1 AutoIncrement CONSTRAINT idxid Primary Key, " _
        & " CUID_Principal_tmp1 Text(8), " _
        & " Date_Secondaire_tmp1 Date)", dbFailOnError
     
        'On y insert le résultat de strSQL
        CurrentDb.Execute "INSERT INTO T_CUID_2re_tmp (id_tmp1, CUID_Principal_tmp1, Date_Secondaire_tmp1)" _
        & " SELECT Last(ID_CUID_2re) AS DernierID, CUID_Principal, Max(Date_Secondaire) AS DateMax" _
        & " FROM T_CUID_2re " _
        & " GROUP BY CUID_Principal", dbFailOnError
     
        'On met à jour la Date_Secondaite dans T_Personne_tmp
        CurrentDb.Execute "UPDATE T_Personne_tmp INNER JOIN T_CUID_2re_tmp ON T_Personne_tmp.CUID_Personne_tmp = T_CUID_2re_tmp.CUID_Principal_tmp1" _
        & " SET T_Personne_tmp.Date_Secondaire_tmp = [Date_Secondaire_tmp1]", dbFailOnError
     
        'On met à jour le CUID_Secondaire dans T_Personne_tmp
        CurrentDb.Execute "UPDATE T_Personne_tmp INNER JOIN T_CUID_2re ON (T_Personne_tmp.Date_Secondaire_tmp = T_CUID_2re.Date_Secondaire) AND (T_Personne_tmp.CUID_Personne_tmp = T_CUID_2re.CUID_Principal)" _
        & " SET T_Personne_tmp.CUID_Secondaire_tmp = [CUID_Secondaire]", dbFailOnError
     
        'On calcule le CUID Actif (CUID_Principal ou dernier Secondaire)
        CurrentDb.Execute "UPDATE T_Personne_tmp SET T_Personne_tmp.CUID_Valid_tmp = IIf([CUID_Secondaire_tmp] Is Not Null,[CUID_Secondaire_tmp],[CUID_Personne_tmp])", dbFailOnError
    End If
    'DoCmd.DeleteObject acTable, "T_CUID_2re_tmp"
    'DoCmd.DeleteObject acTable, "T_Personne_tmp"
    DoCmd.SetWarnings True
    RefreshDatabaseWindow
    End Sub
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  9. #9
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Juin 2015
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Juin 2015
    Messages : 288
    Points : 87
    Points
    87
    Par défaut
    bonjour,

    je reviens sur ce post (vu que j'ai compris certaines choses ce matin... je comprends vite mais il me faut le temps...) pour poster la solution (toute bête en fait) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CUID_completed: VraiFaux([T_CUID_2re].[CUID_Secondaire] Est Null;[T_Personne].[CUID_Personne];[T_CUID_2re].[CUID_Secondaire])
    cela affiche le CUID 2re s'il existe, sinon on affiche le CUID "normal"

    Merci encore pour votre temps !

    NOTA : quand je dis "toute bête", loin de moi l'idée de suggérer que vous n'avez pas été capable de me la donner ici, je suis bien conscient que vous n'avez pas tout le contexte, ni mes tbls sous les yeux, et que se mettre à la place de qq n'est pas chose aisée !

    Bien cordt

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/02/2013, 10h46
  2. [AC-2007] Afficher un champ lié à un autre dans un form
    Par tibofo dans le forum IHM
    Réponses: 4
    Dernier message: 17/07/2009, 10h54
  3. Réponses: 13
    Dernier message: 14/04/2008, 14h30
  4. Réponses: 5
    Dernier message: 13/04/2007, 10h13
  5. afficher un champ d'une autre table, Help!
    Par chakan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/03/2004, 23h20

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