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

Contribuez Discussion :

Utilitaire pour formater le SQL


Sujet :

Contribuez

  1. #1
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut Utilitaire pour formater le SQL
    Bonjour,
    Cette contribution s’adresse aux visiteurs du forum qui éprouvent des difficultés à coder des instructions sql dans lesquelles interviennent des comparaisons avec des champs de type texte (les double-quotes, simple-quotes …), ou des champs date (les dièses) sans parler des syntaxes genre tel champ comme "*" & UneValeur & "*"
    Des exemples courants :
    - comment construire la source d’un formulaire en la limitant selon des valeurs exprimées dans un autre formulaire ? ( …RecordSource = "SELECT ….. ")
    - construire l’équivalent d’une requête et l’exécuter (DoCmd.RunSQL ("SELECT ...
    - construire un RecordSet (set rst = CurrentDb.OpenRecordset("SELECT ...

    La proposition :
    Un utilitaire sous la forme d’un formulaire.
    A son ouverture il propose de choisir une des requêtes de la BDD.
    Le programme affiche le résultat de la transformation du sql de cette requête pour le rendre compatible avec le code VBA et copie le contenu dans le presse-papier.
    Il suffit alors de coller le presse-papier (<ctrl> + v) à l’endroit choisi.

    Restriction
    Pas de formulaire dont le nom contient le chaîne de caractères : "formulaire".
    Pas d’état dont le nom contient le chaîne de caractères : "état".
    En effet, le processus de formatage transforme le mot clé "formulaire" en "form" et "état" en "report".


    Pour utiliser

    Il faut d’abord importer le formulaire "fChoisirUnModele" dans votre BDD.
    Ouvrez simultanément votre BDD et celle ci-jointe.



    Pointez le formulaire "fChoisirUnModele", maintenez enfoncé le bouton gauche de la souris et faites glisser vers votre BDD.
    C’est prêt !



    Exemples d’utilisation

    Aménager le sql de la source d’un formulaire

    A l’origine, la source du formulaire "Recettes" est la table "tRecettes"
    On voudrait ouvrir ce formulaire en limitant les enregistrements à ceux qui satisfont aux critères exprimés dans le formulaire "fRechercher"



    Avec l’assistant Access, on crée la requête qui permet de sélectionner les enregistrements concernés :



    On sauve cette requête (ici : "sqfRecettesSource")
    On ouvre maintenant le formulaire "fChoisirUnModele" et dans la liste, on choisit comme modèle "sqfRecettesSource"

    Le sql formaté apparaît dans la fenêtre et est automatiquement copié dans votre presse-papier.



    Reste à composer le code associé au bouton de notre formulaire en construction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub OuvrirAvecSelection_Click()
    DoCmd.OpenForm "fRecettes"
    Forms!fRecettes.RecordSource =|
    End Sub
    à ce stade, le curseur placé à droite du "=", enfoncez <ctrl> + V pour coller le contenu du presse-papier.
    Ce qui nous donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub OuvrirAvecSelection_Click()
    DoCmd.OpenForm "fRecettes"
    Forms!fRecettes.RecordSource = "SELECT DISTINCT tRecettes.* FROM (tRecettes INNER JOIN tDerivee ON [tRecettes].[NomGenerique]=[tDerivee].[NomGenerique]) INNER JOIN tIngredients ON [tRecettes].[NomGenerique]=[tIngredients].[NomGenerique] WHERE ((([tRecettes].[NomGenerique]) Like ""*"" & [Forms]![fRechercher]![zdlFiltreGenerique] & ""*"") And (([tDerivee].[Derivee]) Like ""*"" & [Forms]![fRechercher]![zdlFiltreDerivee] & ""*"") And (([tIngredients].[Ingredient]) Like ""*"" & [Forms]![fRechercher]![zdlFiltreIngredient] & ""*"") And (([tDerivee].[Statut]) Like ""*"" & [Forms]![fRechercher]![zdlFiltreStatut] & ""*"") And (([tRecettes].[Categorie]) Like ""*"" & [Forms]![fRechercher]![zdlFiltreCategorie] & ""*"")); "
    End Sub
    Remplacer un requête par l’exécution d’une Sub

    Soit la requête "qExemple2ExecuterUneRequete" :



    Pour l’exécuter, il faut la double-cliquer dans la fenêtre de base de données.

    On voudrait la remplacer par du code dans une Sub.
    On ouvre le formulaire "fChoisirUnModele" et dans la liste, on choisit comme modèle " qExemple2ExecuterUneRequete"



    Dans un module, on crée le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Sub Exemple2()
    'Remplacer la requête par du code
    DoCmd.RunSQL (|) 
    End Sub
    Entre les deux parenthèses de DoCmd.RunSQL (), on colle le contenu du presse-papier et il vient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Sub Exemple2()
    'Remplacer la requête par du code
    DoCmd.RunSQL ("SELECT VINS.* INTO VinsEnStock FROM VINS WHERE (((VINS.STOCK)<>0) AND ((VINS.MILLESIME)=[Quel millésime ?])); ")
    End Sub
    Un mot au sujet de la programmation

    A l’ouverture du formulaire, on aménage la liste de valeurs avec les noms des requêtes de la BDD :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Form_Open(Cancel As Integer)
    Dim qdf As DAO.QueryDef
    Me.zdlModele = ""
    For Each qdf In CurrentDb.QueryDefs
            If Left(qdf.Name, 1) <> "~" Then ' ne pas considérer les queries des zones de liste
               Me.zdlModele.RowSource = Me.zdlModele.RowSource & qdf.Name & ";"
            End If
        Next
                    ' dérouler la liste
    DoCmd.GoToControl "zdlModele"
        Me.zdlModele.Dropdown
    End Sub
    La mise à jour de la zone de liste déclenche le processus de formatage :
    - capter le code de la requête choisie comme modèle
    - mettre sur une ligne
    - "défranciser" la syntaxe
    - doubler les double-quotes
    - encadrer le tout de double-quotes
    - copier dans le presse-papier

    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
    Private Sub zdlModele_AfterUpdate()
    Dim qry As QueryDef
    Set qry = CurrentDb.QueryDefs(Me.zdlModele)
    'Capter le SQL
    Me.zdtSqlReformate = qry.sql
    'mettre sur une ligne
    Me.zdtSqlReformate = Replace(Me.zdtSqlReformate, Chr(13) & Chr(10), " ")
    ' "défranciser"
    Me.zdtSqlReformate = Replace(Me.zdtSqlReformate, "formulaire", "form")
    Me.zdtSqlReformate = Replace(Me.zdtSqlReformate, "état", "Report")
    'doubler les double-quotes
    Me.zdtSqlReformate = Replace(Me.zdtSqlReformate, """", """""")
    'Encadrer le tout de double-quotes
    Me.zdtSqlReformate = """" & Me.zdtSqlReformate & """"
    'Copier dans le presse-papier
    DoCmd.GoToControl "zdtSqlReformate"
    DoCmd.RunCommand acCmdCopy
    End Sub
    En espérant que ce petit outil sera utile au plus grand nombre....en attente d'amélioration éventuelle ...
    Remarques et suggestions, bienvenues.
    Cordialement.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Formater une chaine pour une instruction SQL
    Par Coicatak dans le forum C#
    Réponses: 5
    Dernier message: 20/12/2011, 23h43
  2. utilitaire pour exécuter un script sql
    Par cedced22 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 02/09/2009, 09h02
  3. [SQL] Formater chaîne SQL pour HTML
    Par conics dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 11/09/2007, 15h39
  4. Utilitaire pour générer la documentation d'une BD SQL
    Par carjo dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 04/05/2006, 18h41
  5. Utilitaire générique pour formater une clé USB
    Par Giovanny Temgoua dans le forum Périphériques
    Réponses: 22
    Dernier message: 03/05/2006, 09h21

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