|
Publicité | ||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : décembre 2010 Messages : 10 ![]() |
Bonjour,
Dans un projet sous MySQL, lors de la fermeture de l'application, un message :"SQLTransaction1:Operation cannot be performed on an active transaction" apparaît. Après moult essais et tests, j'en arrive à la conclusion qu'il m'est impossible de passer la transaction à false. Est-ce un bug Lazarus ? Peut-on le contourner ? Merci d'avance. Lazarus 0.9.30.2 MySQL 5.0 |
|
|
00
|
|
|
#2 | |
|
Membre confirmé
![]() Développeur informatique Inscription : janvier 2010 Messages : 177 ![]() |
Citation:
Tu peux faire soit un Commit, soit un Rollback pour la terminer.
__________________
Cordialement, Tintinux Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS. Elle est en cours de développement, avec Lazarus. Vous pouvez peut-être aider à la tester, la traduire et même à la développer. |
|
|
|
00
|
|
|
#3 | |
|
Invité de passage
![]() Inscription : décembre 2010 Messages : 10 ![]() |
Citation:
J'ai donc essayé de la désactiver dans le formclose...Impossible, même après Commit et Rollback. |
|
|
|
00
|
|
|
#4 |
|
Membre confirmé
![]() Développeur informatique Inscription : janvier 2010 Messages : 177 ![]() |
C'est sans doute dans le OnCloseQuery qu'il faut s'assurer qu'il n'y a pas une transaction active, et si c'est le cas la fermer par un Commit ou Rollback, après confirmation.
Dans le OnClose, ça risque d'être trop tard... Sinon, il faudrait que tu essaies de déterminer, avec le débogueur, où ça plante exactement. Tu as typiquement ce message quand tu démarres une transaction déjà active. Je serais étonné qu'il y ait un bug dans Lazarus sur ce point, mais il pourrait y en avoir un dans ton appli... par exemple, si en fermant tu modifies la valeur d'un champ et que le OnChange de ce champ démarre une transaction... Ceci dit, il est assez rare qu'on ait besoin d'avoir une transaction ouverte en permanence. Le plus souvent, on ne la démarre que juste avant de faire une saisie, et on la ferme juste après un Update (ou Post).
__________________
Cordialement, Tintinux Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS. Elle est en cours de développement, avec Lazarus. Vous pouvez peut-être aider à la tester, la traduire et même à la développer. |
|
|
10
|
|
|
#5 | |
|
Invité de passage
![]() Inscription : décembre 2010 Messages : 10 ![]() |
Citation:
|
|
|
|
00
|
|
|
#6 |
|
Membre confirmé
![]() Développeur informatique Inscription : janvier 2010 Messages : 177 ![]() |
Cela dépend entièrement de ce que dois faire ton programme !
Une transaction ne sert qu'à s'assurer que plusieurs requêtes sont soit exécutées, soit annulées ensemble. Si tu n'as qu'une seule requête de mise à jour, et que tu n'es pas en environnement multi-utilisateurs, donc sans besoin de poser un verrou, il est totalement inutile de gérer une transaction. Il suffit de laisser le SGBD s'en occuper et il y a une propriété pour ça. Sinon, quand une transaction doit être gérée par le programme, on essaie effectivement de la faire aussi courte que possible, en évitant de préférence qu'elle ne puisse durer indéfiniment.
__________________
Cordialement, Tintinux Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS. Elle est en cours de développement, avec Lazarus. Vous pouvez peut-être aider à la tester, la traduire et même à la développer. |
|
|
20
|
|
|
#7 | |
|
Invité de passage
![]() Inscription : décembre 2010 Messages : 10 ![]() |
Citation:
Après avoir lu vos conseils, j'ai vérifié ce qui pouvait empêcher de fermer ces transactions. En fait, j'ai fait pointer une DataSource vers un Query situé sur une autre Form... Pas bonne idée... J'imagine que lors de la fermeture de l'appli, les Forms se ferment dans un ordre qui fait que la Datasource n'est pas fermée lors de la fermeture du Query, et donc de la Transaction. Résolu ! Merci encore |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com