Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2366 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  HELP !chemin de ma BDD access amené à changer

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

HELP !chemin de ma BDD access amené à changer

n°1054405
tiyan
Posté le 20-04-2005 à 22:09:53  profilanswer
 

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
 

mood
Publicité
Posté le 20-04-2005 à 22:09:53  profilanswer
 

n°1054780
gfa
Posté le 21-04-2005 à 08:37:59  profilanswer
 

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é

n°2019633
willou-78
Posté le 28-08-2010 à 22:13:24  profilanswer
 

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


Message édité par willou-78 le 28-08-2010 à 22:13:44
n°2021421
SuppotDeSa​Tante
Aka dje69r
Posté le 06-09-2010 à 14:45:37  profilanswer
 

Hello
 
Regarde un truc comme ceci :

Code :
  1. Set bds = CurrentDb
  2. With bds
  3.     For Each tdf In .TableDefs
  4.         If tdf.SourceTableName <> "" Then
  5.             tdf.Connect = ";DATABASE=" & NomEtCheminDeTaBase
  6.             tdf.RefreshLink
  7.         End If
  8.     Next tdf
  9. End With


Message édité par SuppotDeSaTante le 06-09-2010 à 14:46:07

---------------
Soyez malin, louez entre voisins !
n°2024674
willou-78
Posté le 23-09-2010 à 13:12:18  profilanswer
 

Bonjour,
Merci pour l'aide mais où dois-je mettre ce code ?  
 
Merci

n°2024675
SuppotDeSa​Tante
Aka dje69r
Posté le 23-09-2010 à 13:14:37  profilanswer
 

Bah derriere le bouton de ton formulaire...


---------------
Soyez malin, louez entre voisins !
n°2024676
willou-78
Posté le 23-09-2010 à 13:22:03  profilanswer
 

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
 

n°2024677
willou-78
Posté le 23-09-2010 à 13:34:06  profilanswer
 

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


Message édité par willou-78 le 23-09-2010 à 13:34:23
n°2024678
SuppotDeSa​Tante
Aka dje69r
Posté le 23-09-2010 à 13:35:32  profilanswer
 

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 :
  1. Set bds = CurrentDb
  2. With bds
  3.     For Each tdf In .TableDefs
  4.         If tdf.SourceTableName <> "" Then
  5.             tdf.Connect = ";DATABASE=\\Serveur\D$\serveur.mdb"
  6.             tdf.RefreshLink
  7.         End If
  8.     Next tdf
  9. End With


 
2/ utiliser une variable en début de code, ou pour affecter par exemple un champ de ton formulaire a cette variable etc.

Code :
  1. NomEtCheminDeTaBase = "\\Serveur\D$\serveur.mdb"
  2. Set bds = CurrentDb
  3. With bds
  4.     For Each tdf In .TableDefs
  5.         If tdf.SourceTableName <> "" Then
  6.             tdf.Connect = ";DATABASE=" & NomEtCheminDeTaBase
  7.             tdf.RefreshLink
  8.         End If
  9.     Next tdf
  10. End With


 
 
Ou avec un chemin plus "simple", si ta base est sur C:\serveur.mdb :

Code :
  1. Set bds = CurrentDb
  2. With bds
  3.     For Each tdf In .TableDefs
  4.         If tdf.SourceTableName <> "" Then
  5.             tdf.Connect = ";DATABASE=C:\serveur.mdb"
  6.             tdf.RefreshLink
  7.         End If
  8.     Next tdf
  9. End With


 
ou avec la variable :

Code :
  1. NomEtCheminDeTaBase = "C:\serveur.mdb"
  2. Set bds = CurrentDb
  3. With bds
  4.     For Each tdf In .TableDefs
  5.         If tdf.SourceTableName <> "" Then
  6.             tdf.Connect = ";DATABASE=" & NomEtCheminDeTaBase
  7.             tdf.RefreshLink
  8.         End If
  9.     Next tdf
  10. End With


 
:jap:


Message édité par SuppotDeSaTante le 23-09-2010 à 13:39:23

---------------
Soyez malin, louez entre voisins !
n°2024697
willou-78
Posté le 23-09-2010 à 14:10:20  profilanswer
 

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

mood
Publicité
Posté le 23-09-2010 à 14:10:20  profilanswer
 

n°2024699
SuppotDeSa​Tante
Aka dje69r
Posté le 23-09-2010 à 14:23:50  profilanswer
 

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
 
:jap:
 
Edit : tu aurais pu te passer de variable :p
tdf.Connect = ";DATABASE=" & Chemin.Value


Message édité par SuppotDeSaTante le 23-09-2010 à 14:24:26

---------------
Soyez malin, louez entre voisins !
n°2024714
willou-78
Posté le 23-09-2010 à 15:26:09  profilanswer
 

ah oui, tu as raison, elle ne sert à rien
 
Merci de ton aide

n°2024976
willou-78
Posté le 24-09-2010 à 20:12:02  profilanswer
 

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

n°2024986
SuppotDeSa​Tante
Aka dje69r
Posté le 24-09-2010 à 21:43:16  profilanswer
 

Bah tu testes en fonction du nom de la table, ou en fonction de la liaison existante.


---------------
Soyez malin, louez entre voisins !
n°2025117
willou-78
Posté le 25-09-2010 à 22:46:17  profilanswer
 

hello,
j'ai beau chercher, je ne trouve pas :(


Message édité par willou-78 le 25-09-2010 à 22:46:35
n°2025362
willou-78
Posté le 27-09-2010 à 13:35:55  profilanswer
 

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 ?

n°2025383
SuppotDeSa​Tante
Aka dje69r
Posté le 27-09-2010 à 15:07:02  profilanswer
 

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 :
  1. If tdf.connect = ";DATABASE=C:\base1.mdb then


 
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 :
  1. If tdf.name= "Table1" then


 
C'est quand meme pas bien dur a tester :

Code :
  1. NomEtCheminDeTaBase = Chemin.Value
  2. Set bds = CurrentDb
  3. With bds
  4.     For Each tdf In .TableDefs
  5.         msgbox tdf.name
  6.         msgbox tdf.connect
  7.     Next tdf
  8. End With


 
 
 
 
Il y un paquet de solutions pourtant.
deux idées et un exemple comme ca :
 

  • Soit tu listes toutes tes tables et en fonction tu lies a telle source.

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 :
  1. NomEtCheminDeTaBase = Chemin.Value
  2. NomEtCheminDeTaBase2 = Chemin2.Value
  3. Set bds = CurrentDb
  4. With bds
  5. For each tdf In .TableDefs
  6.         select case tdf.Name
  7.             Case "Table1"
  8.                 tdf.Connect = ";DATABASE=" & NomEtCheminDeTaBase
  9.                 tdf.RefreshLink
  10.              case "Table2"
  11.                 tdf.Connect = ";DATABASE=" & NomEtCheminDeTaBase
  12.                 tdf.RefreshLink
  13.              case "Table3"
  14.                 tdf.Connect = ";DATABASE=" & NomEtCheminDeTaBase2
  15.                 tdf.RefreshLink
  16.              case "Table4"
  17.                 tdf.Connect = ";DATABASE=" & NomEtCheminDeTaBase2
  18.                 tdf.RefreshLink
  19.         End select
  20.     Next tdf
  21. End With


 
 

  • Soit les tables sont deja liées a deux sources differentes et tu testes en fonction du lien existant (avec tdf.connect)
Code :
  1. NomEtCheminDeTaBase = Chemin.Value
  2. NomEtCheminDeTaBase2 = Chemin2.Value
  3. Set bds = CurrentDb
  4. With bds
  5.     For Each tdf In .TableDefs
  6.         if tdf.connect = ";DATABASE=C:\Toto\base1.mdb" then
  7.             tdf.Connect = ";DATABASE=" & NomEtCheminDeTaBase
  8.             tdf.RefreshLink
  9.         elseif tdf.connect = ";DATABASE=C:\Tata\base2.mdb" then
  10.             tdf.Connect = ";DATABASE=" & NomEtCheminDeTaBase2
  11.             tdf.RefreshLink
  12.         end if
  13.     Next tdf
  14. End With


 
Petit NB : Une base de programme lié a 2 bases de données access, ca ralenti enormement les process


Message édité par SuppotDeSaTante le 27-09-2010 à 15:29:36

---------------
Soyez malin, louez entre voisins !
n°2025394
willou-78
Posté le 27-09-2010 à 15:43:07  profilanswer
 

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 ;)
 
@+

n°2025881
willou-78
Posté le 29-09-2010 à 11:42:34  profilanswer
 

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 ;)
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  HELP !chemin de ma BDD access amené à changer

 

Sujets relatifs
Changer une variale contenue dans un autre formulaireAccès BDD Access sans Access sur un poste?
controle enregistrement existant sous accessPetit prog pour changer mot de passe user a distance
image dans un état access[access/SQL]recherche multi-table
Lire une base MySql avec Access 2003[HTML/JS] Changer la couleur de fond d'un DIV ou d'un INPUT dynamiquem
[Access]Action sur un OUI/NON 
Plus de sujets relatifs à : HELP !chemin de ma BDD access amené à changer


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR