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 :

Querydefs("requete").SQL coupé au niveau des retours à la ligne [Toutes versions]


Sujet :

VBA Access

  1. #1
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut Querydefs("requete").SQL coupé au niveau des retours à la ligne
    Bonjour,

    J'ai une requête nommée "requete_1" dans ma base access avec le texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select [champs 1], [champs  2]
    from matable;
    Je voudrais la réutiliser ailleurs en y ajoutant un
    Je fais donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim text_requete as string
    text_requete = currentdb.querydefs("requete_1").SQL
    Sauf que je récupère le texte :
    Select [champs 1], [champs 2]
    Quand je modifie ma requête de base via Access je vois qu'il y a un retour chariot avant le "FROM" et j'ai l'impression que ce que je récupère est donc le texte du début jusqu'au retour chariot.
    Si je supprime le retour chariot et que j'enregistre ma requête, Access le remet tout seul.

    Quelqu'un saurait pourquoi je ne récupère que la première partie de ma requête, jusqu'au retour chariot ?
    Comment récupérer le texte SQL de la requête entièrement alors ?

    Merci de votre aide
    Le Porc est un loup pour le Porc.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 283
    Points
    34 283
    Par défaut
    Hello,
    je ne saisis pas bien à quel niveau tu as un problème...
    le contenu SQL de ta requête dans l'interface Access c'est une chose, le contenu SQL visible sous forme de chaine de caractères c'est la même chose, non ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Et bien en fait si je modifie la requête existante je la vois bien en entier, mais en mettant un espion sur le Querydefs("requete_1").SQL dans l'explorateur d'espion je vois du début de la requête jusqu'au saut de ligne.
    J'en suis à me dire qu'en réalité c'est peut être seulement l'explorateur d'espion qui est merdique.
    J'ai donc fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    text_requete = replace(text_requete, Chr(10), " ")  
    text_requete = replace(text_requete, Chr(13), " ")
    Mais si je remet un espion sur mon texte j'ai encore la même chose.

    Le but final de tout ça étant de virer le ";" à la fin pour ajouter ma clause "WHERE", j'ai fait, ce qui me semble on ne peut plus logique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    text_requete = Trim(text_requete)
    If Right(text_requete, 1) = ";" Then
        text_requete = Left(text_requete, Len(text_requete) -1)
    End if
    Et c'est comme ça que je me suis rendu compte que c'est probablement l'explorateur d'espion qui ne m'affiche pas tout puisque j'obtiens une erreur qui me dit que j'ai du texte repéré après la fin de l'instruction SQL.

    Mais comme je ne peux pas me fier à l'explorateur d'espion je vais devoir afficher mes chaines dans des MsgBox pour espionner, super -_- ...

    Je verrai ça lundi en étant un peu plus reposé, parce que moi Access il me fatigue ...
    Le Porc est un loup pour le Porc.

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 650
    Points : 14 628
    Points
    14 628
    Par défaut
    Citation Envoyé par asmduty Voir le message
    Le but final de tout ça étant de virer le ";" à la fin pour ajouter ma clause "WHERE", j'ai fait, ce qui me semble on ne peut plus logique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    text_requete = Trim(text_requete)
    If Right(text_requete, 1) = ";" Then
        text_requete = Left(text_requete, Len(text_requete) -1)
    End if
    je ne comprends pas non plus ton souci.
    Si ton but est de supprimer le point virgule, tu as simplement à faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    text_requete = CurrentDb.QueryDefs.("requete_1").SQL
    NewSQL = Replace(text_requete,";","") & " WHERE taclausewhere" & ";"
    sans te soucier des sauts de lignes
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    ça serait éventuellement une alternative, sauf que :

    - ça ne m'explique toujours pas pourquoi ce que j'ai fait ne fonctionne pas
    - si jamais j'avais pour une raison quelconque des ";" ailleurs dans ma requête (dans un replace par exemple) votre solution ne fonctionnerait pas

    Cela dit merci pour cette solution, si je ne trouve pas autre chose faudra bien que je fasse quelque chose dans ce style là, mais j'aimerais avant tout savoir ce qui ne va pas avec ma solution et comment l'adapter.
    Le Porc est un loup pour le Porc.

  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 598
    Points
    24 598
    Par défaut
    Bonjour,
    Moi non plus je ne vois pas le problème.
    Qu'il s'agisse de la fenêtre Espion ou de la Variables locales la chaine renvoyée est visible en totalité. Mais peut-être que tu utilises une version ancienne d'ACCESS.

    Maintenant l'explication du problème :
    Toi même tu le vois, la chaine comporte des retour chariot, tu as la commande pour les éliminés (bien que cela soit totalement inutile pour ce que tu souhaite faire). Il suffit de procéder... sans omettre le dernier crlf.

    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim vlsql as string
    vlsql = Replace(CurrentDb.QueryDefs("rTest").SQL, vbCrLf, " ")
    Et pour la ; de la fin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vlsql = left(vlsql,len(vlsql)-2)
    Bien que ceci suffise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.QueryDefs("rTest").SQL= left(CurrentDb.QueryDefs("rTest").SQL,len(vlsql)-2) & " " & "WHERE...."
    Comme tu le vois il s'agit d'une simple manipulation de chaine de caractères.

    A noter qu'ACCESS remettra en forme la chaine SQL dès que tu la réinjectera dans ton objet Query.

    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 expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Merci pour toutes vos réponses.

    Je suis sous Access 2007.
    En fait je voulais retirer les retour chariot surtout afin de pouvoir espionner ma chaine, mais impossible.
    Tant pis, je me suis lancé dans le débogage à coups de MsgBox finalement et c'est là que je me suis aperçu de votre remarque du dernier post :

    Access remet automatiquement le ";" avant que je rajoute mon "Where"

    Bref le genre de truc idiot donc j'aurais pu m'apercevoir facilement si j'avais pu espionner correctement.

    Merci pour votre aide, je peux marquer résolu.
    Le Porc est un loup pour le Porc.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/04/2008, 18h47
  2. [SQL server 2005] caractère de retour à la ligne
    Par Louis-Guillaume Morand dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 06/02/2006, 14h34

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