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 :

[ZeosLib] Annuler changement en base


Sujet :

Lazarus Pascal

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Février 2006
    Messages : 562
    Points : 859
    Points
    859
    Par défaut [ZeosLib] Annuler changement en base
    Bonsoir à tous.

    J'utilise Lazarus avec ZeosLib pour accéder à une base de données Firebird. Je n'ai pas trouvé beaucoup de documentation sur l'utilisation de cette librairie.
    J'ai déposé sur une fiche un composant TZConnection, un TZTable, un TDatasource, un DBGrid et un DBNavigator. Jusque là pas de problème, je charge bien ma table dans le DBGrid et je peux ajouter, modifier ou supprimer mes enregistrements. J'aimerais maintenant autoriser ou annuler les changements du DBGrid dans ma base, en gros j'aimerais que, lorsque je ferme ma fiche par exemple, ou que je clique sur les boutons Post ou Cancel du DBNavigator, je revienne à l'état initial de ma table.
    Je ne demande pas d'exemple de code mais la façon d'y parvenir.
    Merci.

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Points : 1 100
    Points
    1 100
    Par défaut
    Bonjour

    Tu dois encadrer les instructions de DbConnection.StartTransaction et DbConnection.Rollback

    Il faut faire attention à ne pas laisser de transaction non fermée, ni même trop longtemps active quand on est en mode multi-utilisateur. Pour éviter que cela ne survienne suite à une erreur, un bloc try/finally est en général nécessaire. Et il faut éviter d'attendre une action utilisateur pour fermer la transaction.

    Copier dans une table temporaire ou en mémoire est une autre solution, parfois plus sûre et plus simple.
    Cordialement,
    Tintinux

    Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
    Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Février 2006
    Messages : 562
    Points : 859
    Points
    859
    Par défaut
    J'ai trouvé une solution de substitution en activant le cache d'un TZTable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dmOstrea.Calibre.CachedUpdates := true;
    Ensuite j'ai deux bouton, Ok et Annuler avec les événements suivants pour charger les changements en base ou bien les annuler.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TfrmCalibre.btnCaClick(Sender: TObject);
    begin
      dmOstrea.Calibre.CancelUpdates;
    end;
     
    procedure TfrmCalibre.btnOkClick(Sender: TObject);
    begin
      dmOstrea.Calibre.ApplyUpdates;
    end;
    J'aimerai utiliser une solution en utilisant la gestion des transactions (Rollback et Commit) mais mes tentatives n'ont pas abouti.
    Le code suivant ne fonctionne pas, mes changements dans le DBGrid sont automatiquement répercuté en base dés que je change de ligne sur le DBGrid.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ]procedure TfrmCalibre.btnCaClick(Sender: TObject);
    begin
      dmOstrea.FbConnexion.Rollback;
    end;

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/11/2006, 18h52
  2. Annuler changement d'enregistrement
    Par the big ben 5 dans le forum Access
    Réponses: 1
    Dernier message: 04/10/2006, 18h09
  3. changement de base de donnée
    Par Pitou5464 dans le forum Access
    Réponses: 3
    Dernier message: 08/08/2006, 14h37
  4. Changement de base...enfin je crois....
    Par Eric Boisvert dans le forum Algorithmes et structures de données
    Réponses: 22
    Dernier message: 28/09/2005, 21h11
  5. [VB6] changement de base....
    Par white angel dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 18/04/2004, 17h19

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