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

Lazarus Pascal Discussion :

MySQL : Impossible de désactiver TSQLTransaction [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre averti
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Par défaut MySQL : Impossible de désactiver TSQLTransaction
    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

  2. #2
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Par défaut
    Citation Envoyé par Philippe_2010
    il m'est impossible de passer la transaction à false
    Que signifierait une "transaction à false" ??
    Tu peux faire soit un Commit, soit un Rollback pour la terminer.

  3. #3
    Membre averti
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Par défaut
    Citation Envoyé par tintinux Voir le message
    Que signifierait une "transaction à false" ??
    Tu peux faire soit un Commit, soit un Rollback pour la terminer.
    Merci pour ta réponse, mais j'ai un plantage lors de la fermeture de mon appli avec un message "Operation cannot be performed on an active transaction".
    J'ai donc essayé de la désactiver dans le formclose...Impossible, même après Commit et Rollback.

  4. #4
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Par défaut
    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).

  5. #5
    Membre averti
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Par défaut
    Citation Envoyé par tintinux Voir le message
    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).
    Tu veux dire que tu active la transaction avant chaque Query et que tu la désactive systématiquement ensuite ?

  6. #6
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Par défaut
    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.

  7. #7
    Membre averti
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Par défaut
    Citation Envoyé par tintinux Voir le message
    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.
    Merci pour vos réponses.
    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

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

Discussions similaires

  1. Acces MySQL impossible de l'extérieur
    Par villegente dans le forum Requêtes
    Réponses: 7
    Dernier message: 27/09/2006, 07h33
  2. connexion a mysql impossible
    Par glayag dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 31/08/2006, 02h05
  3. Chargement de mysql impossible
    Par glayag dans le forum Apache
    Réponses: 2
    Dernier message: 30/08/2006, 17h16
  4. Tables liées dans access à mysql : impossible de modifier
    Par alex38 dans le forum Installation
    Réponses: 2
    Dernier message: 20/04/2006, 17h37
  5. Mise à jour base access->mysql impossible... :-(
    Par pako69 dans le forum Administration
    Réponses: 4
    Dernier message: 26/09/2005, 14h51

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