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

VBA Access Discussion :

Comment gérer des préférences de base de données à partir d'une table ou fichier


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Comment gérer des préférences de base de données à partir d'une table ou fichier
    Bonjour à vous !

    Je suis confronté à un problème que je traine depuis un bout de temps.
    Je vous met en situation.
    J'ai développé une application qui me permet de générer des rapports de missions : ces rapports contiennent surtout du texte mais aussi des croquis et des photos.
    La base de donnée est divisée en deux : une dorsale (données) et une frontale (user).
    Jusqu'à maintenant, je fonctionnait en local sur un seul poste, mais j'aurais besoin d'utiliser ma base en réseau. Le problème est que mes croquis sont stockés sur le "serveur" avec la base dorsale et que le chemin d'accès au croquis est stocké sous forme "c:\Repertoire\croquis.jpg" dans un champ texte. Donc si je veux consulter, à partir du poste distant, une mission saisie sur le poste serveur, lors de l'accès au croquis le chemin d'accès sera invalide car ma base frontale cherchera a charger le croquis à partir de C:\ et non à partir de mon lecteur réseau. (j'utilise la méthode de stockage d'images de Caféine).

    L'autre soucis est que j'utilise la fonction "CurrentProject.path" (plutôt que d'écrire "en dur" c:\Repertoire_de_mon_appli) pour aller chercher le chemin d'accès au croquis.

    Ma question pour résoudre ce problème est la suivante : comment faire pour écrire et utiliser des paramètres (comme le chemin d'accès à mon serveur) dans une table "paramètres" ou bien un fichier de type "parametres.txt".

    J'ai déjà essayé de me débrouiller avec des variables globales, des constantes, une table paramètres, mais je ne suis pas encore assez à l'aise avec VBA pour access. Je suis autodidacte et encore bourré de lacunes.

    Je vous remercie d'avance de votre réponse.

    Chris

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 596
    Points : 34 282
    Points
    34 282
    Par défaut
    Salut,
    quelques propositions pour ton pb:
    - 1 tables T_parametres avec
    - Libelle
    - Valeur
    que tu modifies, tu mets à jour et tout. Tu te créés une fonction qui va chercher à chaque fois les valeurs en question et c'est bon

    - utilisation de l'adresse d'une machine du réseau, sur laquelle sera stockée l'image
    - utilisation d'une image sur un serveur sur le net

    Les lacunes, c'est bon mangez-en
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Bonjour,

    Je pense que tu devrais commencer par lire cet excellent tuto sur la mise en oeuvre d'une base multi-utilisateurs....
    http://dolphy35.developpez.com/artic.../basesreseaux/

    De plus effectue quelque recherche dans les anciens posts...(très utile..)
    http://www.developpez.net/forums/sho...dresse+serveur
    http://www.developpez.net/forums/sho...ht=base+reseau


    ....quelques bons liens ici:
    http://www.developpez.net/forums/sho...ht=base+reseau

    Voila, avec tout ceci je pense que tu devrais maintenant avoir une idée sur la façon de procéder...Bonne lecture....
    FreeAccess
    "Petit à petit l'araignée tisse sa toile"

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    [QUOTE=jpcheck;2798854]Salut,
    quelques propositions pour ton pb:
    - 1 tables T_parametres avec
    - Libelle
    - Valeur
    que tu modifies, tu mets à jour et tout. Tu te créés une fonction qui va chercher à chaque fois les valeurs en question et c'est bon

    - utilisation de l'adresse d'une machine du réseau, sur laquelle sera stockée l'image
    - utilisation d'une image sur un serveur sur le net

    Le principe, je l'avais, mais c'est pour la mise en oeuvre que je posais ma question : par exemple tu me dis "tu te créés une fonction qui va chercher...", c'est précisement là que le bas blesse. Je suis autodidacte et n'ai donc suivi aucun cours de programmation. Donc pour manipuler ce genre de donnée je suis limité. Un exemple existant me satisferai mais j'ai fais des recherches et n'ai pas trouvé chaussure à mon pied. Je suis capable de lire un code et de le décortiquer, mais pas encore capable de le pondre entièrement de moi-même.

    Merci quand même de m'avoir lu


    J'ai déjà parcouru les liens postés par FreeAccess, ils sont absolument indispensables dans mon cas de figure mais ne répondent pas entierement à ma question:

    La création d'une fonction que je pourrais appeler à loisirs à partir de n'importe quel formulaire pour récupérer le chemin d'accès à mon serveur, qu'ilsoit stocké dans une table paramètres ou bien fichier config.txt par exemple.

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 91
    Points : 58
    Points
    58
    Par défaut
    Bonjour,

    Si tu stock tes chemin dans ta table Paramètre, tu peux aussi utiliser la fonction DLookUp pour récupérer ce chemin lorque tu en a besoin...

    Par exemple si tu as dans ta table Parametre
    Valeur | Libelle
    DB | E:\ ...\Base\ (chemin réseau de la base)
    Img |E:\...\Images\ (chemin réseau pour les images)

    tu fais dans ton programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strCheminBase=DLookUp("Libelle","Parametre","Valeur='DB'")
    strCheminImage=DLookUp("Libelle","Parametre","Valeur='Img'")
    Enfin un truc comme ca ...

    Bonne continuation

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    merci, ça me parle déjà mieux !

    je vais tâcher d'appliquer cette solution à ma base

    A+

  7. #7
    Membre actif
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Points : 222
    Points
    222
    Par défaut
    Je reprends ton message d'origine Tu veux ouvrir une image pour laquelle tu as conservé le nom de fichier dans un table appelona la champ Img (exemple Img contient "c:\Repertoire\croquis.jpg")
    Lorsque tu as déplacé la base le fichier "c:\Repertoire\croquis.jpg" n'et plus disponible par contre tu sais dans ce cas là qu'il est situé surle même répertoire que la base de donné soit si dans un sous répertoire des image:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CurrentProject.path & "\Image\croquis.img" 'le code suivant fait ceque tu demande
    dim tampon as string
    On error resume next 
    Tampon =dir(Img)
    if Tampon = "" then '( le fichier n'éxiste pas)

  8. #8
    Membre actif
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Points : 222
    Points
    222
    Par défaut
    Salut,
    Je reprends ton message d'origine.
    Tu veux ouvrir une image pour laquelle tu as conservé le nom de fichier dans un table, dans un champ que nous appellerons Img (exemple Img contient "c:\Repertoire\croquis.jpg")

    Lorsque tu as déplacé la base sur une ressource partagée le fichier "c:\Repertoire\croquis.jpg" n'est plus disponible. Par contre tu sais dans ce cas là qu'il est situé sur le même répertoire que la base de données plus particulièrement sur un sous répertoire des image:
    CurrentProject.path & "\Image\croquis.img" le code suivant fait ce que tu demandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    dim Tampon as string
    On error resume next 
    if dir(Img)= "" then '( le fichier n'existe pas)
    Tampon = CurrentProject.path & "\Image" & mid(Img,inStrRev(Img,"\"))
    '<je charge l'image>  paramètre ==>Tampon
    else  
    '<je charge l'image> paramètre ==>Img
    endif
    Cette solution t'évite une table de paramètres pour laquelle il faudra que tu prévois une "installation".

    La fonction dir donne comme résultat la liste des fichiers du masque donné en paramètre; elle renvoie "chaine vide" s'il n'y a pas de fichier recherché

    La fonction inStrRev renvoie la position ou commence la 2 éme chaine (\ dans le code fourni) à partir de la fin de la 1er chaine.

    Dans le cas ou le fichier n'est pas présent en locale Tampon renverrait quelque chose comme "Z:\Moninstalle\Image\croquis.jpg"

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Après avoir lu vos différentes propositions et testé plusieurs d'entre elles, j'en suis arrivé à faire ceci : (basé sur la solution de caféine pour gérer des images)

    Auparavant, en monoposte, mon champs "imagepath" contenait le chemin complet de l'accès à mon fichier jpg, et mon champ image "imageframe" affichait l'image à partir dur chemin d'accès.

    Maintenant, mon champ "imageframe" s'occupe toujours d'afficher l'image dont le chemin d'accès figure dans le champs texte "imagepath", à la différence que lorsque je vais sélectionner l'image qui m'intéresse (par le biais d'une fenêtre de selection de fichier), je ne stock dans mon "imagepath" que le chemin d'accès à l'image sans la lettre de lecteur (sous forme ":\repertoire\image.jpg". )
    Je reconstitue ensuite le chemin complet en lisant dans un fichier config.ini la lettre de lecteur que j'y ai paramétré au préalable et je fais afficher à mon "imageframe" le fichier avec son chemin reconstitué.

    Ainsi quel que soit le lecteur réseau paramétré dans mon config.ini (à condition evidement de connecter le lecteur réseau avec la bonne lettre) et quel que soit le PC sur lequel ma base frontale est installée, je peux utiliser mon prog sans problèmes en réseau.


    Merci encore à tous pour votre temps

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [URL rewriting] Gérer des ID en base de données
    Par mims1664 dans le forum Apache
    Réponses: 11
    Dernier message: 26/03/2012, 21h57
  2. Mettre en place une base de données à partir d'une sauvegarde
    Par snopims dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 16/09/2008, 10h13
  3. [C#2.0] Mettre à jour la base de données à partir d'une DataTable
    Par Rodie dans le forum Accès aux données
    Réponses: 6
    Dernier message: 16/05/2007, 14h24
  4. Réponses: 1
    Dernier message: 02/02/2007, 10h29
  5. [MySQL] Enregistrer dans une base de données à partir d'une liste déroulante
    Par snakejl dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 17/05/2006, 16h32

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