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

Requêtes et SQL. Discussion :

Concaténer deux valeur issue d'une fonction vba en sql


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 298
    Points : 67
    Points
    67
    Par défaut Concaténer deux valeur issue d'une fonction vba en sql
    Bonjour,

    Voici une fonction provenant de la fag permettant de concaténer plusieurs enregistrements sur la même ligne.

    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
     
    Public Function Support(Projet As Long) As String
    Dim res As DAO.Recordset
    Dim SQL As String
    'Selectionne les participant du projet
    SQL = "SELECT Support FROM Support WHERE Chrono=" & Projet
    Set res = CurrentDb.OpenRecordset(SQL)
    'Concatene les différents enregistrement
    While Not res.EOF
    Support = Support & res.Fields(0).Value & " + "
    res.MoveNext
    Wend
    'Enleve le dernier espace
    Support = Left(Support, Len(Support) - 3)
    'libere la mémoire
    Set res = Nothing
    End Function
     
    Public Function Expose(Projet As Long) As String
    Dim res As DAO.Recordset
    Dim SQL As String
    Dim var As String
    var = "Présentation autour de la maquette"
    'Selectionne les participant du projet
    SQL = "SELECT Expose FROM Expose WHERE Chrono= " & Projet & " And Expose<>'Présentation autour de la maquette'"
    Set res = CurrentDb.OpenRecordset(SQL)
    'Concatene les différents enregistrement
    While Not res.EOF
    Expose = Expose & res.Fields(0).Value & " + "
    res.MoveNext
    Wend
    'Enleve le dernier espace
    If Expose <> Null Then
    Expose = Left(Expose, Len(Expose) - 3)
    End If
    'libere la mémoire
    Set res = Nothing
    End Function
    J'utilisa donc une requête sql pour concaténer le résultat de ces deux fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT DISTINCT S.Chrono, Support(S.Chrono)  & Iif((Support(S.Chrono)<> NULL) And  (Expose(E.Chrono) <> NULL)," + ", "") &  Expose(E.Chrono)  As Support
    FROM Support S INNER JOIN  Expose E
    ON S.Chrono = E.Chrono
    Quand Support(S.Chrono) est NULL alors que Expose(E.Chrono) ne l'est pas la requête ne me retourne aucune ligne.
    Et quand Expose(E.Chrono) est null, et que Support(S.Chrono) ne l'est pas, le " + " ne devrait pas apparaitre alors qu'il est bien présent(mais ici contrairement au premier cas les lignes sont quand même retournées)

    D'ou pourrait venir le problème.


    Merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 298
    Points : 67
    Points
    67
    Par défaut
    je pense que le problème vient de la condition ON, car dans le cas ou Support(S.Chrono) est null alors la condition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ON S.Chrono = E.Chrono
    ne peut être vérifié.

    Comment faire?

  3. #3
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut bobosh,
    tu as deux pb: un effectivement dans le ON mais aussi avec <>NULL dans ta requete: les fonctions renvoie des strings qui ne peuvent être null il faut donc faire <>"".

    quand à la jointure je ne sais pas ce que tu veux obtenir, mais si tu souhaite avoir des résultats lorsqu'il n'y a pas d'existance d'un champ mais dans celui lié il te faut une jointure externe: requete de non correspondance ou voir un full outer que tu peux trouver la syntaxe ici

Discussions similaires

  1. Réponses: 10
    Dernier message: 05/02/2015, 14h47
  2. [SP-2010] Griser un champ en fonction d'une valeur issue d'une liste de choix
    Par Blooster dans le forum SharePoint
    Réponses: 3
    Dernier message: 07/06/2013, 12h24
  3. Réponses: 2
    Dernier message: 24/02/2011, 09h23
  4. fonction sur la somme des valeurs issues d'une requete
    Par iam dans le forum Bases de données
    Réponses: 5
    Dernier message: 15/06/2006, 21h35
  5. valeur retournée d'une fonction
    Par jokos2000 dans le forum Oracle
    Réponses: 8
    Dernier message: 29/06/2005, 12h21

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