Recherche de chaine de caracteres dans une requete d'une base de données access.

Contenu du snippet

Ce bout de code, permet de faire une recherche dans toutes les requetes Access d'une chaine de caracteres a rechercher. Celui ci affichera toutes les requetes qui trouvent dans la fenetre correspondante. Un simple double clique sur un résultat, ouvrira la requete en mode création.
L'autre fonction de ce code est l'affichage SQL d'une requete d'une base de données Access.

L'utilité ?
Lorsqu'on a a refaire pleins de requetes, ou à les rendre dynamiques. Une simple recherche, un copier coller dans le code suffise. Ca évite bcp de manipulations pour ouvrir une requete et récupérer son code SQL.

Elements du formulaire ?
- Boite modifiable * 2 (noms : SQL_Search, SQL_Query)
- Liste (nom : lst_SQL)
- Zone de texte (nom : SQL_Def)
- Boutons * 2 (noms : commande2, SQL_Exec_Def)
Désolé pour les noms des éléments, c'est un peu à la va vite ! (Beaucoup meme, mais vous saurez les renommer :) )

Source / Exemple :


' on déclare nos variables avec la portée du formulaire entier
Dim bd As Database
Dim strSearch  As String
Dim strResultat As String

Private Sub Commande2_Click()
    
    ' initialisation des variables
    Dim query As QueryDef ' Définition de requete
    
    ' affection de valeur aux variables
    strResultat = ""
    
    ' On controle le champs de la valeur a chercher
    If SQL_Search.Value <> vbNullString Then
        ' On recupere la valeur a rechercher
        strSearch = SQL_Search.Value
        
        ' on parcourt toutes les requetes de la base de données
        For Each query In bd.QueryDefs
            ' si on trouve la chaine de caractere dans le code SQL de
            ' la requete en cours alors on récupere son nom
            If InStr(1, query.SQL, strSearch) Then
                ' On recupere le nom de la requete, et la séparer par un ';'
                ' avec les autres résultats
                strResultat = strResultat & query.Name & ";"
            End If
        ' on boucle sur la prochaine requete
        Next
        ' si on a pas de résultat
        If strResultat = "" Then
            ' on en averti l'utilisateur
            strResultat = "Non trouvé"
        End If
    Else
        ' la chaine a recherché est vide
        strResultat = "Pas de valeurs indiqué"
    End If
    
    ' le contenu de la liste est une liste de valeurs.
    ' ce qui signifie, que Access mettra dans la liste, chaque éléments séparé par des ';'
    lst_SQL.RowSourceType = "Value List"
    ' On affecte le résulat a la liste
    lst_SQL.RowSource = strResultat
End Sub

Private Sub Form_Load()
    ' on instancie la base de données courante
    Set bd = CurrentDb
End Sub

Private Sub lst_SQL_DblClick(Cancel As Integer)
    ' on a double cliqué sur un résultat, on ouvre la requete en mode création
    DoCmd.OpenQuery lst_SQL.Value, acViewDesign
End Sub

Private Sub SQL_Exec_Def_Click()
    ' Déclaration des variables
    Dim query As QueryDef ' Définition de requete
    
    ' affection de valeur aux variables
    strResultat = ""
    
    ' On vérifie la présence d'informations
    If SQL_Search.Value <> vbNullString Then
        'On recupere la chaine a rechercher
        strSearch = SQL_Query.Value
        
        ' on parcourt toutes les requetes de la base
        For Each query In bd.QueryDefs
            ' si on trouve une correspondance entre la chaine a recherché
            ' et la requete en cours alors on a trouvé un resultat
            If InStr(1, query.Name, strSearch) Then
                ' on recupere le code SQL de la requete trouvé
                strResultat = query.SQL
                ' on sort du FOR
                Exit For
            Else
                ' On a trouvé aucun résultat, on le signale
                strResultat = "Non trouvé"
            End If
        ' Hop, on boucle sur la prochaine requete
        Next
    Else
        ' le nom de la requete a rechercher est vide
        strResultat = "Pas de valeurs indiqué"
    End If
    ' On affiche le résultat trouvé
    SQL_Def.Value = strResultat
End Sub

Conclusion :


J'ai essayé de la commenter au maximum. Ce bout de code n'a la prétention de rien, juste peut etre de jouer sur plusieurs terrains (liste, boucle, collections, controle de champs...) pour aider les newbies comme moi. ^^

Soyez indulgent c'est ma 1ere source :$

Merci à vous, et bonne critique :)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.