par , 09/01/2016 à 17h11 (1107 Affichages)
Je vais traiter dans cette partie ma façon de gérer une table Paramètres afin de conserver les valeurs au gré du déroulement d'un applicatif.
Vous aurez compris, l'intérêt d'une table Paramètres permet de conserver les valeurs acquises même lorsqu'une erreur est levée par l'applicatif (en effet le contenu des variables globales est alors effacé). Un autre intérêt est de pouvoir visualiser rapidement le contenu de ces dites variables, rien de plus frustrant que de chercher dans le code la valeur d'une variable et l'endroit ou son contenu a été modifié.
Nous allons dans ce post en mode pas à pas apprendre à construire nos premiers outils d'aide au développement.
1. Construction de la table :
Cette entité est composé de deux champs nommés description et valeur. Description défini donc le type de variable alors que valeur décrit son contenu.
2. La partie VBA :
Afin d'utiliser cette table et la nourrir de nos précieuses informations il va nous falloir créer quelques fonctions :
- L'insertion des valeurs
- La récupération des valeurs
- La suppression des valeurs
a) L'insertion des valeurs :
Cette fonction nous permet d'insérer des valeurs dans notre table, ainsi l'insertion d'un ID, d'une clé ou toute autre information nécessitant un archivage pour une utilisation ultérieure. Cette fonction doit également contrôler l'existence d'une clé déjà présente, dans ce cas le type de requête exécutée sera Update et non Insert. Afin de contrôler l'existence d'une clé nous utiliserons la fonction Dcount ici détaillée : https://support.office.com/fr-fr/art...a-11a64acbf3d3
Le code permet d'utiliser cette fonction :
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
| Function InsertUpdate_Parametre(p_Description As String, p_Valeur As String) As Boolean
'
' Fonction permettant de Mettre à jour un Parametre dans la table T_Parametres
' la fonction détecte la présence de la clé dans ce cas update sinon Insert
' Retourne True si la fonction s'est correctement déroulée
On Error GoTo err_InsertUpdate_Parametre
'
' Inserer une nouvelle valeur dans les parametres
'
Dim R_Sql As String
If DCount("Valeur", "T_Parametres", "Description='" & p_Description & "'") = 0 Then
R_Sql = "INSERT INTO [T_Parametres] " & _
"(Description, Valeur) " & _
" VALUES (" & _
"'" & Nz(p_Description, "") & "', " & _
"'" & Protected_Quote(Nz(p_Valeur, "")) & "'" & _
")"
Else
'
' Modifier le contenu de la variable
'
R_Sql = "UPDATE T_Parametres SET T_Parametres.Valeur = '" & Protected_Quote(Nz(p_Valeur, "")) & "' WHERE (((T_Parametres.Description)='" & Nz(p_Description, "") & "'));"
End If
'
CurrentDb.Execute R_Sql, dbFailOnError
InsertUpdate_Parametre = True
Exit Function
err_InsertUpdate_Parametre:
MsgBox Err.Description & Err.Number
Exit Function
End Function |
Cette fonction exige deux arguments à savoir la clé de description et sa valeur ainsi l'utilisation de cette fonction pourrait s'opérer de la manière suivante :
InsertUpdate_Parametre "TVA_Normale",20.6
et l'alimentation dans la table T_Parametres nous fournirait ceci :
Il est à noter que la fonction retourne True si l'opération s'est correctement déroulée, l'utilisation du retour permettant d'anticiper certaines actions ou avertir l'utilisateur. La fonction Protected_Quote utilisée gère la présence de quotes dans la chaîne de caractère entraînant les erreurs d'interprétation de la requête.
1 2 3 4 5 6 7
| Function Protected_Quote(ChaineProtect As String) As String
'
' Fonction de protection visant à protéger les simple quotes et doublequotes dans les requetes SQL
'
Protected_Quote = Replace(ChaineProtect, "'", "''")
Protected_Quote = Replace(Protected_Quote, Chr(34), Chr(34) & Chr(34))
End Function |
b) Récupérer une valeur :
Lorsque les clés ont été enregistrées dans la base, une fonction permet de récupérer sa valeur ainsi le code suivant répond à cette problématique :
1 2 3 4 5 6 7
| Function Get_Parametre(p_Description As String) As String
'
' Fonction permettant de retourner un Parametre depuis la table T_Parametres
' Retourne une chaine vide si aucune occurence détectée
'
Get_Parametre = Nz(DLookup("Valeur", "T_Parametres", "Description='" & p_Description & "'"), "")
End Function |
Nous avons ici utilisé une fonction de domaine et principalement Dlookup. Je vous conseille la lecture de ce tutoriel afin de vous familiariser avec ces fonctions :
Les fonctions de domaines dans Access
A noter que si aucun valeur n'est trouvée dans la table, la fonction renvoie une chaîne vide.
un exemple d'utilisation :
msgbox "Le taux de TVA est : " & Get_Parametre("TVA_Normale")
c) La suppression d'une valeur :
Il peut être utile de supprimer une clé dans la table, voire éventuellement la totalité des entrées. L'implémentation de ce code répond donc à cette situation :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| Function Del_Parametre(Optional p_Description As String) As Boolean
'
' Fonction permettant de supprimer un Parametre dans la table T_Parametres
' Retourne True si la fonction s'est correctement déroulée
'
Dim R_Sql As String
On Error GoTo err_Del_Parametre
Select Case Nz(p_Description, "")
Case ""
R_Sql = "DELETE T_Parametres.Description FROM T_Parametres;"
Case Else
R_Sql = "DELETE T_Parametres.Description FROM T_Parametres WHERE (((T_Parametres.Description)='" & p_Description & "'));"
End Select
CurrentDb.Execute R_Sql, dbFailOnError
Del_Parametre = True
Exit Function
err_Del_Parametre:
MsgBox Err.Description & Err.Number
Exit Function
End Function |
Il est à noter que le retour de la fonction renvoie True si elle s'est correctement déroulée. Nous remarquerons que l'argument Optional n'implique pas nécessairement la présence d'une valeur dans l'appel de la fonction. Si aucun argument n'est renseigné, cela nous permettra de vider le contenu complet de la table. Quelques exemples d'appel ci-dessous :
1 2
| Del_Parametre "TVA_Normale" ' efface l'entrée Taux de tva
Del_Parametre ' Efface toutes les entrées de la table |
JimBolion