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 :

Récupérer le code SQL à partir d'une requête


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Récupérer le code SQL à partir d'une requête
    Bonjour,

    Je cherche récupérer le code SQL d'une requête construite sous ACCESS contenant d'autres requêtes ACCESS. C'est à dire que je souhaite avoir dans ma requête SQL que le nom des différentes tables utilisées et non pas les noms de requêtes intermédiaires.

    N'ayant pas trouvé de solutions, je fais appel à votre expérience.
    Merci beaucoup.

    Edith

  2. #2
    Candidat au Club
    Inscrit en
    Février 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Re
    Peux tu essayer d'être plus clair avec des exemples notamment.
    Merci

  3. #3
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 144
    Points : 166
    Points
    166
    Par défaut
    Slt,
    As tu essayé de basculer en mode SQL ?
    Cela revient à faire un clic droit sur le haut de ta fenêtre "requête ouverte en mode créa" et à choisir "Basculer en mode SQL"...
    ...si c'est bien ce que tu voulais....
    ~-~-~-~-~-~-~-~~-~-~-~-~-~-~-~-~
    Les choses les plus faciles...
    ...sont aussi les plus difficiles à trouver !

    ~-~-~-~-~-~-~-~~-~-~-~-~-~-~-~-~

  4. #4
    Candidat au Club
    Inscrit en
    Novembre 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par DonFelipe
    Slt,
    As tu essayé de basculer en mode SQL ?
    Cela revient à faire un clic droit sur le haut de ta fenêtre "requête ouverte en mode créa" et à choisir "Basculer en mode SQL"...
    ...si c'est bien ce que tu voulais....
    Et bien non.... cela ne fonctionne pas.

    Pour donner un exemple. Si j'ai la requête suivante où TBL_USER est une table et Q_CONNEXION est une requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TBL_USER.VCH_NOM, 
    TBL_USER.VCH_PRENOM, 
    Q_CONNEXION.DTE_DEBUT_CONNEXION, Q_CONNEXION.DTE_FIN_CONNEXION
    FROM TBL_USER INNER JOIN Q_CONNEXION ON TBL_USER.PK_NUM_USER = Q_CONNEXION.FK_NUM_USER;
    En cliquant sur SQL j'aurais le code que je viens d'écrire au dessus. Or, je souhaite avoir la même requête MAIS sans voir aparaitre Q_CONNEXION mais à la place les tables qui composent cette requête.

    Savez-vous comment faire?
    J'ai essayé d'activer la trace ODBC et d'appeller la requête à partir d'un programme externe. Mais la requête apparait comme au dessus dans la trace. Je ne connais pas d'autre solutions :-(

    Merci d'avance

  5. #5
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    il faut "Parser" le SQL de la requete ... on peut imaginer (vite fait)
    1- Repérer le début de l'instruction FROM
    2- Repérer la fin : apparition d'une autre instruction {WHERE, ORDER, HAVING, GROUP, ";" }
    3- Récupérer la chaine
    4- Pour chaque mot de la chaine, voir s'il s'agit d'une requete / table et si oui afficher le SQL
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    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 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Edith_T
    Ce que tu demandes n'est pas possible sous Access pour afficher les tables utilisées dans une sous-requète, il faut l'ouvrir en mode création/design. Sinon, tu peux reconstruire entièrement ta requète avec toutes les tables d'origine sans utiliser ta sous-requète Q_CONNEXION. Mais je suppose qu'il y a une bonne raison pour laquelle a été créée cette sous-requête : [/b]
    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 ?

  7. #7
    Candidat au Club
    Inscrit en
    Novembre 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Finalement j'ai trouvé une solution

    J'ai copier/coller le texte de ma requête en lui donnant un nouveau nom et à partir de cette nouvelle "table" j'ai construit graphiquement ma requête.
    J'avais déja essayé ça mais sans partir de ma requête reconstituée et du coup ça ne marchait pas.

    Par contre, cafeine, je n'ai pas trouvé par quel biais tu peux parser le SQL. Je suis preuneuse d'une petite explication à l'occasion.....

    Quoiqu'il en soit, merci BEAUCOUP.
    Je suis soulagée que ça marche enfin (enfin.... j'en ai l'impression )

  8. #8
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    bon c'est premier jet (code qui marche à partir de Access 2000)


    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
    Function ParseSQL(ByVal qryName As String)
     
    Dim i As Integer
    Dim sTemp() As String
    Dim sSQL As String
     
    sTemp = Split(CurrentDb.QueryDefs(qryName).SQL, "FROM ")
    sSQL = sTemp(1)
    sTemp = Split(sSQL, "WHERE ")
    sSQL = sTemp(0)
    sTemp = Split(sSQL, "ORDER ")
    sSQL = sTemp(0)
    sTemp = Split(sSQL, "HAVING ")
    sSQL = sTemp(0)
    sTemp = Split(sSQL, "GROUP ")
    sSQL = sTemp(0)
     
     
    Debug.Print "Clause FROM : " & sSQL
     
    sTemp = Split(sSQL, " ")
     
    For i = 0 To UBound(sTemp)
        Select Case Left(EstTableRequete(sTemp(i)), 1)
            Case "T"
                Debug.Print "  ==> Table : " & sTemp(i)
            Case "S"
                Debug.Print "  ==> Requête : " & sTemp(i)
                Debug.Print "      ==> " & EstTableRequete(sTemp(i))
     
        End Select
    Next i
     
    End Function
     
     
    Function EstTableRequete(ByVal str As String) As String
    EstTableRequete = ""
    Dim tbl As TableDef
    Dim qry As QueryDef
     
    For Each tbl In CurrentDb.TableDefs
        If tbl.Name = str Then
            EstTableRequete = "Table"
        End If
    Next tbl
     
    For Each qry In CurrentDb.QueryDefs
        If qry.Name = str Then
            EstTableRequete = "SQL : " & qry.SQL
        End If
    Next qry
     
    End Function
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  9. #9
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Bonjour Cafeine,

    Ton code est cool et j'étais parti sur la même idée avec le split. Toutefois je ne comprends pas pourquoi tu utilise un split avec Ahving. Le having ne s'utilise qu'aprés le group by donc en ayant déjà éliminé ce qu'il y a aprés le group, tu n'as pas besoin de rechercher le having si ?

    Et en reprenant ce code pour la fonction split, cela rend ton code compatible avec la version 97
    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
     
    Public Function FctSplit(ByVal strg As String, Sep As String) As Variant 
        Dim i As Integer 
        Dim TblSplit() As String 
        i = 1 
        While InStr(1, strg, Sep) <> 0 
            ReDim Preserve TblSplit(i) 
            TblSplit(i - 1) = Left(strg, InStr(1, strg, Sep) - 1) 
            strg = Mid(strg, InStr(1, strg, Sep) + Len(Sep)) 
            i = i + 1 
        Wend 
        If Len(strg) > 0 Then 
            ReDim Preserve TblSplit(i) 
            TblSplit(i - 1) = strg 
        End If 
        FctSplit = TblSplit 
    End Function

  10. #10
    Candidat au Club
    Inscrit en
    Novembre 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci bcp!
    J'essaierai ça. C'est interressant!

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

Discussions similaires

  1. Récupérer le code source à partir d'une URL
    Par shutdownfuri dans le forum Android
    Réponses: 1
    Dernier message: 16/10/2012, 12h49
  2. Obtenir un dump sql à partir d'une requête
    Par F2000 dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/04/2011, 05h11
  3. Réponses: 2
    Dernier message: 28/08/2006, 08h09
  4. [MySQL] Remplissage d'une liste déroulante à partir d'une requête SQL
    Par gaucher dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 11/05/2006, 15h46
  5. [SQL] Récupérer des variables de formulaire dans une requête SQL
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/11/2005, 18h44

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