|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | |
|
Membre éprouvé
![]() Jean-Yves DUMASConsultant informatique Inscription : juin 2010 Messages : 325 ![]() |
Bonjour,
Je bute sur le problème suivant : Afin de faire une mise à jour en bloc, j'ai créé une table temporaire TMP_MAJMensuelle sur lequel j'ai basé un formulaire qui me sert à faire mes MAJ. Lors de la MAJ de la table source, j'effectue les opérations suivantes :
Code :
CurrentDb.Execute "DROP TABLE TMP_MAJMensuelle;" Citation:
quel en est l'origine ? Est-ce que les requête de MAJ, ou le formulaire, ne déverouillent pas tout de suite la table ? dois-mettre une temporisation ? Merci d'avance pour vos réponses éclairées. |
|
|
|
00
|
|
|
#2 |
![]() ![]() |
Bonjour
Est-ce qu'un formulaire ou une requête ayant cette table comme source est ouvert ? Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon ![]() Si vous pensez commencer sans un livre, oublier : livres pour débuter Vous pouvez consulter mes articles sur Access et PowerPoint Le blog Office. Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas. |
|
|
00
|
|
|
#3 |
|
Membre éprouvé
![]() Jean-Yves DUMASConsultant informatique Inscription : juin 2010 Messages : 325 ![]() |
a priori, rien n'est ouvert.
Y a t'il une instruction VBA que je puisse lancer pour tester si certains formulaires/requetes/recordsets sont toujours ouverts/actifs ? Quelle instruction puis-je utiliser pour verifier quel process verrouille ma table ? |
|
|
00
|
|
|
#4 | ||
|
Membre éprouvé
![]() Jean-Yves DUMASConsultant informatique Inscription : juin 2010 Messages : 325 ![]() |
Bonjour,
Mes test m'ont amené à envisager l'hypothèse suivante. les opérations suivantes : Code :
Le code VBA doit donc être en mémoire, sinon, l'instruction suivante ne s'exécuterait plus. Mais est-ce que le verrouillage est toujours présent malgrès l'instruction docmd.close acForm ? Est-ce qu'un Unload pourrait résoudre le problème ? |
||
|
|
00
|
|
|
#6 |
|
Membre éprouvé
![]() Jean-Yves DUMASConsultant informatique Inscription : juin 2010 Messages : 325 ![]() |
Bonjour,
Merci pour ton aide, mais la sanction est identique avec ADO : j'ai toujours la même erreur : erreur 3211. Le moteur de base de données n'a pas pu verrouiller la table « TMP_MAJMensuelle » car elle est déjà utilisée par une autre personne ou un autre processus. Je me et je deviens
|
|
|
00
|
|
|
#7 |
![]() ![]() |
Bonjour
Un petit test, peut-être que lorsque tu lances la destruction de la table un des processus précédent n'est pas été fini. Essayes en intercalant l'instruction DoEvents avant ton drop. C'est une hypothèse. Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon ![]() Si vous pensez commencer sans un livre, oublier : livres pour débuter Vous pouvez consulter mes articles sur Access et PowerPoint Le blog Office. Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas. |
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() Chercheur de bonheur Inscription : août 2007 Messages : 2 255 ![]() |
Bonjour,
a tout hasard, ta DB n'est pas partagée et ouverte ailleurs ?
__________________
(\ _ /) Cordialement G@dz (='.'=) (")-(") Vous avez des neurones. Sollicitez-les. ![]() . Si vous êtes aidé, pensez à Voter.
|
|
|
00
|
|
|
#9 |
|
Membre éprouvé
![]() Jean-Yves DUMASConsultant informatique Inscription : juin 2010 Messages : 325 ![]() |
Bonjour,
Merci à tous pour votre aide. 1) nom ma BDD n'est pas partagée, et ce n'est pas non plus une table liée à une autre BDD. 2) j'avais effectivement essayé le doevents en pensant que ça allait résoudre mon PB. J'ai d'abords fait une boucle à 1000 et j'ai eu le même message au bout d'1 seconde. J'ai monté ma boucle à 10000 et j'ai attendu environ 12 secondes, avant d'obtenir le même message. Je persiste donc à penser que le process, tant qu'il est en mémoire (même orphelin, car lié à un formulaire fermé par un docmd.close) verouille la table tant que sa dernière instruction (matérialisée par un end sub/function ou un exit sub/function) n'a pas été exécutée. En attendant, je vais essayer de travailler autrement, à savoir vider ma table temporaire après la MAJ, et faire le drop de ma table lors de l'ouverture de mon formulaire en testant si ma table temporaire est vide. Inconvénient : la place ne sera pas libérée dans la base, et le compactage en fermeture risque de ne pas être aussi efficace. |
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() |
bonjour
1/fais une sauvegarde de ta bd 2/ferme tous les formulaires 3/essaies de supprimer cette table (si recalcitrante) manuellemnt. @+ |
|
|
00
|
|
|
#11 |
|
Membre éprouvé
![]() Jean-Yves DUMASConsultant informatique Inscription : juin 2010 Messages : 325 ![]() |
Bonjour Keita,
Ma table "récalcitante" se ferme très bien manuellement. Seulement, elle ne veut pas se supprimer automatiquement dans le VBA. Il y a donc un process qui la verouille. J'ai plutôt l'impression d'être dans le cas du gars qui scie la branche sur laquelle il est assis ...
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!si tout est OK, n'oubliez pas de cliquer sur
|
|
|
00
|
|
|
#12 | |||
|
Membre Expert
![]() |
hello
Citation:
et si on essayait par élimination;non? Code :
Au passage désactive tous les On Error resume.... s'il y en a; sait on jamais. Je ne crois pas que FrmAideMajMensuelle intervienne dans cette affaire du moment que TMP_MAJMensuell n'est pas sa source. A bientôt |
|||
|
|
00
|
|
|
#13 | |
|
Membre éprouvé
![]() Jean-Yves DUMASConsultant informatique Inscription : juin 2010 Messages : 325 ![]() |
Hello
Citation:
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!si tout est OK, n'oubliez pas de cliquer sur
|
|
|
|
00
|
|
|
#14 | ||
|
Membre Expert
![]() |
Hello
Ah ok. Code :
|
||
|
|
00
|
|
|
#15 |
|
Membre éprouvé
![]() Jean-Yves DUMASConsultant informatique Inscription : juin 2010 Messages : 325 ![]() |
... et donc, là, tu me proposes de fermer le formulaire FrmAideMajMensuelle, dont TMP_MAJMensuelle est la source ...
Là, bien sûr, ça ne marchera surement pas ... (j'ai qd même fait la vérif et testé par acquis de conscience avant de t'écrire) @+
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!si tout est OK, n'oubliez pas de cliquer sur
|
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() |
Autrement dit tu as le meme msg d'erreur et la table n'est pas supprimée?
sinon c'est toi meme qui le ferme a la fin de ton traitement Code :
DoCmd.Close acForm, "FrmAideMajMensuelle" @+ |
|
|
00
|
|
|
#17 |
|
Membre éprouvé
![]() Jean-Yves DUMASConsultant informatique Inscription : juin 2010 Messages : 325 ![]() |
tout a fait Th...
et donc, ce n'est pas le formulaire qui libère la table, mais la procédure qu'il a lui-meme lancée avant de se fermer.
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!si tout est OK, n'oubliez pas de cliquer sur
|
|
|
00
|
|
|
#18 |
|
Membre Expert
![]() |
Mes soupsons vont vers une une erreur de conception:
Est il possible de voir tes (2) requêtes? C'est juste pour voir en quoi et comment FrmAideMajMensuelle intervient. Utilises-tu des controls sur FrmAideMajMensuelle comme critères des requêtes? ou bien c'est juste pour lancer le code de mise à jour? si oui, alors ne mets rien du tout dans sa source. Utilises-tu un sous form? Eclaire ma lanterne, please! @+ |
|
|
00
|
|
|
#19 |
|
Membre Expert
![]() |
bonjour
Les autres questions que je me pose: 1/Comment crées-tu la table TMP_MAJMensuelle? manuellement? par code? 2/dans les 2 cas, quellles contraintes!!! je ne comprends pas pourquoi vouloir la supprimer à chaque traitement? tu n'en aurais plus besoin?(eventuellement pour d'autres mises à jour? si eventuellement tu devrais l'utiliser pour d'autres mises à jour, tu pourrais la vider (supprimer les enreg. seulement) après chaque traitement avec un DoCmd.RunSQL DELETE .............. plutot que de la détruire. ceci pourrait peut etre éviter le cycle (infernal) de: creation-destruction-creation-destruction .... non? 3/Bon!?! au cas où tout ceci ne te dirais pas, je te propose de supprimer TMP_MAJMensuelle en sortant de ta bd; non? par exemple sur l'evenement fermeture de ton formulaire MENU GENERAL; tout en esperant que tu fermes tous les autres forms en quittant ta bd. bon; peut etre que j'ai rien compris à ton pb. bon week end @+ |
|
|
00
|
|
|
#20 | ||||
![]() ![]() ![]() |
Bonjour,
Il y a plusieurs raisons possible... Par exemple en mode transactionnel, il est souvent impossible de supprimer une table. Or les requêtes via OpenQuery s'exécutent dans ce mode ce qui laisse entendre dans ton cas que cette table est encore utilisée pour y puiser des données. En fait, ce qui ne va pas dans tonc code, c'est que tu mélanges du DoCmd.OpenQuery avec du DB.Execute Soit tu fais du vrai VBA DAO soit tu fais du DoCmd mais pas les deux car le DoCmd n'est pas en mesure de te retourner un succès ou un échec dans le cycle de son exécution... Donc à bannir pour ma part. Pour vérifier la possibilité physique de la supprimer, lance cette instruction : Code :
Code :
Dans ton cas (utilisée par un autre processus), l'erreur 3211 devrait être levée si tu fais un DROP TABLE et 2008 via le DoCmd. Argy
__________________
Ils comptent sur vous... Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment. Web Site ‡ @Mail Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007 Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010 MDB Viewer : Visionneuse Access v4.0 |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com