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