HELP !chemin de ma BDD access amené à changer - VB/VBA/VBS - Programmation
Marsh Posté le 21-04-2005 à 08:37:59
Salut, 
 
Et voilà le retour de l'éternel problème des BDs Access  
 
En fait tu n'as pas beaucoup de choix: 
1/ Tu écris dans un ini ou dans la base de registre le chemin de la DB 
2/ Dans ton programme tu obliges à chaque fois l'utilisateur à aller choisir sa base de données. 
 
Dans les deux cas, tu récupères un string qui est le chemin complet de la DB. Et tu peux aussi faire les deux  
 
 
Comme ça ton utilisateur peut choisir où il met sa DB et il n'a pas besoin de la rouvrir à chaque fois! 
 
J'espère que ça t'a aidé
Marsh Posté le 28-08-2010 à 22:13:24
Bonjour, 
je déterre ce topic car j'ai sensiblement le même problème. 
 
j'ai un fichier serveur.mbd (contenant les tables) qui est dans le répertoire C:\Program Files 
un fichier client contenant les requetes et formulaire que je peux copier où je veux. 
 
depuis le fichier client, j'ai lié les tables au fichiers serveur puis ai enregistré le fichier client en mde pour le proteger. 
 
j'aimerais avoir la possibilité de déplacer le fichier serveur et de modifier le chemin via un formulaire accessible depuis le fichier client. le problème est que je n'ai aucune idée du code à mettre dans ce formulaire 
 
pouvez vous m'expliquer comment faire ? 
 
merci
Marsh Posté le 06-09-2010 à 14:45:37
Hello 
 
Regarde un truc comme ceci : 
| Code : 
 | 
Marsh Posté le 23-09-2010 à 13:12:18
Bonjour, 
Merci pour l'aide mais où dois-je mettre ce code ?  
 
Merci 
Marsh Posté le 23-09-2010 à 13:14:37
ReplyMarsh Posté le 23-09-2010 à 13:22:03
rapide   
  
 
c'est bien ce que j'ai fais mais j'ai une  
 
"erreur d'execution '3219' : 
Opération non valide 
 
l'erreur est sur la ligne en rouge, je ne sais pas comment inscrire Nom et Chemin de la base 
 
With bds 
    For Each tdf In .TableDefs 
        If tdf.SourceTableName <> "D:\InfoCenterServeur" Then 
            tdf.Connect = ";DATABASE=" & NomEtCheminDeTaBase 
            tdf.RefreshLink 
        End If 
    Next tdf 
End With 
 
Marsh Posté le 23-09-2010 à 13:34:06
re 
 
erreur 3024 : 
fichier "D:\InfoCenterServeur" introuvable 
 
la ligne en rouge est surmligné en jaune 
 
 
 
 
Set bds = CurrentDb 
 
With bds 
    For Each tdf In .TableDefs 
        If tdf.SourceTableName <> "" Then 
            tdf.Connect = ";DATABASE=" & "D:\InfoCenterServeur" 
            tdf.RefreshLink 
        End If 
    Next tdf 
End With
Marsh Posté le 23-09-2010 à 13:35:32
Bah NomEtCheminDeTaBase ce n'est qu'une variable pour te montrer comment la definir... 
 
Imaginons que tu veuilles te lier a ta base se trouvant sur \\Serveur\D$\serveur.mdb 
 
Tu as donc deux possibilités : 
 
1/ La passer en dur : 
| Code : 
 | 
 
 
2/ utiliser une variable en début de code, ou pour affecter par exemple un champ de ton formulaire a cette variable etc. 
| Code : 
 | 
 
 
 
Ou avec un chemin plus "simple", si ta base est sur C:\serveur.mdb : 
| Code : 
 | 
 
 
ou avec la variable : 
| Code : 
 | 
 
 
Marsh Posté le 23-09-2010 à 14:10:20
Merci. C'est beaucoup mieux comme ça   
  
 
je n'ai pas compris quelle était la différence entre (1 et 3) et (2 et 4) ? 
 
j'ai donc crée une table contenant un champ "chemin", et l'ai associé avec le formulaire de démarrage et en refusant l'ajout d'enregistrement. J'y ai mis un champ "Chemin" avec comme source, le champ "chemin" 
 
 
 
NomEtCheminDeTaBase = Chemin.Value 
 
Set bds = CurrentDb 
 
With bds 
    For Each tdf In .TableDefs 
        If tdf.SourceTableName <> "" Then 
            tdf.Connect = ";DATABASE=" & NomEtCheminDeTaBase 
            tdf.RefreshLink 
        End If 
    Next tdf 
End With
Marsh Posté le 23-09-2010 à 14:23:50
Bah ne connaissant pas tes connaissances en informatique, j'ai realisé apres qu'un chemin UNC ne parlait pas a tout le monde... 
Et que le \\Serveur\etc pourrait poser souci. 
J'ai donc refait un exemple avec un chemin en specifiant une lettre de lecteur 
  
 
 
Edit : tu aurais pu te passer de variable  
 
tdf.Connect = ";DATABASE=" & Chemin.Value 
Marsh Posté le 23-09-2010 à 15:26:09
ah oui, tu as raison, elle ne sert à rien 
 
Merci de ton aide
Marsh Posté le 24-09-2010 à 20:12:02
Re Bonjour, 
Je rencontre un problème avec une base contenant plusieurs fichiers serveurs. 
 
je m'explique : 
 
j'ai un fichier serveur.mde et un client.mde 
le serveur.mde contient les table 
le fichier client.mde contient formulaires, requetes..... 
 
je lie ensuite les tables du fichiers serveur.mde à mon client.mde 
 
pour éviter de casser le fichier serveur.mde lorsque je fais évoluer ma base, je créais des module_xx.mde s'ajoutant au serveur.mde 
 
je lie de la même manière les tables des module_xx.mde au fichier client.mde 
 
comment adapter le code si dessus à plusieurs fichier serveur ? 
 
merci
Marsh Posté le 24-09-2010 à 21:43:16
Bah tu testes en fonction du nom de la table, ou en fonction de la liaison existante.
Marsh Posté le 25-09-2010 à 22:46:17
hello, 
j'ai beau chercher, je ne trouve pas 
Marsh Posté le 27-09-2010 à 13:35:55
N'arrivant pas à comprendre ce qu'il se passe j'ai recrée un fichier client et 2 fichiers serveur. L'erreur est la même.... 
 
avez-vous une idées svp ?
Marsh Posté le 27-09-2010 à 15:07:02
Quelle erreur ? Ou ca ? A quel moment dans le code ? 
Faut expliquer hein, moi j'ai pas ta base sous les yeux... 
 
De plus tu as toutes les infos... Faut tester pour voir ce que renvoient certaines propriétés ou variable. 
Par exemple si tu avais placé un "MsgBox tdf.Connect" tu te serais rendu compte que le prog te renvoyais a quelle base est attachée la table. Donc tu peux tester des choses sur tdf.Connect 
| Code : 
 | 
 
 
Ou si tu avais placé un "Msgbox tdf.Name" tu te serais rendu compte que le prog te renvoyais le nom de la table qu'il traite. Tu aurais pu tester des choses sur le nom de la table avec tdf.name 
| Code : 
 | 
 
 
C'est quand meme pas bien dur a tester : 
| Code : 
 | 
 
 
 
 
 
Il y un paquet de solutions pourtant. 
deux idées et un exemple comme ca : 
 
Imaginons que tu ai 4 tables, Table1, Table2, Table3 et Table4. Table1 et Table2 sont liées a la base1, Table3 et Table4 sont liées a la base2 
| Code : 
 | 
 
 
 
| Code : 
 | 
 
 
Petit NB : Une base de programme lié a 2 bases de données access, ca ralenti enormement les process
Marsh Posté le 27-09-2010 à 15:43:07
je suis une brelle en programmation, je suis moins pire en réseau.... 
 
je viens de me rendre compte qu'il me manquait "elseif" dans mon code, car j'ai bien essayé les codes que tu m'annonces mais sans cette "condition", ça ne pouvait pas fonctionner. 
 
Quand à la "case", je ne sais pas m'en servir 
 
Je regarde ça ce soir, en rentrant chez moi, je suis certain que ça va mieux fonctionner  
 
 
@+
Marsh Posté le 29-09-2010 à 11:42:34
hello, 
bon finallement, j'ai voulu tester la fonction "Case" : ça marche super. 
 
concernant le ralentissement, ça ne devrait pas être trop un souci car la casi totalité des utilisateurs de mes bases, les installent en local, sur leur machine perso, à titre perso et non pro, je me fais pas trop de souci. 
 
Merci pour tes explications  
 
 
Marsh Posté le 20-04-2005 à 22:09:53
bjr,
g un programme sous VB6 dans lequel des personnes répondent à 1 questionnaire, les réponses sont envoyées et stockées dans Access.
Jusqu'a present mon fichier .mdb était sur le disque c:\ d'un ordi, mais aujourd'hui, je dois installer mon soft sur 4 machines qui doivent envoyer à la fin du test, les données saisies, sur un serveur réseau(de plus ce serveur est amené à changer parfois).
Le chemin actuel pour acceder a la BDD est (dans un module) --->
Set dbABC = Workspaces(0).OpenDatabase("c:\ABC.MDB" ), il me suffisait de compiler et de placer ABC.Mdb sur le C:\
Mais là, si le chemin d'accès doit changer, comment faire? car en plus, je ne peux plus faure d'exe ???
merci a bientot