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

Bases de données Delphi Discussion :

ZEOSDBO + Firebird EZSQLException


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 668
    Par défaut ZEOSDBO + Firebird EZSQLException
    Bonsoir,
    J'ai une application qui utilise les composants ZEOSDBO-7.1.4-stable + Firebird 2.5.

    -Pour supprimer un enregistrement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Table1.Edit;
    Table1.Delete;
    Table1.ApplyUpdates;
    Table1.CommitUpdates;
    L'enregistrement supprimé ne reste pas en mémoire, il est supprimé définitivement de la table.

    -Pour ajouter un nouvel enregistrement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Table1.append;
    ...
    Table1.post;
    Table1.ApplyUpdates;
    Table1.CommitUpdates;
    Mais si j'ajoute un nouvel enregistrement et que je veux supprimer l'enregistrement que je viens d'ajouter, je reçois un message d'erreur:
    "Le projet ...exe a déclenché la classe d'exception EZSQLException avec le message '0 record(s) updated only one record should have been updated'

    Ce message d'erreur s'affiche seulement quand j'essaye de supprimer l'enregistrement que je viens d'ajouter mais si j'essaye de supprimer un autre enregistrement, ça marche: je ne reçois pas ce message d'erreur.

    j'ai essayé de modifier le code de suppression de l'enregistrement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Table1.Edit;
    Table1.Delete;
    mais ce code n'efface pas réellement l'enregistrement de la Table, il l'efface de la mémoire seulement.

    Table1 : CachedUpdates est à False
    Comment résoudre ce soucis svp?.
    Merci pour votre aide.

    Nabil

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 737
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 737
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Pour supprimer un enregistrement, un simple table.delete suffit, surtout pas un Table.Edit avant !
    pour explication : table.Edit demande à mettre l'enregistrement en mode édition (mise à jour, une transaction A) donc attend, quelques instructions de modification de colonnes puis un table.Post (pour la fin de la transaction)
    or si avant le post, donc en concurrence avec cette transaction A une opération Delete se fait (soit une autre transaction B). Les ApplyUpdates,CommitUpdates suivant tente d'appliquer la transaction A sur un élément non trouvé (puisque supprimé) d'où l'erreur levée.

    Table1 : CachedUpdates est à False
    je ne vois pas pourquoi alors, il y a des ApplyUpdates,CommitUpdates je pense qu'il y a là une mauvaise compréhension sur l'utilité de ces instructions ou alors du paramétrage de la table ou de la connexion, pour moi ces deux instructions sont en trop !
    Zeos fonctionne comme BDE (c'est pour cela que je dis qu'une bonne transaction est une transaction la plus courte possible) un insert/un delete/un post -> un commit c'est la règle de l'autocommit (que l'on peut contourner pour un ensemble de transactions par un Start Transaction ..... Commit Transaction).

  3. #3
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 668
    Par défaut
    bonjour ,
    Merci Serge pour ton explication.

    Voici mon code pour le post:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    try 
         ZConnection1.StartTransaction;
          Table1.Post;
          ZConnection1.Commit;
        except
          ZConnection1.Rollback;
          raise;
        end;

    Pour le delete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try    
          ZConnection1.StartTransaction;
          Table1.Delete;
          ZConnection1.Commit;
        except
          ZConnection1.Rollback;
          raise;
        end;
    le post ajoute l"enregistrement mais en mémoire seulement(si je fait un close et après un open de la Table, l'enregistrement disparait !!)

    La ZConnection1 est en Autocomit.
    Quelle est mon erreur ici svp?
    merci

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 737
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 737
    Billets dans le blog
    65
    Par défaut
    Réponse Rapide : mais pourquoi une transaction alors que ZEOS fait ça tout seul ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 668
    Par défaut
    Merci,
    J'ai essayé avec ou sans la transaction, l'enregisterment reste en mémoire, donc le post(le commit) ne marche pas?!

    J'ai essayé avec :tiReadCommitted,tiRepeatableRead et tiNone sans succès.

  6. #6
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 668
    Par défaut
    voici ZConnection
    Nom : Zconnection.jpg
Affichages : 633
Taille : 40,8 Ko

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

Discussions similaires

  1. [Débat] Choisir InterBase/Firebird ou Microsoft SQL-SERVER ?
    Par asenaici dans le forum Décisions SGBD
    Réponses: 90
    Dernier message: 19/03/2009, 21h51
  2. [FIREBIRD]Drivers ODBC
    Par tripper.dim dans le forum Connexion aux bases de données
    Réponses: 10
    Dernier message: 24/04/2007, 12h02
  3. Lien vers Mozilla Firebird : il manque les themes
    Par Nasky dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 20/10/2003, 14h24
  4. [firebird] Connexion impossible en lecture seule
    Par severine dans le forum Administration
    Réponses: 2
    Dernier message: 01/08/2003, 16h35
  5. Refus d'accès à une base Firebird
    Par severine dans le forum Installation
    Réponses: 18
    Dernier message: 04/06/2003, 17h03

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