IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Impossible d'ouvrir la base de données parce que celle-ci est manquante.


Sujet :

VBScript

  1. #1
    Membre régulier Avatar de Subkill
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 174
    Points : 124
    Points
    124
    Par défaut Impossible d'ouvrir la base de données parce que celle-ci est manquante.
    Bonjour, je dois ouvrir un fichier Access qui est protégé par un nom d'utilisateur et un mot de passe. Par la suite, je dois exporter des informations de la base de données dans un fichier Excel pour ensuite fermer la base de données. Cette opération se fait présentement de façon manuelle tous les lundis matin. Pour être sur que la personne en charge ne l'oubli pas, on m'a assigné la demande d'automatiser ce traitement. Cependant, j'ai quelques difficultés:

    Voiçi le code de mon fichier vbs:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    	Option Explicit
     
    	Dim objAccess, objShell
    	Dim strPathToMDB
    	Dim workgroup 
    	Dim user, password, application
     
    	strPathToMDB = "C:\maBase.mdb"
    	application =  "C:\Program Files\Microsoft Office\Office10\MSACCESS.EXE"
    	Set objShell = CreateObject("WScript.Shell") 
     
    	Set objAccess = CreateObject("Access.Application")
     
     
    	workgroup = "C:\maSecurite.MDW"
            user = "Admin"           
            password = "pwdAdmin"  
     
            objShell.run Chr(34) & application & Chr(34) & " " & Chr(34) & strPathToMDB & Chr(34) & " /nostartup /user " &  Chr(34) & user & Chr(34) & _
            " /pwd " & Chr(34) & password & Chr(34) & " /wrkgrp " & Chr(34) & workgroup & Chr(34)
     
    	Set objAccess = GetObject(,"Access.Application")	
     
    	objAccess.OpenCurrentDatabase(strPathToMDB)
    	objAccess.Run "exportQuery"
     
    	objAccess.closeCurrentDataBase
    	objAccess.Quit
    	Set objAccess =Nothing
    Voiçi le code de exportQuery:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub exportQuery()
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "qryExport", "C:\qryBase.XLS", True
    End Sub
    Quand j'exécute ce script en local, ça fonctionne. Cependant quand j'exécute ce script sur un serveur, ça plante.

    La base de données s'ouvre, et après je reçois le message suivant:
    Erreur :"Impossible d'ouvrir la base de données parce que celle-ci est manquante, ou a été ouverte par un autre utilisateur en mode exclusif."
    Code : 800A1EBA

    La base de données existe puisqu'elle s'ouvre et n'a pas été ouverte par un autre utilisateur en mode exclusif.

    Alors ma question est pourquoi ce script fonctionne en local et pas en réseau? Et comment règler le problème?

    Merci

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    quand tu dis la base de donnée s'ouvre c'est bien la base qui s'ouve ou juste access ..?

  3. #3
    Membre régulier Avatar de Subkill
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 174
    Points : 124
    Points
    124
    Par défaut
    La base de données, car le formulaire s'affiche lors de l'ouverture...
    Donc j'ai l'impression que le script s'éxcute jusqu'à cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            objShell.run Chr(34) & application & Chr(34) & " " & Chr(34) & strPathToMDB & Chr(34) & " /nostartup /user " &  Chr(34) & user & Chr(34) & _
            " /pwd " & Chr(34) & password & Chr(34) & " /wrkgrp " & Chr(34) & workgroup & Chr(34)
    Mais que ca plante lorsque le script essaye d'exécuter cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	objAccess.OpenCurrentDatabase(strPathToMDB)
    Car le reste du script ne s'exécute pas...

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    bon je ne peu pas tester la .. mais il me semble innaproprié... d'utiliser les 2 objets shell et access .. pour accéder à ta base ... l'objet objAccess ... devrai être suffisant.... puis tu n'as pas besoin de faire un GetObject.. puisque tu la déjà ...

    rajoute peu-être un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     objAccess.Visible = True

  5. #5
    Membre régulier Avatar de Subkill
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 174
    Points : 124
    Points
    124
    Par défaut
    J'y avais pensé, mais ca ne fonctionne pas, j'ai toujours le même message d'erreur.
    Et en plus, le problème avec l'objet "Access.Application" c'est que je ne peux pas indiquer mon nom d'utilisateur et mot de passe.

    Voilà pourquoi j'ouvre ma bd avec l'objet WScript.shell. Mais le problème avec cet objet est que je ne peux pas exécuter ma fonction...

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    avec ton code je pense que tu lance 2 fois Access..., si tu tiens à ton shell ( il doit bien avoir un moyen d'envoyer ce mot de passe autrement..?) enléve le Create... , faudrai peu être une pause (sleep..) ensuite entre le shell Run ... et le getObject...

  7. #7
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    en simplifié, ce code fonctionne :

    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
    	Option Explicit
     
    	Dim objAccess, objShell, objdb
    	Dim strPathToMDB
    	Dim application
     
    	strPathToMDB = "C:\bd_Test.mdb"
    	application =  "C:\Program Files\Microsoft Office\Office11\MSACCESS.EXE"
    	Set objShell = CreateObject("WScript.Shell") 	
            objShell.Run Chr(34) & application & Chr(34) & " " & Chr(34) & strPathToMDB & Chr(34) 
         WScript.Sleep 1000
     	Set objAccess = GetObject(,"Access.Application")	
     	Set objdb = objAccess.Currentdb
    	msgbox objAccess.CurrentDb.Name
     
    	objAccess.Quit     
    	Set objAccess =Nothing
         Set objdb = Nothing
         Set objShell = Nothing
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  8. #8
    Membre régulier Avatar de Subkill
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 174
    Points : 124
    Points
    124
    Par défaut
    Bon ben je ne suis vraiment pas chanceux car, moi ca ne marche pas.

    J'ai le message d'erreur suivant:

    Objet Requis: 'CurrentDb'

    Ohhhhh, je viens de constater de quoi. Les tests que je faisais en local était avec une bd de test. Je viens de faire les tests en local avec la bd officiel (celle qui se trouve sur le réseau) et ca ne fonctionne pas. Donc! à ma conclusion de programmeur inexpérimenté en vbscript...le problème se trouve du côté de la bd!

    Je ne sais pas plus comment règler le problème par contre

  9. #9
    Membre régulier Avatar de Subkill
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 174
    Points : 124
    Points
    124
    Par défaut
    Citation Envoyé par bbil
    avec ton code je pense que tu lance 2 fois Access..., si tu tiens à ton shell ( il doit bien avoir un moyen d'envoyer ce mot de passe autrement..?) enléve le Create... , faudrai peu être une pause (sleep..) ensuite entre le shell Run ... et le getObject...
    Si je pouvais trouvé le moyen d'envoyer le mot de passe autrement j'en serais bien heureux!

  10. #10
    Membre régulier Avatar de Subkill
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 174
    Points : 124
    Points
    124
    Par défaut
    J'ai solutionné mon problème sans trop comprendre pourquoi!

    J'ai créé un premier vbscript qui contient l'objet WScript.Shell pour ouvrir ma base de données protégées par un mot de passe.

    Par la suite j'ai créé un deuxième vbscript qui contient l'objet Access.Application où j'exécute les commandes dont j'ai besoin.

    Tout fonctionne bien!

    Weird!

  11. #11
    Membre régulier Avatar de Subkill
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 174
    Points : 124
    Points
    124
    Par défaut
    J'ai fusionné les deux fichiers vbs et j'ai mis un Sleep de 4000 et tout fonctionne.
    Donc pour avancer dans mes explications:

    La ligne de commande objAccess.Run "exportQuery" s'exécute avant que ma bd soit complètement ouverte qui occasion un message d'erreur.

    avec le sleep de 4000 la bd a le temps de s'ouvrir sans problème!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-97] Impossible d'ouvrir une base de données
    Par fevec dans le forum Sécurité
    Réponses: 2
    Dernier message: 27/02/2015, 13h48
  2. Service web : Impossible d'ouvrir la base de donnée
    Par bakman dans le forum Accès aux données
    Réponses: 1
    Dernier message: 12/10/2014, 14h02
  3. Réponses: 6
    Dernier message: 21/11/2013, 09h52
  4. Réponses: 4
    Dernier message: 24/02/2011, 22h09
  5. Impossible d'ouvrir une base de donnée
    Par anna1 dans le forum Access
    Réponses: 2
    Dernier message: 03/05/2006, 22h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo