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

VBA Access Discussion :

SQL _ Résultat avec #Erreur si concaténation, mais pas d'erreurs si pas de concaténation , pourquoi ? [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 44
    Par défaut SQL _ Résultat avec #Erreur si concaténation, mais pas d'erreurs si pas de concaténation , pourquoi ?
    Bonjour,

    je ne comprends pas pourquoi si je préfixe un champ de requête SQL par concaténation, j'obtiens un remplissage des vides par "erreur, alors que si je ne fais pas de concaténation le résultat est propre.

    Avec concaténation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT DISTINCTROW cstr([T_Rooms].[RoomID])+" "+[T_Rooms].[Room]  AS ROOM,
       cstr([T_Box].[ID Box]) + " " + [T_Box].[ID Box]  AS BOX, 
        [T_Inventaire_Box].[ID Inv Box],
         cstr([T_Categories].[CategoryID])+" "+[T_Categories].[CategoryName]  AS CATEGORY, 
          [T_MAIN_Inventory].* 
    FROM T_Categories RIGHT JOIN 
      (  T_Rooms RIGHT JOIN 
          ( T_Box RIGHT JOIN 
             ( T_Inventaire_Box RIGHT JOIN T_MAIN_Inventory 
             ON [T_Inventaire_Box].[HouseholdInvID] = [T_MAIN_Inventory].[HouseholdInvID] )
          ON [T_Box].[ID Box] = [T_Inventaire_Box].[ID BOX] )
        ON [T_Rooms].[RoomID] = [T_Box].[RoomID] )
     ON [T_Categories].[CategoryID] = [T_MAIN_Inventory].[CategoryID];
    RESULTAT :

    Nom : Capture1.PNG
Affichages : 130
Taille : 14,2 Ko
    Nom : Capture1r.PNG
Affichages : 118
Taille : 10,9 Ko


    ***********************************

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT DISTINCTROW  [T_Rooms].[Room]  AS ROOM,
           [T_Box].[Nom] AS BOX, 
              [T_Inventaire_Box].[ID Inv Box]  AS IDInvBox,
                 [T_Categories].[CategoryName]  AS NMCAT, 
                    [T_MAIN_Inventory].* 
    FROM T_Categories RIGHT JOIN 
      (  T_Rooms RIGHT JOIN 
          ( T_Box RIGHT JOIN 
             ( T_Inventaire_Box RIGHT JOIN T_MAIN_Inventory 
             ON [T_Inventaire_Box].[HouseholdInvID] = [T_MAIN_Inventory].[HouseholdInvID] )
          ON [T_Box].[ID Box] = [T_Inventaire_Box].[ID BOX] )
        ON [T_Rooms].[RoomID] = [T_Box].[RoomID] )
     ON [T_Categories].[CategoryID] = [T_MAIN_Inventory].[CategoryID];
    RESULTAT:
    Nom : Capture0.PNG
Affichages : 120
Taille : 12,3 Ko
    Nom : Capture0r.PNG
Affichages : 121
Taille : 8,3 Ko


    Autre question : pourquoi CategoryName n'est pas renommé en NMCAT ?


    Auriez vous quelques idées ?

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 852
    Par défaut
    Bonjour,

    Ce n'est pas la concaténation qui renvoie l'erreur. C'est la fonction Cstr qui n'a pas d'argument.

    Cordialement.

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

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 337
    Par défaut
    Salut
    3ème capture d'écran (RESULTAT), je lis Category Name,alors que dans le 2ème code L4 je lis [T_Categories].[CategoryName] AS NMCAT.
    Citation Envoyé par ArchiSi Voir le message
    ...Autre question : pourquoi CategoryName n'est pas renommé en NMCAT ?...

  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 148
    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 148
    Par défaut
    Bonjour,

    Ce que je ne comprends pas c'est ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cstr([T_Box].[ID Box]) + " " + [T_Box].[ID Box]
    Au delà du souhait de concaténer id box, un espace et id box j'ai la certitude que ça ne va pas aboutir.
    Il faut garder à l'esprit que chaque moteur SGBD a sa propre syntaxe.

    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

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 44
    Par défaut
    Ah oui,

    Merci de vos réponses.

    Il y a une erreur de transcription (correctement passée dans ms Access, désolée):
    la concaténation souaitée était numéro de la box avec son nom.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       cstr([T_Box].[ID Box]) + " " + [T_Box].[Nom]  AS BOX,
    On voit dans le premier écran de résultat en ligne 1, 3, 5 ce que cela donne, et c'est bien ce qui est souhaité.

    Mais sur les autres lignes, on voit #erreur, lié à la fonction Cstr sans paramètre. Je ne sais pas bien comment contourner cela. Y a t il moyen dans une requete SQL de mettre un conditionnement sur la valeur retournée (si numéro, csrt..., blanc sinon ?)

    bien cordialement,

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 44
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    Salut
    3ème capture d'écran (RESULTAT), je lis Category Name,alors que dans le 2ème code L4 je lis [T_Categories].[CategoryName] AS NMCAT.
    bah oui , mais alors justement l'entete de colonne dans le résultat devrait être NMCAT, non ?

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

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 337
    Par défaut
    Citation Envoyé par ArchiSi Voir le message
    bah oui , mais alors justement l'entete de colonne dans le résultat devrait être NMCAT, non ?
    [T_Categories].[CategoryName] AS NMCAT,versus [T_Categories].[Category Name] AS NMCAT?

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

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 337
    Par défaut
    Citation Envoyé par ArchiSi Voir le message
    ... la concaténation souaitée était numéro de la box avec son nom.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       cstr([T_Box].[ID Box]) + " " + [T_Box].[Nom]  AS BOX,
    ...
    Pourquoi convertir ID Box qui est Num en chaine de caractères ?
    Parce qu'une sous chaine de caractère Num qui est concaténée avec une sous chaine de caractères String donnera toujours une chaine de caractères String !
    Essayez plus tôt avec Nz().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nz([T_Box].[ID Box],"")&" "&Nz([T_Box].[Nom],"")  AS BOX,

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 44
    Par défaut
    ah bien ...
    parce que la concaténation numric+chaine génère une erreur, du moins c'est ce que j'ai interprété come étant la cause de l'erreur de ma première version de requete qui ne faisait pas appel à la fonction cstr.

    merci pour la suggestion. Ci-dessous le résultat :
    Nom : Capture2.PNG
Affichages : 99
Taille : 12,5 Ko

    et la requete passée :
    Nom : Capture2r.PNG
Affichages : 102
Taille : 8,9 Ko

    dans cette requete on peut voir le resultat de la concaténation sans recour à la fonction csrt pour convertir l'identifiant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [T_Rooms].[RoomID]+" "+[T_Rooms].[Room]  AS ROOM,
    et votre proposition.

    résultat similaire



    Il y a peut être quelque chose à creuser du coté FORMAT, mais j'arrive pas bien à voir comment
    https://learn.microsoft.com/fr-fr/sq...l-server-ver16

    ?

  10. #10
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 852
    Par défaut
    Re-bonjour,

    Comme dit loufab, la concaténation sous Access se fait avec le signe "&" (esperluette).

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

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 337
    Par défaut
    Citation Envoyé par ArchiSi Voir le message
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [T_Rooms].[RoomID]+" "+[T_Rooms].[Room]  AS ROOM,
    et votre proposition.
    résultat similaire...
    Sauf que j'ai écrit
    Nz([T_Box].[ID Box],"")&" "&Nz([T_Box].[Nom],"") AS BOX, qui ne génère pas d'erreur à l'inverse de Nz([T_Box].[ID Box],"")+" "+Nz([T_Box].[Nom],"") AS BOX.

    &,versus +. Une sacrée différence sur Access.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 44
    Par défaut
    Ah d'accord ! J'avais focalisé sur la fonction, et la syntaxe m'avait echappé
    Effectivement maintenant ça fonctionne sans erreur:

    Nom : Capture3.PNG
Affichages : 97
Taille : 13,0 Ko


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT DISTINCTROW Nz([T_Rooms].[RoomID],"")&" "&[T_Rooms].[Room]  AS ROOM,
       Nz([T_Box].[ID Box],"")&" "&Nz([T_Box].[Nom],"")  AS BOX,
        [T_Inventaire_Box].[ID Inv Box],
         Nz([T_Categories].[CategoryID],"")&" "&[T_Categories].[CategoryName]  AS CAT, 
          [T_MAIN_Inventory].* 
    FROM T_Categories RIGHT JOIN 
      (  T_Rooms RIGHT JOIN 
          ( T_Box RIGHT JOIN 
             ( T_Inventaire_Box RIGHT JOIN T_MAIN_Inventory 
             ON [T_Inventaire_Box].[HouseholdInvID] = [T_MAIN_Inventory].[HouseholdInvID] )
          ON [T_Box].[ID Box] = [T_Inventaire_Box].[ID BOX] )
        ON [T_Rooms].[RoomID] = [T_Box].[RoomID] )
     ON [T_Categories].[CategoryID] = [T_MAIN_Inventory].[CategoryID];

    Je ne saisi pas bien la subtilité entre le + , pas pleinement fonctionnel sous access , et le &.

    Je retiens que la concaténation se fait avec le & qui est pleinement fonctionnel.

    Merci à tous de vos réponses,
    Bien cordialement

  13. #13
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 996
    Par défaut
    bonjour,
    Citation Envoyé par ArchiSi Voir le message
    Je ne saisi pas bien la subtilité entre le + , pas pleinement fonctionnel sous access , et le &.
    réponse dans l'indispensable aide Microsoft paragraphe "Différence entre ces deux opérateurs de concaténation"

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 11/03/2009, 23h12
  2. Réponses: 5
    Dernier message: 15/12/2008, 18h53
  3. Réponses: 2
    Dernier message: 27/05/2008, 14h56
  4. [AJAX] Avec Alert() ca marche mais pas sans
    Par vodnok dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/12/2006, 00h43
  5. Problème dans Xpath avec Xerces ou Xalan mais pas XMLSpy
    Par Superpoisson dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 23/09/2005, 15h29

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