Sous Access 2000 ou 2003,
je développe des applications qui fonctionnent en réseau au en monoposte
mais pour des facilités de maintenance, je sépare toujours mes apllications
en 2 fichiers dorsal et frontal (MOnAp_D.mdb et MonAp_F.mdb).
Lorsque le fonctionnement se fait en réseau,
je connecte un lecteur réseau "W:" qui pointe sur "Mes documents" partagé du
PC
où se trouve le dorsal MOnAp_D.mdb. Appelon le "PC source".
Pour faire fonctionner le frontal sur le PC source,
je crée un disque virtuel W: par la commande dos
Subs W: "D:\Mes documents" dans le cas où Mes documents contient
MonAp_D.mdb.
Cette commande dos est placée dans un fichier .bat qui séxécute au démarrage
du PC
Je peux aussi lancer l'éxécution du fichier .bat à l'ouverture de mon
application
Private Sub Form_Open(Cancel As Integer)
Shell ("D:\Mes documents\Bat\W.bat")
End Sub
et supprimer W: à la fermeture de l'application
Private Sub Form_Close()
Shell ("D:\Mes documents\Bat\W_off.bat")
End Sub
Mais je préférerais ne pas avoir à me servir de fichier .bat et de tout
exécuter dans Access
dans le style :
Private Sub Form_Open(Cancel As Integer)
If exist(W:\Mes documents) then
Exit sub
Else
Subst W: %USERPR~1%\"Mes documents"
End If
End Sub
Private Sub Form_Close()
Subst W: /d
End Sub
manque de bol, ça ne marche pas, mon code n'est pas correct.
Pourriez vous m'en indiquer un peu plus sur l'éxécution de cdes Dos
à partir du VBA d'Access, et éventuellement me faire des remarques
sur ma façon de procéder pour gérer ma liaison entre mes deux fichiers.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Gloops
Bonjour,
Attention : si tu ne mets pas de guillemets autour du chemin, Subst va retenir ce qui vient jusqu'au premier espace.
Tu as donc deux solutions : - ou tu mets des espaces autour du chemin - ou tu utilises le chemin court Pour la deuxième solution, insérer ce qui suit dans un module, puis utiliser : Shell "SUBST W: " + NomCourt("C:Documents and Settings")
Bien entendu, à toi de vérifier qu'il n'existe pas déjà de disque W: sur la machine.
============ Début module ======================= Private Declare Function GetLongPathName Lib "kernel32" Alias _ "GetLongPathNameA" (ByVal lpszShortPath As _ String, _ ByVal lpszLongPath As String, _ ByVal cchBuffer As Long) As Long
Private Declare Function GetShortPathName Lib "kernel32" Alias _ "GetShortPathNameA" (ByVal lpszLongPath As _ String, _ ByVal lpszShortPath As String, _ ByVal cchBuffer As Long) As Long
Public Function NomLong(NomCourt As String) As String Dim strCheminFichier As String * 250 Dim strNomFichier As String strCheminFichier = String(250, Chr$(32)) GetLongPathName NomCourt, strCheminFichier, 250 NomLong = Left$(strCheminFichier, InStr(1, strCheminFichier, Chr$(0))) End Function
Public Function NomCourt(NomLong As String) As String Dim strCheminFichier As String * 250 strCheminFichier = String(250, Chr$(32)) GetShortPathName NomLong, strCheminFichier, 250 NomCourt = Left$(strCheminFichier, InStr(1, strCheminFichier, Chr$(0))) End Function ================= Fin module ===================== ___________________________________________ Paul Florent a écrit, le 27/12/2005 09:27 :
je crée un disque virtuel W: par la commande dos Subs W: "D:Mes documents" dans le cas où Mes documents contient
attention il manque un t
Bonjour,
Attention : si tu ne mets pas de guillemets autour du chemin, Subst va
retenir ce qui vient jusqu'au premier espace.
Tu as donc deux solutions :
- ou tu mets des espaces autour du chemin
- ou tu utilises le chemin court
Pour la deuxième solution, insérer ce qui suit dans un module, puis
utiliser :
Shell "SUBST W: " + NomCourt("C:Documents and Settings")
Bien entendu, à toi de vérifier qu'il n'existe pas déjà de disque W: sur
la machine.
============ Début module ======================= Private Declare Function GetLongPathName Lib "kernel32" Alias _
"GetLongPathNameA" (ByVal lpszShortPath As _
String, _
ByVal lpszLongPath As String, _
ByVal cchBuffer As Long) As Long
Private Declare Function GetShortPathName Lib "kernel32" Alias _
"GetShortPathNameA" (ByVal lpszLongPath As _
String, _
ByVal lpszShortPath As String, _
ByVal cchBuffer As Long) As Long
Public Function NomLong(NomCourt As String) As String
Dim strCheminFichier As String * 250
Dim strNomFichier As String
strCheminFichier = String(250, Chr$(32))
GetLongPathName NomCourt, strCheminFichier, 250
NomLong = Left$(strCheminFichier, InStr(1, strCheminFichier, Chr$(0)))
End Function
Public Function NomCourt(NomLong As String) As String
Dim strCheminFichier As String * 250
strCheminFichier = String(250, Chr$(32))
GetShortPathName NomLong, strCheminFichier, 250
NomCourt = Left$(strCheminFichier, InStr(1, strCheminFichier, Chr$(0)))
End Function
================= Fin module ===================== ___________________________________________
Paul Florent a écrit, le 27/12/2005 09:27 :
je crée un disque virtuel W: par la commande dos
Subs W: "D:Mes documents" dans le cas où Mes documents contient
Attention : si tu ne mets pas de guillemets autour du chemin, Subst va retenir ce qui vient jusqu'au premier espace.
Tu as donc deux solutions : - ou tu mets des espaces autour du chemin - ou tu utilises le chemin court Pour la deuxième solution, insérer ce qui suit dans un module, puis utiliser : Shell "SUBST W: " + NomCourt("C:Documents and Settings")
Bien entendu, à toi de vérifier qu'il n'existe pas déjà de disque W: sur la machine.
============ Début module ======================= Private Declare Function GetLongPathName Lib "kernel32" Alias _ "GetLongPathNameA" (ByVal lpszShortPath As _ String, _ ByVal lpszLongPath As String, _ ByVal cchBuffer As Long) As Long
Private Declare Function GetShortPathName Lib "kernel32" Alias _ "GetShortPathNameA" (ByVal lpszLongPath As _ String, _ ByVal lpszShortPath As String, _ ByVal cchBuffer As Long) As Long
Public Function NomLong(NomCourt As String) As String Dim strCheminFichier As String * 250 Dim strNomFichier As String strCheminFichier = String(250, Chr$(32)) GetLongPathName NomCourt, strCheminFichier, 250 NomLong = Left$(strCheminFichier, InStr(1, strCheminFichier, Chr$(0))) End Function
Public Function NomCourt(NomLong As String) As String Dim strCheminFichier As String * 250 strCheminFichier = String(250, Chr$(32)) GetShortPathName NomLong, strCheminFichier, 250 NomCourt = Left$(strCheminFichier, InStr(1, strCheminFichier, Chr$(0))) End Function ================= Fin module ===================== ___________________________________________ Paul Florent a écrit, le 27/12/2005 09:27 :
je crée un disque virtuel W: par la commande dos Subs W: "D:Mes documents" dans le cas où Mes documents contient
attention il manque un t
Gloops
Gloops a écrit, le 27/12/2005 14:02 :
- ou tu mets des espaces autour du chemin tu mets des guillemets autour du chemin,
j'imagine que le lecteur avait rectifié ...
Gloops a écrit, le 27/12/2005 14:02 :
- ou tu mets des espaces autour du chemin
tu mets des guillemets autour du chemin,
- ou tu mets des espaces autour du chemin tu mets des guillemets autour du chemin,
j'imagine que le lecteur avait rectifié ...
Paul Florent
Merci pour ta réponse. Je n'ai pas tout compris, mais j'ai fait ça qui marche :
Private Sub Form_Open(Cancel As Integer) If Dir("W:") <> Null Then Exit Sub Else Shell "Subst W: D:Mesdoc~1" End If End Sub
J'aurais aimé que la ligne ci après marche aussi Shell "Subst W: %USERPR~1%Mesdoc~1" mais ça marche pas ! Je ne vois pas où j'ai pu faire une erreur, car avec in fichier .bat, ça marchait bien Merci Paul
Merci pour ta réponse. Je n'ai pas tout compris, mais j'ai fait ça qui
marche :
Private Sub Form_Open(Cancel As Integer)
If Dir("W:") <> Null Then
Exit Sub
Else
Shell "Subst W: D:Mesdoc~1"
End If
End Sub
J'aurais aimé que la ligne ci après marche aussi
Shell "Subst W: %USERPR~1%Mesdoc~1"
mais ça marche pas !
Je ne vois pas où j'ai pu faire une erreur, car avec in fichier .bat, ça
marchait bien
Merci
Paul
Merci pour ta réponse. Je n'ai pas tout compris, mais j'ai fait ça qui marche :
Private Sub Form_Open(Cancel As Integer) If Dir("W:") <> Null Then Exit Sub Else Shell "Subst W: D:Mesdoc~1" End If End Sub
J'aurais aimé que la ligne ci après marche aussi Shell "Subst W: %USERPR~1%Mesdoc~1" mais ça marche pas ! Je ne vois pas où j'ai pu faire une erreur, car avec in fichier .bat, ça marchait bien Merci Paul
Gloops
USERPR~1 ? Mais tu as chopé ça où ?
Logiquement, tu devrais pouvoir t'en sortir avec Shell "Subst W: " + NomCourt(Environ("USERPROFILE") + "Mes Documents")
à condition, bien sûr, de coller dans un module le code que j'indiquais dans mon précédent message. Tu sais créer un module, dans Access, n'est-ce pas ? Et faire un copier/coller aussi ?
Alors il y a aussi la solution avec les guillemets. Shell "Subst W: " + Chr$(34) + _ Environ$("USERPROFILE") + "Mes Documents" + Chr$(34)
En forme de récapitulation on peut donner deux procédures équivalentes pour initialiser le disque W:
Public Sub InitW1(Cible As String) Shell "Subst W: " + NomCourt(Cible) End Sub
Public Sub InitW1(Cible As String) Shell "Subst W: " + Chr$(34) + Cible + Chr$(34) End Sub
Et on peut appeler ça par InitW? Environ$("USERPROFILE") + "Mes Documents" (en mettant 1 ou 2 à la place du ?)
Et bien sûr une fois qu'on a fini on peut lancer Shell "SUBST W: /D" là il n'y a pas de difficulté. ___________________________________________ Paul Florent a écrit, le 27/12/2005 20:20 :
Merci pour ta réponse. Je n'ai pas tout compris, mais j'ai fait ça qui marche :
Private Sub Form_Open(Cancel As Integer) If Dir("W:") <> Null Then Exit Sub Else Shell "Subst W: D:Mesdoc~1" End If End Sub
J'aurais aimé que la ligne ci après marche aussi Shell "Subst W: %USERPR~1%Mesdoc~1" mais ça marche pas ! Je ne vois pas où j'ai pu faire une erreur, car avec in fichier .bat, ça marchait bien Merci Paul
USERPR~1 ?
Mais tu as chopé ça où ?
Logiquement, tu devrais pouvoir t'en sortir avec
Shell "Subst W: " + NomCourt(Environ("USERPROFILE") + "Mes Documents")
à condition, bien sûr, de coller dans un module le code que j'indiquais
dans mon précédent message. Tu sais créer un module, dans Access,
n'est-ce pas ? Et faire un copier/coller aussi ?
Alors il y a aussi la solution avec les guillemets.
Shell "Subst W: " + Chr$(34) + _
Environ$("USERPROFILE") + "Mes Documents" + Chr$(34)
En forme de récapitulation on peut donner deux procédures équivalentes
pour initialiser le disque W:
Public Sub InitW1(Cible As String)
Shell "Subst W: " + NomCourt(Cible)
End Sub
Public Sub InitW1(Cible As String)
Shell "Subst W: " + Chr$(34) + Cible + Chr$(34)
End Sub
Et on peut appeler ça par
InitW? Environ$("USERPROFILE") + "Mes Documents"
(en mettant 1 ou 2 à la place du ?)
Et bien sûr une fois qu'on a fini on peut lancer
Shell "SUBST W: /D"
là il n'y a pas de difficulté.
___________________________________________
Paul Florent a écrit, le 27/12/2005 20:20 :
Merci pour ta réponse. Je n'ai pas tout compris, mais j'ai fait ça qui
marche :
Private Sub Form_Open(Cancel As Integer)
If Dir("W:") <> Null Then
Exit Sub
Else
Shell "Subst W: D:Mesdoc~1"
End If
End Sub
J'aurais aimé que la ligne ci après marche aussi
Shell "Subst W: %USERPR~1%Mesdoc~1"
mais ça marche pas !
Je ne vois pas où j'ai pu faire une erreur, car avec in fichier .bat, ça
marchait bien
Merci
Paul
Logiquement, tu devrais pouvoir t'en sortir avec Shell "Subst W: " + NomCourt(Environ("USERPROFILE") + "Mes Documents")
à condition, bien sûr, de coller dans un module le code que j'indiquais dans mon précédent message. Tu sais créer un module, dans Access, n'est-ce pas ? Et faire un copier/coller aussi ?
Alors il y a aussi la solution avec les guillemets. Shell "Subst W: " + Chr$(34) + _ Environ$("USERPROFILE") + "Mes Documents" + Chr$(34)
En forme de récapitulation on peut donner deux procédures équivalentes pour initialiser le disque W:
Public Sub InitW1(Cible As String) Shell "Subst W: " + NomCourt(Cible) End Sub
Public Sub InitW1(Cible As String) Shell "Subst W: " + Chr$(34) + Cible + Chr$(34) End Sub
Et on peut appeler ça par InitW? Environ$("USERPROFILE") + "Mes Documents" (en mettant 1 ou 2 à la place du ?)
Et bien sûr une fois qu'on a fini on peut lancer Shell "SUBST W: /D" là il n'y a pas de difficulté. ___________________________________________ Paul Florent a écrit, le 27/12/2005 20:20 :
Merci pour ta réponse. Je n'ai pas tout compris, mais j'ai fait ça qui marche :
Private Sub Form_Open(Cancel As Integer) If Dir("W:") <> Null Then Exit Sub Else Shell "Subst W: D:Mesdoc~1" End If End Sub
J'aurais aimé que la ligne ci après marche aussi Shell "Subst W: %USERPR~1%Mesdoc~1" mais ça marche pas ! Je ne vois pas où j'ai pu faire une erreur, car avec in fichier .bat, ça marchait bien Merci Paul