{"id":77,"date":"2025-06-13T21:45:10","date_gmt":"2025-06-13T21:45:10","guid":{"rendered":"https:\/\/loufab.alwaysdata.net\/blogaccess\/?p=77"},"modified":"2025-06-15T21:51:47","modified_gmt":"2025-06-15T21:51:47","slug":"access-la-persistance-1","status":"publish","type":"post","link":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/06\/13\/access-la-persistance-1\/","title":{"rendered":"ACCESS : La persistance (1)"},"content":{"rendered":"\n<p>Nous sommes conscient que la s\u00e9paration des donn\u00e9es et de l&rsquo;ihm est primordiale pour une application\u00a0MS Access. L&rsquo;attachement automatique est depuis de nombreuses ann\u00e9es rentr\u00e9 dans les m\u0153urs, chaque d\u00e9veloppeur\u00a0utilise le sien.<\/p>\n\n\n\n<p>Si au moment de l&rsquo;installation, il est obligatoire de sp\u00e9cifier le chemin du fichier de donn\u00e9es, lors des mises \u00e0 jour de l&rsquo;application cela peut agacer l&rsquo;utilisateur. Surtout si elles sont r\u00e9guli\u00e8res. On se doit alors d&rsquo;utiliser la persistance pour sauvegarder ces param\u00e8tres.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Comment cr\u00e9er de la persistance pour les param\u00e8tres d&rsquo;une application ?<\/h2>\n\n\n\n<p>En fait il n&rsquo;y a pas une, mais plusieurs m\u00e9thodes pour stocker ses valeurs de configuration. La premi\u00e8re utilise les fichiers ini. Ce sont des fichiers texte qui ont une structure particuli\u00e8re dont voici un exemple :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Etiquette1] \nparametre1=Valeur \nparametre2=Valeur \n\n&#91;Etiquette2] \nparametre1=Valeur<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Lire et \u00e9crire dans un fichier ini<\/h2>\n\n\n\n<p>Lire et \u00e9crire dans ce type de fichier ne constitue pas une grosse difficult\u00e9 puisque Windows poss\u00e8de ces 2 fonctions dans l&rsquo;API Kernel32.<\/p>\n\n\n\n<p>Je vous livre ici ces 2 fonctions impl\u00e9ment\u00e9es en VBA qui permettent de g\u00e9rer un fichier ini dans le r\u00e9pertoire de l&rsquo;application.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Private Declare Function GetPrivateProfileString Lib \"kernel32\" _ \n                Alias \"GetPrivateProfileStringA\" _ \n               (ByVal lpApplicationName As String, _ \n                ByVal lpKeyName As Any, ByVal lpDefault As String, _ \n                ByVal lpReturnedString As String, _ \n                ByVal nSize As Long, _ \n                ByVal lpFileName As String) As Long \n\nPrivate Declare Function WritePrivateProfileString Lib _ \n                \"kernel32\" Alias \"WritePrivateProfileStringA\" _ \n               (ByVal lpApplicationName As String, _ \n                ByVal lpKeyName As Any, ByVal lpString As Any, _ \n                ByVal lpFileName As String) As Long \n\nConst vgInifile = \"monapplication.ini\" \n\nFunction pIniLireParametre(vlEntete As String, _ \n         vlNomParametre As String) As String '---------------------------------------------------------------- \n' Procedure : pIniLireParametre \n' Description : renvoi un param\u00e8tre depuis un fichier ini \n' sp\u00e9cifi\u00e9 par vgIniFile \n' Parameters : vlNomParametre est le nom du param\u00e8tre \u00e0 renvoyer \n' Return : le param\u00e8tre correspondant \u00e0 vlNomParametre '---------------------------------------------------------------- \n\nOn Error GoTo Errsub \n\nDim vParam As String, vlLong As Long \n\nvParam = String(255, 0) \nvlLong = GetPrivateProfileString(vlEntete, vlNomParametre, _ \n         \"\", vParam, 255, CurrentProject.Path &amp; \"\\\" &amp; vgInifile) \n\nIf vlLong &lt;> 0 Then vParam = Left$(vParam, vlLong) \n\npIniLireParametre = RTrim(vParam) \nExit Function \n\nErrsub: pIniLireParametre = \"\" \n\nEnd Function \n\nFunction pIniEcrireParametre(vlEntete As String, _ \n         vlNomParametre As String, _ \n         vlValeurParametre As String) As Boolean '-------------------------------------------------------------- \n' Procedure : pIniEcrireParametre \n' Description : remplace le param\u00e8tre dans un fichier ini sp\u00e9cifi\u00e9 \n' Parameters : vlEntete est l'ent\u00eate de la rubrique &#91;] \n' vlNomParametre est le nom du param\u00e8tre \n' vlValeurParametre est la valeur du param\u00e8tre ' Return : N\/A '-------------------------------------------------------------- ' \nOn Error GoTo Errsub \n    pIniEcrireParametre = True \n    WritePrivateProfileString vlEntete, vlNomParametre, vlValeurParametre, _ \n          CurrentProject.Path &amp; \"\\\" &amp; vgInifile \n\nExit Function \n\nErrsub: \npIniEcrireParametre = False \n\nEnd Function<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Mise en \u0153uvre de la persistance<\/h2>\n\n\n\n<p>Admettons un fichier Ini comportant plusieurs param\u00e8tres dont celui indiquant le r\u00e9pertoire du fichier de donn\u00e9es.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Donnees] \nCheminData=C:\\Donnees\\ApplicationData\\data.accdb<\/code><\/pre>\n\n\n\n<p>La lecture se fera via l&rsquo;instruction suivante :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>vFichierData = pIniLireParametre(\"Donnees\", \"CheminData\")<\/code><\/pre>\n\n\n\n<p>Il sera alors tr\u00e8s simple de v\u00e9rifier le chemin fourni et celui des tables attach\u00e9es.<\/p>\n\n\n\n<p>Pour \u00e9crire le param\u00e8tre on utilise cette instruction lors de la premi\u00e8re installation :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pIniEcrireParametre \"Donnees\", \"CheminData\", _ \n         \"c:\\Donnees\\ApplicationData\\data.accdb\"<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>En&nbsp;quelques commandes vous avez donn\u00e9 de la persistance \u00e0 votre application et apporter un s\u00e9rieux gain de confort \u00e0 l&rsquo;utilisateur.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nous sommes conscient que la s\u00e9paration des donn\u00e9es et de l&rsquo;ihm est primordiale pour une application\u00a0MS Access. L&rsquo;attachement automatique est depuis de nombreuses ann\u00e9es rentr\u00e9 dans les m\u0153urs, chaque d\u00e9veloppeur\u00a0utilise le sien. Si au moment de l&rsquo;installation, il est obligatoire &hellip; <a href=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/06\/13\/access-la-persistance-1\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,6],"tags":[11,7],"class_list":["post-77","post","type-post","status-publish","format-standard","hentry","category-access","category-code-vba","tag-access","tag-code-vba"],"_links":{"self":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/77","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/comments?post=77"}],"version-history":[{"count":2,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/77\/revisions"}],"predecessor-version":[{"id":122,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/77\/revisions\/122"}],"wp:attachment":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/media?parent=77"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/categories?post=77"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/tags?post=77"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}