2010-12-06 48 views
0

Je rencontre des problèmes avec un accdb ms access 2007, en utilisant le planificateur de tâches Windows Server 2008 pour les tâches planifiées. Le problème est que le fichier ouvert par le planificateur de tâches s'ouvre/se ferme correctement, mais le fichier 'lock' (.laccdb) reste visible après la fermeture de la base de données, ce qui indique que le db d'accès est toujours ouvert. Chaque fois qu'une nouvelle tâche s'exécute, une nouvelle instance d'accès est en cours d'ouverture. J'ai ouvert le schéma pour afficher la liste de tous les utilisateurs dans la base de données et il montre 3 doublons du nom du serveur/compte Admin. Voici un exemple de la fenêtre immédiate en matière d'accès:Plusieurs instances de la même base de données d'accès sont ouvertes sur 1 machine - problème

COMPUTER_NAME LOGIN_NAME CONNECTE SUSPECT_STATE Admin Serveur Vrai Null Admin Serveur Vrai Null Admin Serveur Vrai Null

J'espère que quelqu'un d'autre a eu ce problème et sait 1) Comment fermer facilement toutes les instances ouvertes d'accès et 2) comment éviter que cela se produise lors de l'exécution d'une tâche. J'ai l'option "Ne pas démarrer une nouvelle instance" dans l'onglet "Paramètres" de la tâche, mais cela n'a aucune importance car aucune des tâches n'était exécutée simultanément. Merci d'avance pour toute aide.

+0

Quelle est la tâche que vous exécutez? Les chances sont qu'il ne nettoie pas correctement, ou ne pas sortir correctement. Mais nous ne pouvons pas deviner jusqu'à ce que nous sachions quelle est la tâche. Il peut également s'agir d'un problème d'autorisations (c'est-à-dire, l'autorisation DELETE est refusée sur le dossier où se trouve la base de données), mais cela est très improbable, car ce sont des autorisations non standard qui doivent être définies explicitement. –

Répondre

0

Pour fermer toutes les instances ouvertes d'accès (vous ne pouvez pas exécuter ce à partir d'Access parce que vous ne pouvez pas garantir que l'instance en cours d'exécution sera la dernière référence vous extrayez):

Sub CloseAllAccessInstances() 
    Dim acc As Access.Application 

    Do 
     Set acc = GetObject(, "Access.Application") 

     If IsNull(acc) Then Exit Do 

     acc.Quit 
    Loop 
End Sub 

Après avoir exécuté ce qui précède , vérifiez le gestionnaire de tâches. Si vous voyez msaccess.exe, alors vous avez probablement une référence d'objet circulaire. Cela empêchera Access de se fermer. Pour plus d'informations, jetez un oeil à http://msdn.microsoft.com/en-us/library/aa716190(VS.60).aspx.

+0

Ceci est déconseillé, à mon avis, car il pourrait éventuellement corrompre un fichier de données si vous forcez à quitter Access lorsqu'un enregistrement est verrouillé pour être édité. –

+0

Access.Application.Quit() ne force rien. C'est la même chose que de fermer l'application via l'interface utilisateur, de sorte que l'application nettoie avant de se fermer. En outre, l'argument optionnel AcQuitOption vous donne un peu de contrôle sur la façon dont l'application gère ce nettoyage (en particulier, comment elle gère les objets non sauvegardés). – phoog