Bonjour;

Je souhaite ouvrir une base Access par programmation. Pour cela, j'utilise la fonction suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
Public Sub ExecCmd(cmdline$)
   Dim proc As PROCESS_INFORMATION
   Dim start As STARTUPINFO
   Dim ReturnValue As Integer
 
   ' Initialize the STARTUPINFO structure:
   start.cb = Len(start)
 
   ' Start the shelled application:
   ReturnValue = CreateProcessA(0&, cmdline$, 0&, 0&, 1&, _
      NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)
 
   ' Wait for the shelled application to finish:
   Do
      ReturnValue = WaitForSingleObject(proc.hProcess, 0)
      DoEvents
      Loop Until ReturnValue <> 258
 
   ReturnValue = CloseHandle(proc.hProcess)
End Sub
La variable cmdline$ contient le chemin+nom de la base Access que je souhate ouvrir, par exemple : "C:\Program Files\Microsoft Office\2000\Office\MSACCESS.exe C:\projets\pgi\BaseSAV\technjp.mdb"

Avec cet exemple, ça fonctionne.

Par contre, si le nom de ma base contient des blancs (espaces), ça ne fonctionne plus. J'ai essayé par exemple :

"C:\Program Files\Microsoft Office\2000\Office\MSACCESS.exe C:\projets\pgi\BaseSAV\PGI BES_RES 2002.mdb" : plantage (il recherche la base PGI.mdb)

"C:\Program Files\Microsoft Office\2000\Office\MSACCESS.exe C:\projets\pgi\BaseSAV\[PGI BES_RES 2002.mdb]" : plantage

"C:\Program Files\Microsoft Office\2000\Office\MSACCESS.exe C:\projets\pgi\BaseSAV\[PGI BES_RES 2002].mdb" : plantage

"C:\Program Files\Microsoft Office\2000\Office\MSACCESS.exe" "C:\projets\pgi\BaseSAV\PGI BES_RES 2002.mdb" : pas de plantage mais rien ne s'exécute


Si je crée un raccourci sur le bureau avec le chemin "C:\Program Files\Microsoft Office\2000\Office\MSACCESS.EXE" "C:\projets\pgi\BaseSAV\PGI BES_RES 2002.mdb", ça fonctionne ...


Avez-vous une idée pour résoudre mon problème de nom de base Access contenant des blancs ? Est-ce le ExecCmd qui pose problème ?

Je vous en remercie par avance.

Bonne journée.