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 :

concaténation sur deux critères


Sujet :

Access

  1. #1
    Membre éclairé Avatar de stéphane_ais2
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 792
    Points : 891
    Points
    891
    Par défaut concaténation sur deux critères
    Salut,

    J'ai une fonction (reprise depuis la page des sources) pour concaténer plusieurs enregistrements :
    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
     
    Public Function RecupElevesEtOri(ua_num As String) As String
    On Error Resume Next
    Dim R As DAO.Recordset
    Dim SQL As String
    'Selectionne les élèves du projet
    SQL = "SELECT [rqtDirComEl].[el_nom], [rqtDirComEl].[el_prenom], [rqtDirComEl].[el_ddn] FROM [rqtDirComEl] WHERE ua_num=" & ua_num 
    Set R = CurrentDb.OpenRecordset(SQL)
    'Concatène les différents enregistrements
    While Not R.EOF
    RecupElevesEtOri = RecupElevesEtOri & R.Fields(0).Value & " " & R.Fields(1).Value & "    né(e) le : " & R.Fields(2).Value & " " & Chr(10) & Chr(10)
    R.MoveNext
    Wend
    'Renvoie en majuscule RecupElèves
    RecupElevesEtOri = UCase(RecupElevesEtOri)
    'Enlève le dernier espace
    RecupElevesEtOri = Left(RecupElevesEtOri, Len(RecupElevesEtOri) - 1)
    'libère la mémoire
    Set R = Nothing
    End Function
    La concaténation se fait sur seul critère le numéro et ça fonctionne très bien

    Je cherche à ajouter un critère en plus du premier de type Date
    J'ai donc ajouter la variable+
    après Where

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    And com_d = "& com_d &"
    J'ai essayé avec ça aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    And com_d = #"& com_d &" #;
    ça ne marche pas...et cette fonction(avec les modifications sur deux critères) plante Access...

    y'a sûrement un truc qui m'échappe (ou deux peut-être... )

    Merci pour un éventuel éclairage

  2. #2
    Membre éclairé Avatar de stéphane_ais2
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 792
    Points : 891
    Points
    891
    Par défaut
    j'ai écrit ça pour mon SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQL = "SELECT [rqtDirComEl].[el_nom], [rqtDirComEl].[el_prenom], [rqtDirComEl].[el_ddn] FROM [rqtDirComEl] WHERE ua_num=" & ua_num And com_d = "# com_d #;"
    et puis ça en déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function RecupElevesEtOri(ua_num As String, com_d As Date) As String
    ça renvoie une erreur mais ça ne plante plus access...
    mais je me doute bien que c'est pas cohérent...

  3. #3
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    Ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE ua_num=" & ua_num And com_d = "# com_d #;"
    essai ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (((MaTable.ua_num)=" & ua_num & ") AND ((MaTable.com_d)=" & "#" & com_d & "#" & "));"

  4. #4
    Membre confirmé
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Points : 580
    Points
    580
    Par défaut
    salut,

    ou simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "SELECT [rqtDirComEl].[el_nom], [rqtDirComEl].[el_prenom], [rqtDirComEl].[el_ddn] FROM [rqtDirComEl] WHERE ua_num=" & ua_num & " And com_d = #"& com_d &"#;"

  5. #5
    Membre éclairé Avatar de stéphane_ais2
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 792
    Points : 891
    Points
    891
    Par défaut
    Merci...
    je retiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE ua_num=" & ua_num & " And com_d = #"& com_d &"#;"
    qui a l'avantage de ne plus faire planter l'appli...

    mais qui renvoie des résultats pas en cohérence avec ce que j'attends à savoir tous les enregistrements correspondants aux deux critères cumulés : et et pas tous les enregistrements répondants à l'un ou l'autre

  6. #6
    Membre confirmé
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Points : 580
    Points
    580
    Par défaut
    dans ce cas il faut peut être utiliser un OR à place d'un AND :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE ua_num=" & ua_num & " OR com_d = #"& com_d &"#;"
    en espérant avoir compris ta demande.

  7. #7
    Membre actif

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Points : 270
    Points
    270
    Par défaut
    Bonsoir,

    du premier de type Date
    mais qui renvoie des résultats pas en cohérence avec ce que j'attends à savoir tous les enregistrements correspondants aux deux critères cumulés :
    Pour un type date, il faut passer avec format
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    com_d = #"& format(com_d,"mm dd yyyy") &"#;"
    Veux-tu que les résultats contiennent obligatoirement les deux critères (donc moins de réponses probables), dans ce cas il faut mettre AND
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE ua_num=" & ua_num & " AND com_d = #"& format(com_d,"mm dd yyyy") &"#;"
    Ou veux-tu que le résultat contienne au moins un des deux critères (donc plus de réponses probables), dans ce cas, utilise le OR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE ua_num=" & ua_num & " OR com_d = #"& format(com_d,"mm dd yyyy") &"#;"
    Sa devrait fonctionner.

    Bonne continuation

    Gdal

    Pense à la balise résolu si c'est le cas

  8. #8
    Membre éclairé Avatar de stéphane_ais2
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 792
    Points : 891
    Points
    891
    Par défaut
    Merci à Gdal et Petogal (je prends conscience du caractère conventionnel de mon pseudo qui n'en est pas un d'ailleurs... )

    Pour le format j'avais corrigé ; il s'agit bien d'utiliser ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ...WHERE ua_num=" & ua_num & " And com_d = #" & Format(com_d, "mm/dd/yyyy") & "#;"
    Je dois bien utiliser mais cela renvoie quand même un enregistrment ne répondant qu'à un seul des critères...peut-être un pb de logique dans les données... :

    je mets ma rqt au cas où :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT [rqtDirComEl].[ua_num], [rqtDirComEl].[com_d], RecupElevesEtOri([ua_num],[com_d]) AS Eleves
    FROM rqtDirComEl
    ORDER BY [rqtDirComEl].[com_t];
    pour info :

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

Discussions similaires

  1. Filtre sur deux critères Hfiltre
    Par reamgm dans le forum WinDev
    Réponses: 10
    Dernier message: 28/05/2013, 01h46
  2. DLookup sur deux critères
    Par Nephyline dans le forum VBA Access
    Réponses: 2
    Dernier message: 19/03/2008, 11h43
  3. Tri sur deux critères
    Par Flo4594 dans le forum Access
    Réponses: 2
    Dernier message: 22/12/2006, 14h55
  4. Afficher un résultat sur deux critères du même champ
    Par julien6660 dans le forum Access
    Réponses: 2
    Dernier message: 20/04/2006, 11h30
  5. Sélection sur deux critères
    Par Hbenne dans le forum Access
    Réponses: 2
    Dernier message: 07/04/2006, 16h18

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