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 :)
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.